按照https://bbs.elecfans.com/jishu_2284686_1_1.html搭建好开发环境后,我们可以借助仿真器方便的跟踪程序的执行过程。
程序入口
从仿真配置可以看到在启动代码_start处会断点停住
点击Debug进入仿真环境
点击单步
可以看到停在了/CCM3310S-L_FW/src/base/core/riscv/boot.S处
_start即程序的入口,可以看到该段代码是放在 .section .init,"ax",@progbits .init段的
从链接脚本可以看到.init段是放在 ORIGIN = 0x20400000处
从如下过程可以看到链接脚本的配置
栈设置继续单步可以看到
即设置栈指针
从链接脚本可以看到对应
.stack ORIGIN(ram) + LENGTH(ram) - __stack_size :
{
PROVIDE( _heap_end = . );
. = __stack_size;
PROVIDE( _sp = . );
} >
DATA初始化继续单步可以看到
和链接脚本对应
BSS初始化
和链接脚本对应
进入main
HAL初始化进入时钟等相关初始化
APP在如下位置双击打断点,F5全速运行,可以看到LED的亮灭
总结借助仿真器可以方便的跟踪程序的执行过程与状态,是调试不可缺少的过程。