Available Languages?:

tn_queue_ireceive()

Функция предназначена для приема сообщения через очередь сообщений dque в прерывании. Принятое сообщение (точнее говоря адрес сообщения) сохраняется по указателю data_ptr.

Если буфер очереди сообщений не пуст, функция передает первое сообщение в буфере по указателю data_ptr. Таким образом, после выхода из сервиса data_ptr будет указывать на сообщение, которое было отправлено через очередь. Если есть задача (задачи) ожидающая освобождения буфера для того чтобы отправить сообщение - эта задача будет переведена в состояние готовых к выполнению, а ее сообщение будет положено в очередь.

Если буфер очереди сообщений пуст, функция возвращает код ошибки TERR_TIMEOUT.

Вызов:

TN_RETVAL tn_queue_ireceive (TN_DQUE *dque, void **data_ptr);

Разрешен вызов:

В обработчике прерывания

Параметры функции:

dque
указатель на объект очереди сообщений.
data_ptr
указатель на указатель, в который сохраняется адрес сообщения


Возвращаемые значения:

TERR_WRONG_PARAM
некорректное значение параметра (замечание: данный код возврата возможен только в случае использования сервисов с проверкой параметров)
TERR_NOEXS
попытка обращения к объекту, который не является очередью (замечание: данный код возврата возможен только в случае использования сервисов с проверкой параметров)
TERR_WCONTEXT
вызов сервиса в пользовательской критической секции или в контексте задачи
TERR_TIMEOUT
очередь сообщений пуста
TERR_NO_ERR
успешное выполнение


Пример вызова:

extern TN_DQUE  queue TN_DATA;
 
tn_sys_interrupt (_T2Interrupt)        /* прерывание от таймера */
{
    MY_MSG   message;
 
    IFS0bits.T2IF = 0;                 /* сброс флага прерывания */
 
    if (tn_queue_ireceive(&queue, &message) == TERR_NO_ERR)
    {
        if (message->a)
        {
            /* ... */
        }
    }
}



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

 
tnkernel/ref/dqueue/tn_queue_ireceive.txt · Последние изменения: 06.05.2008 17:39 От admin
 
Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki