请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
工具/软件:TI-RTOS
您好!
我有一个使用邮箱的生产者-使用者去除水模式。 制片人(初级2级) Mailbox_post (hndl、BIOS_wait_forever)消息发送给使用者(primo 6.) 执行 MQTT 客户端任务以向代理发送 MQTT 消息的任务。
在生产者端,我有一个 for 循环,没有任何 Task_sleep()调用。 当我用 QOS0发布 MQTT 消息(仅调用 socket send())时,只要顾客发送消息,生产者任务就会被阻止,一切都按预期工作,顾客的优先级更高,一切都很好。
但是、当我尝试发送 QOS1消息时、如果 send()后跟 recv()以获取 PUBACK、则任务调度程序不会阻止使用者任务、并且生成者在获取之前传输的 PUBACK 之前迭代到下一个循环周期。
问题1:理由是什么? 您能解释一下为什么会发生这种情况吗?
问题2:如何使顾客任务等待 recv()完成,而不让生产者任务恢复?
非常感谢