Arm 为什么对于Cortex-A重置处理程序位于0x0,而对于Cortex-M3重置处理程序不位于0x0
Cortex-M3的初始堆栈指针值位于0x0,重置处理程序位于0x4的原因是什么?这方面的设计理由是什么Arm 为什么对于Cortex-A重置处理程序位于0x0,而对于Cortex-M3重置处理程序不位于0x0,arm,microcontroller,cortex-m3,cortex-a,Arm,Microcontroller,Cortex M3,Cortex A,Cortex-M3的初始堆栈指针值位于0x0,重置处理程序位于0x4的原因是什么?这方面的设计理由是什么 为什么ARM人员不能像对Cortex-A那样将0x0留给重置处理程序,然后在重置处理程序中初始化SP?我认为这一个属于“这不是一个bug,这是一个功能”的横幅 ARM架构M(微控制器)配置文件具有与a和R配置文件完全不同的异常模型。A-profile(与R-profile一样)保留了与以前ARM处理器的向后兼容性。M-profile被允许偏离这一点,因此被设计为更容易完全从C/C++编程(没
为什么ARM人员不能像对Cortex-A那样将0x0留给重置处理程序,然后在重置处理程序中初始化SP?我认为这一个属于“这不是一个bug,这是一个功能”的横幅 ARM架构M(微控制器)配置文件具有与a和R配置文件完全不同的异常模型。A-profile(与R-profile一样)保留了与以前ARM处理器的向后兼容性。M-profile被允许偏离这一点,因此被设计为更容易完全从C/C++编程(没有asm)
因此,包含地址而不是指令的向量项,一旦这样做了,为什么不以相同的方式设置SP?它还可以在异常输入时自动保存状态。unixsmurf所说的一切
传统的arm方法有点奇怪,典型的方法是地址列表,而不是指令表。所以这可能是一个因素。但是他们创建了大量的中断,不仅仅是一个(向量表是128/256深的,而不仅仅是少数),而且毫无疑问,在调用C之前,您不需要包装每个中断,因此向量表、模式的更改/缺少以及为您保留寄存器,将这些包放在一起。您可以将C处理程序的地址(包括重置向量)放在表中,以获得重置向量。在调用之前,您需要至少设置堆栈指针,因此您需要为用户指定一个点来指示堆栈指针的初始值。感谢分享您的见解。