用ucos邮箱等待导致中断丢数据的问题解析,花了2天时间来找问题,狗日的。模型如下:
1、一个函数用mailbox_pend()来等待数据到达
2、在中断函数中,收到数据了,mailbox_post告诉上层好了,可以读数据了。
好了,现在全速运行会发现数据在中断是收到了,但是应用层mailbox_pend()时却不够及时,导致收不到全部数据。
原因如下,
程序第一次pend()时可能等到了要的数据,好了,在处理数据过程中,这时候中断又发生了,又post了一次。
等下一次程序再去取时,发现有数据,就不pend,直接取了返回。
第三次去取数据时,发现没数据,就pend,结果,这时候mailbox不是空的,就不等待,直接又取数据,取得是空数据。
因此,在OSMboxPend()前,最好调用OSMboxAccept进行清空,其他的等待也可以这样搞。