我正在将项目移植到飞思卡尔TWR-K60F120M开发板和Kinetis K60 32位ARM®Cortex™-M4 MCU。在操作汇编代码时,我遇到了一个在特定寄存器中保存Task上下文的函数。
当thumb2(Cortex™-M4指令集)发生中断时,是否有人知道在哪些寄存器中保存了任务上下文?
感谢。
答案 0 :(得分:1)
手臂建筑参考文件很清楚这是如何工作的。如果存在差异,您需要参考您正在使用的核心文档以获取具体细节。皮质m与非皮质m绝对是完全不同的。非cortex-m(cortex-a,arm11等)在每个处理程序的文档中都有伪代码,我相信它们会切换到arm模式。唯一具有手臂模式和拇指2的处理器是最新的皮质 - a。' s。所以,如果你问的是皮质m和非皮质m之间有什么区别。再次,这在arm文档中有详细记载,但是:
cortex-m的设计目的是不需要汇编语言包装器(或生成该附加程序集的编译器特定指令)来保护gprs并使用正确的指令返回。 cortex-m在硬件中执行此操作,旨在能够在中断向量表中具有C函数的地址。非皮质ms通常不支持thumb2,但是当处于拇指模式或手臂模式时,我相信它们会切换到手臂模式,当然可以切换回来。你在非cortex-m上有单独的堆栈,并且你有寄存器。因此,根据中断和处理程序,您可能需要保留更多中断,并且您当然不能简单地使用bx lr返回,您必须根据异常使用正确的返回指令。
另外,cortex-m使用向量表中的地址列表,其中传统的arm使用指令列表(通常需要使用分支b或ldr pc在一条指令中离开表)。 / p>