كتب: محمد نور
تحدث الدكتور عمرو طلعت وزير الاتصالات وتكنولوجيا المعلومات المصري عن وظائف التكنولوجيا الحديثة والبرمجة وما تحققه من مبالغ طائلة، موضحا أن هناك 3 مستويات للوظائف التكنولوجية في هذا المجال.
ما هي البرمجة المدمجة (Embedded Software):
البرمجة المدمجة هي نوع معين من البرامج التي تدعم إنشاء الأجهزة التي تواجه المستهلك أو الأجهزة التي لا تعمل على أنظمة التشغيل التقليدية بالطريقة التي تعمل بها أجهزة الكمبيوتر المحمولة والأجهزة المحمولة واسعة النطاق، وتُعرف أنظمة التشغيل المدمجة أو البرمجيّات المدمجة بأنّها البرمجيّات الحاسوبيّة التي تعمل على توجيه الأجهزة نحو عملها المطلوب عبر سلسلة من الأوامر، وتسمّى أيضاً البرامج الثابتة (Firmware)، ويمكن برمجة مختلف الأجهزة بواسطتها وفق ضوابط التصميم، مثل محدوديّة زمن الاستجابة، والمواعيد النهائيّة، ومعالجة البيانات، بالإضافة إلى تخزين البيانات النهائيّة في ذاكرتي التخزين والوصول العشوائيّ (RAM/ROM).
تُستعمل البرمجيّات المدمجة في جميع الأجهزة الإلكترونيّة، مثل السيّارات، والهواتف، والروبوتات، وأنظمة الحماية، وغيرها من الأجهزة التي يسهل تشغيلها على معالج صغريّ 8 بت ذي ذاكرة صغيرة لا تتجاوز عدّة كيلوبايتات، ويمكنه معالجة مختلف العمليّات المعقّدة وفق إطار عمل حاسوبيّ دقيق.
تعتبر فكرة البرمجة المدمجة جزءًا من ما يدفع تطور الأجهزة والمعدات الرقمية في أسواق تكنولوجيا المعلومات الحالية.
النظام المضمن هو مزيج من برامج الكمبيوتر والأجهزة، يكون إما ثابتًا في القدرة أو قابلًا للبرمجة. يمكن أن يكون النظام المضمن إما نظامًا مستقلاً أو جزءًا من نظام كبير. يتم تصميمه بشكل رئيسي لأداء وظيفة أو وظائف محددة ضمن نظام أكبر. على سبيل المثال، يُعد جهاز إنذار الحريق مثالًا شائعًا للنظام المدمج الذي يمكنه استشعار الدخان فقط.
تاريخ النظام المضمن يعود إلى الستينيات، حيث تم استخدامه لتطوير نظام توجيه أبولو. منذ ذلك الحين، شهدت هذه المجالات تطورًا مستمرًا، ويُتوقع أن يستمر النمو في سوق الأنظمة المدمجة في المستقبل .
خصائص النظام المضمن تشمل:
الأداء في الوقت الحقيقي.
التوافر والموثوقية العالية.
التصميم لمهمة محددة.
الاتصال بالأجهزة الطرفية.
الاستقرار والموثوقية العاليين.
الحد الأدنى من واجهة المستخدم.
الذاكرة المحدودة والتكلفة المنخفضة.
في الختام، البرمجة المدمجة تلعب دورًا حاسمًا في تطوير الأجهزة والتكنولوجيا الحديثة.
كيف تُبرمج الأنظمة المدمجة؟ وما اللغات المستعملة في ذلك؟
الأنظمة المدمجة (Embedded System) مزيج من الأجهزة والبرمجيّات، وتتكوّن من وحدات متعدّدة مرتَّبة معاً وفق مبدأ عملها. تهدف هذه الأنظمة إلى تحقيق غرض معيّن خلال مدّة زمنيّة محدَّدة؛ أي تؤدّي مهمّة واحدة فقط، مثل غسّالة الملابس، وتكمن فائدتها في تقليل الكلفة والمساحة اللازمين، إضافة إلى موثوقيّتها العالية. سنتعرّف في هذا المقال إلى النظم المدمجة، ولغات برمجتها، ومهمّة كلّ منها.
مكوّنات الأنظمة المدمجة:
يتكوّن أيّ نظام مدمج من:
- المعدّات المدمجة: يمثّل المتحكّم الصغريّ المكوِّن الأساس للنظام. أمّا التجهيزات المحيطيّة، فترتبط بالمعدّات المدمجة لتبادل البيانات.
- نظام تشغيل الزمن الحقيقيّ المدمج: يستعمل لتنفيذ العمليّات المعقَّدة بأنواعها.
- ملفّات التعريف: وسيلة ربط بين أنظمة التشغيل والأجهزة المرتبطة.
- وحدات الاتّصال: تستعمل للاتّصال مع الأجهزة الخارجيّة.
- التطبيقات المدمجة: تؤدّي العمليّات المحدَّدة مسبقاً للجهاز.
لغات برمجة النظم المدمجة:
تحتاج الأنظمة المدمجة إلى أنظمة تشغيل زمن حقيقيّ لتعمل، وتنفّذ مجموعة من العمليّات في الوقت ذاته، وتُكتب برامجها باستعمال لغات البرمجة مثل 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–);
}
}
- مزايا استعمال الأنظمة المدمجة:
تتمثّل مزايا الأنظمة المدمجة بما يلي:
- سرعة تحميل البيانات.
- التكلفة المنخفضة.
- الاستعمال الأمثل للموارد.
- عيوب استعمال الأنظمة المدمجة:
تبرز مساوئ الأنظمة المدمجة فيما يلي:
- تعقيد عملية التحديث.
- الحاجة إلى إعادة تشغيلها عند حدوث أيّة مشكلات.
- صعوبة تطوير أجزائها.
- التطبيقات:
تُستعمل على مدى واسع في البنوك، والسيّارات، والأجهزة المنزليّة، والصواريخ، وغيرها.
الأسئلة الشائعة:
- ما هي الأنظمة المدمجة؟
تُعرف أنظمة التشغيل المدمج أو البرامج المدمجة بأنّها برمجيّات الحاسوب التي تعمل على توجيه الأجهزة نحو عملها المطلوب عبر سلسلة من الأوامر.
- ما هي لغات البرمجة المستعملة في الأنظمة المدمجة؟
تُستعمل مختلف لغات البرمجة، مثل C، وC++، وبايثون، وجافا سكريبت.
- ما الفرق بين الأنظمة المدمجة والأنظمة الاعتياديّة؟
يتكوّن النظام المدمج من مجموعة من الأجهزة والأنظمة المصمَّمة للعمل معاً لخدمة غرض معيّن، وتنفِّذ العمليات المتعاقبة واحدة تلو الأخرى، بينما يعمل النظام الاعتياديّ على تنفيذ عمليّات متعددة في آنٍ واحد.
- ما أنواع الأنظمة المدمجة؟
يوجد نوعان من الأنظمة المدمجة، إذ تصنف بناءً على استعمالها وأدائها إلى أنظمة الزمن الحقيقيّ، والأنظمة المستقلّة، والأنظمة المتّصلة بالشبكة، والأنظمة المتنقّلة، وتصنَّف أيضاً بناءً على المتحكّم المصغّر إلى الأنظمة ذات النطاق الصغير، والأنظمة ذات النطاق المتوسّط، والأنظمة ذات النطاق المتطوّر.
- ما التطبيقات الرئيسيّة للأنظمة المدمجة؟
تتمثّل تلك التطبيقات في غسّالة الملابس، والكاميرات الرقميّة، ومشغّل الموسيقى، وغيرها.
الملخّص:
يعدّ النظام المدمج مزيج من التجهيزات والبرامج المتوافقة مع بعضها، وتُستعمل مختلف لغات البرمجة لأغراض مختلفة، مثل التحكّم في الآلات والحواسيب، إذ يترك اختيار لغة البرمجة للمبرمج بحسب ما يراه مناسباً. تُبرمج تطبيقات الأنظمة المدمجة بلغات C، وC++، وبايثون، وجافا سكريبت، وتعمل على مختلف أنظمة التشغيل، مثل لينوكس، مايكرو سي، QNX، وغيرها، وتمثّل لغة C اللغة الأساسيّة لكتابة الأكواد البرمجيّة.
وكان الرئيس المصري عبدالفتاح السيسي، قد وجه رسالة مهمة إلى أولياء أمور الطلاب في مصر. وقال خلال حديثه في افتتاح مركز البيانات والحوسبة السحابية الحكومية: عايز أنبه المصريين اللي بيروحوا يقفوا مع ولادهم في المراكز وأنا معاهم، فرص إننا نعلمهم الكلام ده متاحة (يقصد خدمات التعهيد وتكنولوجيا المعلومات)، المجال ده يا جماعة عايز مليون شخص كل سنة، أنا في مصر فين؟ احنا بنعمل حاجات كتير أوي كتير من الناس البساط ميعرفوش بتتعمل عشان تحقق لينا إيه، أنا بقول لكل أسرة عندها ولاد في ابتدائي وإعدادي دلوقتي، إذا كنتم عايزين تعملوا حاجة لولادكم وبلدكم، لازم بوصلتنا تكون كده.
وأضاف الرئيس: فيه دول عدد سكانها لا يتعدى أصابع اليدين، وبيشتغل في المجال ده نصف مليون، عارفين يعني إيه 500 ألف بني آدم، كل واحد بيعمل 100 ألف دولار، ده مش عايز مصنع، عايز دماغ، فيه دول عندها 3 مليون واحد شغال، أنا هدفي أشاور لنفسي والناس والحكومة، أنا مهتم بالإنسان.