|
版主你好,刚接触FREERTOS尝试编写了个串口通讯代码,基本思路是最串口中断内启动TIM5检测通讯超时,然后在定时中断内通过消息队列发送接收到的数据并在任务内接收消息进行数据处理。
以下是我用的代码:
void USART1_IRQHandler(void)
{
BaseType_t xResult;
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET )//
{
RxBuffer[RxCounter] = USART_ReceiveData(USART1);
RxCounter++;
TIM_SetCounter(TIM5, 0);// 清零计数器
TIM_Cmd(TIM5, ENABLE); //开启定时器3
}
}
void TIM5_IRQHandler(void)
{
BaseType_t xResult;
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
TIM_ClearITPendingBit(TIM5, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源
TIM_Cmd(TIM5, DISABLE); //关闭定时器5
RxCounter=0;
xQueueSendFromISR(xQueueRx, (void *)&RxBuffer, &xHigherPriorityTaskWoken);/*接收完成把数据通过消息队列发送(void *)&ptMsg,*/ portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
}
}
现在的问题是程序直接死循环在这里
请问版主是程序问题还是FREERTOS不允许在定时中断内发送消息队列? |
|