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