本文以美信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类处理器都是满递减栈。
全部0条评论
快来发表一下你的评论吧 !