RISC-V技术论坛
直播中

jf_1137202360

8年用户 1371经验值
擅长:嵌入式技术
私信 关注
[经验]

【南京中科微CSM32RV20开发板试用体验】程序执行流程分析

为了便于理解程序到底是怎么运行的,对程序的运行过程进行简单的讲解。
分析思路对于其他芯片也适用。

找到如下链接脚本打开
图片26.png
可以看到定义了两个存储区块
MEMORY
{
  rom (rxai!w) : ORIGIN = 0x20000000, LENGTH = 40K
  ram (wxa!ri) : ORIGIN = 0x20020000, LENGTH = 4K
}
和数据手册描述的片上存储对应,分别对应片上ROM和片上RAM
图片27.png
可以看到.init放在了rom的开头
SECtiONS
{
        __stack_size = DEFINED(__stack_size)?__stack_size : 256;
        PROVIDE(_stack_size =_stack_size);
        _heap_size  = DEFINED(__heap_size)?__heap_size : 256;
        PROVIDE(_stack_size =_stack_size);
        . = ALIGN(4);
        .init :
        {
                *(.init);
        } >rom AT>rom :rom
搜索.init可以看到
该代码段位于vectors.S
图片28.png
该代码段的第一条语句是
跳转到_start执行
图片29.png
而芯片复位正是从ROM开始处执行,即执行j _start语句。
继续往下看
进行中断向段基地址配置,data初始化,bss初始化,栈指针设置等工作
图片30.png
最后进入main函数执行
图片31.png
main函数中再进行时钟,中断等底层初始化,最后才是用户的业务代码。
图片32.png

更多回帖

发帖
×
20
完善资料,
赚取积分