STM32F103跑了个ucosIII 其中用了2个串口任务 1个USB任务
串口1中断服务函数 使用任务消息队列
void USART1_IRQHandler(void)
{
OSIntEnter();
Uart1HandlerServer();
OSIntExit();
}
void Uart1HandlerServer(void)
{
...............................
//UART1数据未准备好,没有待处理标志才保存,否则不保存--------
if (UART1_Frame_Ready_YN == 'N')
{
..............................................
UART1_Frame_Ready_YN = 'Y';//数据针准备好,待处理标志;Y待处理/N无数据
OSTaskQPost((OS_TCB *)&Uart1TaskTCB,
(void *)u8_Buffer_Int_UART1_Rev,//接收缓冲区
(OS_MSG_SIZE)u16_Data_Counter,//接收字节数
(OS_OPT )OS_OPT_POST_FIFO,
(OS_ERR *)&err);
}
}
//========================================================================
// 函数: void RS485_FrameAnalyzeTask(void *P_arg)
// 描述: 485分析任务
// 参数: 命令值
// 返回: 无
//========================================================================
void RS485_FrameAnalyzeTask(void *P_arg)
{
OS_ERR err;
CPU_TS ts;
OS_MSG_SIZE msg_size;
void *pBuffer;
while (1)
{
pBuffer = OSTaskQPend((OS_TICK )0,
(OS_OPT )OS_OPT_PEND_BLOCKING,
(OS_MSG_SIZE *)&msg_size,
(CPU_TS *)&ts,
(OS_ERR *)&err);
if(err == OS_ERR_NONE)
{
OSMutexPend(&Uart1Mutex,0,OS_OPT_PEND_BLOCKING,&ts,&err);
RS485_Frame_Analyse_ZhuKong(pBuffer);
UART1_Frame_Ready_YN = 'N';//数据针准备好,待处理标志;Y待处理/N无数据
OSMutexPost(&Uart1Mutex,OS_OPT_POST_NONE,&err);
}
}
}
问题来了 串口1每隔5秒就会有数据到达
中断服务函数没有问题 能正确响应中断
当中断服务函数执行OSTaskQPost之后 485任务分析函数有几率收不到消息
曾经打断点调试过,执行OSTaskQpost任务还在一直等待
这个几率 有可能是几分钟出现 有可能是几小时 几天出现
搞了好久了 没搞定 大神们给点指导意见我再去调试
|