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

描述

本文来源电子发烧友社区,作者:李先生, 帖子地址:https://bbs.elecfans.com/jishu_2283596_1_1.html

为了便于理解程序到底是怎么运行的,对程序的运行过程进行简单的讲解。
分析思路对于其他芯片也适用。
 
找到如下链接脚本打开
CSM32RV20
 
 
可以看到定义了两个存储区块
MEMORY
{
  rom (rxai!w) : ORIGIN = 0x20000000, LENGTH = 40K
  ram (wxa!ri) : ORIGIN = 0x20020000, LENGTH = 4K
}
和数据手册描述的片上存储对应,分别对应片上ROM和片上RAM
 
CSM32RV20
 
可以看到.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
CSM32RV20
 
 
 
该代码段的第一条语句是
跳转到_start执行
CSM32RV20
 
 
而芯片复位正是从ROM开始处执行,即执行j _start语句。
 
继续往下看
进行中断向段基地址配置,data初始化,bss初始化,栈指针设置等工作
CSM32RV20
 
 
最后进入main函数执行
 
CSM32RV20
 
main函数中再进行时钟,中断等底层初始化,最后才是用户的业务代码。
CSM32RV20
 
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分