首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么存储在NMI矢量地址中的NMI功能地址以ARM皮层中的位1结束?

为什么存储在NMI矢量地址中的NMI功能地址以ARM皮层中的位1结束?
EN

Stack Overflow用户
提问于 2019-05-30 12:49:18
回答 2查看 120关注 0票数 0

我有一个STM32-F49ZI核心板,它是ARM Cortex 4- 32位MCU。我有自己的NMI处理程序,即NMI_Handler函数,它的地址以位0结束。我可以在调试器中看到这一点。然而,NMI处理程序的向量地址存储了与NMI_Handler函数相同的地址,只是位以1结束。我的问题是为什么会有差异。我知道这是因为ARM皮层M只支持Thumb指令,即只支持16位指令。我不能理解这个推理。它背后的原因是什么?为什么它将最后一位设置为1。

代码语言:javascript
复制
void NMI_Handler()
{

}

Watchdog窗口显示

代码语言:javascript
复制
NMI_Handler address - 0x8010 1000

然而,存储在NMI矢量地址中的地址是-

代码语言:javascript
复制
0x8010 1001.
EN

回答 2

Stack Overflow用户

发布于 2019-05-30 17:14:41

尽管Cortex-M4仅支持THUMB2指令集,但为了实现当前所有ARM部件的二进制兼容性,它使用所有矢量、分支和跳转地址的最低有效位来指示THUMB模式,以便支持ARM/THUMB互通。它向处理器表明将要跳转到的代码是THUMB代码。对于支持ARM和THUMB指令集的处理器,如果当前模式不是THUMB,则会导致指令集模式切换。

您的NMI_Handler处理函数将位于链接映射中指示的偶数地址,但向量将设置LSB。当程序计数器从向量或分支地址加载时,LSB被设置为零。

请参阅Cortex M4技术参考小节中的“注意事项”框

票数 3
EN

Stack Overflow用户

发布于 2019-05-30 15:50:31

ARM体系结构的地址是奇数,那么指令集是THUMB,如果是偶数,那么它就是ARM指令集。

所以它必须是奇怪的

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

https://stackoverflow.com/questions/56371800

复制
相关文章

相似问题

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