以前学51的时候,记得单片机启动后是从00H执行第一条执行,往往这里是一条跳转到主程序的指令,
然后00H地址后面其实是一些中断函数的入口地址;
后来学stm8的时候,发现多了个叫做中断向量表的东西,单片机启动后就到该中断向量表取跳转地址,
然后...貌似...就启动了...(都不知道说的对不对)
我记得看过一篇文章说道:
CPU启动后到有两种方式:
1、CPU重启后,将其PC寄存器设为特定地址,只要用户的起始程序存在这个地址,就可以被正确执行;
——貌似51就是启动后将PC寄存器设为00H。
2、CPU重启后,会将CPU中存储中断矢量表地址的寄存器设为某特定地址,接着引发RESET中断,程序
员只要把中断矢量表存储在这个地址。并指定RESET中断的处理程序为自己写的某个函数,则该函数就可以在
开机后被CPU执行。
——中断矢量表不是固定在FLASH内部的一段内存吗?怎么又多了个存储中断矢量表的寄存器?
——栈、堆等的初始化到底是在RESET中断的执行之前还是之后?
由于,应用到的程序一直是用C写的,很少去关心单片机的启动过程,往往编译器也有现成的傻瓜版启动代码,
至于汇编毕业后就都忘得7788了。所以,单片机启动过程这一块我还是很乱很迷糊的,希望哪位有经验的朋友
能够指导或者做个概述一下,万分感谢!~
|