Схемы
выделения памяти
Функции динамического выделения/осво-
бождения памяти malloc() и free(), входящие
в стандартную библиотеку языка Си, в боль-
шинстве случаев не могут напрямую исполь-
зоваться ядром FreeRTOS, так как их исполь-
зование сопряжено с рядом проблем:
Они не всегда доступны в упрощенных
•
компиляторах для микроконтроллеров.
Их реализация достаточно громоздка, что
•
приводит к дополнительному расходу па-
мяти программ.
Они редко являются реентерабельными
•
[6], то есть одновременный вызов этих
функций из нескольких задач может при-
вести к непредсказуемым результатам.
Время их выполнения не является детер-
•
минированным, то есть от вызова к вызову
оно будет меняться, например, в зависимо-
сти от степени фрагментации кучи.
Они могут усложнить конфигурацию ком-
•
поновщика.
Разные приложения предъявляют раз-
личные требования к объему выделяемой
памяти и временным задержкам при ее вы-
делении. Поэтому единую схему выделения
памяти невозможно применить ко всем плат-
формам, на которые портирована FreeRTOS.
Вот почему реализация алгоритма выделе-
ния памяти не входит в состав ядра, а выде-
лена в платформенно-зависимый код (в ди-
ректорию \Source\portable\MemMang). Это
позволяет реализовать свой собственный
алгоритм выделения памяти для конкретной
платформы.
Когда ядро FreeRTOS запрашивает память
для своих нужд, происходит вызов API-
функции pvPortMalloc(), когда память осво-
бождается — происходит вызов vPortFree().
API-функции pvPortMalloc() и vPortFree()
имеют такие же прототипы, как и стандарт-
ные функции malloc() и free() [7]. Реализация
API-функций pvPortMalloc() и vPortFree()
и представляет собой ту или иную схему вы-
деления памяти.
Следует отметить, что API-функции
Достарыңызбен бөлісу: |