وحدة 3 / 9

الأنظمة المدمجة ورمز المتحكم الدقيق

المكاسب:

  • القدرة على تحديد متطلبات التسجيل والمقاطعة والتوقيت للمتحكم الدقيق بمطالبة واضحة
  • القدرة على التحقق من كود C/Arduino الذي ينتجه الذكاء الاصطناعي من حيث إعدادات التسجيل وتجاوز سعة المخزن المؤقت وقيود الوقت الفعلي
  • القدرة على تطبيق عادة التحقق من الكود الذي تم إنشاؤه عن طريق قياسه على الأجهزة (راسم الذبذبات، المنفذ التسلسلي)

تطوير النظام المضمن هو المكان الذي تتقاطع فيه البرامج والأجهزة: سيؤدي تعيين بت التسجيل بشكل غير صحيح، أو الضغط على المقاطعة لفترة طويلة جدًا، أو تجاوز سعة المخزن المؤقت إلى حدوث حالات فشل غريبة يصعب إعادة إنتاجها في الحقل، على الرغم من أن الكود "يترجم" ويعمل. الذكاء الاصطناعي هو حقًا مُسرِّع في هذا المجال؛ يمكنه إنتاج الهياكل الأولية ووظائف تجريد الأجهزة وأجهزة الحالة وإجراءات الاتصال. لكن الذكاء الاصطناعي لا يرى ورقة بيانات بطاقتك، ولا يعرف تردد الساعة، ولا يشعر بقيود الوقت الحقيقي. في هذه الوحدة، سنغطي كيفية تعريف عمل المتحكم الدقيق بوضوح للذكاء الاصطناعي، وكيفية التحقق من كود C/Arduino الذي تم إنشاؤه، ولماذا يجب عليك قياس كل شيء في الأجهزة.

تحديد المتطلبات بوضوح: التسجيل، القطع، التوقيت

إن إخبار الذكاء الاصطناعي بـ "إضاءة مصباح LED" لن ينجح؛ أي بطاقة، أي دبوس، أي تردد على مدار الساعة، أي توقيت؟ عند تعيين مهمة مضمنة للذكاء الاصطناعي، استخدم إطار العمل هذا: الأجهزة (عائلة MCU، الساعة، الدبوس)، الوظيفة (ما سيحدث)، القيد (التوقيت، الطاقة، الذاكرة)، والواجهة (التسجيل، HAL، مكتبة Arduino).

موجه ضعيف / موجه قوي

ضعيف: "إنتاج PWM باستخدام STM32." (النتيجة: أي مؤقت، أي تردد، أي طرف غير واضح؛ عام، ربما يكون رمز التسجيل المسمى خاطئًا.) قوي: "أنتج 20 كيلو هرتز، 0-100٪ PWM واجب قابل للتعديل على TIM3 CH1 (PA6) لـ STM32F103 (ساعة النظام 72 ميجا هرتز). اكتب على مستوى التسجيل (وليس HAL). - قيم المقياس المسبق وقيم ARR لـ 20 كيلو هرتز احسب وأظهر الحساب في سطر التعليق. - تعيين الواجب مع معلمة دالة بين 0-100 - قم بالتعليق على كل بتة تسجيل تستخدمها.

الفرق هو أن الموجه القوي يجعل النموذج يُظهر الحساب ويكشف عن افتراض الساعة. لذلك يمكنك التحقق من قيم المقياس المسبق/ARR بشكل مستقل:

بالنسبة لـ 20 كيلو هرتز PWM (ساعة 72 ميجا هرتز): Timer_clock = 72 ميجا هرتز إذا أردنا جهاز قياس مسبق = 72-1 → ساعة العداد = 1 ميجا هرتز ARR = (1 ميجا هرتز / 20 كيلو هرتز) - 1 = 50 - 1 = 49 التحقق: 1e6 / (49+1) = 20000 هرتز ✓

تدقيق كود الذكاء الاصطناعي: ما الذي تبحث عنه؟

لا يعني مجرد تجميع التعليمات البرمجية التي تم إنشاؤها أنها تعمل بشكل صحيح. اتبع قائمة التحقق هذه:

منطقة التحكم

ما الذي تبحث عنه

إعدادات التسجيل/البت

متوافق تمامًا مع ورقة البيانات، قناع البت الصحيح

المقاطعة (ISR)

هل هي قصيرة؟ لا تأخير مانع؟ هل يتم استخدام متقلبة؟

المخزن المؤقت/صفيف

هل هناك مراقبة للحدود؟ خطر التجاوز؟

توقيت

مع تأخير أو توقيت؟ هل تم استيفاء القيد الزمني الفعلي؟

النوع والعرض

تجاوز سعة 8/16/32 بت، ارتباك موقع/غير موقع

السلطة/المراقبة

حلقة لا نهاية لها من تغذية الوكالة الدولية للطاقة؟

تعد إجراءات خدمة المقاطعة (ISR) المصدر الأكثر شيوعًا للأخطاء. يضع الذكاء الاصطناعي أحيانًا تأخيرًا () أو حلقة طويلة داخل ISR. يؤدي هذا إلى فقدان المقاطعات الأخرى وإعادة ضبط الوكالة الدولية للطاقة. القاعدة: يجب أن يكون نظام ISR قصيرًا قدر الإمكان؛ يجب أن تكون المهمة الرئيسية هي إعداد العلم ونقله إلى الحلقة الرئيسية.

// ضعيف (ينتج الذكاء الاصطناعي هذا أحيانًا): وظيفة الحظر في ISR void TIM3_IRQHandler(void) { if (TIM3->SR & TIM_SR_UIF) { TIM3->SR &= ~TIM_SR_UIF; read_sensor(); // قد يستغرق وقتًا طويلاً - BAD CASE_Delay(10); // تأخير في ISR - سيء جدًا }}// STRONG: ISR short; تنتقل المهمة إلى الحلقة الرئيسية uint8_t Tick_flag = 0; // متقلب CONDITIONvoid TIM3_IRQHandler(void) { if (TIM3->SR & TIM_SR_UIF) { TIM3->SR &= ~TIM_SR_UIF; Tick_flag = 1; // فقط قم بتعيين العلم }}// في الحلقة الرئيسية:if (tick_flag) { Tick_flag = 0; read_sensor(); }

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

تجاوز سعة المخزن المؤقت وأخطاء الكتابة

يمكن للذكاء الاصطناعي نسخ البيانات من المنفذ التسلسلي إلى مصفوفة ذات حجم ثابت دون التحقق من الحدود. في النظام المضمن، يعني هذا سحق الذاكرة المتجاورة وحدوث أعطال غير مبررة. تأكد من تحديد الحد في كل strcpy وفهرس الصفيف ومخزن DMA المؤقت. وبالمثل، تتم إعادة تعيين عداد 8 بت بعد 255؛ يمكن للذكاء الاصطناعي تجاهل ذلك والاعتماد على الحساب الفائض.

التحقق في الأجهزة: يتم قياس "العمل" وليس افتراضه

في النظام المضمن، الدليل الأكثر موثوقية هو المقياس، وليس المترجم. تحقق من الكود الذي تم إنشاؤه بهذه الطرق الثلاث:

  1. راسم الذبذبات/محلل المنطق: قياس تردد PWM وتوقيت الإشارة وشكل موجة الاتصال. إذا كنت تريد 20 كيلو هرتز، راجع 20 كيلو هرتز على الشاشة.
  2. سجل المنفذ التسلسلي (UART): اطبع القيم المتغيرة وانتقالات الحالة وعدادات الأخطاء وقارنها بالسلوك المتوقع.
  3. اختبار الربط والضغط: اختبر ما إذا كان النظام يصمد تحت أعلى حمل وأسرع بيانات وأسوأ توقيت.

إذا كانت القيمة المقاسة لا تتفق مع الحساب، فإن افتراض الساعة أو قيمة المقياس الأولي أو إعداد التسجيل غير صحيح؛ يطارد.

حالة صغيرة

قام فريق من الطلاب بطباعة كود قياس المسافة بواسطة الذكاء الاصطناعي باستخدام مستشعر الموجات فوق الصوتية HC-SR04. يتم تجميع الكود ولكن المسافة تعطي دائمًا قيمًا سخيفة. عندما قاموا بتوصيله بمرسمة الذبذبات، لاحظوا أن ساق الصدى تحسب توقيتها بالمللي ثانية بدلاً من الميكروثانية؛ يستخدم الذكاء الاصطناعي millis() بدلاً من micros(). أدى هذا الخطأ المكون من كلمة واحدة إلى إرباك القياس بأكمله بعامل 1000. وعندما قاموا بطباعة وقت الصدى الأولي في السجل التسلسلي ومقارنته بمسطرة حقيقية، وجدوا الخطأ وأصلحوه. الدرس: الكود المترجم ليس كودًا صحيحًا؛ يكشف القياس في الأجهزة عن الخطأ على الفور.

الأخطاء الشائعة

  • قبول أسماء التسجيل وأقنعة البت دون مقارنتها بورقة البيانات.
  • السماح بحظر التأخير أو المعالجة الطويلة داخل ISR.
  • نسيان المتقلبة على المتغيرات المشتركة.
  • تجاوز المخزن المؤقت وفحص حدود الصفيف؛ عدم رؤية الفائض.
  • الاعتماد على افتراضات التردد والتوقيت دون التحقق منها.
  • مع الأخذ في الاعتبار أن الكود "يعمل" دون قياسه باستخدام راسم الذبذبات/السجل التسلسلي.

باختصار

  • حدد المهمة المضمنة بوضوح من حيث الأجهزة والوظيفة والقيود والواجهة.
  • اطلب من الذكاء الاصطناعي حساب قيم التوقيت مثل المقياس المسبق/ARR والتحقق منها بشكل مستقل.
  • اجعل ISRs قصيرة، واستخدم المتغيرات المشتركة المتقلبة.
  • ابحث على وجه التحديد عن أخطاء التسجيل والحد المؤقت وأخطاء عرض النوع.
  • تم إثبات "أنه يعمل" باستخدام راسم الذبذبات، ومحلل المنطق، والسجل التسلسلي، وليس باستخدام المترجم.
  • إذا كانت القيمة المقاسة لا تتفق مع الحساب، اتبع الافتراضات.

مهمة التطبيق

باستخدام وحدة التحكم الدقيقة لديك (Arduino، STM32، ESP32)، اطلب من الذكاء الاصطناعي إجراء PWM أو مهمة دورية بتردد معين. قبل تحميل الكود: (1) تحقق من قيم التردد/التوقيت بشكل مستقل عن الحساب في سطر التعليق، (2) تحقق من التقلب والحظر في ISR والمتغيرات المشتركة. بعد التحميل، قم بقياس التردد الفعلي باستخدام راسم الذبذبات أو محلل منطقي ومقارنته بالهدف. وإذا كان هناك انحراف، ابحث عن المصدر وقم بتصحيحه، ولاحظ الخطأ المفترض.