全志XR806芯片 汇编代码调试技巧

1.问题背景
问题平台:XR806 + RTOS

2.问题描述
XR806(M33内核)适配新的RTOS时,沿用M4F的启动代码后出现了系统奔溃,但是expection显示的PC地址和LR地址都被修改,无法准确判断哪条语句导致的错误。

3.问题分析

  • 通过log定位到是启动代码出现了问题。
  • arm汇编中,可利用b .进入死循环。
  • 在汇编中可以利用以下代码打印log:
//.c文件中插入
void AsmPrint(void)
{
    printf("var = %#x\n",PrintMagic);
}
#汇编代码中插入以下代码查看R0的值
    LDR R8,=PrintMagic
    str R0,[R8]
    LDR R8,=AsmPrint
    bx R8
  • 最后发现汇编代码正常,但在运行第一个任务时系统奔溃。原因为M33内核新增了PSPlimit功能,任务栈超过了设定值时会直接触发usage Fault。同时RTOS在系统启动前修改了PC地址和LR地址,导致exception中无法正确显示PC地址和LR地址。

4.解决方法
使用__set_PSPLIM可以设置PSPlimit地址,在不确定PSP限制时,可以__set_PSPLIM(0)取消这个功能,MSP也是相同道理。

原贴链接:https://bbs.aw-ol.com/topic/734
全志在线开发者交流企鹅群(客服机器人24小时在线解答):498263967
资源获取、问题讨论可以到全志在线开发者社区进行:https://www.aw-ol.com/
全志及开发者最新动态可以关注全志在线微信公众号

你可能感兴趣的:(全志-XR806,全志-FAQ,嵌入式,全志,RTOS,嵌入式硬件,单片机)