这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取逻辑分析仪】RA8 IAR 环境下Debug异常解析

共2条 1/1 1 跳转至

【换取逻辑分析仪】RA8 IAR 环境下Debug异常解析

助工
2024-10-09 19:19:36     打赏

简介:

        首发推出的M85 瑞萨RA8 MCU 在最新的IAR 版本已经支持了该芯片的仿真调试,本地使用瑞萨的Renesas RA Smart Configurator 5.1.0 生成配置代码后导入IAR 工程后,Debug 会弹出如下警告窗口。 

image.png

image.png

遇到这个问题开始的时候也没什么想法,直到偶然发现,通过板子的复位按键resat mcu 解除debug 状态发现程序是可以正常运行的只是在debug状态下不能正常的被仿真运行,从上述的warning 信息可以来看应该是CMSIS DAP 在下载完程序后执行softreset 后获取的PC指针和SP 的信息不符合预期造成的debug 异常,本地配置程序从flash 启动从RA8 的memory map 可知对应的地址为0x0200 0000 

image.png

通过Debug 查看对应的0x0200 0000  的SP/PC 里路上应该加载为如下的0x22000400 / 0x02000919

image.png

但是实际CMSIS DAP加载的PC 值为0x020032c0 从map文件也没找打对应的符号是啥,后来猜测会不会CMSIS DAP 从0地址的ITCM 空间获取的信息赋值给了SP 和 PC 查看0地址的空间的数据果然和猜测的一致。

image.png

知道原因了我们就着手研究如何解决该问题,尝试从正面突破查找配置SP/PC 的脚本位置后来没找到对应的位置,既然是因为PC 和 SP 加载的不正确我们是不是可以使用IAR的debug 配置宏从flash 中加载数据就能解决了。

创建 vision_debug.mac 宏函数,将flash 的数据拷贝至 0x0地址这样就能按照预期的加载PC 和 LP了。

 // This executes after the debugger resets the system
execUserPreReset()
{
    __var BL_reset_PC, BL_SP;
    BL_reset_PC = *((unsigned long*)0x02000004);
    BL_SP       = *((unsigned long*)0x02000000);
 
    __message  "BL_PC : 0x", BL_reset_PC:%X, "SP=", BL_SP:%X, "\n";
    *((unsigned long*)0x00000004) = BL_reset_PC;
    *((unsigned long*)0x00000000) = BL_SP;
    __message("execUserExecutionStarted -- after move");
}

对应宏函数说名如下

image.png

IAR debugger 配置加载该宏函数

image.png

debug 下载运行这时候已经没有之前的警告了,而且DAP LINK 也已经在main函数入口停住了。

image.png

至此我们再查看之前的警告日志分析原因应该是,CMSIS DAP 需要从可执行程序中加载__vector_table 符号没加载到然后默认从0地址加载数据造成的,基于此猜测我们在镜像中保留这个__vector_table 符号是否能解决该问题呢,本地尝试如下修改。

image.png


保留__vector_table 符号也是可以解决上述问题,至此再去查看IAR 开发手册发现IAR debug 会从__vector_table 加载向量表。

image.png



专家
2024-10-11 11:25:55     打赏
2楼

感谢楼主分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]