欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

出问题 初始化ucosiii_STM32 ucosii 双堆栈初始化问题

发布时间:2025/10/17 70 豆豆
生活随笔 收集整理的这篇文章主要介绍了 出问题 初始化ucosiii_STM32 ucosii 双堆栈初始化问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

MSP 可以不用初始化.系统硬件自动搞定了.

PSP 初始化为0,是用来区别,是不是第一次切换任务,

因为第一次切换任务,无上一次任务来保存.不然,要保存上一个任务到栈.

PendSV_Handler

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 这里会判断 PSP 是不是0,是0直接跳到OS_CPU_PendSVHandler_nosave  执行.

;保存一下现场

SUBS    R0, R0, #0x20    ; Save remaining regs r4-11 on process stack

STM     R0, {R4-R11}

LDR     R1, =OSTCBCur     ; OSTCBCur->OSTCBStkPtr = SP;

LDR     R1, [R1]

STR     R0, [R1]                                            ; R0 is SP of process being switched out

OS_CPU_PendSVHandler_nosave

LDR     R0, =OSTCBCur                                       ; OSTCBCur  = OSTCBHighRdy;

LDR     R1, =OSTCBHighRdy

LDR     R2, [R1]

STR     R2, [R0]

LDR     R0, [R2]                                            ; R0 is new process SP; SP = OSTCBHighRdy->OSTCBStkPtr;

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

ALIGN

END

总结

以上是生活随笔为你收集整理的出问题 初始化ucosiii_STM32 ucosii 双堆栈初始化问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。