完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
UCOS/III 是在PendSV中断里切换任务的,最后BX LR(见红色字体),LR是旧任务返回地址, 所以应该跳到旧任务继续执行,为什么会跳转到新任务了呢?希望高手能解惑。PendSV中断代码如下(摘自开发板例程): OS_CPU_PendSVHandler CPSID I ; Prevent interruption during context switch MRS R0, PSP ; PSP is process stack pointer CBZ R0, OS_CPU_PendSVHandler_nosave ; Skip register save the first time SUBS R0, R0, #0x20 ; Save remaining regs r4-11 on process stack STM R0, {R4-R11} LDR R1, =OSTCBCurPtr ; OSTCBCurPtr->OSTCBStkPtr = SP; LDR R1, [R1] STR R0, [R1] ; R0 is SP of process being switched out ; At this point, entire context of process has been saved OS_CPU_PendSVHandler_nosave PUSH {R14} ; Save LR exc_return value LDR R0, =OSTaskSwHook ; OSTaskSwHook(); BLX R0 POP {R14} LDR R0, =OSPrioCur ; OSPrioCur = OSPrioHighRdy; LDR R1, =OSPrioHighRdy LDRB R2, [R1] STRB R2, [R0] LDR R0, =OSTCBCurPtr ; OSTCBCurPtr = OSTCBHighRdyPtr; LDR R1, =OSTCBHighRdyPtr LDR R2, [R1] STR R2, [R0] LDR R0, [R2] ; R0 is new process SP; SP = OSTCBHighRdyPtr->StkPtr; LDM R0, {R4-R11} ; Restore r4-11 from new process stack ADDS R0, R0, #0x20 MSR PSP, R0 ; Load PSP with new process SP ORR LR, LR, #0x04 ; Ensure exception return uses process stack CPSIE I BX LR ; Exception return will restore remaining context |
|
相关推荐
1个回答
|
|
UCOSIII 是一个实时操作系统,它使用 PendSV 异常(一种软件中断)来实现任务切换。在 PendSV 中断处理程序中,操作系统会保存当前任务的上下文,然后恢复新任务的上下文,从而实现任务切换。
关于您提到的 "BX LR" 指令,它的作用是跳转到 LR 寄存器指向的地址继续执行。在 PendSV 中断处理程序中,LR 寄存器的值被修改为指向新任务的入口地址。因此,执行 "BX LR" 指令后,CPU 会跳转到新任务的入口地址,开始执行新任务。 以下是 UCOSIII 任务切换的大致步骤: 1. 当需要切换任务时,操作系统会触发 PendSV 异常。 2. 在 PendSV 异常处理程序中,首先会保存当前任务的上下文(如寄存器值等)。 3. 然后,操作系统会查找就绪任务队列,找到最高优先级的任务,并将其状态设置为 "正在运行"。 4. 接下来,操作系统会恢复新任务的上下文,包括修改 LR 寄存器的值为新任务的入口地址。 5. 最后,执行 "BX LR" 指令,跳转到新任务的入口地址,开始执行新任务。 这样,UCOSIII 就实现了从旧任务到新任务的切换。希望这个解释能帮助您理解 UCOSIII 的任务切换机制。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 02:04 , Processed in 0.810559 second(s), Total 80, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号