(一)将程序烧录到目标板,在TRACE32中,Core0和Core1分别设置断点,如下所示:
第一次运行调试,程序停在了预期的Core0断点位置,如下所示: 使用调试器进行Target Reset设置,进行复位操作,如下所示: 如上图,程序复位到了非缓存区地址0xA0000020。 再次进行程序调试,程序停在了非预期的Core1断点位置,而不是预期的Core0断点位置,如下所示:
...... #define RESET 0x80000020 ...... SECTIONS { ...... .startup (0x80000020) : FLAGS(rxl) { BootModeIndex = .; . = ALIGN(8); KEEP (*(.start)); . = ALIGN(8); } > pfls0 =0xFF ...... }
启动地址(0x80000020)为Cached区,对应的*.map文件如下所示:
而Debugger复位时,复位到了NonCached区的启动地址(0xA0000020),调试器在此区域找不到对应的Symbol,使得断点无效。方法一:启动地址设置到NonCached区
...... #define RESET 0xA0000020 ...... SECTIONS { ...... .startup (0xA0000020) : FLAGS(rxl) { BootModeIndex = .; . = ALIGN(8); KEEP (*(.start)); . = ALIGN(8); } > pfls0_nc =0xFF ...... }
如上,启动地址为NonCached区,即:启动地址设置为0xA0000020。重新编译工程,生成的*.map文件如下所示:
1、将程序烧录到目标板,在TRACE32中,Core0和Core1分别设置断点,如下所示: 2、第一次运行调试,程序停在了预期的Core0断点位置,如下所示:3、使用调试器进行Target Reset设置,进行复位操作,程序复位到了非缓存区复位地址0xA0000020,且找到了对应的Symbol,如下所示:4、再次进行程序调试,程序停在了预期的Core0断点位置,如下所示: 方法二:修改PC寄存器 如果只是想临时调试使用,不想进行复位内存的修改,可以在每次复位后,通过PC寄存器设置软件的运行位置,具体操作如下:
1、CPU->CPU Registers,如下所示:
3、设置PC值为实际的启动地址0x80000020,如下所示:
4、单击OK,程序跳转到启动位置,且出现Symbol,如下所示:
5、调试程序,程序在停在预期的Core0断点位置,如下所示:
如上两种方式,方式一措施一劳永逸,方式二临时设置。
|