الدرس ٤ : تعرف على البنية البرمجية لمعالجات ARM Cortex-M4 ومبدأ عملها (ج٢)


#1

بسم الله الرحمن الرحيم
الحمد لله رب العالمين والصلاة والسلام على أشرف المرسلين، بفضل الله وتوفيقه نقدم لكم الدرس الرابع بسلسلة دروس تعلم برمجة الأنظمة المدمجة والميكروكنترولر STM32 المعتمد على نواة ARM Cortex-M4

بعنوان

تعرف على البنية البرمجية لمعالجات ARM Cortex-M4 ومبدأ عملها ج٢

درس اليوم هو أستكمال لحديثنا عن البنية البرمجية للمعالج ARM Cortex-M4، توقفنا المرة السابقة عند خاصية bit-banding وهي من المميزات الرائعة بمعالجات أرم، نستكمل اليوم مع بعض خصائص الذاكرة وخطوط البيانات وكذلك سنتعرف أكثر عن المقاطعات.

ترتيب المتغيرات بالذاكرة endianness

يتكون أي متغير ٣٢ بت من ٤ بايت مثلا القيمة الاتية 0xFF55AA33 وهي بالنظام السادس عشر يحتوي على البايت الذى قيمته 0x33 ويسمي البايت الأقل أهمية least significant byte والبايت الأخير والذى قيمته 0xFF وهو البايت الأعلى أهمية يسمى most significant byte والأن اذا ارد المعالج وضع هذا المتغير بالذاكرة فيمكن ذلك عن طريق أحدى الطريقيتين وهما:

الترتيب big-endian

ويتم فيها وضع البايت الأعلى أهمية أولا كما في الصورة الاتية

الترتيب Little-endian

ويتم فيه وضع البايت الأقل أهمية أولا كما في الصورة الاتية

خط الأنابيب Pipeline

قبل تنفيذ أي تعليمة من أوامر البرنامج يقوم المعالج بجلب هذه التعليمة من الذاكرة وهذه العملية تسمى FETCH ثم يقوم المعالج بتحديد المسجلات المستخدمة في التعليمة ومن ثم قراءتهم DECODE ثم تتم عملية التنفيذ EXECUTE وهذه العملية موضحة بالصورة الاتية

هذه العملية تستغرق العديد من دورات المعالج على الأقل ٣ دورات ولذلك كان لابد من وجود طريقة تقوم باتمام هذه العمليات بالتوازي لتقليل الوقت اللازم لتنفيذ التعليمة الواحدة. تعتمد معالجات ARM Cortex-M4 على خط أنابيب من ٣ مراحل وتعتمد فكرته على اتمام ٣ عمليات على ٣ تعليمات في نفس الوقت كما في الصورة الاتية.

04

فمثلا اذا كان مطلوب من المعالج تنفيذ ٣ تعليمات ومن المعلوم ان كل تعليمة تتكون من ٣ عمليات وهي الجلب والقراءة والتنفيذ فبدلا من تنتفيذ الثلاث عمليات الخاصة بالتعليمة ١ ثم الثلاث عمليات الخاصة بالتعليمة ٢ وبعدها الثلاث عمليات الخاصة بالتعليمة ٣ على التوالي سيقوم المعالج بالتنفيذ كالأتي سيتم جلب التعليمة ١ في أول خطوة حيث لا يمكن عمل أي شي أخر في هذه الخطوة لانه لا يمكن عمل عمليتان جلب في نفس الوقت كذلك لا يمكن قراءة أي شي لان المعالج لم يتم عملية الجلب وفي الخطوة الثانية سيكون المعالج قد أتم عملية الجلب للتعليمة ١ والان سيتم قراءة المسجلات ونفس الوقت سيقوم بجلب التعليمة ٢ وفي الخطوة الثالثة سيقوم المعالج بنتفيذ التعليمة ١ وقراءة التعليمة ٢ وجلب التعليمة ٣ في نفس الوقت وهكذا حتي يستغرق المعالج ٥ دورات لتنفيذ الثلاث تعليمات أما في حالة عدم وجود خط الأنابيب Pipeline فيستغرق المعالج ٩ دورات لتنفيذ ٣ تعليمات حيث ان كل تعليمة تستغرق ٣ دورات ولا يتم تنفيذهم على التوازي.

النموذج البرمجي للمقاطعات والاستثناءات Exception model

تعرف المقاطعات Interrupts أو الاستثناءات Exceptions على أنها أحداث غير متزامنة قد تحدث في أي وقت وتغير مسار تنفيذ البرنامج الطبيعي. عند حدوث مقاطعة او استثناء فلابد للمعالج أن يستجيب ويعلق تنفيذ المهمة الحالية التي يقوم بها ويحفظ مؤشر المكدس stack pointer الحالي لحين العودة مرة اخرى ثم يقوم بتنفيذ الدالة الخاصة بالمقاطعة أو الاستثناء وتسمى Exception Handler في حالة الاستثناء او Interrupt Service Routine واختصاره (ISR) في حالة المقاطعة.

تمتاز معالجات ARM Cortex-M4 بإمكانيتها للتعامل مع المقاطعات أو الاستثناءات وادارتها، حيث توجد وحدة خاصة داخل المعالج للتعامل مع الأستثناءات وتسمى Nested Vectored Interrupt Controller واختصارا NVIC. كما يمكن أيضا التعامل مع هذه الوحدة من خلال البرنامج نفسه اذا اردنا تشغيل او ايقاف احد الاستثناءات وهذه العملية تسمى Interrupt masking، كما تدعم معالجات Cortex-M4 الأستثناءات المتداخلة حيث يمكن التعامل مع أحد الأستثناءات أثناء تنفيذ الأخر.

الفرق بين المقاطعة Interrupt والاستثناء Exception

ومن المهم معرفة الفرق بين المقاطعة Interrupt والاستثناء Exception حيث تعرف المقاطعات بمعالجات أرم على أنها جزء من الأستثناء التي قد لتحدث لتغيير مسار البرنامج والمقاطعات تنتج فقط من النهايات الطرفية الداخلية الموجودة على الشريحة كالمؤقتات أو من النهايات الطرفية الخارجية مثلا كحساس موصل بدخل رقمي GPIO كما يمكن توليد المقاطعات من خلال البرنامج نفسه. أما الأستثناءات فتكون غالبا الأخطاء التي تنتج أثناء تنفيذ البرنامج ويكون مصدرها من المعالج نفسه.

في الصورتين التاليتين نرى الأستثناءات الخاصة بالمعالج Cortex-M4


رقم الأستثناء Exception number

نرى أن لكل أستثناء رقم خاص به وهذا الرقم يعكس مكان هذا الأستثناء داخل جدول الأستثناءات والذى يسمى دائما vector table.

رقم المقاطعة IRQ number

وهو الرقم خاص بالمقاطعات حيث أن اول مقاطعة يكون رقمها صفر.

الأولوية Priority

لكل أستثناء أولوية خاصة بعضها يمكن تغيره Configurable وهناك ٣ أستثناء لهم أولوية ثابتة لا يمكن تغيرها. والأولوية تحدد أيهما يتم الاستجابة له أولا فاذا كان المعالج الان يقوم بالرد وتنفيذ الدالة الخاصة باستثناء معين وحدث أستثناء أخر له أولوية أعلى فان المعالج يترك تنفيذ الاستثناء الحالي ويقوم بتنفيذ الأستثناء الذى له اولوية أعلى والذى يكون له رقم أولوية أقل مثل أعادة التشغيل Reset لها أعلى أولوية ورقمها أقل رقم وهو ـ٣.

الأضافات البرمجية CMSIS

من اهم مميزات معالجات أرم هو وجود مكتبة برمجية Cortex Microcontroller Software Interface Standard واختصارا CMSIS موحدة لجميع المتحكمات المعتمدة على نواة Cortex حيث يمكن استخدامها للتعامل مع المعالج بعض النظر عن المتحكم المستخدم وتحتوي هذه المكتبة على CMSIS-CORE وهي مجموعة جاهزة من الدوال للتعامل مع المعالج، CMSIS-Driver وهي مجموعة من الدوال للتعامل مع الأجهزة الملحقة والنهايات الطرفية، و CMSIS-DSP للتعامل مع الأشارات الرقمية ومعالجتها كما يمكن استخدامها للتعامل مع الأعداد العشرية floating-point. هناك أيضا CMSIS-RTOS API للتعامل مع أنظمة التشغيل بالزمن الحقيقي Real-Time Operating Systems واختصارا RTOS كما يوجد أيضا CMSIS-Pack و CMSIS-SVD و CMSIS-DAP.

يوضح الشكل الأتي الهيكل العام لمكتبات CMSIS

وإلي هنا أنتهى حديثنا عن معالجات ARM Cortex-M4 ونستكمل المرة القادمة الحديث عن متحكمات STM32 ان شاء الله والي اللقاء.


تعلم برمجة الأنظمة المدمجة والمتحكم الدقيق STM32 المعتمد على نواة ARM Cortex-M4
الدرس ٢ : مقدمة عن معالجات أرم ARM Cortex وبنية المعالج Cortex-M4