Lazuli-это превентивные многозадачные RTO (операционная система/ядра в реальном времени), нацеленная на микроконтроллеры AVR. Он позволяет программировать и запускать несколько независимых задач в контексте в реальном времени на микроконтроллерах AVR. В своей базовой конфигурации Lazuli RTOS имеет низкую площадь памяти (<4 килобита ПЗУ, <200 байт статической оперативной памяти). Lazuli RTOS можно использовать для разработки встроенных приложений или прошивок, которые имеют сильные ограничения в реальном времени или требуют многозадачности на минимальном оборудовании.
MCU AVR широко используются в встроенных, промышленных устройствах и приложениях, а также известно, что они используются на досках Arduino. Приложения, написанные на вершине Lazuli RTOS, подходят для промышленных систем, а также для любителей.
Lazuli RTOS распространяется в форме исходного кода, будет создан и статически связан с вашим собственным окончательным исполняемым файлом. Это позволяет конфигурации ядра и пользоваться оптимизацией компиляторов.
Проект размещен на GitHub по адресу https://github.com/randruc/lazuli
На данный момент ядро Lazuli предоставляет следующие функции:
SCHED_RR )printf()Проект Lazuli имеет очень конкретные цели, которые делают его уникальным. Это:
Lazuli RTOS в настоящее время работает на MCU ATMEGA328P (который используется на Arduino), но он должен быть легко переносимым на другие платформы AVR.
Хотя Lazuli, как правило, достигает высокого уровня качества и стабильности кода, он не соответствует критически важным системам, поскольку он не сертифицирован для этих конкретных применений. Для получения дополнительной информации о том, что такое критические системы, пожалуйста, прочитайте https://en.wikipedia.org/wiki/safety-critical_system
Документация для проекта может быть прочитана по адресу https://lazuli.readthedocs.io/en/latest/
Документацию API можно прочитать по адресу https://randruc.github.io/lazuli/doxygen/latest/
Два разных инструмента используются для документирования проекта:
sphinx для генерации пользовательской документации из файлов, написанных в реструктурированном тексту. Источники в DOC/ Directory.doxygen для генерации документации API из Code Comments. Примеры программ, которые используют Lazuli RTOS, можно найти в примере каталога-программ/.
Здесь показан классический мигающий светодиод. Hello World of Embedded Systems. Он сильно прокомментирован, чтобы служить введением в API Lazuli.
#include <stdint.h>
#include <Lazuli/lazuli.h>
#include <Lazuli/sys/arch/AVR/registers.h>
/*
* This is the Blink task. It simply blinks the built-in LED on Arduino
* platforms.
* This task is scheduled in real-time. It is configured to blink with an exact
* period of 1 second.
*/
void
Blink ()
{
/* On the Arduino, this pin corresponds to the built-in LED */
const uint8_t ledPin = 0x20 ;
DDRB |= ledPin ; /* Set the pin to be an output pin */
PORTB &= ~ ledPin ; /* The initial state of the pin will be 0 */
/* Now this is the main loop of this task */
for (;;) {
/* Wait for the next real-time activation of the task */
Lz_Task_WaitActivation ();
PINB |= ledPin ; /* Toggle the pin */
}
}
void
main ( void )
{
/* Allocate a configuration object on the stack */
Lz_TaskConfiguration configuration ;
/* Initialize the configuration object with default values */
Lz_TaskConfiguration_Init ( & configuration );
/* Configure the Blink task to be cyclic real-time (RMS scheduling) */
configuration . schedulingPolicy = CYCLIC_RT ;
/* The Blink task has a period of 25 time slices. */
/* Our platform has a 16 MHz clock, and the system clock resolution */
/* frequency is configured to 50 Hz. This is an arbitrary value that */
/* can be configured by the user. */
/* With a system clock resolution frequency set to 50 Hz, the system */
/* clock period is then 1 / 50 = 0.02 second. */
/* So 0.02 * 25 = 0.5 second, which corresponds to the half period */
/* of our task. */
configuration . period = 25 ;
/* The Blink task has a completion of 10 time slices (arbitrary here */
/* because our task does almost nothing). */
configuration . completion = 10 ;
/* Register the Blink task to run with the parameters above */
Lz_RegisterTask ( Blink , & configuration );
/* Run the system */
Lz_Run ();
}Lazuli не зависит от любого другого существующего кода. Вы можете просто написать свой собственный код, создать систему, загрузить ее в Target MCU, и он просто работает!
Для развития с Lazuli настоятельно рекомендуется использовать изображение Lazuli Docker. Вы получите выгоду от полной среды разработки, предоставленной всеми необходимыми инструментами.
Lazuli RTOS поставляется с полной и контейнерной средой разработки, предоставленной в качестве изображения Docker. Это изображение включает в себя все инструменты, которые необходимы для создания собственного проекта с использованием Lazuli RTOS. Он включает в себя компиляторы и линкеры, инструменты сборки, бинарные утилиты, страницы управления и т. Д.
Официальное изображение Lazuli Docker можно вытащить из https://hub.docker.com/r/randruc/lazuli
Подробнее о том, как настроить среду разработки в официальной документации: https://lazuli.readthedocs.io/en/latest/set_up_environment.html
Запуск контейнера среды развития Lazuli
Управление страницами в контейнере среды развития Lazuli
Ядро Lazuli полностью настраивается. Система сборки зависит от Cmake. С помощью ccmake конфигурация также может быть выполнена интерактивно в консоли.
Узнайте больше в официальной документации: https://lazuli.readthedocs.io/en/latest/developing_your_project.html
Конфигурация с использованием ccmake
Строительство с использованием Cmake
На MCUS AVR можно использовать avrdude для загрузки окончательного двоичного файла на целевую машину. Script Scripts/avr/upload.sh можно использовать для этого. Он принимает шестнадцатеричный файл в качестве параметра.
Взаимодействие с последовательной линией может быть сделано с помощью screen GNU. Script Scripts/Serial.SH можно использовать для взаимодействия с USB -последовательной линией.
Вкладка Issues (https://github.com/randruc/lazuli/issues) из проекта должна использоваться для сообщения об устранении неполадок или для внесения предложений.
Взносы приветствуются!
Проект размещен на github (по адресу https://github.com/randruc/lazuli), а Github используется для управления всем этим: запрос на вытягивание, проблемы и т. Д. Неважно, хотите ли вы исправить ошибку, реализовать или предложить новые функции или исправить опечатку/ошибку орфографии: любой вид вклада приветствуется!
Подробнее о том, как внести свой вклад в официальную документацию: https://lazuli.readthedocs.io/en/latest/kernel/contributing.html
Вы также можете использовать вкладку Issues проекта», чтобы задать вопросы, предложить функции без кодирования или всего, что вы хотите!
Весь проект распространяется только в рамках общей публичной лицензии GNU V3.0. Полная копия этой лицензии доступна в файловых лицензиях/gpl-3.0-only.txt.