咱们先来看看程序映像。
一般,Cortex-M0处理器的程序映像时从地址0x00000000处开端的。
程序映像开端处时向量表,其间包含了反常的其实地址(向量),每个中止向量的地址都等于“反常号*4”,比方,外部IRQ0的反常类型为16,因而其向量地址为16*4=0x40。这些向量的最低位都被置为1,以标明运用thumb指令。向量表的巨细由实际运用的中止个数决议。
向量表中包含了MSP的初始值,它存储在向量表的头四个字节。
复位时,处理器首要读取向量表的前两个字(8个字节),榜首个字为MSP的初始值,第二个字为复位向量,它标明程序履行的开端地址。
例如,假如发动代码坐落地址0x000000C0,需要在复位向量处写入这个地址,而且将地址的最低方位为1,以标明当前为thumb代码,因而,地址0x00000004处的值为0x000000C1。在获得复位向量值后,处理器开端从这个地址处履行程序代码。
复位流程也会初始化MSP,假定内存坐落0x20000000~0x20007FFF,能够将0x20008000写在地址0x00000000处,这样就完成了把主栈指针置于内存的顶部。
假如要运用PSP,在装备CONTROL寄存器切换栈指针前,有必要首要经过软件代码将其初始化,由于复位流程只初始化MSP,不初始化PSP。