В примере решения стека UDP/IP, здесь, есть предлагаемое решение для блокировки в одной очереди событий.
Каким будет решение для защиты данных, на которые указывает указатель, до тех пор, пока они не будут обработаны задачей, ожидающей очереди.
Скажем, например, что очередь заполняется из ISR. ISR не должен писать в *pvData
, если он не был обработан соответствующей задачей. Но поскольку источников событий может быть несколько, очередь, вероятно, должна быть длиннее одного элемента. Должна ли быть создана структура:
typedef struct IP_TASK_COMMANDS
{
eIPEvent_t eEventType;
SemaphoreHandle_t data_read;
void *pvData;
} xIPStackEvent_t;
С семафором, взятым в ISR и заданным в задаче, которая обрабатывает данные, когда с ними покончено.