OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5400|回复: 9

ucosIII消息队列问题

[复制链接]

4

主题

9

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2014-2-27
在线时间
2 小时
发表于 2015-11-25 18:42:55 | 显示全部楼层 |阅读模式
5金钱

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任务还在一直等待

这个几率 有可能是几分钟出现  有可能是几小时 几天出现

搞了好久了 没搞定 大神们给点指导意见我再去调试

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-11-25 23:39:05 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

68

帖子

0

精华

高级会员

Rank: 4

积分
500
金钱
500
注册时间
2014-9-1
在线时间
77 小时
发表于 2015-11-26 09:14:48 | 显示全部楼层
帮顶........
回复

使用道具 举报

4

主题

9

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2014-2-27
在线时间
2 小时
 楼主| 发表于 2015-11-26 13:58:23 | 显示全部楼层
今天还是没搞定,捕获到从串口1中断退出过程,然而并没有实质进展 
正常的中断退出流程 执行完OSIntExit();转到空闲任务,执行最后一句 OSIdleTaskHook();再执行一次BX      LR  此时 485分析任务收到消息了
异常情况:执行完OSIntExit(); 直接回到其他任务中的函数曾经中断的位置。
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
发表于 2017-10-30 12:14:30 | 显示全部楼层
这种问题我也遇到了   发现消息队列在发送和接收4万多次之后接收任务不再接收任务了   不知道什么原因  你解决次问题了吗  谢谢
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
发表于 2018-1-10 16:59:46 | 显示全部楼层
hanzixi_angel 发表于 2017-10-30 12:14
这种问题我也遇到了   发现消息队列在发送和接收4万多次之后接收任务不再接收任务了   不知道什么原因  你 ...

这问题我也遇到过  不知道什么原因导致的  有的说是移植的问题   最后的解决办法很粗暴  如果遇到这中情况  判断消息队列满了就删除重新建立即可  实测确实有作用
回复

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2015-9-7
在线时间
8 小时
发表于 2018-5-8 09:00:58 | 显示全部楼层
mark!
回复

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2015-9-7
在线时间
8 小时
发表于 2018-5-9 08:27:59 | 显示全部楼层
hanzixi_angel 发表于 2017-10-30 12:14
这种问题我也遇到了   发现消息队列在发送和接收4万多次之后接收任务不再接收任务了   不知道什么原因  你 ...

你有解决办法吗?说明一下哈。我也是这样。
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
发表于 2018-5-9 17:13:09 | 显示全部楼层
roarghy 发表于 2018-5-9 08:27
你有解决办法吗?说明一下哈。我也是这样。

判断消息队列满了就删除重新建立即可  实测确实有作用
回复

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2015-9-7
在线时间
8 小时
发表于 2018-5-9 18:43:25 | 显示全部楼层
hanzixi_angel 发表于 2018-5-9 17:13
判断消息队列满了就删除重新建立即可  实测确实有作用

我专门发了个帖子,你看下是不是和你遇到的问题一样。给点建议哈
http://www.openedv.com/forum.php ... d=271002&extra=
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 03:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表