0

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

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

谢谢。

4

1 回答 1

2

arm 架构参考文档非常清楚它是如何工作的。您需要参考您正在使用的核心的文档以了解具体细节,以防有差异。cortex-m 与 non-cortex-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 才能在一条指令中退出表)。

于 2014-04-04T18:57:05.780 回答