MCU(微控制器)的main
函数是如何被调用起来的,这通常与MCU的启动流程和初始化过程有关。不同的MCU架构和不同的启动方式可能会有所不同,但以下是一个常见的概述:
-
启动向量(Boot Vector):
- 当MCU上电或复位后,它会从一个固定的地址开始执行代码,这个地址通常是MCU的FLASH或ROM中的起始地址。
- 这个起始地址通常存放着一个跳转指令,它会跳转到真正的启动代码或引导加载程序(Bootloader)的起始地址。
-
启动代码(Boot Code):
- 启动代码负责初始化MCU的基本硬件设置,如时钟系统、内存等。
- 它还可能进行内存检查、配置中断向量表、初始化堆栈等。
- 在某些情况下,启动代码还负责从外部存储器(如外部FLASH或SD卡)加载程序。
-
中断向量表(Interrupt Vector Table):
- 中断向量表是一个包含了各种中断服务例程(ISR)地址的表格。当MCU接收到中断时,它会根据中断的类型查找这个表格,然后跳转到相应的ISR地址去执行。
main
函数的地址也会被放在这个中断向量表的某个位置,通常是“复位中断”或“程序开始执行”的位置。
-
调用
main
函数:- 在完成所有的初始化工作之后,启动代码会跳转到中断向量表中
main
函数的地址,从而开始执行main
函数。 - 从这个时候开始,控制权就完全交给了
main
函数,MCU开始执行用户编写的程序代码。
- 在完成所有的初始化工作之后,启动代码会跳转到中断向量表中
总的来说,MCU的main
函数是通过一系列的启动和初始化过程,最终由启动代码跳转调用起来的。不同的MCU和不同的启动方式可能会有不同的细节和实现方式,但基本的流程和原理是相似的。