Функция предназначена для получения блока памяти из пула. Указатель на получаемый блок передается в сервис в качестве параметра 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
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);