arm - 为什么 Cortex-A 的复位处理程序位于 0x0 而不是 Cortex-M3

标签 arm microcontroller cortex-m3 cortex-a

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

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

最佳答案

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

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

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

关于arm - 为什么 Cortex-A 的复位处理程序位于 0x0 而不是 Cortex-M3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27189442/

相关文章:

c - ARM汇编递归幂函数

linux - ARM、GNU 汇编程序 : how to pass "array" arguments to execve()?

嵌入式 Web 服务器中的 CRUD

c# - 如何使用 C# 打开单个 Arduino 端口?

将 GCC 内联汇编编译成 Microsoft Visual C++ 2008

c - 如何使数据库大小超过 256 字节 [链接器文件 - MPLAB]

c - cortex-m3 上的 volatile uint32_t

udp - NTP 请求包

c++11 - 编译 Cortex M3 裸机

arrays - 如何在ARM汇编中正确创建数组?