Lazuli adalah RTO multitasking preemptive (sistem operasi real-time/kernel), yang menargetkan mikrokontroler AVR. Ini memungkinkan untuk memprogram dan menjalankan beberapa tugas independen dalam konteks real-time pada mikrokontroler AVR. Dalam konfigurasi dasarnya, Lazuli RTOS memiliki jejak memori rendah (<4 kilobyte ROM, <200 byte RAM statis). Lazuli RTOS dapat digunakan untuk mengembangkan aplikasi tertanam atau firmware yang memiliki kendala real-time yang kuat atau menuntut multitasking, pada perangkat keras minimal.
AVR MCU banyak digunakan dalam perangkat dan aplikasi industri tertanam, dan juga diketahui digunakan di papan Arduino. Aplikasi yang ditulis di atas sistem industri Lazuli RTOS serta kreasi hobi.
Lazuli RTOS didistribusikan dalam formulir kode sumbernya, untuk dibangun dan secara statis dikaitkan dengan executable akhir Anda sendiri. Ini memungkinkan kernel dikonfigurasi secara statis, dan mendapat manfaat dari optimasi kompiler.
Proyek ini di -host di Github di https://github.com/randruc/lazuli
Untuk saat ini, kernel Lazuli memberikan fungsionalitas berikut:
SCHED_RR )printf() lengkapProyek Lazuli memiliki tujuan yang sangat spesifik yang membuatnya unik. Ini adalah:
Lazuli RTO saat ini berjalan di ATmega328p MCU (yang digunakan pada Arduino) tetapi harus dengan mudah portabel ke platform AVR lainnya.
Meskipun Lazuli cenderung mencapai tingkat kualitas dan stabilitas kode yang tinggi, itu tidak sesuai dengan sistem kritis keselamatan karena tidak disertifikasi untuk penggunaan spesifik tersebut. Untuk informasi lebih lanjut tentang apa sistem kritis-keselamatan, silakan baca https://en.wikipedia.org/wiki/safety-critical_system
Dokumentasi untuk proyek ini dapat dibaca di https://lazuli.readthedocs.io/en/latest/
Dokumentasi API dapat dibaca di https://randruc.github.io/lazuli/doxygen/latest/
Dua alat berbeda digunakan untuk mendokumentasikan proyek:
sphinx untuk menghasilkan dokumentasi pengguna dari file yang ditulis dalam restrukturisasi. Sumber -sumbernya ada di DOC/ Direktori.doxygen untuk menghasilkan dokumentasi API dari komentar kode C. Contoh program yang menggunakan lazuli rtos dapat ditemukan di direktori contoh-program/.
Di sini ditunjukkan LED berkedip klasik. Sistem Hello World of Embedded. Sangat berkomentar untuk berfungsi sebagai pengantar 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 tidak memiliki ketergantungan pada kode lain yang ada. Anda cukup menulis kode Anda sendiri, membangun sistem, mengunggahnya ke target MCU dan hanya berjalan!
Untuk berkembang dengan Lazuli, sangat disarankan untuk menggunakan gambar Lazuli Docker. Anda akan mendapat manfaat dari lingkungan pengembangan yang lengkap, asalkan semua alat yang diperlukan.
Lazuli RTOS hadir dengan lingkungan pengembangan yang lengkap dan terkemuka yang disediakan sebagai gambar Docker. Gambar ini mencakup semua alat yang diperlukan untuk membangun proyek Anda sendiri menggunakan lazuli rtos. Ini termasuk kompiler dan penghubung, alat build, utilitas biner, halaman pria, dll.
Gambar resmi Lazuli Docker dapat ditarik dari https://hub.docker.com/r/randruc/lazuli
Baca lebih lanjut tentang cara mengatur lingkungan pengembangan dalam dokumentasi resmi: https://lazuli.readthedocs.io/en/latest/set_up_environment.html
Lazuli Development Environment Container mulai
Halaman Manusia di Lazuli Development Environment Container
Kernel Lazuli sepenuhnya dapat dikonfigurasi. Sistem build bergantung pada CMake. Dengan bantuan ccmake , konfigurasi juga dapat dilakukan secara interaktif di konsol.
Baca lebih lanjut di dokumentasi resmi: https://lazuli.readthedocs.io/en/latest/develdeving_your_project.html
Konfigurasi Menggunakan CCMake
Membangun menggunakan cmake
Pada AVR MCU, avrdude dapat digunakan untuk mengunggah biner terakhir ke mesin target. Script skrip/avr/unggah.sh dapat digunakan untuk itu. Dibutuhkan file hex sebagai parameter.
Interaksi dengan garis serial dapat dilakukan dengan bantuan screen GNU. Script Scripts/Serial.sh dapat digunakan untuk berinteraksi dengan garis serial USB.
Tab Issues (https://github.com/randruc/lazuli/issues) dari proyek harus digunakan untuk melaporkan pemecahan masalah atau membuat saran.
Kontribusi dipersilakan!
Proyek ini di -host di GitHub (di https://github.com/randruc/lazuli), dan GitHub digunakan untuk mengelola semuanya: tarik permintaan, masalah, dll. Tidak masalah jika Anda ingin memperbaiki bug, mengimplementasikan atau menyarankan fitur baru, atau memperbaiki kesalahan ketik/ejaan: segala jenis kontribusi diterima!
Baca lebih lanjut tentang cara berkontribusi dalam dokumentasi resmi: https://lazuli.readthedocs.io/en/latest/kernel/contributing.html
Anda juga dapat menggunakan tab Issues proyek untuk mengajukan pertanyaan, menyarankan fitur tanpa coding, atau apa pun yang Anda inginkan!
Semua proyek didistribusikan di bawah Lisensi Publik Umum GNU v3.0 saja. Salinan lengkap lisensi ini tersedia di lisensi file/gpl-3.0-only.txt.