关于uCOS-II,做个总结!
void main (void) {
OSInit(); OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0); OSStart(); } 这是主程序,首先初始化,创建任务,开始运行任务。^_^很简单是吧,好戏在后边。 OSStart()调用OSStartHighRdy,这才是真正的运行优先级最高的任务。OSStartHighRdy call #OSTaskSwHook
mov.b #1, &OSRunning mov.w SP, &OSISRStkPtr
mov.w &OSTCBHighRdy, R13 mov.w @R13, SP (*) POPALL reti 我上边问到的问题答案在这里(*),这是第一次运行任务时保存的sp指针,指向自己的任务栈。后边就开始任务切换了。 OSCtxSw push sr PUSHALL mov.w &OSTCBCur, R13 mov.w SP, 0(R13)
call #OSTaskSwHook
mov.b &OSPrioHighRdy, R13 mov.b R13, &OSPrioCur mov.w &OSTCBHighRdy, R13 mov.w R13, &OSTCBCur mov.w @R13, SP (**) POPALL reti 开始任务切换,首先进行寄存器的保存(包括通用寄存器和特殊寄存器),注意第一次任务切换的时候sp在(*)哪^_^,以后每次任务切换sp都在(**)保存。 就到这里了!!!!!!!!!!!
|
|