看了相关uCOS II的书籍,说问题是出在OSTaskStkInit()函数 ,没有将正确的任务启地址放在启任务堆栈中
OS_STK *OSTaskStkInit (void (*task)(void *parg), void *parg, OS_STK *ptos, INT16U opt)
[
OS_STK *stk;
(void)opt; /* 'opt' is not used, prevent */
/* warning 没有用'opt', */
/* 防止编译警告 */
stk = ptos; /* Load stack pointer */
/* 装载堆栈指针 */
/* Registers stacked as if */
/* auto-saved on exception */
/* 模拟成异常,自动把寄存器压栈*/
*(stk) = (INT32U)0x01000000L; /* xPSR */
*(--stk) = (INT32U)task; /* Entry Point of the task */
/* 任务入口地址 */
*(--stk) = (INT32U)0xFFFFFFFEL; /* R14 (LR) (init value will */
/* cause fault if ever used) */
*(--stk) = (INT32U)0x12121212L; /* R12 */
*(--stk) = (INT32U)0x03030303L; /* R3 */
*(--stk) = (INT32U)0x02020202L; /* R2 */
*(--stk) = (INT32U)0x01010101L; /* R1 */
*(--stk) = (INT32U)parg; /* R0 : argument 输入参数 */
/* Remaining registers saved on*/
/* process stack */
/* 剩下的寄存器保存到堆栈 */
*(--stk) = (INT32U)0x11111111L; /* R11 */
*(--stk) = (INT32U)0x10101010L; /* R10 */
*(--stk) = (INT32U)0x09090909L; /* R9 */
*(--stk) = (INT32U)0x08080808L; /* R8 */
*(--stk) = (INT32U)0x07070707L; /* R7 */
*(--stk) = (INT32U)0x06060606L; /* R6 */
*(--stk) = (INT32U)0x05050505L; /* R5 */
*(--stk) = (INT32U)0x04040404L; /* R4 */
return(stk);
]
不知道应该改哪一块