سؤال

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

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

هل هنالك طريقة افضل لانجاز هذا؟هل هناك خيار غير معروف لـ ld أو اصطلاح تسمية للبرنامج النصي للرابط والذي سيتم تشغيله تلقائيًا من خلال cpp؟

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

المحلول

هذا ليس هو الحل الذي تبحث عنه تمامًا ولكن أحد الخيارات هو استخدام نظام البناء لتكوين هذه القيم.قم بإنشاء config.h.in وtarget.ld.in اللذين يعملان كقوالب واجعل نظام البناء ينتج config.h بالتعريف الصحيح وtarget.ld بالعنوان الصحيح للهدف الذي تقوم ببنائه.

نحن نستخدم CMake لأنظمتنا المدمجة وهو يدعم هذا النوع من الأشياء.يقوم GNU autoconf أيضًا بذلك ولكني لم أحبه شخصيًا أبدًا.

نصائح أخرى

يمكنك استخدام البنية المحددة لـ emdedded-C @ لوضع كائن في أي مكان في مساحة العنوان.

static struct SOMESTRUCT somestruct @ 0x40000000;
extern int someextint @ 0x3ffffffc;
char somebuffer[77] @ 0x80000000;

بافتراض وجود MCU 32 بت.

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