Arm Cortex M3 كيف يمكنني تحديد قيمة عداد البرنامج قبل خطأ صعب؟

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

سؤال

لدي مشروع مضمن باستخدام STM32F103 (ARM Cortex M3) ، وهو يحصل على خطأ شديد في وضع الإصدار. كجزء من الاسترداد ، أود استرداد قيمة الكمبيوتر من قبل الصدع الصعب وتخزينها لتصحيح الأخطاء لاحقًا في المنطقة المدعومة من البطارية.

كيف يمكنني تحديد قيمة عداد البرنامج عند نقطة الصدع الصعب؟ من الواضح أن الكمبيوتر الشخصي يتم تعيينه الآن على موقعه في مقاطعة Hardfault.

أين يجب أن أنظر؟ هناك عنوان لبنك سجل الوضع العادي؟

شكرًا!

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

المحلول

يستخدم Cortex-M3 نموذجًا مختلفًا تمامًا لمعالجة الاستثناء من الذراع "الكلاسيكي" ، على سبيل المثال ، لا يحتوي على "وضع الإحباط" المذكور في المنشور الآخر. أقترح عليك أن تقرأ ملاحظة التطبيق هذه. على سبيل المثال ، للخطأ الصعب:

تشير قيمة SCB-> BFAR إلى عنوان الذاكرة الذي تسبب في خطأ في الحافلة وهو صالح إذا تم تعيين BIT BFARVALID في سجل SCB-> CFSR. تشير قيمة SCB-> MMFAR إلى عنوان الذاكرة الذي تسبب في خطأ في إدارة الذاكرة وهو صالح إذا تم تعيين Bit mmfarvalid في سجل SCB-> CFSR.

لتحديد قيمة الكمبيوتر في وقت الاستثناء ، تحتاج إلى فحص المكدس ؛ يدفع المعالج R0-R3 و R12 و PC و LR قبل تنفيذ المعالج. يمكن أن تكون المكدس المستخدمة إما (إذا كان البت 2 من LR هو 0) أو العملية (وإلا). انظر الصفحة 13 من ملاحظة التطبيق للحصول على التفاصيل.

نصائح أخرى

يجب أن تنظر في دليل مرجع العمارة الذراع في القسم على الاستثناءات. تحتاج إلى التسجيل للحصول عليه.

عادةً ما يتم وضع عنوان ذي صلة في سجل الارتباط LR (R14) ، ولكن المعنى الدقيق يختلف وفقًا للاستثناء ، وهناك عوامل متغيرة.

WRT الوصول إلى بنك تسجيل وضع المستخدم/النظام ، أعتقد أنك بحاجة إلى تبديل الوضع للوصول إليه.

عند حدوث استثناء ، تتغير حالة المعالج من الحالة الحالية إلى إحباط حالة. في حالة الإجهاض ، يتحول المعالج إلى استخدام مجموعة جديدة من السجلات لـ SP و LR (SP_ABT و SP_LR على التوالي. لإحباط البيانات ، يمكن العثور على التعليمات المخالفة في LR_ABT + 8 لمحافظ حول LR_ABT + 4 (وفقًا لل دليل مرجع ARMV7 Architecure)

لدي أسئلة وأجوبة حول هذا الموضوع بالذات. تتضمن الصفحة المرتبطة من الأسئلة الشائعة رمز معالج الصدع سيحصل على عداد البرنامج من المكدس لك.

لقد وجدت سببًا مشتركًا لهذه القضايا هي تلك "للتأخير في حلقة". عند استخدام -3 ، يتم تحسينها ببساطة إذا كنت لا تشير إلى المتغيرات المتقلبة. أنا شخصياً أفضل نهج systick.

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