用ucos邮箱等待导致中断丢数据的问题解析

用ucos邮箱等待导致中断丢数据的问题解析,花了2天时间来找问题,狗日的。模型如下:

1、一个函数用mailbox_pend()来等待数据到达

2、在中断函数中,收到数据了,mailbox_post告诉上层好了,可以读数据了。

好了,现在全速运行会发现数据在中断是收到了,但是应用层mailbox_pend()时却不够及时,导致收不到全部数据。

原因如下,

程序第一次pend()时可能等到了要的数据,好了,在处理数据过程中,这时候中断又发生了,又post了一次。

等下一次程序再去取时,发现有数据,就不pend,直接取了返回。

第三次去取数据时,发现没数据,就pend,结果,这时候mailbox不是空的,就不等待,直接又取数据,取得是空数据。

因此,在OSMboxPend()前,最好调用OSMboxAccept进行清空,其他的等待也可以这样搞。


本文为3YL原创,转载无需联系,但请注明来自labisart.com。

原创文章不易,如果觉得有帮助,可打赏或点击右侧广告支持:

查看打赏记录

发表评论请遵守党国法律!后台审核后方可显示!
  • 最新评论
  • 总共0条评论
  • Blog v1.1© 2024 labisart.com 版权所有 | 联系:labartwork@163.com