本文以美信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类处理器都是满递减栈。
-
内核
+关注
关注
3文章
1372浏览量
40274 -
Cortex
+关注
关注
2文章
202浏览量
46479 -
函数
+关注
关注
3文章
4327浏览量
62567 -
美信
+关注
关注
5文章
1335浏览量
72469 -
Cortex-M3
+关注
关注
9文章
269浏览量
59463
发布评论请先 登录
相关推荐
评论