Arduino C++ code:يمكنك استخدام وظائف افتراضية و استثناءات ؟

StackOverflow https://stackoverflow.com/questions/461836

سؤال

متابعة هذا التعليق من السؤال كتابة البرامج الثابتة:الجمعية أو عالية المستوى ؟ :

عند التحويل البرمجي C++ الكود اردوينو منصة يمكنك استخدام وظائف افتراضية, استثناءات, وما إلى ذلك ؟ أو هل تريد أن (أن) استخدام مجموعة فرعية من C++ (كما هو موضح في التعليق)?

أي محاذير أخرى عند برمجة اردوينو منصة ؟

هل كانت مفيدة؟

المحلول

والبيئة اردوينو تستخدم نسخة AVR من toolchain دول مجلس التعاون الخليجي. يتم ترجمة التعليمات البرمجية كما C ++، بحيث يمكنك استخدام الطبقات. وظائف افتراضية ممكنة. سيتم تخزين vtables في قسم .data ولها عناوين صحيحة. في الواقع، تستخدم الفئة الأساسية طباعة وظائف افتراضية على التكيف مع مختلف أساليب "طباعة" إلى انتاج أنواع مختلفة.

غير معتمدة

والاستثناءات لأسباب مساحة التعليمات البرمجية. البيئة اردوينو يمر "، استثناءات -fno" إلى سطر الأوامر مترجم. انظر المصدر للحصول على التحقق من هذه .

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

نصائح أخرى

اردوينو يستخدم برنامج avr-دول مجلس التعاون الخليجي إلى تجميع الرسومات.القيود التالية كانت مصدرها avrlibc أسئلة وأجوبة (يمكنني استخدام C++ على AVR?):

دعم

  • وظائف افتراضية
  • المنشئات المتلفات (بما في ذلك تلك العالمية)

غير معتمد

  • C++ القياسية وظائف فئات و فئات قالب (ولكن انظر هذا المنفذ من uClibc++ ل Arduino)
  • مشغلي new و delete (محاولة استخدامها سوف يسبب رابط يشكو من غير معرفة المراجع الخارجية).وهذا يعني أن الأشياء لا يمكن أن يتحقق إلا على المكدس.إذا ديناميكية تخصيص الذاكرة المطلوبة يجب أن تنفذ باستخدام malloc() و free() من C أنواع
  • الاستثناءات.منذ الاستثناءات يتم تمكين بشكل افتراضي في C++ الواجهة ، فإنها صراحة تحتاج إلى إيقاف استخدام -fno-exceptions في خيارات برنامج التحويل البرمجي.ويتم ذلك تلقائيا من قبل Arduino IDE عندما تطلق avr-gcc

قضايا أخرى

  • بعض الموردة تشمل الملفات غير C++ آمنة ، أيفإنها تحتاج إلى أن تكون ملفوفة مع
    extern "C" { . . . }

وقابليتها للاستعمال ميزات لا يقتصر عن طريق المنصة بل المترجم الذي تستخدمه.

وأود أن تحقق من وثائق المترجم الخاص بك على ما ميزات اللغة معتمدة.

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

وثائق تقول:

<اقتباس فقرة>   

ويستند اللغة اردوينو على C / C ++ ويدعم جميع بنيات C القياسية وبعض ميزات C ++.

وانه لا يقول شيئا عن وظائف الظاهرية التي يمكن أن أجد.

وحاولت برنامج بسيط ويجمع ما يرام. أنا لم نجرب ذلك على الأجهزة اردوينو بالرغم من ذلك.

وتحرير: وأنا أيضا لم تختبر الاستثناءات

واعتدت ز ++ مع هذا ماكيفيلي و التي تحتوي على هذا الرمز . ++ C النفايات بعض المساحة. لكن protothreads هي باردة جدا عدم استخدام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top