Question:
对于RA产品,如何从指定地址开始调试代码?
Answer:
假如代码是按照指定地址(不同于默认的0地址开始)进行link,则进行调试时,需要重新指定initial stack pointer地址,reset vector地址和Vector Table Offset Register的值,和当前地址匹配,才能进行调试。
下面分别对e2 studio,Keil MDK和IAR EW for Arm三种IDE进行说明。
e2 studio
1. 修改linker script file (memory_regions.ld)
FLASH_START从默认0修改为0x4000。重新编译工程,检查编译生成的srec文件或mot文件,确认文件起始地址为0x4000。

2. Debug Configuration设置
在Debug Configuration中,将如下的三行代码添加到Startup > Run Commands中。
set $sp = *0x4000
set $pc = *0x4004
set {int}0xe000ed08 = 0x00004000
3. 调试验证
点击下图中的调试按钮,在新界面中确认如下内容,RESET向量位于0x4C45处,上电后代码停在0x4C44处。
Keil MDK
1. 修改linker script file (memory_regions.scat)
FLASH_START从默认0修改为0x4000。重新编译工程,检查编译生成的srec文件或mot文件,确认文件起始地址为0x4000。
2. Debug Configuration设置

在Keil设定中,首先修改Linker > R/O Base,设定为0x4000。
将如下内容另存为一个*.ini文件(如app_0x4000.ini),放在Project目录下的script文件夹中。
FUNC void Setup (void)
{
SP = _RDWORD(0x00004000); // Setup Stack Pointer
PC = _RDWORD(0x00004004); // Setup Program Counter
_WDWORD(0xE000ED08, 0x00004000); // Setup Vector Table Offset Register
}
LOAD Objects\RA4M2_TE_app.axf INCREMENTAL // Download
Setup(); // Setup for Running
在下图中指向该*.ini文件。
3. 调试验证
调试效果如下图所示,代码在跳到main()函数时,地址在0x4000+处。
IAR EW for ARM
1. 修改linker script file (memory_regions.icf)
FLASH_START从默认0修改为0x4000。重新编译工程,检查编译生成的srec文件或mot文件,确认文件起始地址为0x4000。
2. Debug Configuration设置
修改Debugger > Extra Options中的设定,如下图所示。
3. 调试验证
代码调试效果如下图所示,跳到main()函数时,地址在0x4000+处。
