detail2012 发表于 2012-10-21 20:24:47

请问下,UCOS的任务堆栈结构应该要与相应的硬件平台一致吧?

我使用的已经硬件平台是STM32,我在看他os_cpu_a.asm的汇编文件发现,
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,
    STRB    R2,

    LDR   R0, =OSTCBCur                                       ; OSTCBCur= OSTCBHighRdy;
    LDR   R1, =OSTCBHighRdy
    LDR   R2,
    STR   R2,

    LDR   R0,                                           ; 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

这个时候的PSP指向的栈结构从顶部到底部依次存放R0,R1,R2,R3,R12,R14,Entry Point,xPSR;我的问题是当他离开systickISR时,他是否应该先使用出栈指令弹出R0,R1,R2,R3,R12,R14;使SP指向Entry point?...换个角度想,也就是任务的堆栈结构与程序的本身的堆栈结构必须是一致的...不知道是不是?..请各位提供点意见{:handshake:}

SNOOKER 发表于 2012-10-21 20:42:39

entry point是什么玩意?
建立任务时的堆栈结构是山寨中断时的堆栈结构的。
R0,R1,R2,R3,R12,R14,Entry Point,xPSR这些是中断时硬件自动入栈的,同理在执行中断返回时这些会按相反顺序自动出栈

detail2012 发表于 2012-10-21 20:47:48

SNOOKER 发表于 2012-10-21 20:42 static/image/common/back.gif
entry point是什么玩意?
建立任务时的堆栈结构是山寨中断时的堆栈结构的。
R0,R1,R2,R3,R12,R14,Entry Poi ...

谢谢...刚才自己仔细分析。。弄懂了
页: [1]
查看完整版本: 请问下,UCOS的任务堆栈结构应该要与相应的硬件平台一致吧?