Вступить в клуб →
лёгкаявопросFreeRTOS: задачи, очереди и синхронизация

Задача-получатель вынимает из очереди строки, но все они одинаковые

QueueHandle_t q = xQueueCreate(10, sizeof(char *));

void producer(void *arg) {
    char line[32];
    for (int n = 0;; n++) {
        snprintf(line, sizeof line, "sample %d", n);
        char *p = line;
        xQueueSend(q, &p, 0);
    }
}

Получатель медленнее отправителя. Когда он разбирает очередь, все элементы указывают на одну и ту же, последнюю строку. В чём ошибка?

  • В очередь копируется указатель, а не сама строка
  • Очередь переполнилась и затирает старые элементы
  • xQueueSend с таймаутом 0 не копирует данные
  • snprintf нельзя вызывать внутри задачи FreeRTOS

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела