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
некорректное значение параметра 1)
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);



К списку сервисов

1) данный код возврата возможен только в случае использования сервисов с проверкой параметров