~~NOTOC~~
===== tn_queue_create() =====
Функция предназначена для создания очереди сообщений. Поле ''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'', значение параметра может быть произвольным.
**Внимание!** Количество элементов очереди должно быть фактически на 1 больше, чем планируется использовать. Т.е. если ''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);
\\
----
[[tnkernel:ref:dqueue:intro#Сервисы управления очередями сообщений|К списку сервисов]]