|
uc/OS II为什么一使用堆栈检查功能,就进入死循环呢?
建立任务:
OSTaskCreateExt((void (*) (void *)) Task_KBD,(void *) 0,(OS_STK *) &TaskKBDStk[TASK_KBD_STK_SIZE - 1],
(INT8U) TASK_KBD_PRIO,(INT8U)TASK_KBD_PRIO,
&TaskKBDStk[TASK_KBD_STK_SIZE - 1], TASK_KBD_STK_SIZE,
(void *) 0,OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR);
部分汇编代码如下:
OSStartHighRdy
LDR R0, =NVIC_SYSPRI14 ; Set the PendSV exception priority
LDR R1, =NVIC_PENDSV_PRI
STRB R1, [R0]
MOVS R0, #0 ; Set the PSP to 0 for initial context switch call
MSR PSP, R0
LDR R0, =OSRunning ; OSRunning = TRUE
MOVS R1, #1
STRB R1, [R0]
LDR R0, =NVIC_INT_CTRL ; Trigger the PendSV exception (causes context switch)
LDR R1, =NVIC_PENDSVSET
STR R1, [R0]
CPSIE I ; Enable interrupts at processor level
OSStartHang
B OSStartHang ; Should never get here
单步调试发现程序死在OSStartHang,不使用堆栈检查是正常的! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|