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



Pdf көрінісі
бет13/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   9   10   11   12   13   14   15   16   ...   129
Kurniz

portTickType и portBASE_TYPE:
1. portTickType может быть целым беззна-
ковым 16- или 32-битным. Он определяет 
тип системной переменной, которая ис-
пользуется для подсчета количества си-
стемных квантов, прошедших с момента 
старта планировщика. Таким образом, 
portTickType задает максимальный вре-
менной интервал, который может быть 
отсчитан средствами FreeRTOS. В случае 
16-битного portTickType максимальный 
интервал составляет 65 536 квантов, в слу-
чае 32-битного — 4 294 967 296 квантов. 
Использование 16-битного счетчика кван-
тов оправдано на 8- и 16-битных платфор-
мах, так как позволяет значительно повы-
сить их быстродействие.
2. portBASE_TYPE определяет тип, актив-
но используемый в коде ядра FreeRTOS. 
Операции с типом portBASE должны вы-
полняться как можно более эффективно 
на данном МК, поэтому разрядность типа 
portBASE_TYPE устанавливается идентич-
ной разрядности целевого МК. Например, 
для 8-битных МК это будет char, для 
16-битных — short.
Идентификаторы макроопределений так-
же начинаются с префикса, который опреде-
ляет, в каком файле этот макрос находится 
(табл. 3).
Задачи
Любая программа, которая выполняется 
под управлением FreeRTOS, представляет со-
бой множество отдельных независимых задач. 
Каждая задача выполняется в своем собствен-
ном контексте без случайных зависимостей 
от других задач и ядра FreeRTOS. Только одна 
задача из множества может выполняться 
в один момент времени, и планировщик от-
ветственен, какая именно. Планировщик оста-
навливает и возобновляет выполнение всех 
задач по очереди, чтобы достичь эффекта од-
новременного выполнения нескольких задач 
на одном процессоре. Так как задача «не зна-
ет» об активности планировщика, то он отве-
чает за переключение контекста при смене вы-
полняющейся задачи. Для достижения этого 
каждая задача имеет свой собственный стек. 
При смене задачи ее контекст сохраняется в ее 
собственном стеке, что позволяет восстано-
вить контекст при возобновлении задачи [4].
Как было сказано выше, при грубом при-
ближении задача может находиться в двух со-
стояниях: выполняться и не выполняться. При 
подробном рассмотрении состояние «задача 
не выполняется» подразделяется на несколько 
различных состояний в зависимости от того, 
как она была остановлена (рис. 5).
Подробно рассмотрим состояния зада-
чи в FreeRTOS. Говорят, что задача выпол-
няется (running), если в данный момент 
времени процессор занят ее выполнением. 
Состояние готовности (ready) характеризу-
ет задачу, готовую к выполнению, но не вы-
полняющуюся, так как в данный момент вре-
мени процессор занят выполнением другой 
задачи. Готовые к выполнению задачи (с оди-
наковым приоритетом) по очереди переходят 
в состояние выполнения и пребывают в нем 
в течение одного системного кванта, после 
чего возвращаются в состояние готовности.
Задача находится в блокированном состоя-
нии, если она ожидает наступления временно-
го или внешнего события (event). Например, 
вызвав API-функцию vTaskDelay(), задача 
переведет себя в блокированное состояние 
до тех пор, пока не пройдет временной период 
задержки (delay): это будет временное событие. 
Задача блокирована, если она ожидает собы-
тия, связанного с другими объектами ядра — 
очередями и семафорами: это будет внешнее 
(по отношению к задаче) событие. Нахождение 
задачи в блокированном состоянии ограниче-


Достарыңызбен бөлісу:
1   ...   9   10   11   12   13   14   15   16   ...   129




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

    Басты бет