YAOS هو نظام تشغيل مضمن لأجهزة Internet of Things (IoT) ، وتحديداً لمعالج أحادي النواة دون المحاكاة الافتراضية MMU. وهو مصمم لتحقيق كفاءة الطاقة وتطوير الأجهزة المستقلة.
الرجوع إلى /Documentation لمزيد من المعلومات مثل التجميع ، النقل ، واجهات برمجة التطبيقات ، إلخ.
أي ملاحظات مرحب بها في [email protected] . واسمحوا لي أن أعرف ما إذا كان أي منكم مهتمًا بالانتقال إلى MCU الجديد حتى أتمكن من إعطائك يد.
git clone git://github.com/onkwon/yaos
احصل على واحدة من هنا إذا لم يكن لديك واحدة مثبتة بعد. أو يمكنك تجميعها من رمز المصدر بذل المزيد من الجهد ، وهو ما لا ينصح به ولكن لا يزال يستحق المحاولة.
make clean
make stm32f1 (or specify your board. e.g. mango-z1)
make
make burn
الألواح المدعومة في الوقت الحالي هي:
- المانجو Z1
- MyCortex-STM32F4
- NRF52
- STM32F429I-Disco
- STM32F469I-Disco
- STM32-LCD
- UST-MPB-STM32F103
- STM32F1-MIN
في حالة الحصول على رسائل خطأ ، يشبه undefined reference to __aeabi_uidiv ، حدد مسار المكتبة عند make بالطريقة أدناه:
make LD_LIBRARY_PATH=/usr/local/arm/lib/gcc/arm-none-eabi/4.9.2
يعتمد المسار على بيئة التنمية الخاصة بك.
اسمحوا لي أن أضع مثالاً على وميض LED لك لتذوق كيف تبدو الكود.
سيتم وضع مهام المستخدم تحت /مهام (مثل المهام /my-first-tass.c):
void main()
{
int fd, led = 0;
if ((fd = open("/dev/gpio20", O_WRONLY)) <= 0) {
printf("can not open, %xn", fd);
return;
}
while (1) {
write(fd, &led, 1);
led ^= 1;
sleep(1);
}
close(fd);
}
REGISTER_TASK(main, 0, DEFAULT_PRIORITY, STACK_SIZE_DEFAULT);
يتم التعامل مع نوعين من المهام: المهام العادية والوقت الحقيقي. جدولة Round-Robin للمهام العادية أثناء جدولة الأولوية للمهام في الوقت الفعلي. يتم إعطاء كل مهمة أولوية يمكن تغييرها ديناميكيًا باستخدام set_task_pri() . للمهام في الوقت الفعلي ، تستبق المهام ذات الأولوية الأعلى دائمًا المهام ذات الأولوية المنخفضة في حين تتم نفس المهام ذات الأولوية نفسها بدورها في جدولة الجولة الدائرية. يمكن إيقاف الجدولة لتقليل حتى الجدولة في حالة وجود مهمة حاسمة للوقت. من ناحية أخرى ، تحصل المهام العادية على فرصة لتشغيلها بواسطة Simplified Fair Scheduler ، والتي تختار الحد الأدنى لقيمة وقت التشغيل حتى يتم تشغيل المهمة التالية.
تكون المهام دائمًا في واحدة من خمس ولايات: الجري أو الإيقاف أو الانتظار أو النوم أو الزومبي. ويمكن إنشاء مهمة بشكل ثابت وديناميكي في وقت التشغيل.
يتم الوصول إلى مورد النظام من خلال واجهة استدعاء النظام التي تدخل الوضع المميز حيث يتم تشغيل مهمة المستخدم في وضع المستخدم (غير المميز).
يتم تنفيذ مفهوم نظام الملفات الافتراضية (VFS). يمكن تركيب ROM المدمج في SOC كنظام ملفات الجذر (inmbedfs) بينما يتم تثبيت RAPFs كقاعدة DEVFs لعقدة الجهاز.
ذاكرة الفلاش الفارغة هي التسجيل كـ inmbedfs حتى يتمكن المستخدم من استخدامه تمامًا مثل نظام الملفات العادي.
الصفحة هي وحدة إدارة الذاكرة ولكن يمكن استخدام مدير الذاكرة البديل في نظام نقص الذاكرة هذا.
يتم تنفيذ تخصيص Buddy Minocator و First Fort.
سوف يستبق Softirqs أي عمل باستثناء الاستجابة لمقاطعة حقيقية لأنها تعمل بأولوية عالية. في الواقع ، تعتبر Softirq مجرد مهمة kernel تعمل مع تمكين المقاطعات ويمكن أن تنام ولكن لها أولوية أعلى بين مهام التشغيل.
بدائل التزامن مثل semaphore ، spinlock ، إلخ.