Lazuli는 AVR 마이크로 컨트롤러를 대상으로 선제 적 멀티 태스킹 RTO (실시간 운영 체제/커널)입니다. AVR 마이크로 컨트롤러의 실시간 컨텍스트에서 여러 독립 작업을 프로그래밍하고 실행할 수 있습니다. 기본 구성에서 Lazuli RTO는 메모리 발자국이 낮습니다 (<4 킬로바이트의 ROM, <200 바이트의 정적 RAM). Lazuli RTO는 최소한의 하드웨어에서 실시간 제약 조건이 강하거나 멀티 태스킹을 요구하는 임베디드 애플리케이션 또는 단지를 개발하는 데 사용될 수 있습니다.
AVR MCU는 임베디드, 산업용 장치 및 응용 분야에서 널리 사용되며 Arduino 보드에서도 사용되는 것으로 알려져 있습니다. Lazuli RTOS 위에 작성된 응용 프로그램은 산업 시스템 및 애호가 창작물에 적합합니다.
Lazuli RTO는 소스 코드 형식으로 분산되어 최종 실행 파일과 구축 및 정적으로 연결됩니다. 이를 통해 커널을 정적으로 구성하고 컴파일러 최적화의 이점을 얻을 수 있습니다.
이 프로젝트는 https://github.com/randruc/lazuli (https://github.com/randruc/lazuli)에서 개최됩니다
현재 Lazuli 커널은 다음과 같은 기능을 제공합니다.
SCHED_RR )printf() 구현을 포함한 AVR USART 드라이버Lazuli 프로젝트는 매우 구체적인 목표를 가지고있어 독특합니다. 이들은 다음과 같습니다.
Lazuli RTO는 현재 ATMEGA328P MCU (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 PreatucturedText로 작성된 파일에서 사용자 문서를 생성합니다. 소스는 문서/ 디렉토리에 있습니다.doxygen . Lazuli RTO를 사용하는 예제 프로그램은 디렉토리 예제 프로그램/에서 찾을 수 있습니다.
다음은 클래식 깜박임 LED가 표시됩니다. 임베디드 시스템의 안녕하세요 세계 . Lazuli API에 대한 소개 역할을하는 것은 크게 언급되어 있습니다.
#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는 다른 기존 코드에 의존하지 않습니다. 당신은 단순히 자신의 코드를 작성하고 시스템을 구축하고 대상 MCU에 업로드하면 실행할 수 있습니다!
Lazuli와 함께 개발하려면 Lazuli Docker 이미지를 사용하는 것이 좋습니다. 필요한 모든 도구가 제공되는 완전한 개발 환경의 혜택을 누릴 수 있습니다.
Lazuli RTO에는 Docker 이미지로 제공되는 완전하고 컨테이너화 된 개발 환경이 제공됩니다. 이 이미지에는 Lazuli RTO를 사용하여 자체 프로젝트를 구축하는 데 필요한 모든 도구가 포함되어 있습니다. 컴파일러 및 링커, 빌드 도구, 이진 유틸리티, 사람 페이지 등이 포함됩니다.
공식 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를 사용하여 건물
AVR MCU에서 avrdude 사용하여 최종 바이너리를 대상 기계에 업로드 할 수 있습니다. 스크립트 스크립트/avr/upload.sh를 사용할 수 있습니다. 16 진 파일을 매개 변수로 사용합니다.
일련 라인과의 상호 작용은 GNU screen 사용하여 수행 할 수 있습니다. 스크립트 스크립트/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 General Public License v3.0에 의해서만 배포됩니다. 이 라이센스의 전체 사본은 파일 라이센스/gpl-3.0 only.txt에서 사용할 수 있습니다.