我正在将一个项目移植到飞思卡尔TWR-K60F120M开发板和Kinetis K60 32位ARM®Cortex™-M4微处理器上。在操纵汇编代码时,我遇到了一个将任务上下文保存在特定寄存器中的函数。
有人知道当thumb2 ( Cortex™-M4指令集)发生中断时,任务上下文保存在哪些寄存器中吗?
谢谢。
发布于 2014-04-05 02:57:06
arm架构参考文档非常清楚地说明了这是如何工作的。您需要参考您正在使用的核心的文档,以了解具体细节,以防出现差异。皮质-m和非皮质-m绝对是完全不同的。非皮质-m(皮质-a、arm11等)在每个处理器的文档中都有伪代码,我相信它们会切换到arm模式。唯一具有arm模式和thumb2的处理器是最新的cortex a。因此,如果您想知道cortex m和非cortex m之间的区别。同样,这在arm文档中也有很好的记录,但是:
cortex M被设计为不需要具有汇编语言包装器(或生成附加汇编的编译器特定指令),以便保护gprs并返回正确的指令。cortex-m在硬件中实现了这一点,并且被设计为能够在中断向量表中具有C函数的地址。非皮质-ms一般不支持thumb2,但当处于拇指模式或手臂模式时,我相信它们会切换到手臂模式,当然你可以切换回来。你在一个非皮质-m上有单独的堆栈,并且你有银行收银机。因此,根据中断和您的处理程序,您可能需要保留更多的中断,并且您肯定不能简单地使用bx lr返回,您必须根据异常使用适当的返回指令。
同样,cortex m使用向量表中的地址列表,而传统的arm使用指令列表(通常您需要在一条指令中使用分支b或ldr来跳出表)。
https://stackoverflow.com/questions/22866895
复制相似问题