赞
踩
现象:函数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();
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。