سؤال

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

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

المحلول

هذا ليس سؤالًا مباشرًا للإجابة عليه.ويعتمد ذلك على عدد من العوامل منها:

  • كيف تفضل تخطيط التعليمات البرمجية الخاصة بك.
  • ما إذا كان هناك مترجم C++ متاحًا لهدفك (وأي أهداف أخرى قد ترغب في استخدام أداة تحميل التشغيل عليها).
  • ما مدى أهمية حجم الكود بالنسبة لتطبيقك (ربما نتحدث عن 10% إضافية، وليس ميغابايت كما هو مقترح في إجابة أخرى).

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

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

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

للحصول على مناقشة جيدة حول العديد من الأسباب غير الصالحة التي يرفضها الأشخاص لـ C++، راجع مقالة دان ساكس على موقع Embedded.com.

نصائح أخرى

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

إذا كنت لا تحتاج إلى استخدام كائن الاتجاه، استخدام C. خيار بسيط هناك. في أبسط وأسهل، في حين إنجاز نفس المهمة.

وبعض صلابة يموت سوف نختلف، ولكن OO هو ما يجعل C ++> C، والعكس بالعكس في كثير من الظروف.

وأود أن استخدام C ما لم يكن هناك سبب محدد لاستخدام C ++. لبووتلوأدر أنك لن حقا في حاجة OO.

استخدم أبسط أداة من شأنها أن إنجاز هذه المهمة.

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

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

ولقد وجدت أيضا أن الإقلاع وتطبيق عادة بمشاركة بعض كمية من التعليمات البرمجية شائعة جدا قد ترغب أيضا في النظر في استخدام نفس اللغة التطبيق الخاص بك لتسهيل تقاسم الرموز.

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

والذهاب مع C ++ وobjchoose ما ميزات اللغة التي تحتاج إليها. لا يزال لديك السيطرة الكاملة على رمز الكائن الناتج طالما كنت فهم المجردات وC ++ الذي تستخدمه.

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

يستخدم ج مع μClibc.سيجعل التعليمات البرمجية الخاصة بك أبسط ويقلل من بصمتها.يمكن العثور عليها في: www.uclibc.org.

لمثل هذه المهمة المحددة باعتبارها محمل أنا بالتأكيد لا تستخدم C ++. أعتقد أن المعيار ج ++ المكتبة على الأقل بضع MB، وليس ما تريد في الإقلاع. الذهاب مع C.

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