سؤال

أرغب في الحصول على تطبيقين في فلاش STM32 الخاص بي، أحدهما عبارة عن تمهيد بشكل أساسي والآخر هو التطبيق "الرئيسي".لقد اكتشفت كيفية تحميل كل واحد منهم في مناطق مختلفة من الفلاش، وبعد أخذ ملف تفريغ الذاكرة، يبدو كل شيء وكأنه في المكان الصحيح.

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

سؤالي إذن هو، إلى أين يجب أن أنتقل إلى التطبيق؟

يبدو أن هناك بعض النقاط المحتملة، مثل ناقلات المقاطعة، ومعالج إعادة التعيين، والوظيفة الرئيسية للتطبيق.في الحقيقة لقد قمت بتجريب كل تلك الطرق دون جدوى.

نأمل أن يكون هذا منطقيًا، وسأقوم بتحديث السؤال إذا لم يكن الأمر كذلك.

شكرا لمساعدتك!ريتشارد

التحديثات:

  • لقد قمت بالتلاعب في مصحح الأخطاء وقمت بتغيير عداد البرنامج يدويًا إلى العداد الرئيسي للتطبيق، وقد نجح ذلك بشكل رائع، لذلك جعلني أعتقد أن هناك خطأ ما في قفزتي، لماذا لا يستمر عداد البرنامج في العمل بعد القفزة؟
  • في الواقع يبدو أنه PSR، تتم إعادة تعيين "T" أثناء القفزة، إذا قمت بضبط ذلك مرة أخرى بعد القفزة، فسيستمر مع التطبيق كما أريد
  • حسنًا، وجدت حلاً، يبدو أنك تحتاج إلى تعيين LSB للكمبيوتر الشخصي على 1 عند إنشاء فرع أو يقع في وضع "ARM" (تعليمات 32 بت بدلاً من تعليمات 16 بت كما هو الحال في وضع "الإبهام".مشكلة صغيرة غامضة تمامًا، شكرًا للسماح لي بمشاركتها معك!
هل كانت مفيدة؟

المحلول

تأكد من الانتقال إلى عنوان حيث يكون LSB هو 1.راجع هذا الموقع للتوضيح:http://www.embedded.com/columns/beginerscorner/15200241?_requestid=162471

نصائح أخرى

قد ترغب في البحث عن IAP (مبرمج داخل التطبيق) فهو يسمح لك بتحميل التعليمات البرمجية من psort RS232 على stm32.لقد بدأت في استخدامه وبما أنه يوفر الكود المصدري، فمن السهل جدًا تعديله بما يناسب أغراضك.بشكل أساسي بعد إعادة التعيين، يمكنك ترميز IAP للتحميل إما من العنوان 0x08002000 أو العنوان 0x08003000.ثم كل ما عليك فعله هو وضع علامة في رمز التطبيق الخاص بك ثم قل إعادة التشغيل وسيتم تشغيل التطبيق الجديد بعد ذلك، وآمل أن يكون هذا مفيدًا.

ريتشارد،

كنت أحاول أن أفعل نفس الشيء الذي نجحت فيه، لكن واجهت مشاكل.كنت أستخدم IAR IDE وقمت بتحديث ملف *.icf (في دليل "proj") لوضع طلبي على 0x08002000 وتحميل مشروع منفصل على 0x08000000 والذي يقوم فقط بالانتقال إلى العنوان في ناقل إعادة التعيين عند 0x08002004.بدأ تشغيل رمز التمهيد ويبدو أنه ينتقل إلى بدء التطبيق، لكن التطبيق فشل في وقت ما أثناء تهيئة IAR، وانتهى به الأمر في فخ تعليمات غير قانونية.

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

ايرا.

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