關於UCOS任務卡死的原因分析
阿新 • • 發佈:2018-11-04
現象:函式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();
}
}