Available Languages?:

tn_fmem_get()

Функция предназначена для получения блока памяти из пула. Указатель на получаемый блок передается в сервис в качестве параметра p_data. Содержимое блока памяти после получения его задачей не определено.

Если в пуле есть свободные блоки, то один из них выделяется для задачи, и сервис возвращает код TERR_NO_ERR. Если свободные блоки в пуле отсутствуют, задача переводится в состояние ожидания и ставится в конец очереди задач, ожидающих освобождение блока памяти.

Параметр timeout задает время ожидания блока памяти в системных тиках. Если в течении этого времени блок не будет выделен для задачи, она удаляется из очереди ожидающих блок и переводится в состояние готовых к выполнению. Сервис возвращает значение TERR_TIMEOUT.

Вызов:

TN_RETVAL tn_fmem_get (TN_FMP *fmp, void **p_data, TN_TIMEOUT timeout);

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

В контексте задачи

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

fmp
указатель на пул из которого будет выделяться блок памяти
p_data
указатель на указатель, который после успешного выполнения сервиса будет содержать адрес выделенного блока
timeout
таймаут в системных тиках, в течении которого задача будет ожидать освобождения блока


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

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


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

#define BLOCK_SIZE    4
 
TN_FMP   my_pool;
TN_UWORD my_pool_mem[NUM_BLOCKS * (MAKE_ALIG(BLOCK_SIZE) / sizeof(TN_UWORD))];
 
TN_UWORD *block_pt;
 
tn_fmem_create (&my_pool, my_pool_mem, BLOCK_SIZE, NUM_BLOCKS);
tn_fmem_get (&my_pool, &block_pt, TN_WAIT_INFINITE);



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

1) данный код возврата возможен только в случае использования сервисов с проверкой параметров
 
tnkernel/ref/mpool/tn_fmem_get.txt · Последние изменения: 21.07.2008 01:00 От admin
 
Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki