我们在Vxworks 5.5和PPC8260上实现了一个非常大的多任务通信系统。系统应该处理大量的以太网流量,并通过RS-232,内存映射I / O等处理一些循环外围控制活动。会发生的是,在某些时刻,我们用于任务间通信的消息队列很少会溢出(I通过日志检查看到它。当我检查负责提供此消息队列的任务的状态(即对它们进行接收)时,它们似乎是READY。当我检查msgQShow队列本身时,它们已满,但没有任何任务被阻止。但是查看任务堆栈跟踪显示一个任务实际上在msgQReceive调用中挂起。特别是在qJobGet内核调用中或类似的东西。
答案 0 :(得分:0)
消息队列"丢失&#34>极不可能。一个被阻止的任务。
根据您的描述,我们可以假设:
READY状态是任务在可用时运行的状态。任务保存在队列中(严格地说,每个优先级一个队列),当达到队列的头部时,它们将被安排。
如果任务持续显示为READY,则表明它们没有获得CPU时间。 msgQ似乎没有空的事实支持。
您应该使用系统查看器等工具进行诊断。您可能需要提高阅读器任务的优先级。如果您的msgQSend使用NO_WAIT,则可能需要使用超时值