全志科技
登录
直播中
张燕
7年用户
1360经验值
私信
关注
[问答]
为什么XR806适配新的RTOS原启动代码就出现了系统奔溃呢
开启该帖子的消息推送
启动代码
XR806(M33内核)适配新的RTOS时,沿用M4F的启动代码后出现了系统奔溃,但是expec
ti
on显示的PC地址和LR地址都被修改,无法准确判断哪条语句导致的错误。
为什么XR806适配新的RTOS原启动代码就出现了系统奔溃呢?如何去解决
回帖
(1)
秦文汶
2021-12-29 15:31:20
问题分析
通过log定位到是启动代码出现了问题。
arm汇编中,可利用b .进入死循环。
在汇编中可以利用以下代码打印log:
//.c文件中插入
void AsmPrint(void)
{
printf("var = %#xn",PrintMagic);
}
#汇编代码中插入以下代码查看R0的值
LDR R8,=PrintMagic
str R0,[R8]
LDR R8,=AsmPrint
bx R8
最后发现汇编代码正常,但在运行第一个任务时系统奔溃。原因为M33内核新增了PSPlimit功能,任务栈超过了设定值时会直接触发usage Fault。同时RTOS在系统启动前修改了PC地址和LR地址,导致exception中无法正确显示PC地址和LR地址。
解决方法
使用__set_PSPLIM可以设置PSPlimit地址,在不确定PSP限制时,可以__set_PSPLIM(0)取消这个功能,MSP也是相同道理。
问题分析
通过log定位到是启动代码出现了问题。
arm汇编中,可利用b .进入死循环。
在汇编中可以利用以下代码打印log:
//.c文件中插入
void AsmPrint(void)
{
printf("var = %#xn",PrintMagic);
}
#汇编代码中插入以下代码查看R0的值
LDR R8,=PrintMagic
str R0,[R8]
LDR R8,=AsmPrint
bx R8
最后发现汇编代码正常,但在运行第一个任务时系统奔溃。原因为M33内核新增了PSPlimit功能,任务栈超过了设定值时会直接触发usage Fault。同时RTOS在系统启动前修改了PC地址和LR地址,导致exception中无法正确显示PC地址和LR地址。
解决方法
使用__set_PSPLIM可以设置PSPlimit地址,在不确定PSP限制时,可以__set_PSPLIM(0)取消这个功能,MSP也是相同道理。
举报
更多回帖
rotate(-90deg);
回复
相关问答
启动代码
如何使用
XR806
适配
最新鸿蒙3.0_LTS?
2021-12-29
977
XR806
在鸿蒙LiteOS下的
启动
过程是怎样的?
2021-12-29
1176
XR806
芯片的mac地址要如何存放以及如何获取
2021-12-28
1151
有哪位大神可以分享一下
XR806
开发板/模组的资料
呢
2021-12-28
1252
如何保证休眠时
XR806
芯片GPIO的电平状态
呢
2021-12-29
1258
如何对
XR806
开发板的环境进行配置
呢
2021-12-28
1294
XR806
板子编译时会
出现
哪些问题
呢
2021-12-28
1052
跑一跑
XR806
的自带demo
2021-12-28
757
在
xr806
板子上如何实现用ncnn跑神经网络mnis
呢
2021-12-28
1228
请问大佬
XR806
鸿蒙开发板怎么样?
2021-12-29
1432
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分