tn_fmem_create()

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



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

1) данный код возврата возможен только в случае использования сервисов с проверкой параметров