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



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


Разделение процессорного времени между 
задачами в учебной программе № 2 показа-
но на рис. 3, а результат ее выполнения — 
на рис. 4.
Задача 2 существует в системе на протя-
жении короткого промежутка времени, пока 
она выполняется. Таким образом, используя 
рис. 1. Разделение процессорного времени между задачами в учебной программе № 1
рис. 2. Результат выполнения учебной программы № 1


99
КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 5 '2011
www.kite.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 байт.


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




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

    Басты бет