~~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#Сервисы управления пулами блоков памяти|К списку сервисов]]