Lazuli เป็น RTOs มัลติทาสกิ้งแบบ preemptive (ระบบปฏิบัติการแบบเรียลไทม์/เคอร์เนล) โดยกำหนดเป้าหมายไมโครคอนโทรลเลอร์ AVR อนุญาตให้โปรแกรมและเรียกใช้งานอิสระหลายอย่างในบริบทแบบเรียลไทม์ในไมโครคอนโทรลเลอร์ AVR ในการกำหนดค่าพื้นฐาน Lazuli RTOS มีรอยเท้าหน่วยความจำต่ำ (<4 กิโลไบต์ของ ROM, <200 ไบต์ของ RAM คงที่) Lazuli RTOs สามารถใช้ในการพัฒนาแอพพลิเคชั่นที่ฝังตัวหรือเฟอร์แวร์ที่มีข้อ จำกัด แบบเรียลไทม์ที่แข็งแกร่งหรือความต้องการมัลติทาสก์บนฮาร์ดแวร์ที่น้อยที่สุด
AVR MCUs ถูกนำมาใช้กันอย่างแพร่หลายในอุปกรณ์อุตสาหกรรมและการใช้งานและเป็นที่ทราบกันดีว่าใช้กับบอร์ด Arduino แอพพลิเคชั่นที่เขียนไว้ด้านบนของ Lazuli RTOS เหมาะกับระบบอุตสาหกรรมเช่นเดียวกับการสร้างสรรค์งานอดิเรก
Lazuli RTOS มีการแจกจ่ายในรูปแบบซอร์สโค้ดเพื่อสร้างและเชื่อมโยงแบบคงที่กับการดำเนินการขั้นสุดท้ายของคุณเอง สิ่งนี้ช่วยให้เคอร์เนลได้รับการกำหนดค่าแบบคงที่และได้รับประโยชน์จากการเพิ่มประสิทธิภาพคอมไพเลอร์
โครงการนี้โฮสต์บน GitHub ที่ https://github.com/randruc/lazuli
สำหรับตอนนี้เคอร์เนล Lazuli ให้ฟังก์ชันต่อไปนี้:
SCHED_RR ของ Posix)printf() ที่สมบูรณ์โครงการ Lazuli มีเป้าหมายที่เฉพาะเจาะจงมากซึ่งทำให้ไม่เหมือนใคร นี่คือ:
ปัจจุบัน Lazuli RTOS ทำงานบน 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 เพื่อสร้างเอกสารประกอบผู้ใช้จากไฟล์ที่เขียนใน structuredText แหล่งที่มาอยู่ใน DOC/ ไดเรกทอรีdoxygen เพื่อสร้างเอกสาร API จาก C Code Comments ตัวอย่างโปรแกรมที่ใช้ Lazuli RTOS สามารถพบได้ในไดเรกทอรีตัวอย่างโปรแกรม/
นี่คือ LED ที่กระพริบแบบคลาสสิก Hello World of Embedded Systems มีความคิดเห็นอย่างมากที่จะทำหน้าที่เป็นบทนำสู่ 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 RTOS มาพร้อมกับสภาพแวดล้อมการพัฒนาที่สมบูรณ์และมีการจัดเรียงเป็นภาพนักเทียบท่า ภาพนี้มีเครื่องมือทั้งหมดที่จำเป็นในการสร้างโครงการของคุณเองโดยใช้ Lazuli RTOS มันรวมถึงคอมไพเลอร์และลิงค์, เครื่องมือสร้าง, ยูทิลิตี้ไบนารี, หน้าผู้ชาย, ฯลฯ
ภาพ Lazuli Docker อย่างเป็นทางการสามารถดึงได้จาก https://hub.docker.com/r/randruc/lazuli
อ่านเพิ่มเติมเกี่ยวกับวิธีการตั้งค่าสภาพแวดล้อมการพัฒนาในเอกสารอย่างเป็นทางการ: https://lazuli.readthedocs.io/en/latest/set_up_environment.html
Lazuli Development Environment Container เริ่มต้น
หน้ามนุษย์ในคอนเทนเนอร์การพัฒนา Lazuli
เคอร์เนล Lazuli สามารถกำหนดค่าได้อย่างสมบูรณ์ ระบบสร้างขึ้นอยู่กับ cmake ด้วยความช่วยเหลือของ ccmake การกำหนดค่าสามารถทำได้แบบโต้ตอบในคอนโซล
อ่านเพิ่มเติมในเอกสารอย่างเป็นทางการ: https://lazuli.readthedocs.io/en/latest/developing_your_project.html
การกำหนดค่าโดยใช้ ccmake
อาคารโดยใช้ cmake
บน AVR MCUS สามารถใช้ avrdude เพื่ออัปโหลดไบนารีสุดท้ายไปยังเครื่องเป้าหมาย สคริปต์สคริปต์/avr/upload.sh สามารถใช้สำหรับสิ่งนั้น ต้องใช้ไฟล์ hex เป็นพารามิเตอร์
การมีปฏิสัมพันธ์กับสายอนุกรมสามารถทำได้ด้วยความช่วยเหลือของ screen GNU สคริปต์สคริปต์/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