C++ Academy · درس

الترجمة المتقاطعة لأهداف ARM

أعدّ سلسلة أدوات للترجمة المتقاطعة تستهدف المتحكمات الدقيقة ARM.

الدرس 4 من 415 خطوة

الترجمة المتقاطعة لأهداف ARM درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

ما المقصود بالترجمة المشتركة؟

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

سلسلة أدوات الترجمة المشتركة

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

# GCC ARM Embedded for Cortex-M
arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -O2 main.c
arm-none-eabi-objcopy -O ihex a.out a.hex

تثبيت سلسلة الأدوات

الخيارات الشائعة:

  • GCC ARM Embedded — سلسلة أدوات رسمية ومجانية
  • Clang/LLVM — تدعم العديد من الأهداف مباشرةً
  • سلاسل أدوات الموردين — مضمّنة مع بيئات التطوير المتكاملة (Keil، IAR)

ثلاثيات الهدف

تحدد الثلاثية الهدف بالصيغة: CPU-Vendor-OS-ABI. أمثلة:

  • arm-none-eabi — ARM بدون نظام تشغيل
  • aarch64-linux-gnu — Linux على ARM ‏64-بت
  • x86_64-pc-windows-msvc — Windows ‏x64 مع ABI الخاصة بـ MSVC

مخططات الربط

تحتاج الأهداف المضمنة إلى مخطط ربط يصف تخطيط الذاكرة — موضع Flash وRAM، ومكان بدء المكدس. وتوفر سلسلة الأدوات إعدادات افتراضية يمكنك تجاوزها.

/* Simplified linker script */
MEMORY {
    FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 256K
    RAM   (rw) : ORIGIN = 0x20000000, LENGTH = 64K
}

جدول بدء التشغيل والمتجهات

يُعد ملف بدء التشغيل مؤشّر المكدس، وينسخ البيانات المهيّأة من Flash إلى RAM، ويصفّر BSS، ثم ينتقل إلى main. ويوفر المورد هذا الملف عادةً.

خيارات المترجم لـ ARM

الخيارات الشائعة:

  • -mcpu=cortex-m4 — تحديد وحدة المعالجة المركزية
  • -mthumb — مجموعة تعليمات Thumb
  • -mfloat-abi=hard -mfpu=fpv4-sp-d16 — وحدة FPU عتادية
  • -Os — تحسين الحجم

Newlib وNewlib-Nano

مكتبة C القياسية الخاصة بـ GCC المضمنة. ويُعد Newlib-Nano إصدارًا مبسطًا بحجم تعليمات برمجية أصغر.

الربط مع libc

تربط العديد من المشاريع المضمنة مع libc بسيطة، أو تنفذ فقط الأجزاء التي تحتاج إليها (بديل لـ printf، أو بديل شكلي لـ malloc).

استخدام CMake للترجمة المشتركة

حدد ملف سلسلة الأدوات عند استدعاء CMake.

# arm-none-eabi.cmake
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

# Usage
cmake -B build -DCMAKE_TOOLCHAIN_FILE=arm-none-eabi.cmake

تصحيح الأخطاء باستخدام GDB

استخدم GDB المخصص للهدف (arm-none-eabi-gdb) المتصل بمسبار عتادي عبر OpenOCD أو ST-Link أو J-Link أو pyOCD.

برمجة الملف الثنائي

حوّل ELF إلى ملف hex أو ملف ثنائي، ثم استخدم أدوات المورد أو OpenOCD لكتابته إلى Flash.

arm-none-eabi-objcopy -O binary firmware.elf firmware.bin
st-flash write firmware.bin 0x08000000

اختبر على المضيف أولًا

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

تحقق سريع

ماذا تشير ثلاثية الهدف arm-none-eabi؟

خلاصة

تتيح لك الترجمة المشتركة البناء لـ ARM (أو لأهداف أخرى) من جهاز التطوير لديك. استخدم سلسلة أدوات للهدف (arm-none-eabi-gcc)، وأعد إعداد مخطط ربط، واختر خيارات وحدة المعالجة المركزية المناسبة، وصحّح الأخطاء باستخدام OpenOCD وGDB. وتعمل ملفات سلسلة أدوات CMake على أتمتة الإعداد.

البدء مجانًا

تعلم C++ مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
51
الدروس
203

الأسئلة الشائعة

هل درس «الترجمة المتقاطعة لأهداف ARM» مجاني؟

نعم — نص درس «الترجمة المتقاطعة لأهداف ARM» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «الترجمة المتقاطعة لأهداف ARM»؟

أعدّ سلسلة أدوات للترجمة المتقاطعة تستهدف المتحكمات الدقيقة ARM. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «الترجمة المتقاطعة لأهداف ARM»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. القيود في الأنظمة المضمّنة: بلا RTTI أو استثناءات
  2. الإدخال والإخراج المعتمدان على خرائط الذاكرة وvolatile
  3. اعتبارات الزمن الحقيقي ووقت الاستجابة
  4. الترجمة المتقاطعة لأهداف ARM
← العودة إلى C++ Academy