gpt4 book ai didi

embedded - 在Cortex-M的ISR内切换上下文

转载 作者:行者123 更新时间:2023-12-04 09:48:20 24 4
gpt4 key购买 nike

我正在尝试使用CodeSourcery GCC工具链为Cortex-M编写准系统的调度程序。我的调度程序使用SysTick在时间片期满后触发中断,并且上下文切换发生在ISR内部。为简单起见,我仅对所有内容使用主堆栈指针(MSP)。

我被困在确定如何处理在Cortex-M3上加载新上下文的过程中。根据Cortex-M3技术引用手册(TRM),该过程将PC,LR和状态寄存器压入ISR入口上的当前堆栈。

如果我推送其余寄存器以保存当前任务的上下文并从下一个任务的控制块加载新的SP值,我将如何恢复其其余上下文?

根据我的了解,我需要弹出我推送的寄存器(例如{r4-r11}),然后处理器会自动弹出其余的寄存器(包括新任务的返回地址和状态寄存器)。 ISR返回。因此,我假设我在完成任务切换后只需要执行BX即可?

TRM上的内容如下:

Exception returns occur when one of the following instructions loads a value of 0xFFFFFFFX into the PC when 1) POP/LDM which includes loading the PC 2) LDR with PC as a destination 3) BX with any register.



如何加载EXC_RETURN值?我是否应该将其压入堆栈(就像 here一样)?假设我弹出了通过软件推送的寄存器,那么Cortex会如何弹出已保存的寄存器?通常,如何还原任务的上下文?

我尝试阅读TRM和其他ARM引用,但它们似乎不清楚。

最佳答案

确实是非常复杂的。我正在写一本关于在Cortex-M内核上运行的FreeRTOS操作系统的书。我已经写了关于这一章的一章。通过阅读您的问题,我相信本章将为您提供帮助:

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

关于embedded - 在Cortex-M的ISR内切换上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25199802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com