FreeRTOS
Мы начнем эту лекцию с введения в операционную систему реального времени FreeRTOS, а затем более подробно рассмотрим её особенности. Следующий шаг - понять содержание и структуру дистрибутива FreeRTOS, который мы будем использовать на протяжении всего курса.
Далее мы объясним различные компоненты FreeRTOS и то, как они работают и взаимодействуют друг с другом, чтобы обеспечить инфраструктуру для создания встраиваемых приложений. После понимания процесса создания приложений мы завершим лекцию демонстрацией запуска примера приложения в симуляторе QEMU.
Ознакомившись с этой лекцией, читатель сможет:
- понимать, что такое FreeRTOS;
- описать особенности FreeRTOS;
- объяснить содержание и структуру дистрибутива FreeRTOS;
- перечислить компоненты FreeRTOS и объяснить, как они работают;
- создавать приложения на базе FreeRTOS;
- запускать пример приложения на QEMU.
Введение во FreeRTOS
Что такое FreeRTOS?
FreeRTOS - одна из наиболее часто используемых операционных систем реального времени (RTOS), распространяемая под открытой лицензией MIT. FreeRTOS - это RTOS, ориентированная на микроконтроллеры и небольшие микропроцессоры. Она включает ядро и растущий набор библиотек IoT, подходящих для использования во всех отраслях промышленности. FreeRTOS создана с акцентом на надежность и простоту использования.
В следующем разделе мы рассмотрим общие технические требования, требования к обслуживанию и эффективности при создании встраиваемых приложений с FreeRTOS. Затем мы определим некоторые стандартные возможности FreeRTOS.
Требования приложений
FreeRTOS позволяет пользователям использовать различные преимущества ядра реального времени по сравнению с созданием исходного встраиваемого приложения. Эти возможности являются типичными требованиями для большинства современных встраиваемых приложений, поскольку одна система может быть приспособлена как к простым, так и к сложным приложениям и должна обеспечивать возможность повторного использования системы в различных компонентах приложения.
Технические требования
Модульность
Модульность является ключевым требованием к программному обеспечению встраиваемых систем, поскольку она позволяет поддерживать масштабируемость программного обеспечения (как в сторону увеличения, так и уменьшения) без ущерба для возможностей и функций приложения.
Абстрагирование информации о времени
Требования системы к синхронизации должны быть поняты и абстрагированы, чтобы их можно было встроить в управляющую программную среду.
Управление питанием
Управление питанием в современных встраиваемых системах является еще одним ключевым фактором. Поскольку все больше и больше приложений требуют работы от батарей, понимание требований к питанию и разработка правильного подхода к управлению питанием важны для создания эффективной встраиваемой системы.
Гибкое управление прерываниями
Следующий шаг - управление различными прерываниями, которые будут возникать в системе. Требования к прерываниям основаны на входах, которые являются частью системы. Они должны быть хорошо понятны, чтобы создавать значимые выходные данные на основе входных.
Требования к смешанной обработке
Встраиваемые системы основаны на нескольких типах входных данных. Некоторые из них являются чисто цифровыми по своей природе, но есть и аналоговые входные данные, которые необходимо зафиксировать, обработать и понять, чтобы сгенерировать требуемый отклик на эти входные данные. Встраиваемая система должна поддерживать смешанную обработку, чтобы она могла обрабатывать различные типы входных данных.
Управление временем простоя системы
Последний вопрос заключается в том, как и когда система может потенциально простаивать, и что следует делать в это время в системе.
Требования к обслуживанию и эффективности
Тестируемость
Одним из ключевых аспектов при разработке системы является возможность её обслуживания и быстрого и эффективного устранения любых поломок. Для обеспечения этого требования важно иметь возможность тестирования на любые потенциальные сбои во время разработки системы, а также воспроизведения любых сбоев, выявленных во время эксплуатации системы. Поэтому, когда система разрабатывается, тестируемость должна быть встроенной частью дизайна, включая определение того, что должно быть протестировано и как это должно быть протестировано.
Удобство обслуживания и расширяемость
Система должна быть разработана таким образом, чтобы её можно было легко обслуживать как в полевых условиях, так и вне их, как с точки зрения аппаратного, так и программного обеспечения. Расширяемость также является ключевым фактором; система должна быть разработана таким образом, чтобы упростить добавление функций после завершения первоначальной версии системы.
Разработка приложений в команде
Сложные приложения часто разрабатываются командами, и дизайн системы должен поддерживать возможность делать это быстро и эффективно. По этой причине система должна быть разработана по модульному принципу, чтобы несколько человек и даже несколько команд могли участвовать в разработке компонентов и модулей приложения без негативного влияния на существующие компоненты.
Повторное использование кода
При необходимости код, разработанный для одной системы, должен быть доступен для повторного использования в других системах с аналогичными требованиями к функциональности. Проектирование системы по модульному принципу будет поддерживать это требование и повысит эффективность создания новых приложений.
Эффективность кода
Наконец, код должен быть разработан таким образом, чтобы эффективно использовать память, и разработчик должен помнить об ограничениях производительности небольших контроллеров, на которых строятся встраиваемые системы.
Особенности FreeRTOS
Ниже перечислены стандартные возможности FreeRTOS (взятые из справочного руководства FreeRTOS):
- вытесняющие или совместные операции;
- очень гибкое назначение приоритетов задач;
- гибкий, быстрый и легкий механизм оповещения о задачах;
- очереди;
- бинарные семафоры;
- счётные семафоры;
- мьютексы;
- рекурсивные мьютексы;
- программные таймеры;
- группы событий;
- функции перехвата, вызываемые прерыванием тика (tick hook functions);
- функции перехвата, вызываемые задачей ожидания (idle hook functions);
- проверка переполнения стека;
- запись трассировки;
- сбор статистики выполнения задач;
- дополнительное коммерческое лицензирование и поддержка;
- модель полной вложенности прерываний (full interrupt nesting model) для некоторых архитектур;
- таймер без прерываний (прерывания таймера не происходят через регулярные промежутки времени, а доставляются только по мере необходимости) для приложений с чрезвычайно низким энергопотреблением;
- программно управляемый стек прерываний, когда это необходимо (это может помочь сэкономить оперативную память).
Содержимое и структура дистрибутива FreeRTOS
FreeRTOS распространяется через Git-репозиторий в виде одного сжатого zip-файла со всем исходным кодом, поэтому пользователи могут свободно использовать его в своих приложениях, а также при необходимости вносить в код любые изменения. Дистрибутив также содержит демонстрационные приложения и демоверсии портов (ports) для различных контроллеров, поддерживаемых FreeRTOS. Эти демоверсии помогают пользователям FreeRTOS быстро адаптировать её к своим требованиям. Многие поставщики микроконтроллеров поставляют RTOS как часть своего набора инструментов, что еще больше облегчает разработку с FreeRTOS.
Структура каталогов дистрибутива FreeRTOS
Последнюю версию FreeRTOS можно загрузить с веб-сайта FreeRTOS. FreeRTOS также размещен на GitHub, и пользователи могут получить последнюю версию исходного кода из каталога Git.
-
FreeRTOS - содержит файлы, относящиеся к FreeRTOS
- Demo - содержит демоверсии портов
- License - содержит лицензионные файлы
- Source - содержит исходный код FreeRTOS
- Test - содержит тесты
-
FreeRTOS-Plus - содержит файлы FreeRTOS и расширенные библиотеки приложений
- Demo - содержит демонстрационные версии приложений FreeRTOS-Plus
- Source - содержит исходный код библиотек FreeRTOS-Plus
- Test - содержит тесты приложений FreeRTOS-Plus
- ThirdParty - содержит сторонние контрибуции (third party contributions)
Содержимое дистрибутива
Ключевая часть ядра (core of the kernel) FreeRTOS содержится в трёх файлах, которые находятся в подкаталоге FreeRTOS\FreeRTOS\Source. Это файлы tasks.c, queue.c и lists.c. Для простых приложений этих трёх файлов достаточно. Папка Source содержит подпапку include, в которой находятся файлы include, необходимые для установки.
Существуют и другие файлы, которые могут понадобиться в зависимости от специфической функциональности конкретного приложения.
Каталог Source также содержит подкаталог portable, который содержит подкаталоги с файлами, специфичными для определенных компиляторов и программных инструментов. Код, находящийся в этих папках, может быть использован в качестве отправной точки для создания портов в соответствии с требованиями пользователя.
Папка Demo содержит примеры приложений, портированных на конкретные контроллеры. Пользователи, планирующие использовать контроллер определенного типа, могут использовать один или несколько примеров, представленных в этой папке, в качестве основы для создания приложений для своего контроллера.