tn_fmem_get_polling()

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

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

Вызов:

TN_RETVAL tn_fmem_get_polling (TN_FMP *fmp, void **p_data);

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

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

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

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


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

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);
if (tn_fmem_get(&my_pool, &block_pt) == TERR_TIMEOUT)
{
    /* в пуле нет свободных блоков памяти */
}



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