OpenEdv-开源电子网

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

UCOS II的消息邮箱问题

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-11-5
在线时间
2 小时
发表于 2015-1-8 13:12:31 | 显示全部楼层 |阅读模式
5金钱
用STM32F407跑了一个UCOSII的系统,建了8个任务,中断比较多,有uart的,gpio的,还有canbus的。功能越加越多,发现有时候总会出异常,目前主要由两个:
1. 在任务中调用printf输出到Uart1,有时候会直接跑飞,进hardfaulthandle,发现是用法异常,一直没有头绪,不知道什么原因;
2. 最近又新建了一个任务,和一个消息邮箱,在while(1)里用OSMboxPend(Msg_user,0,&err) 等待邮箱,等待时间的参数是0,应该是无线等待,但是当系统跑起来以后,这个任务里的所有内容都会执行,就跟没有加等待邮箱一样的效果,不知道怎么回事。同样的机制,在其他的任务里使用都是正常的。
望高手指点。

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

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-1-8 15:29:41 | 显示全部楼层
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-11-5
在线时间
2 小时
 楼主| 发表于 2015-1-8 21:43:44 | 显示全部楼层
回复【2楼】styleno1:
---------------------------------
err=4 , OS_ERR_PEVENT_NULL, 命名定义了这个消息邮箱,也做了初始化 OutCardSN_MBOX    =  OSMboxCreate((void *) 0); 而且如果是始终挂起等待邮箱的话,他不会运行到printf的,所以很奇怪。源代码如下:
INT8U  err;
 INT32U   *msg4;
 
 INT8U i=0;
 (void) p_arg;
while (1)
{
msg4=(INT32U *)OSMboxPend(OutCardSN_MBOX,0,&err);
printf("OSMboxPend err: %d",err);
         ......
        }

打印结果就是 OSMboxPend err: 4
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-11-5
在线时间
2 小时
 楼主| 发表于 2015-1-8 22:22:51 | 显示全部楼层
如果把等待消息邮箱换成等待信号量的话,就可以挂起一直等待。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 13:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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