Функция предназначена для создания пула блоков памяти фиксированного размера. Поле id_fmp
структуры fmp
должно быть равно нулю до момента создания пула. Таким образом уже созданные пулы защищаются от повторного создания.
Память для самого пула так же должна быть выделена до вызова сервиса. Память может быть выделена статически или динамически, указатель на память передается в качестве параметра start_addr
.
Для лучшего использования памяти, желательно чтобы размер блока (block_size
) был кратным машинному слову: для PIC24/dsPIC это 2, 4, 6 …. байт. Для удобного выделения памяти (автоматического выравнивания) можно использовать макрос MAKE_ALIG
:
TN_FMP my_pool; TN_UWORD my_pool_mem[NUM_BLOCKS * (MAKE_ALIG(BLOCK_SIZE) / sizeof(TN_UWORD))]; tn_fmem_create (&my_pool, my_pool_mem, BLOCK_SIZE, NUM_BLOCKS);
Вызов:
TN_RETVAL tn_fmem_create (TN_FMP *fmp, void *start_addr, TN_UWORD block_size, TN_UWORD num_blocks );
Разрешен вызов:
В контексте задачи, в обработчике прерывания, в пользовательской критической секции
Параметры функции:
fmp
TN_FMP
. Структура должна быть создана до момента вызова функции, статически или динамическиstart_addr
block_size * num_blocks
байтblock_size
num_blocks
Возвращаемые значения:
TERR_WRONG_PARAM
TERR_EXS
TERR_NO_ERR
Пример вызова:
TN_FMP my_pool; TN_UWORD my_pool_mem[NUM_BLOCKS * (MAKE_ALIG(BLOCK_SIZE) / sizeof(TN_UWORD))]; tn_fmem_create (&my_pool, my_pool_mem, BLOCK_SIZE, NUM_BLOCKS);