小弟不明白任务栈结构初始化OSTaskInit()的具体作用,望各位大哥指点指点,我能看懂下面函数的意思,但不明白OSTaskInit()的具体作用,为什么要初始化一些0啊?下面是LPC2210的原程序: uint32 *OSTaskInit(void (*task)(void *pd) , void *pada , uint32 *ptos, uint16 opt) { uint32 *stk; opt=opt; //opt没有使用 stk=ptos; //获取堆栈指针
/*建立任务环境,ADS1.2使用满递减堆栈*/ *stk = (uint32)task; //PC *--stk = (uint32)task; //LR *--stk = 0; //R12 *--stk = 0; //R11 *--stk = 0; //R10 *--stk = 0; //R9 *--stk = 0; //R8 *--stk = 0; //R7 *--stk = 0; //R6 *--stk = 0; //R5 *--stk = 0; //R4 *--stk = 0; //R3 *--stk = 0; //R2 *--stk = 0; //R1 *--stk = uint32 pdata; //R0,第一个参数使用R0传递 *--stk = (USER_USING_MODE | 0); //SPSR,允许IRQ,FIQ中断 *--stk = 0; //关中断计数OsEnterSum return(stk); } |