Задача-получатель вынимает из очереди строки, но все они одинаковые
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
