通过FreeRTOS中的队列发送指向结构的指针

问题描述 投票:1回答:1

我似乎无法弄清楚如何使用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.
    }
}

非常感谢您的帮助。

c pointers queue freertos
1个回答
0
投票

从API看来,xQueueSend通过传递的指针进行复制,因此,如果要在队列上传递指针,则需要传递指向结构的指针的地址。

© www.soinside.com 2019 - 2024. All rights reserved.