美信cortex-m3内核芯片的启动过程及连接文件介绍

描述

本文以美信cortex-m3内核某型号芯片以及eclipse开发环境介绍芯片启动过程以及连接文件。

启动过程介绍:

先看向量表,见下图1区域向量表定义在nvic_section这个区域,启动时,会拷贝到RAM中运行,后面会介绍,重定向向量表不是必须的,拷贝到RAM中有个好处,修改向量表比较方便。

向量表的最开始是栈指针,接下来是复位向量,见2区域。

内核

下面就是复位函数,前面说了,复位函数地址放在了向量表的第二位。处理器上电后首先运行这个函数,进行初始化。这个函数定义在了reset区域,这个区域在Flash的起始位置,因此首先运行它,这个函数第一步就是初始化栈指针,然后调用start函数。

内核

关键的start函数来了:

1部分:这个函数首先从Flash拷贝数据,这个过程就是给全局变量赋值,换句话说就是给代码中有初值的全局变量或者静态局部变量赋值。因为全局变量和静态局部变量初值是保存在Flash里面,会占用Flash空间,这一点要注意。

2部分:把需要清零的RAM区清空,包括没有初值的全局变量。

3部分:拷贝向量表并重定向,上面已经提过,重定向不是必须的。

这个函数最后调用main函数,就再也回不来了。

内核

连接文件介绍:

1区域:上面说了__reset函数就在这区域,可以看出在Flash最上面,首先运行它。

2区域:向量表,start函数中拷贝到RAM区了,这是初始位置,在Flash区。

内核

继续往下看连接文件:

1区域:有初值常量,比如const类型,存放在Flash里

2部分:全局变量初值存放位置。刚才拷贝的就是它。

3区域:清零区,就是上面循环清零的区域

4区域:栈区域,一般在RAM最后面,因为cortex-m3类处理器都是满递减栈。

内核

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

全部0条评论

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

×
20
完善资料,
赚取积分