【问题标题】:Difference between Thumb2 and ARM when an interruption occursThumb2和ARM在中断发生时的区别
【发布时间】:2014-04-04 15:26:50
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 您应该提供更多上下文。哪个操作系统或裸机?有一本免费的书,名为 cortex 来自 arm 的系列程序员指南。这可能会为您提供一些见解。

标签: arm thumb interruption


【解决方案1】:

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 才能在一条指令中退出表)。

【讨论】:

  • 我实际上正在为 Trampoline OS 开发油模板。现有模板是为指令集 ARM 编写的,我需要将其更改为适合 thumb2。模板很具体,它生成了一个数据结构,其中保存了任务上下文的寄存器地址,所以我需要知道这两个指令集的区别,如果有的话,要更改(或保留) 模板。
  • infocenter.arm.com 获取一份/几份架构参考手册和技术参考手册。 ARMv8 已经完成了,所以不要看那里,看看 ARMv7 (cortex-a/r),它将包括该架构的指令集和架构信息,并且每条指令都会告诉您哪个架构支持该指令或不支持该指令。 armv7m cortex-m 仅适用于 thumb/thumb2,它会告诉您哪些架构也支持每条指令。
猜你喜欢
  • 2014-12-29
  • 2014-03-24
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
相关资源
最近更新 更多