简介:
首发推出的M85 瑞萨RA8 MCU 在最新的IAR 版本已经支持了该芯片的仿真调试,本地使用瑞萨的Renesas RA Smart Configurator 5.1.0 生成配置代码后导入IAR 工程后,Debug 会弹出如下警告窗口。
遇到这个问题开始的时候也没什么想法,直到偶然发现,通过板子的复位按键resat mcu 解除debug 状态发现程序是可以正常运行的只是在debug状态下不能正常的被仿真运行,从上述的warning 信息可以来看应该是CMSIS DAP 在下载完程序后执行softreset 后获取的PC指针和SP 的信息不符合预期造成的debug 异常,本地配置程序从flash 启动从RA8 的memory map 可知对应的地址为0x0200 0000
通过Debug 查看对应的0x0200 0000 的SP/PC 里路上应该加载为如下的0x22000400 / 0x02000919
但是实际CMSIS DAP加载的PC 值为0x020032c0 从map文件也没找打对应的符号是啥,后来猜测会不会CMSIS DAP 从0地址的ITCM 空间获取的信息赋值给了SP 和 PC 查看0地址的空间的数据果然和猜测的一致。
知道原因了我们就着手研究如何解决该问题,尝试从正面突破查找配置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"); }
对应宏函数说名如下
IAR debugger 配置加载该宏函数
debug 下载运行这时候已经没有之前的警告了,而且DAP LINK 也已经在main函数入口停住了。
至此我们再查看之前的警告日志分析原因应该是,CMSIS DAP 需要从可执行程序中加载__vector_table 符号没加载到然后默认从0地址加载数据造成的,基于此猜测我们是否在debug 时通过选项指定加载__vector_table 地址来解决,我们可以通过--drv_vector_table_base 选项来指定__vector_table 地址。
--drv_vector_table_base 选项可以指定reset vector 地址,对应说明如下