Компоненты и технологии • №2 '2011 компоненты



Pdf көрінісі
бет35/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   31   32   33   34   35   36   37   38   ...   129
Kurniz

Схемы
выделения памяти
Функции динамического выделения/осво-
бождения памяти malloc() и free(), входящие 
в стандартную библиотеку языка Си, в боль-
шинстве случаев не могут напрямую исполь-
зоваться ядром FreeRTOS, так как их исполь-
зование сопряжено с рядом проблем:
Они не всегда доступны в упрощенных 

компиляторах для микроконтроллеров.
Их реализация достаточно громоздка, что 

приводит к дополнительному расходу па-
мяти программ.
Они редко являются реентерабельными 

[6], то есть одновременный вызов этих 
функций из нескольких задач может при-
вести к непредсказуемым результатам.
Время их выполнения не является детер-

минированным, то есть от вызова к вызову 
оно будет меняться, например, в зависимо-
сти от степени фрагментации кучи.
Они могут усложнить конфигурацию ком-

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


Достарыңызбен бөлісу:
1   ...   31   32   33   34   35   36   37   38   ...   129




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет