CPU_STK *OSTaskStkInit (OS_TASK_PTR p_task,
void *p_arg,
CPU_STK *p_stk_base,
CPU_STK *p_stk_limit,
CPU_STK_SIZE stk_size,
OS_OPT opt)
{
CPU_STK *p_stk;
(void)opt; /* Prevent compiler warning */
p_stk = &p_stk_base[stk_size]; /* Load stack pointer */
/* Align the stack to 8-bytes. */
p_stk = (CPU_STK *)((CPU_STK)(p_stk) & 0xFFFFFFF8);
/* Registers stacked as if auto-saved on exception */
*(--p_stk) = (CPU_STK)0xaa; /* R? : argument */
*(--p_stk) = (CPU_STK)0xa; /* FPSCR : argument */
*(--p_stk) = (CPU_STK)0x15; /* S15 : argument */
*(--p_stk) = (CPU_STK)0x14; /* S14 : argument */
*(--p_stk) = (CPU_STK)0x13; /* S13 : argument */
*(--p_stk) = (CPU_STK)0x12; /* S12 : argument */
*(--p_stk) = (CPU_STK)0x11; /* S11 : argument */
*(--p_stk) = (CPU_STK)0x10; /* S10 : argument */
*(--p_stk) = (CPU_STK)0x9; /* S9 : argument */
*(--p_stk) = (CPU_STK)0x8; /* S8 : argument */
*(--p_stk) = (CPU_STK)0x7; /* S7 : argument */
*(--p_stk) = (CPU_STK)0x6; /* S6 : argument */
*(--p_stk) = (CPU_STK)0x5; /* S5 : argument */
*(--p_stk) = (CPU_STK)0x4; /* S4 : argument */
*(--p_stk) = (CPU_STK)0x3; /* S3 : argument */
*(--p_stk) = (CPU_STK)0x2; /* S2 : argument */
*(--p_stk) = (CPU_STK)0x1; /* S1 : argument */
*(--p_stk) = (CPU_STK)0x0; /* S0 : argument */
*(--p_stk) = (CPU_STK)0x01000000uL; /* xPSR */
*(--p_stk) = (CPU_STK)p_task; /* Entry Point */
*(--p_stk) = (CPU_STK)OS_TaskReturn; /* R14 (LR) */
*(--p_stk) = (CPU_STK)0x12121212uL; /* R12 */
*(--p_stk) = (CPU_STK)0x03030303uL; /* R3 */
*(--p_stk) = (CPU_STK)0x02020202uL; /* R2 */
*(--p_stk) = (CPU_STK)p_stk_limit; /* R1 */
*(--p_stk) = (CPU_STK)p_arg; /* R0 : argument */
/* Remaining registers saved on process stack */
*(--p_stk) = (CPU_STK)0x11111111uL; /* R11 */
*(--p_stk) = (CPU_STK)0x10101010uL; /* R10 */
*(--p_stk) = (CPU_STK)0x09090909uL; /* R9 */
*(--p_stk) = (CPU_STK)0x08080808uL; /* R8 */
*(--p_stk) = (CPU_STK)0x07070707uL; /* R7 */
*(--p_stk) = (CPU_STK)0x06060606uL; /* R6 */
*(--p_stk) = (CPU_STK)0x05050505uL; /* R5 */
*(--p_stk) = (CPU_STK)0x04040404uL; /* R4 */
*(--p_stk) = (CPU_STK)0xFFFFFFFDUL;
return (p_stk);
}
测试代码段
最新推荐文章于 2023-01-28 10:03:41 发布