OpenEdv-开源电子网

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

关于消息邮箱以及printf进入异常问题

[复制链接]

2

主题

7

帖子

0

精华

新手上路

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

最佳答案

查看完整内容[请看2#楼]

1,看看是不是任务堆栈字节对齐的问题?任务堆栈使用8字节对齐试试。 2,跟踪代码找问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165225
金钱
165225
注册时间
2010-12-1
在线时间
2107 小时
发表于 2015-1-8 13:22:33 | 显示全部楼层
1,看看是不是任务堆栈字节对齐的问题?任务堆栈使用8字节对齐试试。
2,跟踪代码找问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-11-5
在线时间
2 小时
 楼主| 发表于 2015-1-8 13:22:33 | 显示全部楼层
回复【4楼】dtkong:
---------------------------------
解决了,我的是因为系统配置里的信号量数量不够。。。
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-11-5
在线时间
2 小时
 楼主| 发表于 2015-1-9 08:45:46 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
1.printf的问题应该是字节对齐问题,现在已经把任务堆栈8字节对齐了。
2.关于邮箱,看了一下OSMboxPend 的err返回,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
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-3-6
在线时间
0 小时
发表于 2015-3-6 09:24:19 | 显示全部楼层
问一下楼主,第二个问题解决了吗? 我也遇到了类似的问题。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 14:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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