在使用UCOSIII的内建消息队列过程中,我在A任务向B任务发送一个消息,B任务中进行消息OSTaskQPend接收。1.如果配置成OS_OPT_PEND_BLOCKING 阻塞模式,没有消息的时候任务B就会被挂起。OSTaskQPend后续的代码就一直不能执行。
2.如果配置成OS_OPT_PEND_NON_BLOCKING,OSTaskQPend()函数会被在任务的大循环中一直被调用,后续的代码也可以被执行。
3.但是OSTaskQPend函数在不断的调用过程中,OSTaskQPend函数内部不断的在OS_CRI
tiCAL_ENTER(); //关中断OS_CRITICAL_EXIT(); 开关中断。
4.导致的结果就是任务B一直在运行,无法切换到任务A中。
5.在OSTaskQPend中增加5ms延时可以解决上述问题但是,影响任务实时性。
求大神帮忙出出主意怎么弄!