当前位置:网站首页>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);
边栏推荐
猜你喜欢
随机推荐
Chapter one module of the re module,
智为链接,慧享生活,荣耀智慧服务,只为 “懂” 你
Mastodon:可创建类似推特的开源社交网络服务器
如何将jpg图片变成gif?教你一分钟图片合成gif的方法
x64汇编代码测试 用户模式和内核模式
秘密共享方案介绍SS
解决mpi4py导入报错ImportError: libmpi.so.40: cannot open shared object file: No such file or directory
Shanxi: 1 death occurred in a coal mine safety accidents was ordered to halt production
PNG如何变gif?教你一招png秒变gif动图的方法
LeetCode-692. Top K Frequent Words
LeetCode-101. Symmetric Tree
web安全入门-Kill Chain测试流程
Redis存储验证码
FTXUI基础笔记(hello world)
redis 源码源文件说明
requests库访问接口
二叉树详解
个人博客部署注意的几点问题
架构设计之一——基础架构
二维费用的背包问题 ← 模板题









