سؤال

يا رفاق ، لدي مشروع جمعته لمعالج ARM Cortex-A8. أنا أستفيد من مجلس التعاون الخليجي للقيام بذلك. حاليا حجم القابل للتنفيذ هو 220.1 كيلو بايت. الآن أقوم بتعديل Makefile وأضيف العلم -mthumb, ، يبدو خط Makefile مثل هذا -

gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon

أقوم بهذا التغييرات في جميع Makefiles الخاصة بي وأبني مشروعي ، لكن قابلة للتنفيذ ، ما زالت أخيرًا ما زالت تبلغ 220.1 كيلو بايت.

لقد قمت بتغيير واحد آخر في سطر الأوامر الخاص بي ، أضفت خيار العمل -mthumb -Interwork

gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon

مرة أخرى أحصل على نفس الحجم القابل للتنفيذ 220.1 كيلو بايت. هل أفتقد أي شيء أثناء القيام بذلك؟

كتبت برنامجًا صغيرًا ، للعثور على أصغر رقمين وقمت بتجميعه باستخدام سطر الأوامر التالي

gcc main.c -o main

أحصل على 8.5 كيلو بايت قابلة للتنفيذ

بعد ذلك ، أفعل أ

gcc -mthumb main.c -o main

ما زلت أحصل على 8.5 كيلو بايت قابلة للتنفيذ.

ما الخطأ هنا؟

لقد فعلت ذلك ل cat /proc/cpuinfo لمعرفة ما إذا كان الإبهام مدعومًا حقًا من قبل معالجتي ، وأرى أنه مدعوم بالفعل. انا حصلت -

Processor: ARMv7 Processor rev 5 (v7l)
Features: swp half thumb fastmult vfp edsp neon vfpv3
....
....
هل كانت مفيدة؟

المحلول

أعتقد أن -Marm يعني أن لديك ذراعًا بدون إبهام ، حاول إزالة Marm.

نصائح أخرى

من الصعب القول دون الحصول على الكود الفعلي ، لكن لديّ اقتراحات.

  1. تمكين التحسينات. (على سبيل المثال -O3 -مقاطع وظيفية -مقاطع fdata)
  2. تجريد القابل للتنفيذ للتأكد من عدم حساب معلومات التصحيح.
  3. تحقق من حجم الكود الفعلي (.text) ، وليس حجم الملف. ربما هناك بعض الحشو. يمكنك استخدام OBJDump لذلك.
  4. قم بتفريغ رمز التجميع (مفتاح التبديل) وتحقق من أنه ينتج بالفعل تعليمات الذراع في حالة واحدة وإبهام في حالة أخرى.

مع بعض المترجمين ، يكون الإبهام هو الافتراضي عند التجميع لـ ARMV7. هل أنت متأكد من أن القابل للتنفيذ الأصلي لم يتم بناؤه إلى الإبهام؟

حاول البناء باستخدام -mno -thumb ومعرفة ما إذا كان حجم الكود يزداد أم لا.

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