EMB-01 إصدار منشور

NOVA RAID — لعبة أركيد على Pico W

لعبة فضاء كاملة بلغة C على العتاد مباشرة، منشورة كملف UF2 — وأُصلحت بعد أن كشف أول تشغيل على العتاد الحقيقي عيبًا لم يلتقطه أي محاكٍ.

الدور
عمل فردي — التصميم والبرمجيات الثابتة وهندسة الإصدار
الفترة
2026
التقنيات
C · RP2040 · Pico SDK · SPI + DMA · PIO · GitHub Actions
روابط
شكل 02.0 صورة فوتوغرافية للعتاد أول تحقق على العتاد — إصدار v1.0.0 بالألوان المعكوسة التي لم يكشفها أي اختبار مكتبي. وثّق الإصلاح v1.0.1 السبب الجذري.

ملخص لمسؤولي التوظيف

المشكلة
تحتاج شاشة ST7796S نحو 39 مللي ثانية لاستقبال إطار كامل عبر SPI — أكثر من ميزانية 25 إطارًا في الثانية وحدها — على معالج ثنائي النواة بلا وحدة فاصلة عائمة (حسابات تصميمية، لا قياسات على العتاد).
مساهمتي
صممتُ اللعبة كاملة وكتبتها على العتاد مباشرة وبمفردي: خط العرض ثنائي النواة، وحساب النقطة الثابتة 24.8، والبث عبر DMA وSPI، وطبقة تجريد قابلة للاختبار مع منصة اختبار مكتبية، وهندسة الإصدار.
النتيجة
صدرت كملفات UF2 جاهزة للسحب والإفلات مع CI أخضر؛ وكشف أول تشغيل على العتاد الحقيقي عيبًا في تهيئة الشاشة لم يلتقطه أي محاكٍ — أُصلح ووُثّق في اليوم نفسه ضمن v1.0.1.

RP2040-RENDER

تصور تفاعلي · اسحب للاستكشاف

تصور هندسي ثلاثي الأبعاد

النظام كتركيب تفاعلي

تصور مبني على الأدلة للوحة Pico W والشاشة والإطار ومسار العرض ثنائي النواة عبر DMA.

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

خط العرض ثنائي النواة

مخطط تدفق: النواة صفر تحاكي وترسم في إطار العزل؛ النواة واحد تضاعف البكسل وتبث عبر DMA وSPI إلى الشاشة.

  1. خطوة زمنية ثابتة تحدّث حالة اللعبة بحساب نقطة ثابتة 24.8 (لا توجد وحدة فاصلة عائمة على Cortex-M0+).

  2. السفن والموجات والاصطدامات والنقاط، كلها في بنى C خام؛ أعلى النتائج تُحفظ في آخر قطاع فلاش 4 KiB بقفل للنواة الأخرى.

  3. ترسم النواة 0 إطارًا بدقة 240×160 — ربع دقة الشاشة — ليبقى ضمن ذاكرة RP2040 ووقت الإطار.

  4. تضاعف النواة 1 كل سطر إلى 480 بكسلًا وتغذي البث — فيتراكب إرسال الشاشة مع محاكاة الإطار التالي بدل أن يحجبها.

  5. نقل مزدوج العزل عبر DMA على SPI بسرعة 62.5 ميغاهرتز. أرقام ميزانية الإطار حسابات تصميمية من ورقة البيانات، لا قياسات على العتاد.

  6. أول تشغيل حقيقي كشف أن اللوحة تعمل بوضع معكوس: v1.0.1 أضاف أمر INVON إلى التهيئة — الخلل الذي لم تستطع أي منصة اختبار مكتبية كشفه.

اختر مرحلة لفحصها

القيد الذي شكّل كل شيء

تحتاج شاشة ST7796S نحو 39 مللي ثانية لاستقبال إطار كامل 480×320 عبر SPI بتردد 62.5 ميغاهرتز — وهذا وحده أكثر من ميزانية إطار عند 25 إطارًا في الثانية. الحل التصميمي: النواة 0 تحاكي وترسم إطارًا 240×160 بخطوة زمنية ثابتة، بينما تضاعف النواة 1 كل سطر وتبثه عبر DMA مزدوج التخزين، فيتداخل نقل الشاشة مع محاكاة الإطار التالي بدلًا من تعطيلها. (هذه حسابات تصميمية من ورقة البيانات لا قياسات على العتاد — والتمييز مهم.)

هندسة بلا وحدة فاصلة عائمة

لا FPU في Cortex-M0+: كل الحركة بحساب النقطة الثابتة 24.8 وجدول جيب من 64 مدخلًا. وتُحفظ أعلى النتائج في آخر قطاع فلاش 4 كيبيبايت مع إقفال النواة الثانية وتعطيل المقاطعات. ولا يلمس كود اللعبة العتاد إلا عبر طبقة تجريد صغيرة — ما يعني أن المصادر نفسها تُترجم على الحاسوب المكتبي، حيث يقود إطار اختبار مضيفي اللعبة عبر كل حالاتها في CI مع كل دفعة.

الخلل الذي لم يوجد إلا على العتاد الحقيقي

صدر v1.0.0 والاختبارات خضراء. أول إقلاع على اللوحة الفعلية عرض صورة سالبة الألوان — خلفية بيضاء وكائنات معكوسة. تبيّن أن شاشة اللوحة تعمل في وضع معكوس، وتسلسل التهيئة لم يرسل أمر INVON قط. أصلح v1.0.1 المشكلة في اليوم نفسه، مع كتابة السبب الجذري في ملاحظة الإصدار. ويحتفظ المستودع بالإصدارين وبصور العتاد قبل الإصلاح: النسخة الصادقة من «تم التحقق على العتاد» تتضمن ما وجده التحقق الأول.

الأدلة

عشرة إطارات ملتقطة بدقة البكسل من إطار الاختبار المضيفي (موسومة كصور مُولّدة لا فوتوغرافية)، وخمس صور للعبة تعمل على اللوحة الفعلية، ومخططات SVG، وإحدى عشرة دورة CI ناجحة، وإصداران موسومان بملفات UF2. كل كود اللعبة والرسوم والأصوات أصلية، والمكونات الخارجية منسوبة في README.

الأدلة

شكل 02.8 مخطط معماري خط العرض ثنائي النواة — من المستودع. المصدر — يفتح في سياق جديد