- 1. تطوير متطلبات المنتج
- 2. تصميم النظام وتطوير الخوارزمية
- 3. ترميز البرامج الثابتة المضمنة
- اختبار البرامج الثابتة المضمنة
يعد تطوير البرامج أمرًا صعبًا بشكل عام ، ولكن بالنسبة لنظام مضمن ، فهو على مستوى جديد تمامًا من الصعوبة. يحتاج مطورو البرامج الثابتة إلى معرفة جيدة بتطوير الأجهزة وفهم الأعمال الداخلية للمعالج المضمن. بالنسبة لمقال اليوم ، سأشارك الأدوات والنصائح التي يمكن استخدامها لتحقيق مستوى عالٍ من الكفاءة والقضاء على بعض الأشياء التي تجعل تطوير البرامج الثابتة مملاً.
يمر تطوير البرامج المضمنة بعملية تطوير مماثلة مع تطوير البرامج "العادية". بغض النظر عن نموذج التطوير / الإدارة المعتمد ، يتضمن تطوير البرامج المضمنة بشكل عام الخطوات التالية:
- تطوير متطلبات المنتج
- تصميم النظام وتطوير الخوارزمية
- الترميز
- اختبارات
سوف ندرس بعض الصعوبات التي تأتي مع هذه المراحل وبعض الأدوات التي يمكن أن تزيد من الكفاءة والإنتاجية.
1. تطوير متطلبات المنتج
غالبًا ما يتم وضع مواصفات المنتج مع وضع مصممي اللوحة في الاعتبار. يحتوي عادةً على القليل من المعلومات التي يمكن أن تساعد في تطوير البرامج الثابتة ، وبالتالي ، ينتهي مطور البرامج المضمنة بمستند 250 صفحة (متوسط) معيب لا يمكن استخدامه كمراجع ، وإذا لم يتم النظر فيه بعناية فقد يؤدي بسهولة إلى أخطاء في التصميم والتي بدورها ، يؤدي إلى تمديد الإطار الزمني للمشروع إن لم يكن الفشل الكلي للمشروع. نادرًا ما تحتوي المستندات على معلومات حول السجلات أو حقول البت الخاصة بهامن بين أمور أخرى ، وهذا يكلف مطوري البرامج الثابتة عدة ساعات عمل أثناء بحثهم في المستند لتحديد أشياء مثل أي سجل ينتمي إلى أي مجموعة وأي حقل بت ينتمي إلى أي سجل. فيما يلي بعض النصائح التي يمكن أخذها في الاعتبار لضمان تطوير وثائق مواصفات المشروع الأكثر فائدة.
استخدام أوصاف السجل
كما نوقش أعلاه ، يحتاج مطورو البرامج الثابتة إلى فهم تعقيدات جميع السجلات والذكريات وما إلى ذلك لجميع عناصر التحكم (وحدة المعالجة المركزية ، MCU ، إلخ) في المشروع حتى يتمكنوا من التحكم بشكل فعال في جميع أجزاء النظام. لوضع هذا في مكانه الصحيح ، يمكن لمطوري البرامج الثابتة التأكد من أن وثيقة المواصفات تحمل وصفًا مناسبًا للسجلات إلى جانب خرائط الذاكرة. يمكن تعيين اسم مميز لجميع السجلات الموجودة في عنصر التحكم ، مما يسهل التعرف عليها عبر المستند ويمكن ربطها جميعًا بشكل سريع بحيث تؤدي إلى قائمة داخل المستند توضح الاسم والموقع والحظر وعنوان كل سجل.
أوصاف المهام
هناك طريقة أخرى يمكن من خلالها جعل مستندات المواصفات مفيدة لمطوري البرامج المضمنة وهي وصف ما يفترض أن تفعله كل كتلة وكيف ينبغي أن تفعل ذلك. في هذه المرحلة أيضًا ، يجب أن تكون هناك خطط لمعالجة الأخطاء تحت كل كتلة. يبدو هذا في الأساس كما يقول مطور البرامج الثابتة ؛ "عندما أصل إلى هنا ، سأفعل هذا ، هذا وهذا ، وأضمن عدم حدوث هذا ، هذا وذاك". يساعد هذا في توجيه عمل المطور ويساعد في تقييم المشروع حتى قبل أن يبدأ التصميم في تحديد الأخطاء والأخطاء المحتملة ، مما يوفر الوقت والمال الثمين.
هناك عوامل أخرى بما في ذلك بنية المستند ، واستخدام الخطوط سهلة القراءة (شيء يمكن للمطورين العمل معه حتى عندما يكونون متعبين) ، والمخططات والصور حيثما أمكن ، والتي يمكن أن تزيد جميعها من كفاءة فريق البرامج الثابتة بعد هذه المرحلة.
2. تصميم النظام وتطوير الخوارزمية
تتضمن هذه المرحلة تطوير الأكواد الكاذبة والمخططات الانسيابية وآلات الحالة وكل ما يتعلق بتصميم البرامج الثابتة. في هذه المرحلة ، يمكن استخدام عدد كبير من الأدوات للمساعدة في تنظيم الأفكار ، واستكشاف البرامج القديمة / المكتوبة مسبقًا حول المشروع وتطوير مخطط انسيابي خاص بك ، وآلة الحالة وما إلى ذلك. تمت مناقشة بعض هذه الأدوات أدناه.
PIMs
في هذه المرحلة من تطوير المنتج ، يميل المطورون إلى الخربشة كثيرًا أثناء قيامهم بجمع الموارد حول المشروع من روابط الويب إلى الصيغ وما إلى ذلك. ومن أفضل الطرق لتتبع هذه المعلومات حتى تكون مفيدة لاحقًا هي استخدام PIM (إدارة معلومات المنتج). هناك عدد لا بأس به من PIMs هناك ولكن سأذكر القليل مع بعض الميزات البارزة.
1. Evernote
يساعدك Evernote على تدوين الملاحظات المتوفرة عبر أي منصة حتى تتمكن من التحقق من الملاحظة التي كتبتها على جهاز الكمبيوتر الخاص بك أثناء وجودك في الحافلة إلى المنزل. الملاحظات منظمة بشكل جيد ويمكن البحث فيها تمامًا ، لذا ستجد دائمًا ما تحتاجه.
2. TrunkNote
مذكرة الجذع هي تطبيق تدوين ملاحظات يشبه Wiki. إنه يجلب كل القوة التنظيمية للويكي لتدوين الملاحظات. إنه تطبيق قائم على الهاتف المحمول ولكن يمكن مزامنته بسهولة مع جهاز كمبيوتر عبر WIFI.
أنواع أخرى من PIMs مثل Tiddlywiki إلخ. تأتي كل واحدة منها مع ميزات قد تجعلها أكثر جاذبية لأفراد معينين وقد تأخذ بعض العينات قبل أن تستقر في النهاية على واحدة.
فهم التعليمات البرمجية القديمة
هناك مجموعة أخرى من الأدوات المفيدة جدًا أثناء مرحلة التصميم وهي أدوات لفهم الرموز القديمة. في الحالات التي يكون فيها المنتج الذي يتم تصميمه هو نسخة محسنة من منتج سابق ، قد يجد المطور أنه من المفيد مراجعة العمل الذي تم إنجازه بالفعل للحصول على بعض الأفكار وربما أجزاء من التعليمات البرمجية لهذا المشروع الجديد. قد يكون هذا طريقًا طويلاً ، خاصة إذا لم تكن جزءًا من الفريق الذي أنشأ البرنامج السابق. يوجد عدد كبير من البرامج التي تساعد في بناء الأشجار وإنشاء الوثائق والمخططات الانسيابية من التعليمات البرمجية المكتوبة بالفعل.
1. دوكسجين
Doxygen هي أداة قوية جدًا تساعد في إنشاء وثائق من أكواد المصدر. تم تصميمه بشكل رئيسي للعمل مع C ++ ولكنه يعمل أيضًا مع C و Python وبعض اللغات الأخرى. لديها القدرة على استخراج بنية الكود لأي كود ، وتوفير الرسوم البيانية التبعية التي تم إنشاؤها تلقائيًا ومخططات الوراثة للمساعدة في تصور الكود.
2. جراففيز
وفقًا لموقع الويب الخاص بهم ، تساعد Graphviz في تقديم المعلومات الهيكلية كمخططات للرسوم البيانية والشبكات المجردة. يمكن استخدامه جنبًا إلى جنب مع Doxygen لفهم الرسومات التي ينتجها بشكل أفضل.
3. سريكورد
Srecord هو أداة قوية لمعالجة صور البرامج الثابتة والتحويل بين تنسيقات الملفات المختلفة. يمكن استخدامه لحساب وتنفيذ CRCs و Checksums على كتل البايت ، وتصحيح ملفات الأخطاء التي تم إنشاؤها بسبب سلاسل أدوات عربات التي تجرها الدواب ، وتصفية أو نقل أقسام من الملفات من بين أشياء أخرى يمكن العثور على مزيد من المعلومات حول استخدامه على صفحة SourceForge الخاصة به.
بعض الأدوات الأخرى التي تندرج تحت هذه الفئة هي CrystalRev و Hexplorer وغيرها.
تطوير الخوارزميات
جميع مجاميع البحث وتدوين الملاحظات لتطوير خوارزميات تدور في رموز زائفة ومخططات انسيابية للمشروع. توجد العديد من الأدوات لتطوير المخططات الانسيابية وعلى الرغم من أن معظمها لا يقتصر على تطوير البرامج الثابتة ، إلا أنها توفر ميزات مفيدة ومهمة تنجز المهمة ببساطة وتساعد أيضًا في الحفاظ على المخططات طوال دورة تطوير المنتج. فيما يلي بعض من أفضل الأدوات المتوفرة لرسم الخرائط.
1. QFSM
QFSM هي أداة رسومية لتصميم ومحاكاة آلات الحالة المحدودة. قدرتها على محاكاة التصميمات تجعلها أفضل من معظم البرامج الأخرى في هذه المجموعة. إنه مفيد بشكل خاص عند تصميم آلات الحالة لـ FPGA والأجهزة المستهدفة المماثلة.
2. مخطط واضح
يمكن القول إن المخطط الواضح هو أفضل برامج الرسوم البيانية وأكثرها مرونة. إنه مستند إلى الويب ويحتوي على ميزات جماعية تتيح لك العمل بين أجهزة متعددة والتعاون في الوقت الفعلي مع زملائك في الفريق.
3. برنامج Microsoft Visio
يعد Visio أحد أفضل الأدوات الرسومية حاليًا. يحتوي على مجموعة من الكائنات من مجالات مختلفة تجعل من السهل وصف أي شيء. ومع ذلك ، فإنه لا يأتي مع ميزات تعزز التعاون بين الفرق ويمكن استخدامه فقط على جهاز windows المثبت عليه.
4. العروض التقديمية من Google
أحد الأشياء الرئيسية في تطوير المنتجات في عالم اليوم هو استخدام الأدوات التي تتيح للفرق التعاون بشكل فعال من أي مكان ، وهذا أحد الأشياء التي توفرها شرائح Google على متن الطائرة. يمكن استخدامه لتطوير جميع أنواع المخططات من مخططات تدفق البرامج إلى المخططات التنظيمية والخرائط الذهنية. إنه مستند إلى السحابة ويعمل في جميع المتصفحات الشائعة تقريبًا.
توجد العديد من الأدوات الأخرى لإنشاء مخططات انسيابية وتطوير خوارزمية عامة ، كالعادة ، لكل منها مزاياها وعيوبها.
3. ترميز البرامج الثابتة المضمنة
كل ما تم ذكره حتى هذه النقطة يؤدي إلى هنا. عالم SDKs و IDEs ، يعتمد اختيار الأدوات في هذه المرحلة على الجهاز المستهدف والميزات التي سيتم تضمينها في الجهاز ، ولهذا السبب ، سأستبعد SDKs و IDEs الشائعة مثل MPLAB ، وما إلى ذلك من المناقشة ، وما عليك سوى التمسك إلى أدوات أكثر تكاملاً بطبيعتها.
1. QT (تطوير واجهة المستخدم الرسومية)
تعد العروض (التفاعلية أو غير التفاعلية) هي الوسائط الأكثر شيوعًا لتقديم الملاحظات للمستخدمين هذه الأيام ، وتعد QT's SDK واحدة من أفضل البرامج المتوفرة وربما لا تكون غريبة على أي شخص داخل الدائرة المضمنة. يوفر ميزات "السحب والإفلات" التي تجعل من السهل تطوير التطبيقات المعقدة القائمة على واجهة المستخدم الرسومية للأجهزة المدمجة ، بغض النظر عن النظام الأساسي المستهدف ، أو لغة البرمجة المستخدمة لتطوير المشروع بشكل عام. إنه يزيل بشكل أساسي الضغط المرتبط باستخدام التعليمات البرمجية لإنشاء واجهات المستخدم.
2. (النماذج الأولية السريعة)
واحدة من أكبر الاختناقات في تطوير البرامج المضمنة هي حقيقة أن الأجهزة عادة ما تكون غير متوفرة لاختبار الأشياء أثناء التنقل أثناء تطوير البرنامج. في كثير من الأحيان عندما يكون ذلك متاحًا ، كان مطورو البرامج الثابتة مضطرين للانتظار طوال الوقت الذي يستغرقه الجهاز ليكون جاهزًا للقيام بالقليل أو لا شيء. يؤدي هذا إلى زيادة المهلة الزمنية ولا يوفر مجالًا لنوع المزامنة بين مهندسي الأجهزة ومطوري البرامج الثابتة التي من شأنها زيادة جودة المنتج. للمساعدة في حل هذه المشكلة ، أنشأ الرجال في VaST منصة نماذج افتراضية على مستوى الأنظمة الإلكترونية يمكن استخدامها لإنشاء نموذج أولي للأجهزة الافتراضية التي يمكن تنفيذ البرامج المضمنة عليها لتحديد أداء الأنظمة قبل أن يصبح الجهاز جاهزًا.
3. Doxygen (وثائق)
يعد التوثيق أحد أهم أجزاء كتابة أي كود وأحد أكثر الأدوات شيوعًا لذلك هو Doxygen. بصرف النظر عن استخدامه لفهم البرامج القديمة ، فإن Doxygen لديه القدرة على استخراج التعليقات تلقائيًا من رمز وإنشاء وثائق تتضمنه. تتضمن هياكل Doxygen الملفات بيانياً وإنشاء مراجع لكل دالة ومتغير وماكرو مستخدم في التعليمات البرمجية الخاصة بك. يمكن أيضًا تضمين المخططات الانسيابية ومخططات تدفق البيانات في الوثائق من خلال الجمع بين Doxygen و Graphviz.
4. GIT (أنظمة التحكم في الإصدار)
من الصعب تصديق أن أي شخص يطور برنامجًا من أي نوع بدون نوع من نظام التحكم في الإصدار هذه الأيام ، ولكن في حالة قيامك بذلك ، إنها فكرة سيئة جدًا قد تؤدي إلى أخطاء ستكلفك الوقت والمال. تبرز Git بين جميع أدوات التحكم في الإصدار المتوفرة لعدة أسباب. إنه مفتوح المصدر وسريع وفعال ومحلي في الغالب. إلى جانب Git ، فإن أدوات مثل التخريب تستحق الذكر أيضًا.
اختبار البرامج الثابتة المضمنة
يعد الاختبار جزءًا مهمًا من عملية التطوير لأي شيء. تخسر الشركات آلاف الدولارات عند استدعاء الأجهزة بسبب أخطاء البرامج الثابتة ، لذا فهي جزء من التطوير يجب أن يؤخذ على محمل الجد. غالبًا ما يتم إجراؤه جنبًا إلى جنب مع الترميز والمجموعة الأولى من الأدوات لاختبار الكود ، وربما تكون أدوات تصحيح الأخطاء داخل IDE أو SDK المستخدمة في المشروع. يأتي الاختبار بأشكال مختلفة ويتم إجراؤه في مراحل مختلفة ، وبالتالي فهو يتضمن أنواعًا متنوعة من الأدوات. تتخطى أدوات الاختبار تطوير البرامج الثابتة التحقق من صحة التصميم لتحليل ثابت وأدوات اختبار وقت التشغيل. فيما يلي بعض الأدوات التي أجدها مفيدة حقًا.
1. كريستال ريف
الدورات البلورية هي أداة لدراسة الكود. يمكن استخدامه لإنشاء مخطط انسيابي من كود C / C ++ مما يجعله أداة رائعة لمراجعة الكود الخاص بك ومعرفة ما إذا كان التصميم الأولي هو ما تم تنفيذه. مع مراجعة الكريستال ، ستتمكن من رؤية الفرق بين التصميم والتنفيذ بسرعة. كما أن قدرتها على إنشاء مخططات التدفق والبيانات وتدفق المكالمات من الرموز تجعلها أداة مفيدة لتحليل الكود القديم.
2. كمبيوتر- لينت
تعد PC-lint واحدة من أقدم أدوات اختبار البرامج الثابتة الموجودة. إنه قادر على تحليل البرامج لتحديد الأخطاء ونقاط الضعف الأمنية وضمان كتابة التعليمات البرمجية بما يتماشى مع معايير الصناعة. تشمل الأدوات المماثلة polyspace و LRDA و Eggplant و Tessy وغيرها.
3. Wireshark
يكون هذا مفيدًا عند إنشاء أجهزة الشبكة. إنه في الأساس عبارة عن حزمة شم ويمكن أن يساعد في عرض البيانات التي يرسلها جهازك. هذا يمكن أن يساعد في تأمين الجهاز.
4. برنامج تشغيل منفذ تسلسلي افتراضي
VSPD by eltima software هي أداة قدمتها لي صديقًا مؤخرًا. إنه مفيد حقًا عند العمل على برامج تشغيل الأجهزة والتطورات الأخرى المتعلقة بمنافذ com. يمنحك منفذ com التسلسلي الظاهري القدرة على اختبار سلوك منافذ com بدون الجهاز المستهدف. يمكنك إنشاء عدد غير محدود من المنافذ القادرة على محاكاة جميع إعدادات منافذ com الحقيقية. يأتي البرنامج أيضًا مزودًا بميزات مثل تقسيم المنفذ التسلسلي ، ودمج منافذ Com ، واستخدام اتصالات منفذ COM المجمعة من بين الميزات الرائعة الأخرى.
هذا كل شيء في هذا المقال ، شكرًا على قضاء بعض الوقت في القراءة. في حين أنه من المستحيل سرد جميع الأدوات الموجودة هناك على الأرجح ، آمل أن تجد بعض هذه الأدوات مفيدة.