متفرقات

تحسين الكود في ميكروكنترولر

مؤلف: Laura McKinney
تاريخ الخلق: 4 أبريل 2021
تاريخ التحديث: 16 قد 2024
Anonim
CCP Module - Compare Mode | كورس برمجة ميكروكنترولر
فيديو: CCP Module - Compare Mode | كورس برمجة ميكروكنترولر

المحتوى

أكمل المؤلف مشروعه الهندسي في العام الأخير باستخدام وحدات التحكم الدقيقة dsPic ، واكتسب رؤية شاملة في هذه الأجهزة.

قد يتطلب رمز لغة C لوحدة التحكم الدقيقة تحسينًا في بعض التطبيقات المتقدمة. يتم ممارسة تحسين الكود هذا لتقليل شيئين حاسمين:

  1. حجم الكود: يمكن لوحدات التحكم الدقيقة تخزين بيانات وإرشادات محدودة بسبب الحجم المحدود لذاكرة الوصول العشوائي الخاصة بهم. لذلك يجب تحسين الكود ، بحيث يمكن استخدام التعليمات وذاكرة البيانات المتاحة بأكثر الطرق فعالية.
  2. أوقات تنفيذ التعليمات البرمجية: Microcontroller هي أجهزة متسلسلة تقوم بتنفيذ تعليمات واحدة في كل مرة. تستهلك كل تعليمات تجميع عددًا معينًا من دورات الساعة لتنفيذ نفسها. لذلك يجب تحسين الكود للتأكد من أنه يؤدي المهمة المطلوبة في أقل عدد من دورات الساعة أو تعليمات التجميع. كلما قل عدد دورات الساعة التي يستخدمها الرمز ، زادت سرعة تشغيله. هذا يعني أنه يمكن تشغيل التطبيقات بشكل أسرع نظرًا لتقليل أوقات المعالجة.

تقدم هذه المقالة النصائح والحيل التي يمكن استخدامها لتقليل حجم ووقت تنفيذ رمز وحدة التحكم الدقيقة.


سيتم استخدام IDE لتطوير MplabX الخاص بشركة Microchip لشرح الأمثلة حيثما كان ذلك مناسبًا.

كيفية قياس وقت تنفيذ الكود بشكل تجريبي

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

  • بعض المجمعين لديهم القدرة على حساب دورات الساعة التي سيستهلكها الكود.
  • يمكن لبعض أدوات تصحيح الأخطاء ، على سبيل المثال ICD 3 من الرقاقة الدقيقة ، قياس وقت التنفيذ مباشرة من خلال ساعة توقيت.

1. تعرف على قوة المعالجة وحجم الذاكرة لوحدة التحكم الدقيقة الخاصة بك

ليس تردد الساعة (Mhz) دائمًا هو الذي يعطي الصورة الحقيقية لسرعة معالجة وحدة التحكم الدقيقة ، أو المقياس الأكثر واقعية هو MIPS (تعليمات ميجا في الثانية) أو عدد التعليمات التي يمكن أن تنفذها MCU في ثانية.

عادةً ما تتراوح MCUs من 60-70 MIPS في الفئة المتطورة إلى 20 MIPS 8-bit AVRs. من المحتمل أن تكون وحدة التحكم الدقيقة MIPS عالية التكلفة أكثر تكلفة من جهاز منخفض النهاية ، لذا لديك هنا مفاضلة بين التكلفة وسرعة المعالجة.


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

2. اختيار المتغيرات لتحسين حجم التعليمات البرمجية

وحدات التحكم الصغيرة لها ذاكرة بيانات محدودة ، تتراوح عادة من 1 إلى 4 كيلو بايت. في هذه الحالة ، من الحكمة اختيار أنسب نوع متغير وفقًا للنطاق المتوقع للتاريخ الذي يتم تخزينه. يلخص الجدول أدناه هذه المتغيرات:

ملخص المتغيرات المستخدمة في لغة سي.

نوع متغيرالحجم بالبايتنطاق

منطقي

1

0 أو 1 فقط

شار

1


-128 إلى 127

int

2

-32768 إلى 32767

عدد صحيح غير موقعة

2

0 إلى 65535

طويل

4

-2،147،483،648 إلى 2،147،483،647

يطفو

4

دقِّق حتى 6 منازل عشرية

مزدوج

8

دقِّ حتى 15 منزلاً عشريًا

مزدوج طويل

10

دقِّق حتى 19 منزلاً عشريًا

مثال:

  • إذا تمت إضافة متغيرين X و Y وكانت النتيجة مخزنة في Z ولكن من المتوقع أن تكون قيمة Z أعلى ، فيمكن بعد ذلك الإعلان عن Z على أنها طويلة ويمكن إعلان X و Y على أنهما غير موقعين int ، لا يُتوقع أيضًا أن تصبح قيم X و Y سلبية. سيوفر هذا 04 بايت في ذاكرة البيانات التي كان من الممكن استخدامها إذا تم الإعلان عن جميع المتغيرات على أنها طويلة.
  • يتم تقسيم متغيرين X و Y ، من المتوقع أن تكون قيمهما في أعداد صحيحة ، ولكن نتيجة القسمة قد تسفر عن رقم عشري ، ثم يمكن الإعلان عن X و Y على أنه صحيح ويمكن الإعلان عن النتيجة عائمة أو مضاعفة حسب الدقة المطلوبة.

قد يكون اختيار نوع البيانات أمرًا بالغ الأهمية عند إعلان المصفوفات التي تحتوي على عدد كبير من العناصر.

3. اختيار المتغيرات للتحسين في وقت تنفيذ التعليمات البرمجية

  • من الحقائق الثابتة أن حسابات النقطة العائمة تستغرق وقتًا أطول من حسابات النقطة الثابتة. لا تستخدم متغير فاصلة عائمة حيث لا تكون القيمة العشرية مطلوبة. العمل مع الأعداد الصحيحة بدون إشارة حيثما أمكن ذلك.
  • تفضل المتغيرات المحلية على المتغيرات العالمية. إذا تم استخدام متغير في دالة فقط ، فيجب الإعلان عنه في هذه الوظيفة لأن الوصول إلى المتغيرات العالمية يكون أبطأ من المتغيرات المحلية.
  • سيجد MCU 8 بت متغيرًا واحدًا بحجم بايت أسرع للوصول إليه وسيجد MCU 16 بت متغير 2 بايت أسهل للوصول إليه نظرًا لطول العنوان الذي تم إنشاؤه.

4. تحسين العمليات الحسابية

يمكن تحسين العمليات الحسابية بالطرق التالية.

  1. استخدم جداول البحث للقيم المحسوبة مسبقًا بدلاً من تقييم شرط الجيب أو أي دالة مثلثية أخرى أو أي عملية أخرى يمكن معرفة نتيجتها مسبقًا في الكود.
  2. في حالة تخزين جدول بحث الجيب بالفعل في الذاكرة ، يمكن تقييم جيب التمام من خلال دفع مؤشر الصفيف إلى 90 درجة.
  3. من بين العمليات الحسابية الأربع ، يستغرق القسمة والضرب معظم وقت المعالجة ، وعمليًا يمكن أن يكون في نطاق مئات الثواني الدقيقة أو نحو ذلك في حالة قيم الفاصلة العائمة.
  4. استخدم تعليمات إزاحة البتات بدلاً من القسمة والضرب. يعمل تعليمات المناوبة الصحيحة 3 على القسمة على 23 حيث كتعليمات التحول الأيسر 1 ستعمل على الضرب في 21.

5. استخدم متحكم DSP قادرًا لإجراء العمليات الحسابية المكثفة

تحتوي بعض وحدات التحكم الدقيقة على وحدة معالجة DSP بخلاف وحدة ALU التقليدية المضمنة في بنيتها. تم تصميم محرك DSP هذا لإجراء العمليات الحسابية بسرعة كبيرة في أقل عدد من دورات الساعة (واحدة في معظم الحالات) عدة مرات أسرع من ALU.

التعليمات التي يمكن لمعالج DSP تنفيذها بشكل أسرع ثم ALU هي:

  • تعليمات التحول والتناوب.
  • عمليات الضرب والأقسام والعمليات الحسابية الأخرى.
  • تقييم الجيب والوظائف المثلثية الأخرى.
  • جميع عمليات DSP مثل FFT و DFT والتفاف وتصفية FIR.

يتطلب استخدام محرك DSP لوحدة التحكم الدقيقة ما يلي:

  • يتم دمج مكتبات DSP منفصلة في المشروع.
  • تختلف أسماء الوظائف عن مكتبة الرياضيات القياسية للغة C. يمكن الاستفادة من توثيق هذه المكتبات والوظائف من موقع الويب الخاص بالمصنعين.
  • يستخدم محرك DSP نوعًا متغيرًا مختلفًا "كسريًا". تعرف على كيفية استخدام متغيرات النوع الكسري قبل متابعة وظائف مكتبة dsp.

لاحظ أن وظائف مكتبة الرياضيات القياسية لن تستدعي محرك DSP لأنها تُترجم إلى تعليمات تجميع ALU.

6. العمل مع المقاطعات

استخدم المقاطعات لأداء وظائف محددة مثل:

  • قراءة قيم ADC.
  • الإرسال والاستلام من UART.
  • تحديث سجلات دورة العمل PWM.
  • CAN أو اتصال I2C.

ستعمل المقاطعات على خدمة هذه الوظائف بسرعة مقارنة بأدائها في الجسم الرئيسي عن طريق استدعاء وظيفة أو رمز مضمّن.

سيتم تشغيل المقاطعات أيضًا عند الحاجة فقط ، بينما إذا تم تشفيرها في الجسم الرئيسي ، فسيتم تنفيذ الكود في كل تكرار للحلقة while (1).

7. استخدم أفضل المجمعين المتاحين

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

8. استخدم العبارات الشرطية بذكاء

  • عند استخدام سلسلة من عبارات if-else ، احتفظ بالشرط الأكثر احتمالًا أولاً. بهذه الطريقة لن تضطر وحدة MCU إلى فحص جميع الظروف بعد أن تعثر على الحالة الحقيقية.
  • عادة ما تكون عبارة switch-case أسرع من if-else.
  • استخدم عبارات if-else المتداخلة بدلاً من سلسلة من العبارات. يمكن تقسيم كتلة if-else التي تحتوي على العديد من العبارات إلى فروع فرعية أصغر لتحسين الحالة الأسوأ (الأخيرة).

9. استخدام وظائف مضمنة

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

  • يمكن الإعلان عن وظيفة مضمنة باستخدام الكلمة الأساسية "ثابت" معها.

10. استخدم الحلقات المتناقصة

ستؤدي الحلقة المتناقصة إلى إنشاء رمز تجميع أقل مقارنةً بالحلقة المتزايدة.

وذلك لأنه في حلقة الزيادة ، يلزم وجود تعليمات مقارنة لمقارنة فهرس الحلقة بالقيمة القصوى في كل حلقة للتحقق مما إذا كان مؤشر الحلقة يصل إلى القيمة القصوى. على العكس من ذلك في حلقة التناقص ، لم تعد هناك حاجة إلى هذه المقارنة لأن النتيجة المتناقصة لمؤشر الحلقة ستحدد علامة الصفر في SREG إذا وصلت إلى الصفر.

بالنظر إلى أن الحلقة يجب أن تتكرر مئات المرات ، فإن تقليل تعليمة واحدة من الحلقة سيؤدي إلى تجنب تنفيذها مئات المرات ، لذا من المرجح أن يكون التأثير أكثر أهمية عندما يتعين على الحلقة أن تتكرر عدة مرات.

تغليف

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

هذه المقالة دقيقة وصحيحة على حد علم المؤلف. المحتوى لأغراض إعلامية أو ترفيهية فقط ولا يحل محل الاستشارة الشخصية أو المهنية في الأعمال التجارية أو المالية أو القانونية أو الفنية.

اختيار الموقع

نوصي

كيفية إنشاء ومحاذاة واستخدام خانة اختيار لقائمة مهام في Excel 2007 و 2010
أجهزة الكمبيوتر

كيفية إنشاء ومحاذاة واستخدام خانة اختيار لقائمة مهام في Excel 2007 و 2010

يكتب روبي في الغالب عن kyrim ولكنه يلقي الضوء أحيانًا على شذوذ تطبيقات Micro oft مثل Excel و Outlook.يتيح لك Excel إضافة عدد من عناصر التحكم في النموذج إلى جداول البيانات الخاصة بك. اليوم سننظر في مرب...
تحديثات حالة مضحكة وذكية ولطيفة على Facebook و Twitter
إنترنت

تحديثات حالة مضحكة وذكية ولطيفة على Facebook و Twitter

tricktlyDating هو كاتب أسترالي يقوم بإنشاء صفحات من الاقتباسات المضحكة الأصلية وتحديثات الحالة.فيما يلي قائمة بتحديثات الحالة المضحكة والرائعة والرائعة والتي تعتبر رائعة لأماكن مثل Facebook و Twitter...