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

StackOverflow https://stackoverflow.com/questions/69492

  •  09-06-2019
  •  | 
  •  

سؤال

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

هل كانت مفيدة؟

المحلول

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

الأقوى سيكون جهاز JTAG.لا تحتاج حتى إلى تعيين نقاط توقف - فمجرد القدرة على إيقاف التطبيق وفحص حالة الذاكرة قد يكون كافيًا.لاحظ أن بعض الأنظمة الأساسية للأجهزة لا تدعم الخيارات "الفاخرة" مثل ساعات الذاكرة أو نقاط توقف الأجهزة.عادةً ما يتم حل الأول من خلال إيقاف المعالج وقراءة الذاكرة باستمرار (يحول نظام 10 ميجا هرتز إلى نظام 1 كيلو هرتز)، بينما يتم تنفيذ الأخير أحيانًا باستخدام استبدال التعليمات البرمجية (استبدل التعليمات المستهدفة بقفزة مختلفة)، مما يخفي أحيانًا مشاكل أخرى .كن على دراية بهذه المشكلات والمعالجات المضمنة التي تنطبق عليها.

نصائح أخرى

هناك بعض الاستراتيجيات التي يمكنك استخدامها للمساعدة في تصحيح الأخطاء:

إذا كانت لديك دبابيس إخراج متاحة، فيمكنك توصيلها بمصابيح LED (أو راسم الذبذبات) وتبديل دبابيس الإخراج إلى الأعلى/المنخفض للإشارة إلى أنه تم الوصول إلى نقاط معينة في الكود.
على سبيل المثال، قد تكون ومضة واحدة عبارة عن برنامج تم تحميله، وميضتان تعني تهيئة شريط foozbar، و3 ومضة تشير إلى قبول المدخلات...

إذا كان لديك خطوط إخراج متعددة متاحة، فيمكنك استخدام مؤشر LED المكون من 7 أجزاء لنقل المزيد من المعلومات (أرقام/حروف بدلاً من الوميض).

إذا كانت لديك الإمكانيات لقراءة الذاكرة ولديك بعض ذاكرة الوصول العشوائي (RAM) المتوفرة، فيمكنك استخدام وظيفة sprint لإجراء تصحيح أخطاء يشبه printf، ولكن بدلاً من الانتقال إلى منفذ الشاشة/التسلسلي، تتم كتابته في الذاكرة.

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

لمرة واحدة، تتبع مصدر متعمق وتصحيح أخطاء مصحح أخطاء داخل الدائرة (على سبيل المثال.jtag) يمكن أن يكون مفيدًا جدًا.ومع ذلك، فهي مفيدة للغاية عندما يتطلب تصحيح الأخطاء تعيين نقاط التوقف والتحقق من الذاكرة والسجلات - مما يجعلها ذات فائدة قليلة عندما تتعامل مع مشكلات الوقت الحرجة.

عندما تحتاج إلى تحديد حالة البرنامج دون أن يكون لها تأثير كبير على تنفيذ نظامك، سيكون استخدام مصابيح LED المتصلة بمنافذ الإدخال/الإخراج الاحتياطية مفيدًا.ويمكن أيضًا استخدامها كمدخل إلى راسم ذبذبات التخزين الرقمي (DSO) أو محلل المنطق.يمكن جعل هذه التقنية أكثر قوة عن طريق اختيار أنماط فريدة من النبضات التي يمكن التعرف عليها على DSO.

للحصول على أداة تصحيح أكثر تنوعًا، يعد المنفذ التسلسلي حلاً جيدًا.لتوفير التكلفة وعقارات ثنائي الفينيل متعدد الكلور، قد تجد أنه من المفيد استخدام وحدة إضافية تحتوي على محولات RS232.

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

يمكنك بسهولة محاكاة الاتصالات التسلسلية (UARTs) باستخدام ضجيج البت من منافذ الإدخال والإخراج (IO) للنظام.قم بتوصيله بأحد دبابيس البطاقة وقم بتوصيله بمحول RS232 هناك (من السهل شراء أو إنشاء محولات TTL إلى RS232)، والتي تذهب إلى المنفذ التسلسلي لجهاز الكمبيوتر الخاص بك.

يعد مصحح أخطاء JTAG أيضًا خيارًا، على الرغم من صعوبة إعداده.

إذا لم يكن لديك JTAG، فإن مصابيح LED التي يقترحها الآخرون تعد فكرة رائعة - على الرغم من أنك تميل إلى أن ينتهي بك الأمر في دورة اختبار/إعادة بناء لمحاولة تعقب المشكلة.

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

اقترح آخرون بعض الأفكار الجيدة جدًا باستخدام دبابيس الإخراج، لذلك لن أقترح ذلك، على الرغم من أنه يمكن أن يكون حلاً جيدًا جدًا وفعالًا من حيث التكلفة.إذا كانت ميزانيتك والمعالج المستهدف يدعمان ذلك، فقد يكون نظام تتبع الأجهزة (إما محاكيًا قديم الطراز أو BDM فاخرًا مع دعم تتبع تتطفل الناقل) رائعًا لهذا النوع من الأشياء.أنها مكلفة للغاية رغم ذلك.

فكرة استخدام برنامج UART فكرة جيدة، ولكن هناك بعض الجهد المطلوب في كتابة واحد، كما تحتاج أيضًا إلى بعض الموقتات والمقاطعات المجانية.إذا كان جهازك يحتوي على أي واجهة تسلسلية أخرى غير مستخدمة (SPI، I2C، ..)، فسيكون استخدامها أسهل.باستخدام متحكم صغير يمكنك تحويل الواجهة إلى RS-232.

إذا كان عليك أن تقوم بضرب البتات، فقد يكون إنشاء تسلسل متزامن بديلاً أبسط لأنه لن يكون مهمًا للتوقيت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top