Функция предназначена для создания очереди сообщений. Поле id_dque
очереди dque
должно быть равно нулю до момента создания, таким образом уже созданные очереди защищаются от повторного создания.
Память для управляющей структуры dque
и буфера сообщений должна быть выделена до момента создания очереди. Память может быть выделена на этапе компиляции (объявление глобальной переменной типа TN_DQUE
для управляющей структуры и массива с элементами типа *void
для буфера), либо динамически, если пользовательское приложение использует менеджер памяти. В последнем случае размер буфера сообщений должен быть равен (в байтах) (sizeof(*void) · num_entries)
Вызов:
TN_RETVAL tn_queue_create (TN_DQUE *dque, void **data_fifo, TN_UWORD num_entries );
Разрешен вызов:
В контексте задачи, в пользовательской критической секции, в прерывании
Параметры функции:
dque
dque
типа TN_DQUE
должна быть создана до момента вызова функции, статически или динамическиdata_fifo
*void
. Параметр может быть равен 0 или TN_NULL
- в этом случае сервисы будут возвращать код ошибки TERR_OUT_OF_MEM
.num_entries
data_fifo
. Если указатель data_fifo
равен 0 или TN_NULL
, значение параметра может быть произвольным.num_entries = 2
, то в очереди будет хранится один элемент и при попытке передачи второго сервис вернет ошибку. Не следует использовать очередь с одним элементом.
Возвращаемые значения:
TERR_WRONG_PARAM
TERR_EXS
TERR_NO_ERR
Пример вызова:
#define QUEUE_SIZE 8 TN_DQUE queue TN_DATA; /* объект типа очередь */ void *queue_fifo[QUEUE_SIZE] TN_DATA; /* буфер сообщений */ tn_queue_create(&queue, queue_fifo, QUEUE_SIZE);