gpt4 book ai didi

c - RTOS 中阻止任务间通信

转载 作者:行者123 更新时间:2023-11-30 20:57:53 24 4
gpt4 key购买 nike

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

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

这是我的问题

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

如果有帮助的话我会使用“FreeRTOS”

编辑

我认为我对问题的描述非常糟糕

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

最佳答案

对于您编辑过的问题:

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

高优先级任务:

 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);

关于c - RTOS 中阻止任务间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55883212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com