كيف تُبرمج الأنظمة المدمجة؟ وما اللغات المستعملة في ذلك؟

الأنظمة المدمجة (Embedded System) مزيج من الأجهزة والبرمجيّات، وتتكوّن من وحدات متعدّدة مرتَّبة معاً وفق مبدأ عملها. تهدف هذه الأنظمة إلى تحقيق غرض معيّن خلال مدّة زمنيّة محدَّدة؛ أي تؤدّي مهمّة واحدة فقط، مثل غسّالة الملابس، وتكمن فائدتها في تقليل الكلفة والمساحة اللازمين، إضافة إلى موثوقيّتها العالية. سنتعرّف في هذا المقال إلى النظم المدمجة، ولغات برمجتها، ومهمّة كلّ منها.

مكوّنات الأنظمة المدمجة:

يتكوّن أيّ نظام مدمج من:

  • المعدّات المدمجة: يمثّل المتحكّم الصغريّ المكوِّن الأساس للنظام. أمّا التجهيزات المحيطيّة، فترتبط بالمعدّات المدمجة لتبادل البيانات.
  • نظام تشغيل الزمن الحقيقيّ المدمج: يستعمل لتنفيذ العمليّات المعقَّدة بأنواعها.
  • ملفّات التعريف: وسيلة ربط بين أنظمة التشغيل والأجهزة المرتبطة.
  • وحدات الاتّصال: تستعمل للاتّصال مع الأجهزة الخارجيّة.
  • التطبيقات المدمجة: تؤدّي العمليّات المحدَّدة مسبقاً للجهاز.
(الشكل 1: مكوّنات النظام المدمج مصدر الصورة :موقع Elprocus)
مكوّنات النظام المدمج

البرمجيّات المدمجة (Embedded Software):

تُعرف أنظمة التشغيل المدمجة أو البرمجيّات المدمجة بأنّها البرمجيّات الحاسوبيّة التي تعمل على توجيه الأجهزة نحو عملها المطلوب عبر سلسلة من الأوامر، وتسمّى أيضاً البرامج الثابتة (Firmware)، ويمكن برمجة مختلف الأجهزة بواسطتها وفق ضوابط التصميم، مثل محدوديّة زمن الاستجابة، والمواعيد النهائيّة، ومعالجة البيانات، بالإضافة إلى تخزين البيانات النهائيّة في ذاكرتي التخزين والوصول العشوائيّ (RAM/ROM).

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

لغات برمجة النظم المدمجة:

تحتاج الأنظمة المدمجة إلى أنظمة تشغيل زمن حقيقيّ لتعمل، وتنفّذ مجموعة من العمليّات في الوقت ذاته، وتُكتب برامجها باستعمال لغات البرمجة مثل C/C++، وبايثون، وجافا سكريبت، وتعمل على أنظمة تشغيل لينوكس، OSE، Micro C/OS، Nucleus، Fusion، VxWorks، وغيرها.

تعتمد عمليّة اختيار لغة البرمجة المناسبة على العوامل الآتية:

  • حجم الذاكرة: لحجم الذاكرة المطلوبة لبرنامج ما أهمّيّة كبيرة؛ إذ تمتلك المعالجات الصغريّة ذاكرة وصول عشوائيّ محدودة وفقاً لتطبيقاتها.
  • السرعة: يجب تنفيذ البرنامج بالسرعة اللازمة.
  • التوافق: يمكن للمعالجات المختلفة تنفيذ البرنامج ذاته.
  • صعوبة تطبيق البرنامج وصيانته.

البرمجة بلغة التجميع (Assembly):

يمكن برمجة نظام مدمج بلغة التجميع وتحويله إلى لغة الآلة بواسطة مجمع كما سنوضّح من خلال المثال التالي؛ إذ سنعمل على كتابة برنامج يجمع رقمين باستخدام مسجلَين مختلفين داخل المعالج، ثمّ تخزَّن النتيجة في مسجّل واحد.

الدخل:

HERE: MOV R0,#01H

MOV #1,#02H

MOV A,R0

ADD A,R1

MOV P0,A

SIMP HERE

الخرج:

Address         Opcode     Operand

0000                   78               01

0002                   79               02

0004                   E8                –

0005                   29                –

0006                   F5               80

0008                   80               00

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

البرمجة بلغة عالية المستوى:

لغة C:

تمثّل لغة سي أحد أنواع لغات البرمجة الهيكليّة التي طوّرها دينيس ريتشي (Dennis Ritchie)، وتمتاز بقلّة عمليّات الوصول إلى ذاكرة الجهاز؛ كونها تعمل على بيئة ترجمة أوامر بسيطة لتنفيذ الأوامر، وتتنوّع تطبيقاتها بدءاً من الأنظمة المدمجة، وصولاً إلى الحواسيب الخارقة (supercomputers).

لغة C المدمجة:

تعدّ امتداداً للغة C، وتستعمل لتطوير الأنظمة المدمجة، وتشابه في صياغتها لغة C إلى حدّ كبير، لكنّهما تختلفان في عنونة وحدات الإدخال والإخراج للأجهزة والعمليات على الأعداد العشرية من نوع الفاصلة الثابتة (fixed-point)، ومعالجة مساحات العناوين.

يعود استعمالها في الأنظمة المدمجة إلى الأسباب التالية:

  • سهلة التعلّم والفهم وتصحيح الأخطاء في البرنامج.
  • مترجماتها متوافقة مع جميع أنواع الأجهزة المدمجة.
  • لا تعتمد على معالج معيّن؛ أي ليست محدّدة لمعالج أو متحكّم معيّن.
  • تدمج بين خصائص لغة التجميع واللغات عالية المستوى.
  • فعّالة وأكثر موثوقيّة ومرونة وقابليّة للنقل بين التطبيقات المختلفة.
  • تعد البرامج المطوّرة بلغة C أسهل في الفهم وتصحيح الأخطاء والصيانة.

ولذلك، تعدّ لغة C أكثر مرونة مقارنة بلغات البرمجة عالية المستوى؛ لأنّها ذات بنية صغيرة الحجم نسبيّاً، وتدعم تعديل البيانات.                     

لغة C++:

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

لغة جافا:

يمكن استخدام لغة جافا لتطوير الأنظمة المدمجة داخل بيئة جافا الرقميّة (JVM) التي توفّر الوصول إلى العديد من الموارد، وتشتمل على العديد من الأدوات اللازمة لبرمجة تطبيقات الهواتف النقّالة وغيرها. تعدّ لغة سهلة التنقّل؛ إذ يمكن تنفيذها على مختلف الأنظمة لمعالجة التطبيقات، لكن لا ينصح باستعمالها للأجهزة المدمجة الصغيرة.

مثال على استعمال لغة C المدمجة وهيكليّتها:

يمكن فهم هيكليّة لغة C من خلال مثال إضاءة مصباح صغير متّصل بالمنفذ الأوّل من المتحكّم الصغريّ من فئة 8051، الّذي يحتوي على مترجم من نوع (Keil C)، حيث يُستعمل الكود التالي:

#include<reg51.h>            // directive of pre-processor

Void delay (int)                //declaration of delay function

Void main(void)             // Main function

{

P1 = 0x00;                    // port1 is off so LED is off and stored in reg51.h

while(1)                       // loop of infinity

{

P1 =OxFF;                //// port1 is on so LED is on

delay(1000);           // assigning delay

P1 = 0X00;            // port1 off

delay(1000);

}

}

Void delay (int d)  // assigning delay function

{

unsigned int i=0; // variables assigned locally

for (; d>0 ; d-)

{

for (i=250 ; i>0;i–);

for (i=248 ; i>0;i–);

}

}

  • مزايا استعمال الأنظمة المدمجة:

تتمثّل مزايا الأنظمة المدمجة بما يلي:

  • سرعة تحميل البيانات.
  • التكلفة المنخفضة.
  • الاستعمال الأمثل للموارد.
  • عيوب استعمال الأنظمة المدمجة:

تبرز مساوئ الأنظمة المدمجة فيما يلي:

  •  تعقيد عملية التحديث.
  • الحاجة إلى إعادة تشغيلها عند حدوث أيّة مشكلات.
  • صعوبة تطوير أجزائها.
  • التطبيقات:

تُستعمل على مدى واسع في البنوك، والسيّارات، والأجهزة المنزليّة، والصواريخ، وغيرها.

الأسئلة الشائعة:

  1. ما هي الأنظمة المدمجة؟

تُعرف أنظمة التشغيل المدمج أو البرامج المدمجة بأنّها برمجيّات الحاسوب التي تعمل على توجيه الأجهزة نحو عملها المطلوب عبر سلسلة من الأوامر.

  • ما هي لغات البرمجة المستعملة في الأنظمة المدمجة؟

تُستعمل مختلف لغات البرمجة، مثل C، وC++، وبايثون، وجافا سكريبت.

  • ما الفرق بين الأنظمة المدمجة والأنظمة الاعتياديّة؟

يتكوّن النظام المدمج من مجموعة من الأجهزة والأنظمة المصمَّمة للعمل معاً لخدمة غرض معيّن، وتنفِّذ العمليات المتعاقبة واحدة تلو الأخرى، بينما يعمل النظام الاعتياديّ على تنفيذ عمليّات متعددة في آنٍ واحد.

  • ما أنواع الأنظمة المدمجة؟

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

  • ما التطبيقات الرئيسيّة للأنظمة المدمجة؟

تتمثّل تلك التطبيقات في غسّالة الملابس، والكاميرات الرقميّة، ومشغّل الموسيقى، وغيرها.

الملخّص:

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


ترجمة:زينب جواد
مراجعة:أماني صالح
تدقيق لغوي:سلام أحمد
تحرير:نور شريفة