Cortex-M3的初始堆栈指针值位于0x0,复位处理程序位于0x4是什么原因?这个的设计理由是什么?
为什么ARM人员不能像重置处理程序那样将0x0留给重置处理程序,然后在重置处理程序内初始化SP?
答案 0 :(得分:7)
我认为这个属于"它不是一个错误,它是一个功能"横幅。
ARM体系结构M(微控制器)配置文件与A和R配置文件具有完全不同的异常模型。 A-profile(如R-profile)保留了与以前ARM处理器的向后兼容性。允许M-profile偏离此,因此设计为更容易从C / C ++(没有asm)完全编程。
因此,矢量条目包含地址而不是指令,一旦完成,为什么不以相同的方式设置SP?它还可以在异常输入时自动保存状态。
答案 1 :(得分:2)
一切都是unixsmurf说的......
传统的手臂方法有点奇怪,典型的方法是地址列表,而不是指令表。所以这可能是一个因素。但是他们创造了一个gobzillion中断而不仅仅是一个(向量表是128/256深不仅仅是少数),毫无疑问你不想在调用C之前必须包装每个中断所以向量表,变化/缺乏模式,并为您保留寄存器,将这个包放在一起。您可以将C处理程序的地址放在表中,包括复位向量,以获取复位向量,您需要在调用之前设置堆栈指针,因此您需要一个用户点指示堆栈指针的初始值。