首页 文章

发生中断时Thumb2和ARM之间的差异

提问于
浏览
0

我正在将项目移植到飞思卡尔TWR-K60F120M开发板和Kinetis K60 32位ARM®Cortex™-M4 MCU上 . 在操作汇编代码时,我遇到了一个在特定寄存器中保存Task上下文的函数 .

当thumb2(Cortex™-M4指令集)发生中断时,是否有人知道在哪些寄存器中保存了任务上下文?

谢谢 .

1 回答

  • 1

    手臂的建筑参考文件非常清楚这是如何工作的 . 如果存在差异,您需要参考您正在使用的核心文档以获取具体细节 . 皮质m与非皮质m绝对是完全不同的 . 非cortex-m(cortex-a,arm11等)在每个处理程序的文档中都有伪代码,我相信它们会切换到arm模式 . 唯一具有arm模式和thumb2的处理器是最新的cortex-a . 所以,如果你问的是皮质m和非皮质m之间有什么区别 . 再次,这在arm文档中有详细记录,但是:

    cortex-m设计用于不需要汇编语言包装器(或生成该附加程序集的编译器特定指令)以保护gprs并使用正确的指令返回 . cortex-m在硬件中执行此操作,旨在能够在中断向量表中具有C函数的地址 . 非皮质ms通常不支持thumb2,但是当处于拇指模式或手臂模式时,我相信它们会切换到手臂模式,当然可以切换回来 . 你在非cortex-m上有单独的堆栈,并且你有寄存器 . 因此,根据中断和处理程序,您可能需要保留更多中断,并且您当然不能简单地使用bx lr返回,您必须根据异常使用正确的返回指令 .

    另外,cortex-m使用向量表中的地址列表,其中传统的arm使用指令列表(通常需要使用分支b或ldr pc在一条指令中离开表) .

相关问题