~~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#Сервисы управления очередями сообщений|К списку сервисов]]