在任務堆疊初始化函式中,任務堆疊保存LR的位置,放置R14 (LR) =0xFFFFFFFEL;
又說 /* R14 (LR) (init value will cause fault if ever used) */
意思是不會使用LR值,
但是任務切換完成后,不是要出堆疊使用LR地址回傳任務上次被中斷的地方嗎?為什么要用一個非法值呢?
請各位大俠指點迷津,感謝!
OS_STK *OSTaskStkInit (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT16U opt)
{
OS_STK *stk;
(void)opt; /* 'opt' is not used, prevent warning */
stk = ptos; /* Load stack pointer */
/* Registers stacked as if auto-saved on exception */
*(stk) = (INT32U)0x01000000L; /* xPSR */
*(--stk) = (INT32U)task; /* Entry Point */
*(--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)p_arg; /* R0 : argument */
}
uj5u.com熱心網友回復:
PENDSV例外回傳時,硬體依次從任務堆疊彈出 LR PC 等暫存器值,然后將LR賦值給PC,對不對?轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/47397.html
標籤:單片機/工控
上一篇:FPGA與PC機的通信問題
