Syra uOS

مكتبة برمجية متكاملة تساعد في كتابة برامج أكثر إحترافية للمعالجات التحكمية

نظام متكامل

مكتبة Syra uOS تجعل برمجة المعالجات التحكمية أمراً سهلاً وأكثر تنظيماً.
اكتب المهام التي تريدها لكل جزء في التطبيق الخاص بك ، وسيقوم النظام المتكامل بإدارة المهام وتنفيذها بكفاءة.

منطق المهام

أنشئ مهامًا منفصلة تقوم بتنفيذ التعليمات البرمجية الخاصة بها ، ثم قم بتجميعها لإنشاء تطبيقات أكبر .
تجعل طريقة المهام المنفصلة كتابة تطبيقات المعالجات التحكمية أكثر قابلية للتوسع وأسهل في الإدارة والتدقيق.

تعدد الاستخدام

نظرًا لأن كل مهمة مكتوبة بلغة البرمجة C مثل أي تابع أو دالة عادية ، يمكنك بسهولة إعادة استخدام هذه المهمة في تطبيقات أخرى.
كما يمكنك بسهولة نسخ مهمة في نفس التطبيق وتعديلها لبناء مهمة جديدة.

البداية مع Syra uOS

هي عبارة عن نظام تشغيل صغير للمعالجات التحكمية. وهي نظام غير متزامن تعتمد على مبدأ الأحداث. أي أن تتابع عمليات البرنامج تتم على أساس وجود حدث معين . ومن يقوم بإدارة هذه الأحداث هو نواة النظام . وهي مصممة لبناء تطبيقات قابلة للتوسع للمعالجات التحكمية.
سنتعرف بالتفصيل عن إمكانيات ومكونات هذه المكتبة لاحقاً . ولكن لنبدأ مع المثال البسيط التالي ، الذي سنوضح من خلاله كيفية إنشاء مهمة بسيطة.

مهمة بسيطة

تُعرَّف المهمة على أنها دالة عادية ، ولكنها لا تأخذ أي بيانات إدخال. كما أنها لا ترجع أي بيانات.
يتم تنفيذ الأوامر المكتوبة داخل المهمة بشكل متكرر كأي حلقة لا نهائية.
هذا المثال لمتحكم AVR XMega . في هذه المهمة تم كتابة أمر يقوم بتبديل الحالة المنطقية للطرف PIN0 من المنفذ PORTA ، ثم تنتظر 1000 مللي ثانية قبل إعادة التنفيذ من جديد.

void task1_app()
{
    // toggle the status of pin 0
     PORTA_OUTTGL = PIN0_bm;
     
     // wait for 1sec before next execution
     TaskWait(1000);
}

تهيئة المهمة

قبل البدء في تنفيذ المهمة ، غالباً هناك حاجة للقيام ببعض الأوامر أو تهيئة بعض المتحولات وتعيين قيمها الأولية.
لذلك نقوم بكتابة تابع أو دالة خاصة لهذا الغرض نسميها تابع التهيئة الخاص بالمهمة .
فيما يلي مثال على تابع الإعداد الذي يحدد اتجاه الطرف PIN0 من البوابة PORTA على أنه طرف خرج.
سيتم تنفيذ وظيفة الإعداد هذه مرة واحدة في مرحلة الإقلاع قبل الانتقال لتشغيل المهمة في حلقة النظام.

void task1_Setup()
{
    // Define Pin 0 of Port A as output
    PORTA_DIRSET = PIN0_bm;
    
}

تسجيل المهمة في النظام

لتشغيل مهمتك ، تحتاج إلى تسجيلها في النظام.
أفضل مكان لتسجيل مهمتك هو في الدالة أو التابع OnBoot. لأن النظام ينفذ هذه الدالة قبل أن يبدأ بتشغيل المهام.
أيضًا في هذه الدالة نستدعي جميع عمليات الإعداد لجميع المهام.
يتم تسجيل المهمة عن طريق استدعاء التابع Sys_CreateTask.
كما نرى في المثال نقوم بتمرير اسم المهمة كمعامل.
إذا كنت بحاجة إلى تنفيذ مهام إضافية ، فقط كرر الخطوات السابقة.

/*
// This section is part of the file main.c
//
*/
void OnBoot()
{
    // calling the setup function
    task1_Setup();
    
    // Registering Task 1 in the system
    Sys_CreateTask(task1_app);
    
    
    // Registering additional tasks
    Sys_CreateTask(task2_app);
    Sys_CreateTask(task3_app);
    Sys_CreateTask(task4_app);
    .
    .
    .
    
        
}

دعم معالجات تحكمية صغيرة

هذه المكتبة مصممة لتدعم معالجات صغيرة حتى لو كانت 8Bit . ولاتحتاج مساحة كبيرة من الذاكرة. فالهدف منها هو تحويل طريقة البرمجة إلى ما هو أشبه بالبرمجة باستخدام أنظمة التشغيل . ولكن مع الأخذ بعين الاعتبار محدودية الموارد. دون الحاجة لاستهلاك جميع موارد المعالج من ذاكرة وزمن معالجة بالبرمجة التقليدية .
مع العلم أن أصغر نظام RTOS لا يمكن ان يدعم معالج 8Bit . ولا يمكن أصلا ان يدعم معالج ذاكرته 32كيلو بايت أو اقل من ذلك.
حتى الآن المكتبة تدعم جميع معالجات XMega ومعالجات tinyAVR وهي معالجات 8Bit. وكذلك تدعم بعض معالجات SAM وهي معالجات ARM 32Bit .


المعالجات المدعومة :

tinyAVR®0-series:
ATtiny204, ATtiny404, ATtiny804, ATtiny1604, ATtiny406, ATtiny806, ATtiny1606, ATtiny807, ATtiny1607
tinyAVR®1-series:
Ttiny212, ATtiny412, ATtiny214, ATtiny414, ATtiny814, ATtiny1614, ATtiny416, ATtiny816, ATtiny1616, ATtiny3216, ATtiny417, ATtiny817, ATtiny1617, ATtiny3217
tinyAVR®2-series:
ATtiny424, ATtiny824, ATtiny1624, ATtiny3224, ATtiny426, ATtiny826, ATtiny1626, ATtiny3226, ATtiny427, ATtiny827, ATtiny1627, ATtiny3227

AVR XMega:
ATXMEGA128A1, ATXMEGA128A1, ATXMEGA128A1U, ATXMEGA128A3, ATXMEGA128A3U, ATXMEGA128A4U, ATXMEGA128D4, ATXMEGA16A4, ATXMEGA16A4U, ATXMEGA16D4, ATXMEGA192A3, ATXMEGA192A3U, ATXMEGA256A3, ATXMEGA256A3U, ATXMEGA32A4, ATXMEGA32A4U, ATXMEGA32D4, ATXMEGA64A1, ATXMEGA64A1U, ATXMEGA64A3, ATXMEGA64A3U, ATXMEGA64A4, ATXMEGA64A4U, ATXMEGA64D4,

SAMD ARM® Cortex®-M0+:
ATSAMD20E14A, ATSAMD20E14A, ATSAMD20E14B, ATSAMD20E15A, ATSAMD20E15B, ATSAMD20E16A, ATSAMD20E16B, ATSAMD20E17A, ATSAMD20E18A, ATSAMD21E15B, ATSAMD21E15L, ATSAMD21E16B, ATSAMD21E16L, ATSAMD21E17A, ATSAMD21E17D, ATSAMD21E17L, ATSAMD21E18A,