Lazuli es un RTOS multitarea preventivo (sistema operativo/kernel en tiempo real), dirigido a los microcontroladores AVR. Permite programar y ejecutar múltiples tareas independientes en un contexto en tiempo real en microcontroladores AVR. En su configuración básica, Lazuli RTOS tiene una huella de memoria baja (<4 kilobytes de ROM, <200 bytes de RAM estática). Los RTO Lazuli se pueden utilizar para desarrollar aplicaciones integradas o firmwares que tengan fuertes restricciones en tiempo real o la multitarea de demanda, en hardware mínimo.
AVR MCU se usa ampliamente en dispositivos y aplicaciones industriales integrados, y también se sabe que se utilizan en las tablas Arduino. Las aplicaciones escritas en la parte superior de los sistemas industriales de los RTO Lazuli, así como las creaciones de los aficionados.
Lazuli RTOS se distribuye en su formulario de código fuente, para construir y vincularse estáticamente con su propio ejecutable final. Esto permite que el núcleo esté configurado estáticamente y se beneficie de las optimizaciones del compilador.
El proyecto está alojado en GitHub en https://github.com/randruc/lazuli
Por ahora, el núcleo Lazuli proporciona las siguientes funcionalidades:
SCHED_RR )printf()El proyecto Lazuli tiene objetivos muy específicos que lo hacen único. Estos son:
El RTOS Lazuli actualmente se ejecuta en el MCU ATMEGA328P (que se usa en el Arduino) pero debe ser fácilmente portátil a otras plataformas AVR.
Aunque Lazuli tiende a alcanzar un alto nivel de calidad y estabilidad del código, no se adapta a los sistemas de seguridad crítica, ya que no está certificado para esos usos específicos. Para obtener más información sobre cuáles son los sistemas de seguridad-crítica, lea https://en.wikipedia.org/wiki/safety-critical_system
La documentación para el proyecto se puede leer en https://lazuli.readthedocs.io/en/latest/
La documentación de la API se puede leer en https://randruc.github.io/lazuli/doxygen/latest/
Se utilizan dos herramientas diferentes para documentar el proyecto:
sphinx para generar documentación del usuario a partir de archivos escritos en reestructuredText. Las fuentes están en el DOC/ Directorio.doxygen para generar documentación de API a partir de comentarios del código C. Los programas de ejemplo que usan los RTO Lazuli se pueden encontrar en el directorio de programas de ejemplo/.
Aquí se muestra el clásico LED parpadeante. El Hello World de los sistemas integrados. Se comenta fuertemente para servir como una introducción a la API de 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 no tiene dependencia de ningún otro código existente. ¡Simplemente puede escribir su propio código, construir el sistema, subirlo al MCU de destino y simplemente se ejecuta!
Para desarrollarse con Lazuli, se recomienda usar la imagen de Docker Lazuli. Se beneficiará de un entorno de desarrollo completo, proporcionado con todas las herramientas necesarias.
Lazuli RTOS viene con un entorno de desarrollo completo y contenedorizado proporcionado como una imagen de Docker. Esta imagen incluye todas las herramientas necesarias para construir su propio proyecto utilizando los RTO Lazuli. Incluye compiladores y enlazadores, herramientas de compilación, servicios binarios, páginas de hombres, etc.
La imagen oficial de Lazuli Docker se puede extraer de https://hub.docker.com/r/randruc/lazuli
Lea más sobre cómo configurar el entorno de desarrollo en la documentación oficial: https://lazuli.readthedocs.io/en/latest/set_up_environment.html
Contenedor de entorno de desarrollo de Lazuli que comienza
Man Pages in Lazuli Development Environment Container
El núcleo Lazuli es totalmente configurable. El sistema de compilación se basa en CMake. Con la ayuda de ccmake , la configuración también se puede hacer de manera interactiva en la consola.
Lea más en la documentación oficial: https://lazuli.readthedocs.io/en/latest/developing_your_project.html
Configuración utilizando CCmake
Edificio usando cmake
En AVR MCU, avrdude se puede usar para cargar el binario final a la máquina de destino. El script scripts/avr/upload.sh se puede usar para eso. Toma el archivo hex como un parámetro.
La interacción con la línea de serie se puede hacer con la ayuda de screen GNU. El script scripts/serial.sh se puede usar para interactuar con la línea de serie USB.
La pestaña Issues (https://github.com/randruc/lazuli/issues) del proyecto debe usarse para informar la solución de problemas o para hacer sugerencias.
¡Las contribuciones son bienvenidas!
El proyecto está alojado en GitHub (en https://github.com/randruc/lazuli), y GitHub se usa para administrarlo todo: aplicar solicitudes, problemas, etc. No importa si desea arreglar un error, implementar o sugerir nuevas funciones, o fijar un error tipográfico/ortografía: ¡ cualquier tipo de contribución es bienvenida!
Lea más sobre cómo contribuir en la documentación oficial: https://lazuli.readthedocs.io/en/latest/kernel/contributing.html
¡También puede usar la pestaña Issues del proyecto para hacer preguntas, sugerir funciones sin codificación o cualquier cosa que desee!
Todo el proyecto se distribuye bajo la Licencia Pública General de GNU V3.0 solamente. Una copia completa de esta licencia está disponible en las licencias de archivo/gpl-3.0-only.txt.