首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Cortex-A的重置处理程序位于0x0,而Cortex-M3不在0x0

为什么Cortex-A的重置处理程序位于0x0,而Cortex-M3不在0x0
EN

Stack Overflow用户
提问于 2014-11-28 21:12:37
回答 2查看 1.3K关注 0票数 3

Cortex-M3的初始堆栈指针值位于0x0,重置处理程序位于0x4的原因是什么?这样做的设计理由是什么?

为什么ARM人员不能像Cortex-A那样将0x0留给重置处理程序,然后在重置处理程序中初始化SP?

EN

回答 2

Stack Overflow用户

发布于 2014-11-28 21:40:03

我认为这是属于“这不是一个错误,这是一个功能”的横幅。

ARM架构M(微控制器)配置文件具有与A和R配置文件完全不同的异常模型。A配置文件(如R配置文件)保留了与以前的ARM处理器的向后兼容性。M-profile被允许偏离这一点,因此被设计成更容易完全从C/C++ (没有asm)进行编程。

因此,向量条目包含地址而不是指令,一旦您这样做了,为什么不以同样的方式设置SP呢?它还可以在异常输入时自动保存状态。

票数 7
EN

Stack Overflow用户

发布于 2014-11-29 02:31:35

unixsmurf说的一切..。

传统的arm方法有点奇怪,典型的方法是地址列表,而不是指令表。因此,这可能是一个因素。但他们创建了无数的中断,而不仅仅是一个(向量表是128/256深,而不是很少),毫无疑问,你不想在调用C之前包装每个中断,所以向量表,模式的改变/缺失,以及为你保留寄存器,都把这个包放在一起。您可以将C处理程序的地址放在表中,包括重置向量,以获得其中的重置向量。您需要在调用之前至少设置堆栈指针,因此您需要让用户指定堆栈指针的初始值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27189442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档