看过一篇文章说道:
CPU启动后到有两种方式:
1、CPU重启后,将其PC寄存器设为特定地址,只要用户的起始程序存在这个地址,就可以被正确执行;
——貌似51就是启动后将PC寄存器设为00H。
2、CPU重启后,会将CPU中存储中断矢量表地址的寄存器设为某特定地址,接着引发RESET中断,程序
员只要把中断矢量表存储在这个地址。并指定RESET中断的处理程序为自己写的某个函数,则该函数就可以在
开机后被CPU执行。
——中断矢量表不是固定在FLASH内部的一段内存吗?怎么又多了个存储中断矢量表的寄存器?
——栈、堆等的初始化到底是在RESET中断的执行之前还是之后?
由于,应用到的程序一直是用C写的,很少去关心单片机的启动过程,往往编译器也有现成的傻瓜版启动代码,
至于汇编毕业后就都忘得7788了。所以,单片机启动过程这一块我还是很乱很迷糊的,希望哪位有经验的朋友
能够指导或者做个概述一下,万分感谢!~
开发板上电第一步是启动固件,固件是出厂时固化好的,固件的作用是初始化一下基本的 设备,以nand为例,固件irom初始化好sram后,将nand中的前4k的bootloader(一般为uboot)拷贝到sram中,sram再初始化另一些设备比如dram等等,然后运行剩下的bootloader,接下来就是引导linux内核的启动了。bios在开发板相当与irom部分功能和uboot的前4k,内存时钟会在uboot中初始化的。uboot先做一些准备(比如设svc模式,关看门狗、中断、mmu等),然后设置内核参数表,然后跳到内核的地址运行,内核一般是压缩的,需要先解压,入口是stext,是在arch/arm/kernel/vmlinux.lds.S中定义的
Arm linux 内核启动流程 还是从编译链接生成vmlinux的过程来看吧,由一大堆.o文件链接而成,第一个就是 kernel\arch\arm\kernel\head-armv.o
arm核单片机启动过程的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:arm核单片机启动过程