سؤال

هل يمكن لأي شخص أن يشرح آليات جدول القفز ولماذا ستكون هناك حاجة إليه في الأنظمة المدمجة؟

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

المحلول

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

فوائد القيام بذلك في البرمجة المضمنة هي:

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

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

نصائح أخرى

جدول الانتقال، المعروف أيضًا باسم الجدول الفرعي، عبارة عن سلسلة من التعليمات، تتفرع جميعها دون قيد أو شرط إلى نقطة أخرى في التعليمات البرمجية.

يمكنك اعتبارها عبارة تبديل (أو تحديد) حيث يتم ملء جميع الحالات:

MyJump(int c)
{
   switch(state)
   {
      case 0:
         goto func0label;
      case 1:
         goto func1label;
      case 2:
         goto func2label;
   }
}

لاحظ أنه لا يوجد أي إرجاع - فالرمز الذي ينتقل إليه سينفذ الإرجاع، وسيعود مرة أخرى إلى المكان الذي تم استدعاء myjump فيه.

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

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

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

-آدم

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

في الأنظمة المضمنة، حيث يكون استخدام الذاكرة مرتفعًا، يتم تقديم العديد من البنيات بشكل أفضل باستخدام جدول الانتقال بدلاً من الأساليب الأكثر استهلاكًا للذاكرة (مثل if-else-if) الضخم.

ويكيبيديا يلخص ذلك بشكل جيد:

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

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

بمعنى آخر، إنها بنية مفيدة يمكن استخدامها عندما يكون نظامك محدودًا للغاية بالذاكرة و/أو وحدة المعالجة المركزية (CPU)، كما هو الحال غالبًا في النظام الأساسي المضمن.

من ويكيبيديا:

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

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

عادةً ما يتم استخدام جداول الانتقال السريع، المعروفة غالبًا باسم الجدول الفرعي، بواسطة الجهاز فقط.

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

لذلك، عند تنفيذ وظيفة ما، عند الانتهاء منها، تنتقل مرة أخرى إلى موقع الذاكرة السابق أو تنتقل إلى الوظيفة التالية، وما إلى ذلك.

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

بريان جيانفوركارو

تُستخدم جداول الانتقال بشكل شائع (ولكن ليس حصريًا) في آلات الدولة المحدودة لجعلها مدفوعة بالبيانات.

بدلاً من التبديل/الحالة المتداخلة

  switch (state)
     case A:
       switch (event):
         case e1: ....
         case e2: ....
     case B:
       switch (event):
         case e3: ....
         case e1: ....

يمكنك إنشاء مصفوفة ثنائية الأبعاد أو مؤشرات وظيفية والاتصال فقط handleEvent[state][event]

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