Cortex-M3的初始堆栈指针值位于0x0,重置处理程序位于0x4的原因是什么?这样做的设计理由是什么?
为什么ARM人员不能像Cortex-A那样将0x0留给重置处理程序,然后在重置处理程序中初始化SP?
发布于 2014-11-28 21:40:03
我认为这是属于“这不是一个错误,这是一个功能”的横幅。
ARM架构M(微控制器)配置文件具有与A和R配置文件完全不同的异常模型。A配置文件(如R配置文件)保留了与以前的ARM处理器的向后兼容性。M-profile被允许偏离这一点,因此被设计成更容易完全从C/C++ (没有asm)进行编程。
因此,向量条目包含地址而不是指令,一旦您这样做了,为什么不以同样的方式设置SP呢?它还可以在异常输入时自动保存状态。
发布于 2014-11-29 02:31:35
unixsmurf说的一切..。
传统的arm方法有点奇怪,典型的方法是地址列表,而不是指令表。因此,这可能是一个因素。但他们创建了无数的中断,而不仅仅是一个(向量表是128/256深,而不是很少),毫无疑问,你不想在调用C之前包装每个中断,所以向量表,模式的改变/缺失,以及为你保留寄存器,都把这个包放在一起。您可以将C处理程序的地址放在表中,包括重置向量,以获得其中的重置向量。您需要在调用之前至少设置堆栈指针,因此您需要让用户指定堆栈指针的初始值。
https://stackoverflow.com/questions/27189442
复制相似问题