~~NOTOC~~
===== 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)
{
/* в пуле нет свободных блоков памяти */
}
\\
----
[[tnkernel:ref:mpool:intro#Сервисы управления пулами блоков памяти|К списку сервисов]]