浅谈:对于任何电子产品,硬件是软件运行的基础,而软件赋予了硬件灵魂,两者有机结合成为一个功能丰富、强大的系统。
我们写的代码是如何在单片机上跑的呢?下面以比较简单的方式简述一下,如果还要研究很多细节实现的话,就要深入学习微机原理的知识啦。
代码在单片机上跑起来,一般有6个步骤:
1.写好源文件。
2.准备好启动文件(一般半导体厂商提供,也可以自己根据需求进行裁剪编写)。这个文件直接是用汇编写的,主要完成三个工作:初始化堆栈,定义中断向量表,进行复位中断(初始化寄存器、时钟和跳转到main函数)。
(1)初始化堆栈:主要定义栈、堆地址、大小和一些格式
(2)定义中断向量表:可以简单理解为各个小函数的地址。要放在Flash的0位置处。例如要运行Reset_Handler这个中断处理函数,PC就会先先访问这个中断向量表,得知Reset_Handler在哪个地址,然后PC跳到相应的位置开始执行Reset_Handler, 里面定义了各种中断发生后CPU要做的事。
(3)进行复位中断:单片机一上电复位或者按下复位按钮执行的初始化操作。首先进行系统初始化,然后会跳转到我们写的应用程序main函数。
3.编译生成二进制机器码。把写的代码变成机器可以认识的二进制文件。一般用集成好的开发环境如MDK,包括了预处理、编译、链接、加上地址头等等,最终生成特定MCU的二进制文件。
4.烧写单片机的FLASH。将第三步生成的二进制文件通过烧录器、仿真器等媒介烧录进FALSH。当然不一定是FLASH,还可以是其他存储芯片。
5.复位。烧录完复位一下。让芯片里的各个寄存器恢复到初始状态,主要让CPU的PC寄存器恢复到0,重头开始跑复位中断处理。
6.运行用户代码。复位后跳转到main函数执行。
简单的总体框图