1. 程式人生 > >關於UCOS任務卡死的原因分析

關於UCOS任務卡死的原因分析

現象:函式function1()執行到“USART2SendData("\r\n",2)”時,UCOS任務卡死,最高優先順序任務也不能執行。

分析:執行到USART2SendData("\r\n",2),因為UART2_SendEnable=0導致關掉中斷後沒有恢復現場(開中),任務不能切換,於是任務卡死。增加紅色高亮部分程式碼,即可實現正常執行。

function1(void)

{

     USART2SendData((uint8_t*)Buffer, strlen(Buffer));
USART2SendData("\r\n",2);

}


void USART2SendData(const uint8_t *pdata, unsigned int num)
{
OS_CPU_SR cpu_sr;
  OS_ENTER_CRITICAL(); 
if(UART2_SendEnable==1)
{
UART2_SendEnable=0;
OS_EXIT_CRITICAL();
DMA_Cmd(DMA1_Stream6, DISABLE);
DMA1_Stream6->M0AR = (uint32_t)pdata;
DMA1_Stream6->NDTR = num;
DMA_Cmd(DMA1_Stream6, ENABLE);

}
else
{
OS_EXIT_CRITICAL();
}

}