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


Мы продолжаем изучение FreeRTOS — операционной системы для микро-



Pdf көрінісі
бет46/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   42   43   44   45   46   47   48   49   ...   129
Kurniz

Мы продолжаем изучение FreeRTOS — операционной системы для микро-
контроллеров. В пятой части статьи основное внимание сфокусировано 
на очередях — безопасном механизме взаимодействия задач друг с дру-
гом. Будут показаны опасности организации взаимодействия между зада-
чами «напрямую» и обосновано применение очередей, а также рассказано 
об основных принципах, заложенных в функционирование очередей. 
Читатель узнает о том, как создать очередь, как записать данные в очередь 
и прочитать их оттуда. Будут освещены вопросы целесообразного выбора 
типа данных, хранящихся в очереди, и назначения приоритетов задачам, 
которые записывают и считывают данные из очереди.
FreeRTOS — 
операционная система 
для микроконтроллеров
Продолжение. Начало в № 2`2011
Рис. 1. Результат выполнения учебной программы № 1


99
КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 6 '2011
www.kit3e.ru
компоненты
микроконтроллеры
пасным в многозадачной среде (thread safe). 
То есть при использовании очередей авто-
матически решается проблема совместного 
доступа нескольких задач к одному аппарат-
ному ресурсу, роль которого в данном случае 
играет память.
Характеристики очередей
Хранение информации в очереди
Информация хранится в очереди в виде 
элементов (items) — блоков памяти фик-
сированного размера. В качестве элемента 
очереди может выступать любая переменная 
языка Си. В случае если это переменная типа 
char, размер блока будет равен 1 байту, если 
это структура или массив, размер блока бу-
дет равен, соответственно, размеру структу-
ры или массива.
Элементы очереди в контексте обмена ин-
формацией между задачами будем называть 
сообщениями.
Запись элемента в очередь приводит к со-
зданию побайтовой копии элемента в оче-
реди. Побайтовое копирование происходит 
и при чтении элемента из очереди.
Очередь может хранить в себе конечное 
число элементов фиксированного размера. 
Максимальное число элементов, которое 
может хранить очередь, называется разме-
ром очереди. Как размер элемента, так и раз-
мер очереди задаются при создании очереди 
и остаются неизменными до ее удаления.
Важно отметить, что память выделяется 
сразу под все элементы очереди, то есть пу-
стая и заполненная очередь не отличаются 
друг от друга по объему занимаемой памяти. 
При записи элементов в очередь динамиче-
ского выделения памяти не происходит.
Очередь функционирует по принципу 
«первым вошел — первым вышел» (First In 
First Out, FIFO), то есть элемент, который 
раньше остальных был помещен в очередь 
(в конец очереди), будет и прочитан раньше 
остальных (рис. 2). Обычно элементы запи-
сываются в конец («хвост») очереди и считы-
ваются с начала («головы») очереди.
На рис. 2а показаны очередь длиной 5 эле-
ментов для хранения целочисленных пере-
менных, Задача 1, которая будет записывать 
элементы в очередь, и Задача 2, которая будет 
считывать элементы из очереди. В исходном 
состоянии очередь не содержит ни одного 
элемента, то есть пуста.
На рис. 2б Задача 1 записывает число «15» 
в конец очереди. Так как теперь очередь со-
держит 1 элемент, то он является одновре-
менно и началом, и концом очереди.
На рис. 2в Задача 1 записывает еще один 
элемент («69») в конец очереди. Теперь оче-
редь содержит 2 элемента, причем элемент 
«15» находится в начале очереди, а элемент 
«69» — в конце.
На рис. 2г Задача 2 считывает элемент, на-
ходящийся в начале очереди, то есть элемент 
«15». Таким образом, выполняется принцип 
«первым вошел — первым вышел», так как 
элемент «15» первым записан в очередь и, со-
ответственно, первым из нее считан. Теперь 
очередь снова содержит один элемент («69») 
в начале очереди, который и будет считан 
при следующем чтении из очереди Задачей 2 
(рис. 2д).
Следует отметить, что на рис. 2 показано 
использование API-функций для работы 
с очередями в упрощенном виде. Корректное 
их применение будет описано ниже.
Также имеется возможность помещать 
элементы в начало очереди, тогда очередь 
превращается в стек, работающий по прин-
ципу «последним вошел — первым вышел» 
(Last In First Out, LIFO).


Достарыңызбен бөлісу:
1   ...   42   43   44   45   46   47   48   49   ...   129




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

    Басты бет