当前位置:网站首页>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);
边栏推荐
- Please check the preparation guide for the 2022 Huawei Developer Competition
- 一种新的测试方法:视觉感知测试
- 腾讯云TDP-对象存储COS产品新用户福利
- cmake 小技巧 记录
- Etcd Kubernetes 集群稳定性:LIST 请求源码分析、性能评估与大规模基础服务部署调优
- 【21天学习挑战赛】直接选择排序
- 【服务器数据恢复】raid5崩溃导致lvm信息和VXFS文件系统损坏的数据恢复案例
- LeetCode-692. Top K Frequent Words
- LeetCode-101. Symmetric Tree
- MySQL数据库命令
猜你喜欢
Go+:首个顺应 “三位一体” 发展潮流的编程语言
一文带你了解 HONOR Connect
使用Jedis连接linux上的redis
“低代码”编程或将是软件开发的未来
web安全入门-Kill Chain测试流程
String compression (3) short string compression
视频转gif怎样操作?1分钟在线视频转gif制作
Yi Gene|In-depth review: epigenetic regulation of m6A RNA methylation in brain development and disease
app自动化测试webview怎么操作
数学基础(五)最优化理论(最优化,无约束,有约束,拉格朗日乘子的意义,KKT条件)
随机推荐
如何将jpg静图做成gif动图?教你1分钟快速合成gif
Spike project harvest
推荐几款最好用的MySQL开源客户端,建议收藏!
spark面试常问问题
Bitwarden:免费、开源的密码管理服务
【每日一题】【leetcode】26. 链表-链表中倒数第k个节点
Go+:首个顺应 “三位一体” 发展潮流的编程语言
多线程面试指南
山西:一煤矿发生死亡1人安全事故 被责令停产整顿
【服务器数据恢复】raid5崩溃导致lvm信息和VXFS文件系统损坏的数据恢复案例
二维费用背包问题的解题套路
Opencv 图像超像素分割(SLIC、SEEDS、LSC)
哈希表应用:只出现一次的数字
2022年软考复习笔记一
web安全入门-Kill Chain测试流程
智为链接,慧享生活,荣耀智慧服务,只为 “懂” 你
不同主机收不到组播消息原因分析
App自动化测试框架设计与实现
h5开容器,新页面返回遇到的问题
LeetCode-876. Middle of the Linked List