阻止 RTOS 中的任务间通信

blocking Inter task communication in RTOS

我正在编写一个模块,其中包含一个具有最高优先级的任务,它应该处于阻塞状态,直到它收到来自其他任务的消息,开始作为最高优先级任务履行其职责。它使用信箱机制进行信令。

我的问题是 我想要任务 - 向更高的任务发送信号 - 在阻塞模式下返回消息

这是我的问题

我应该post通过邮箱1然后从邮箱2取回还是有更好的解决方案?

如果有帮助我就用"FreeRTOS"

编辑

我觉得我描述的问题很糟糕

我的意思是我需要 2 个邮箱才能在任务与任务之间或 ISR 与任务之间进行通信,还是我可以只使用一个邮箱与其他实现!!??

很简单。例如使用的队列和 freeRTOS。

任务等待队列。处于阻塞状态

 while(1)
 {  
     xQueueReceive(queue, &object, portMAX_DELAY);
     ....

另一个任务将数据发送到队列。

  xQueueSend(queue, &object, timeout);

收到数据后,任务将获得控制权。然后它检查队列中是否有任何东西。如果不是,它会在阻塞状态下等待。

对于您编辑的问题:

您必须使用两个消息队列。每个任务一个,否则您将无法正确等待。 因此,对于您的阻止消息传输,代码如下所示:

高优先级任务:

 while(-1){ 
  xQueueReceive(high_prio_queue, &msg, portMAX_DELAY);
  [your complex code]
  xQueueSend(low_prio_queue, &return_msg, timeout);
 }

低优先级任务:

 xQueueSend(high_prio_queue, &msg, timeout);
 //will only wait if your high priority task gets blocked before sending
 xQueueReceive(low_prio_queue, &return_msg, portMAX_DELAY);

来自 ISR:

 xQueueSendFromISR(high_prio_queue, &msg, &unblocked);