Lazuli عبارة عن RTOs متعددة المهام وقائية (نظام التشغيل في الوقت الفعلي/kernel) ، ويستهدف متحكم AVR. يسمح ببرمجة وتشغيل مهام مستقلة متعددة في سياق في الوقت الفعلي على متحكم AVR. في تكوينه الأساسي ، لدى Lazuli RTOs بصمة ذاكرة منخفضة (أقل من 4 كيلو بايت من ROM ، <200 بايت من ذاكرة الوصول العشوائي الثابتة). يمكن استخدام RTOs Lazuli لتطوير التطبيقات المدمجة أو الأدوات الثابتة التي لها قيود قوية في الوقت الفعلي أو طلب تعدد المهام ، على الحد الأدنى من الأجهزة.
تستخدم AVR MCUs على نطاق واسع في الأجهزة والتطبيقات الصناعية المضمنة ، ومن المعروف أيضًا أنها تستخدم في لوحات Arduino. التطبيقات المكتوبة فوق Lazuli RTOS تناسب الأنظمة الصناعية وكذلك إبداعات الهواة.
يتم توزيع Lazuli RTOs في نموذج رمز المصدر الخاص به ، ليتم بناؤه وربطه بشكل ثابت مع النهائي الخاص بك القابل للتنفيذ. يتيح ذلك تكوين kernel بشكل ثابت ، والاستفادة من تحسينات البرمجيات.
يتم استضافة المشروع على Github على https://github.com/randruc/lazuli
في الوقت الحالي ، توفر kernel Lazuli الوظائف التالية:
SCHED_RR )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 لإنشاء وثائق المستخدم من الملفات المكتوبة في إعادة هيكلة. المصادر في المستند/ الدليل.doxygen لإنشاء وثائق API من C Bead Code. مثال على ذلك ، يمكن العثور على برامج Lazuli RTOs في البرامج مثال الدليل/.
هنا يظهر LED الوامضة الكلاسيكية. The Hello World of Libedded Systems. تم التعليق بشدة لتكون بمثابة مقدمة في واجهة برمجة تطبيقات 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 أي اعتماد على أي رمز موجود آخر. يمكنك ببساطة كتابة التعليمات البرمجية الخاصة بك ، وإنشاء النظام ، وتحميله إلى الهدف MCU ويعمل فقط!
للتطور مع Lazuli ، يوصى بشدة باستخدام صورة Docker Lazuli. سوف تستفيد من بيئة تطوير كاملة ، مزود بجميع الأدوات اللازمة.
يأتي Lazuli RTOS مع بيئة تطوير كاملة وحاويات مقدمة كصورة Docker. تتضمن هذه الصورة جميع الأدوات اللازمة لبناء مشروعك الخاص باستخدام Lazuli RTOs. ويشمل المترجمين والروابط ، وأدوات البناء ، والمرافق الثنائية ، وصفحات الرجل ، إلخ.
يمكن سحب صورة Docker الرسمية Lazuli من https://hub.docker.com/r/randruc/lazuli
اقرأ المزيد حول كيفية إعداد بيئة التطوير في الوثائق الرسمية: https://lazuli.readthedocs.io/en/latest/set_up_environment.html
بدء حاوية بيئة تطوير Lazuli
صفحات الرجل في حاوية بيئة تنمية لازولي
kernel lazuli قابلة للتكوين بالكامل. يعتمد نظام البناء على CMake. بمساعدة ccmake ، يمكن أيضًا إجراء التكوين بشكل تفاعلي في وحدة التحكم.
اقرأ المزيد في الوثائق الرسمية: https://lazuli.readthedocs.io/en/latest/developing_your_project.html
التكوين باستخدام CCMake
بناء باستخدام cmake
على AVR MCUS ، يمكن استخدام avrdude لتحميل الثنائي النهائي إلى الجهاز المستهدف. يمكن استخدام البرامج النصية للبرنامج النصي/AVR/Upload.sh لذلك. يأخذ ملف السداسي كمعلمة.
يمكن إجراء التفاعل مع الخط التسلسلي بمساعدة 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 General Public V3.0 فقط. تتوفر نسخة كاملة من هذا الترخيص في تراخيص الملفات/GPL-3.0 only.txt.