الترجمة المتقاطعة لأهداف ARM
أعدّ سلسلة أدوات للترجمة المتقاطعة تستهدف المتحكمات الدقيقة ARM.
الترجمة المتقاطعة لأهداف 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- القيود في الأنظمة المضمّنة: بلا RTTI أو استثناءات
- الإدخال والإخراج المعتمدان على خرائط الذاكرة وvolatile
- اعتبارات الزمن الحقيقي ووقت الاستجابة
- الترجمة المتقاطعة لأهداف ARM