我是FreeRTOS和STM32的新手。我正在做一个需要将数据从一个任务发送到另一个任务的项目。但是接收任务需要获取有关哪个任务发送了数据的信息,因为我的程序中有多个任务。有没有办法从freertos的另一个任务中的接收数据中获取有关发送任务的信息?
预先感谢
答案 0 :(得分:3)
只需使用FreeRTOS Queue。这将允许您将数据从一个任务发送到另一任务。一个或多个任务可以将数据发布到队列中,另一个任务可以阻止该队列,直到一些数据到达队列中为止。
队列可以包含任何T类型的数据,并且FreeRTOS要求您提供希望存储在队列中的项目数以及单个元素的大小,即sizeof(T)。
为方便起见,您可以简单地使用以下结构在任务之间传递数据。
typedef struct Data {
// Basically can be any plain-old-data.
// Instead you can make a Data a tagged-union of structures as well.
};
typedef struct InterTaskPayload {
int id; // task identifier
Data data;
};
通过打开接收消息,接收任务可以识别发件人(发布消息的任务)并使用数据。