我似乎无法弄清楚如何使用FreeRTOS中的队列向结构发送指针。我已经尽力想了,但是我总是得到一个指向内存随机区域的指针。
我正在尝试将指向按钮结构的指针发送到另一个任务,然后将其显示在屏幕上。我尝试发送整个对象,但它确实有效,但是由于结构中有很多数据(两个图标的数据),所以我真的不想这样做。
该代码正在Atmel SAME70 Xplained中运行。
这是我正在处理的代码的简单版本:
typedef struct {
uint32_t width;
uint32_t height;
uint32_t x;
uint32_t y;
uint8_t status;
void (*callback)(t_but);
tImage iconOn;
tImage iconOff;
} t_but;
void task_lcd(void) {
xQueueButtons = xQueueCreate(6, sizeof(struct t_but *));
t_but *button;
configure_lcd();
draw_screen();
while (1) {
if (xQueueReceive(xQueueButtons, &(button), (TickType_t)500 / portTICK_PERIOD_MS)) {
// This always prints some random numbers.
printf("Button X: %" PRIu32 "\r\n", button->x);
}
}
}
void task_buttons(void) {
t_but butPlay = {.width = 64,
.height = 64,
.x = 60,
.y = 445,
.status = 0,
.callback = &ButPlayCallback,
.iconOn = play_red,
.iconOff = play_black};
xQueueSend(xQueueButtons, &butPlay, 0);
while (1) {
// Some other code.
}
}
非常感谢您的帮助。
从API看来,xQueueSend通过传递的指针进行复制,因此,如果要在队列上传递指针,则需要传递指向结构的指针的地址。