单片机的启动过程(从上电到main)

本文介绍了嵌入式系统的启动过程,包括C语言编译、链接器的作用、加载视图的形成以及启动代码如何根据Scatter文件进行内存布局调整。重点讲解了复位中断处理流程及其后续步骤。

理解这篇文章之前,我们需要配合了解两个基础知识。

一个是加载视图和运行试图,一个是单片机的存储空间。

这篇文章会涉及两个新内容,而加载视图又涉及启动代码和Scatter文件。

所以通过集成环境讲解启动代码总显得力不从心。

这里我们从编译器和链接器开始讲起。

1、C语言的编译都是按照文件进行编译的,编译完成后,每一个.c文件会生成相应的.o文件,这个过程是编译器(ARMCC)做的。

2、因为各个.o的信息是分散的,函数变量都是们没有统一编址的,所以lds链接器需要将各个.o文件的信息汇总到一起,就是code+RO+RW的位置,这就形成了加载视图。

3、启动代码starts.s 做一些基础工作外,根据Scatter文件的信息 ,对RW进行搬移,搬移到RAM中,方便后期的访问。

4、搬移完成后,我们就可以访问全局变量了(这个时候全局变量都是在RAM里的,我们通过map文件看到的)

__Vectors       DCD     __initial_sp              ; Top of Stack
                DCD     Reset_Handler             ; Reset Handler
                DCD     NMI_Handler               ; NMI Handler
                DCD     HardFault_Handler         ; Hard Fault Handler
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值