当前位置:网站首页>64位 RT-Thread 移植到 Cortex-A53 系统 bug 修复笔记
64位 RT-Thread 移植到 Cortex-A53 系统 bug 修复笔记
2022-08-10 16:06:00 【学习也是有瘾的】
RT-Thread 版本:4.1.0 master 版本。
1. Idle 默认栈大小为 256 字节,导致任务切换触发异常
Arch64 状态下,RT-thead 的任务切换触发未知错误。
经过测试,是因为 idle 初始化时,栈溢出,修改了就绪列表的值,导致任务切换失败.
#ifndef IDLE_THREAD_STACK_SIZE
#if defined (RT_USING_IDLE_HOOK) || defined(RT_USING_HEAP)
#define IDLE_THREAD_STACK_SIZE 256
#else
#define IDLE_THREAD_STACK_SIZE 128
#endif /* (RT_USING_IDLE_HOOK) || defined(RT_USING_HEAP) */
#endif /* IDLE_THREAD_STACK_SIZE */
可以手动设置 IDLE_THREAD_STACK_SIZE 大小更改 IDLE 任务栈大小。问题解决。
2. 栈初始化时,未对栈指针进行对齐操作,导致任务切换时触发 sp 指针对齐失败异常
串口报错如下:
[0]switch to priority#255 thread:tidle0(sp:0x41019024), from thread:tshell(sp: 0x42058f20)
[SYNC Error]: in EL1
ELR_EL1 =0x000000004100045c
ESR_EL1 =0x000000009a000000
current Exception Level exception, SPsel = 0
x0 =0x0000000000000000 x1 =0x0000000000000001
x2 =0x0000000000000000 x3 =0x0000000000000000
x29 =0x000000000000001d x30 =0x0000000041003134
[INFO]: CPU Reboot now!!!
查看手册得知,ELR_EL1 =0x000000004100045c
,该异常由 sp 指针对齐失败导致的。
解决:由于当前 sp 指针为 4 字节对齐的,所以失败,在 rt_hw_stack_init()
中 将 sp 指针进行 16 字节对齐,问题解决。
/*
* TODO sp 指针4字节对齐不行,64位任务环境下的任务切换会失败,更改为 16 字节对齐
*/
stack_addr = RT_ALIGN_DOWN((rt_ubase_t)stack_addr, sizeof(rt_ubase_t) * 2);
边栏推荐
猜你喜欢
随机推荐
Mobileye joins hands with Krypton to open a new chapter in advanced driver assistance through OTA upgrade
LeetCode-101. Symmetric Tree
智为链接,慧享生活,荣耀智慧服务,只为 “懂” 你
A Sina Weibo semantic sentiment analysis tool developed by ABAP
Methodology of multi-living in different places
关于Web渗透测试需要知道的一切:完整指南
8月Meetup | “数据调度+分析引擎”解锁企业数字化转型之路
推荐几款最好用的MySQL开源客户端,建议收藏!
Zotero 开源文献管理工具
视频转成gif动图怎么操作?仅需三步在线完成视频转gif
使用Jedis连接linux上的redis
秘密共享方案介绍SS
h5开容器,新页面返回遇到的问题
数据可视化:Metabase
字符串压缩(三)之短字符串压缩
关于“算力”,这篇文章值得一看
二叉树详解
LeetCode-692. Top K Frequent Words
FFmpeg 交叉编译
LeetCode-922. Sort Array By Parity II