99
КОМПОНЕНТЫ И ТЕХНОЛОГИИ •
№ 5 '2011
www.kite.ru
компоненты
микроконтроллеры
динамическое создание/уничтожение задач
в реальной программе, удастся достичь эко-
номии памяти, так как память не задейству-
ется под потребности задачи, пока полезные
действия этой задачи не нужны.
Выделение памяти
при создании задачи
Каждый раз при создании задачи (равно
как и при создании других объектов ядра —
очередей и семафоров) ядро FreeRTOS вы-
деляет задаче блок памяти из системной
кучи — области памяти, доступной для ди-
намического размещения в ней переменных.
Блок памяти, который выделяется задаче,
складывается из:
1. Стека задачи. Задается как параметр API-
функции
xTaskCreate() при создании за-
дачи.
2. Блока управления задачей (Task Control
Block), который представлен структурой
tskTCB и содержит служебную информа-
цию, используемую ядром. Размер струк-
туры tskTCB зависит от:
–
настроек FreeRTOS;
–
платформы,
на которой она
выполняется;
– используемого компилятора.
Размер блока памяти, который выделяет-
ся задаче, на этапе выполнения программы
полностью определяется размером отводи-
мого задаче стека, так как размер структуры
tskTCB жестко задан на этапе компиляции
программы и остается неизменным во время
ее выполнения.
Получить
точный размер структуры
tskTCB для конкретных условий можно, на-
пример, добавив в текст программы следую-
щую инструкцию:
printf(“%d”, sizeof(tskTCB));
И далее следует прочесть ее размер с какого-
либо устройства вывода (в данном случае —
с дисплея). При этом нужно учесть, что, так
как структура tskTCB используется ядром
в собственных целях, то доступа к этой струк-
туре из текста прикладных исходных файлов
(main.c в том числе) изначально нет. Чтобы
получить доступ к структуре tskTCB, необхо-
димо включить в исходный файл строку:
#include “..\\tasks.c”
Для учебных программ, приводимых в этой
статье и ранее [1], размер структуры tskTCB
составляет 70 байт.
Достарыңызбен бөлісу: