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


рис. 3. Разделение процессорного времени между задачами в учебной программе № 2 рис. 4



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

рис. 3. Разделение процессорного времени между задачами в учебной программе № 2
рис. 4. Результат выполнения учебной программы № 2


100
КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 5 '2011
компоненты
микроконтроллеры
Вызов pvPortMalloc() приводит к вы-
делению блока памяти для размещения 
структуры tskTCB и стека задачи из кучи 
FreeRTOS. Выделяемые блоки памяти рас-
полагаются последовательно друг за другом 
(рис. 5). Куча FreeRTOS представляет со-
бой массив байт, определенный как обыч-
ная глобальная переменная. Размер этого 
массива в байтах задается макроопределе-
нием conf igTOTAL_HEAP_SIZE в файле 
FreeRTOSConfig.h.
Разработчик должен учесть, что объем до-
ступной памяти для размещения перемен-
ных, связанных с решением прикладных за-
дач, уменьшается на размер кучи FreeRTOS. 
Поэтому размер кучи FreeRTOS следует за-
давать минимальным, но достаточным для 
размещения всех объектов ядра. Далее будет 
показано, как получить объем оставшейся 
свободной памяти в куче FreeRTOS на этапе 
выполнения программы.
На рис. 5а изображена куча FreeRTOS в мо-
мент, когда ни одна задача еще не создана. 
На рис. 5б и в отображено размещение бло-
ков памяти задач при их последовательном 
создании и, соответственно, уменьшение 
объема свободной памяти кучи.
Очевидно, что за счет того, что задачи 
не уничтожаются, эффект фрагментации па-
мяти кучи исключен.
Схема выделения памяти
heap_2.c
Как и в схеме heap_1.c, память для за-
дач выделяется из кучи FreeRTOS размером 
configTOTAL_HEAP_SIZE байт. Однако схе-
ма heap_2.c в отличие от heap_1.c позволяет 
уничтожать задачи после запуска планиров-
щика, соответственно, она содержит реализа-
цию API-функции vPortFree().
Так как задачи могут уничтожаться, то бло-
ки памяти, которые они использовали, будут 
освобождаться, следовательно, в куче может 
находиться несколько отдельных участков 
свободной памяти (фрагментация). Для на-
хождения подходящего участка свободной 
памяти, в который с помощью API-функции 


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




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

    Басты бет