مقدمة إلى Rust المضمّنة
ابدؤوا باستخدام Rust المضمّنة، وتعرّفوا إلى سلسلة الأدوات ولوحات التطوير الشائعة وأساسيات البرمجة مباشرةً على العتاد.
مقدمة إلى Rust المضمّنة درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 3 دروس في المجموع.
مرحبًا بكم في Rust المضمنة
مرحبًا بكم في عالم Rust المضمنة! سيبدأ هذا الدرس رحلتكم في برمجة المتحكمات الدقيقة والأجهزة الأخرى محدودة الموارد باستخدام Rust.
سنستكشف سبب كون Rust خيارًا ممتازًا للأنظمة المضمنة، وما الذي يميز هذا المجال عن تطوير تطبيقات سطح المكتب أو الويب التقليدي.
Rust المضمنة في مقابل Rust القياسية
عند البرمجة للأنظمة المضمنة، غالبًا ما تعملون من دون نظام تشغيل. وهذا يعني أنكم تتفاعلون مباشرةً مع العتاد.
- لا يوجد نظام تشغيل: لا Linux ولا Windows ولا macOS.
- قيود الموارد: ذاكرة (RAM) ووحدة تخزين (Flash) محدودتان.
- العتاد المباشر: تتحكمون مباشرةً في الوحدات الطرفية مثل GPIOs والمؤقتات وواجهات الاتصال.
سلسلة أدوات Rust المضمنة
يتطلب البدء إعدادًا مختلفًا قليلًا عن إعداد Rust القياسي. ستستخدم عادةً rustup لتثبيت مكوّنات محددة:
- دعم الهدف: مثل
rust-std-arm-none-eabiللمتحكمات الدقيقة ARM Cortex-M. cargo-generate: أداة لإنشاء مشاريع جديدة من قوالب، وهي شائعة في إعدادات الأنظمة المضمّنة.- أدوات تصحيح الأخطاء: مثل
probe-rsلتهيئة جهازك وتصحيح أخطائه.
أساسيات الترجمة المتقاطعة
غالبًا ما يتضمن تطوير الأنظمة المضمّنة الترجمة المتقاطعة. ويعني ذلك ترجمة شفرتك على نوع من أجهزة الكمبيوتر (مثل وحدة المعالجة المركزية x86 في حاسوبك المحمول) لتعمل على جهاز من نوع آخر (مثل متحكم دقيق ARM Cortex-M).
تستخدم Rust ثلاثيات الهدف (مثل thumbv7em-none-eabihf) لتحديد بنية جهاز الهدف ومورّده ونظام التشغيل (أو عدم وجوده) وواجهة ABI الخاصة به.
لوحات التطوير الشائعة
ستتعامل مع متحكمات دقيقة (MCUs) متنوعة عند استخدام Rust للأنظمة المضمّنة. ومن الخيارات الشائعة:
- سلسلة STM32: متعددة الاستخدامات وشائعة على نطاق واسع في المجال الصناعي.
- ESP32: معروفة بقدرات Wi-Fi وBluetooth.
- سلسلة nRF52: ممتازة لتطبيقات Bluetooth Low Energy (BLE).
توفر هذه اللوحات العتاد الفعلي الذي تعمل عليه شفرة Rust الخاصة بك.
فهم البرمجة المباشرة على العتاد
تعني البرمجة المباشرة على العتاد أن شفرتك تعمل مباشرةً على العتاد، من دون نظام تشغيل أساسي يدير الموارد أو يوفر طبقات تجريد.
تكون مسؤولًا عن كل شيء: تهيئة الذاكرة، وإعداد الساعة، وضبط الوحدات الطرفية، ومعالجة المقاطعات. هذا مستوى منخفض من البرمجة، لكنه يمنحك تحكمًا كاملًا.
بنية برامج البرمجة المباشرة على العتاد
يختلف برنامج Rust المضمّن عن البرنامج القياسي. إليك بنية أساسية:
#![no_std]: عدم ربط المكتبة القياسية.#![no_main]: عدم استخدام نقطة الدخول الافتراضيةmain.#[cortex_m_rt::entry]: تحديد نقطة الدخول الفعلية لأجهزة Cortex-M.
يمكن ترجمة هذا البرنامج المصغّر لاستهداف نظام مضمّن، لكنه يتطلب معالجًا لحالات الذعر وحزمة وقت تشغيل.
#![no_std]
#![no_main]
// A minimal panic handler for embedded systems
use panic_halt as _;
// The entry point for ARM Cortex-M microcontrollers
#[cortex_m_rt::entry]
fn main() -> ! {
// This function runs once on device startup.
// Here you would initialize your hardware peripherals.
// For example, setting up a GPIO pin.
loop {
// Your main application loop runs here.
// This loop will run forever, performing tasks.
// Example: Toggle an LED, read sensor data.
}
}Hello, World! في الأنظمة المضمّنة
نظرًا إلى عدم وجود وحدة تحكم للطباعة إليها، فإن المقابل المعتاد للعبارة التقليدية "Hello, World!" في الأنظمة المضمّنة هو عادةً وميض مصباح LED.
يوضح هذا الإجراء البسيط أنك تمكنت بنجاح من:
- ترجمة شفرتك للهدف.
- تحميلها إلى الجهاز.
- التحكم في وحدة طرفية أساسية من العتاد، وهي منفذ الإدخال/الإخراج للأغراض العامة.
تخطيط الذاكرة ومخططات الرابط
في البرمجة المباشرة على العتاد، تحتاج إلى فهم كيفية ترتيب الشفرة والبيانات المترجمة لبرنامجك في ذاكرة المتحكم الدقيق.
تحدد مخططات الرابط (التي توفرها غالبًا حزم دعم اللوحات) تخطيط الذاكرة هذا، إذ تحدد موضع الأقسام المختلفة من برنامجك (مثل الشفرة والبيانات الثابتة والكومة والمكدس) في ذاكرة Flash (للقراءة فقط) وذاكرة RAM (للقراءة والكتابة) في الجهاز.
اختبار سريع حول أساسيات الأنظمة المضمّنة
لنتحقق من مدى فهمك لأساسيات Rust للأنظمة المضمّنة.
مراجعة: بدء استخدام Rust للأنظمة المضمّنة
قدّمنا في هذا الدرس مفهوم Rust للأنظمة المضمّنة، وسلطنا الضوء على تحدياته الفريدة، مثل البرمجة المباشرة على العتاد والترجمة المتقاطعة. وتناولنا مكوّنات سلسلة الأدوات الأساسية، ولوحات التطوير الشائعة، والبنية الأساسية لبرنامج no_std.
وتعلمت أيضًا أن وميض مصباح LED هو المقابل في الأنظمة المضمّنة لعبارة "Hello, World!"، وألقيت نظرة أولية على مخططات الرابط. أنت الآن مستعد للتعمق أكثر في كتابة شفرات للعالم الحقيقي!
الأسئلة الشائعة
هل درس «مقدمة إلى Rust المضمّنة» مجاني؟
نعم — نص درس «مقدمة إلى Rust المضمّنة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 3 دروس في المجموع.
ماذا ستتعلم في «مقدمة إلى Rust المضمّنة»؟
ابدؤوا باستخدام Rust المضمّنة، وتعرّفوا إلى سلسلة الأدوات ولوحات التطوير الشائعة وأساسيات البرمجة مباشرةً على العتاد. تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.
كم من الوقت يستغرق درس «مقدمة إلى Rust المضمّنة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مقدمة إلى Rust المضمّنة
- طبقات تجريد العتاد وبرامج تشغيل الأجهزة
- مفاهيم تطوير أنظمة التشغيل