[讨论] STM32 在串口中断程序中调用OSQPost()的问题

jgphu_123   2012-3-31 10:23 楼主
我在STM32  在串口中断程序中调用OSQPost()时,在任务中调用OSQPend()等待接收队列的消息,结果接收的数据是错误的。

但是我在一个任务中调用OSQPost(), 在另一个任务调用OSQPend()等待接收队列的消息,结果接收的数据是正确的。

不知道是啥原因。

我也做过一些实验 :
1. 不用操作系统的的消息队列,而是自己建立一个队列去接收串口消息, 结果是 接收的消息是正确的。
2.  我在串口中断程序中调用OSQPost()时,给OSQPost的参数消息是一个固定的值,结果接收的数据不是给定的那个值。

请高手帮忙分析一下。

回复评论 (3)

显然问题出在串口中断程序那了,LZ贴出代码来吧
点赞  2012-4-1 11:09

OSQPost

你好!
这个问题吗,估计你用的是局部变量,如果这样,当你在中断中调用OSQPost发送出你的消息后,然后你的中断函数结束了,局部变量的生存期也就Over了,所以在任务中你再去取那则消息时,早就被别人给上了!

为什么任务中可以呢?估计你的消息是在任务的while(1){}之前定义的,这个变量永远不会消失,除非while(1)退出。所以你发出的消息,在再别的地方取时是没有问题的。

你可知否?OSQPost和OSMboxPost只是传地址,而非实实在在的将消息内容传到邮箱或者是邮箱队列中。

[ 本帖最后由 zhouguoping 于 2013-1-24 18:23 编辑 ]
点赞  2013-1-24 18:22
还没开始研究UCOS2的消息邮箱和消息队列,就来围观一下高质量的技术讨论贴吧。
点赞  2013-1-25 16:15
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复