OSStartHighRdy LDR R4, =NVIC_SYSPRI2 ; set the PendSV exception priority LDR R5, =NVIC_PENDSV_PRI STR R5, [R4] MOV R4, #0 ; set the PSP to 0 for initial context switch call MSR PSP, R4 LDR R4, =OSRunning ; OSRunning = TRUE MOV R5, #1 STRB R5, [R4] ;Çл»µ½×î¸ßÓÅÏȼ¶µÄÈÎÎñ LDR R4, =NVIC_INT_CTRL ;rigger the PendSV exception (causes context switch) LDR R5, =NVIC_PENDSVSET STR R5, [R4] CPSIE I ;enable interrupts at processor level OSStartHang B OSStartHang ;should never get here 之前程序的功能一直是正常的,在工程打开时,压缩一下工程,再运行时,运行这个函数OSStart()时,就停在上述红色标注的位置处,有谁知道原因吗? |
说明你xxxx.S启动文件的中断向量表PendSV入口函数跟uCOS-II的入口函数不统一。
另外SysTick也有这个问题,要注意。
PendSV 的函数名都是PendSV_Handler 完全一样的。
方便的话,上传你的移植工程看看。
int main(void)
{
delay_init(10); //ÑÓʱ³õʼ»¯
Init_Gpio();
uart_init(9600);
//´®¿Ú²¨ÌØÂÊÉèÖÃ
USART_SendData(USART1, 0xaa); //for test use
OSInit(); //UCOS³õʼ»¯
OSTaskCreate(CMD_task,(void*)0,(OS_STK*)&CMD_TASK_STK[CMD_STK_SIZE -1],CMD_TASK_PRIO);//prio=5
OSStart(); //¿ªÊ¼ÈÎÎñ
}
程序死在OSStart();
应该是要多个task的吧,你再开一个试试
cmd task 中创建了3个其它的task