Excel كمترجم لمجمع AVR

المتطلبات الأساسية



اقترح عدد من المقالات ( https://habr.com/ru/post/345320/ ، habr.com/ru/post/80893 ، habr.com/ru/post/246975 ) أنه يمكن استخدام Excel كمترجم في كود التجميع AVR.



دعنا نقارن برنامج Excel بالميزات الأساسية لمحرر الشفرات "العادي". قائمة الميزات الأكثر شيوعًا هي كما يلي:

ميزة محرر الكود كيفية التنفيذ في Excel كما تم تنفيذه في Atmel Studio
تسليط الضوء على تركيب التنسيق الشرطي للخلايا بناءً على المحتوى تسليط الضوء على الأمر
تكميل تلقائي وظائف VBA المخصصة ؛

النطاقات المسماة

الخلية كوحدة تحكم مصغرة مع ماكرو لحدث التغيير ؛

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


تبدو مقبولة. يتم الحصول على بعض الأشياء "مجانًا" ، وهناك شيء يحتاج إلى التحسين.



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



الاتفاقات الأولية



لنأخذ النهج العام والمصطلحات من هنا: habr.com/ru/post/345320

الخوارزمية بأكملها مقسمة إلى فروع. يلعب الفرع دور وحدة برنامج مستقلة.

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



ينتهي الفرع بواحد أو أكثر من الفروع الأخرى. يتم وضع التحولات من فرع إلى آخر في المحصلة النهائية. دعنا نسميها "خط الانتقال".

نقبل أيضًا القاعدة القائلة بأنه من المستحيل الدخول إلى فرع آخر من داخل أحد الفروع.

المخطط العام للخوارزمية
صورة



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



في VBA ، لنقم بإنشاء دالة تسمية باستخدام وسيطة من النوع Range . يجب أن تحتوي التسمية في مجمع AVR على نقطتين في النهاية. أولئك. تستقبل وظيفة التسمية الخاصة بنا كمدخل مرجعي للخلية التي يتم وضعها فيها وتحسب عنوانها بتنسيق A1. ثم تضيف النص "_M:" إليها. الجزء "_M" ليس عرضيًا ، سنستخدمه أكثر - في تنسيق الخلايا.



تصور الانتقال



في البيئات المرئية الحقيقية ، تتم الإشارة إلى التحولات بالسهام. إنها مريحة وبديهية.

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



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



بالنسبة لمخططات الكتلة ، توجد معايير لتعيين العناصر الفردية. على سبيل المثال ، المستطيل هو حساب ؛ الماس - حالة ، إلخ. عند العمل باستخدام معالج جداول بيانات ، يمكننا الوصول إلى اللون والأسلوب ومراقبة الحدود.



يحتوي Excel على ميزة تنسيق شرطي سهلة الاستخدام. يمكن استخدامه بطرق مختلفة ، لكننا سنقدم ثلاث قواعد بسيطة فقط:



  1. تكون الخلية غير الفارغة في شريط الاسم وفي شريط الانتقال ملونة باللون الأصفر ؛
  2. لون الخلية غير الفارغة في جسم الفرع برتقالي ؛
  3. يتم تلوين الخلايا ذات التسميات "المحلية" وأوامر الانتقال باللون الأزرق. وهي خلية غير فارغة تحتوي على الأحرف "_M" المذكورة أعلاه.




يوضح gif أدناه كيف يبدو العمل مع التسميات والانتقالات بعد كل الإعدادات.



العمل مع التسميات وأوامر الانتقال
صورة







إجراءات تشكيل القائمة النهائية



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

كيف يتم تشكيل القائمة النهائية
صورة



تتخطى خوارزمية التجميع الخلايا والخلايا الفارغة التي تحتوي على الحرف "؛" ، أي تعليقات.



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



الحل الحسابي الأساسي متفرع مثل:



If <> then 
    <>
Else
    <>
End if


بالنسبة لذلك ، هناك تعليمات قفزة مشروطة في مجمع AVR (breq و brne و sbic وغيرها). تخبر هذه الأوامر البرنامج إلى أين يتجه عند استيفاء الشرط.



الآن دعنا نتخيل كيف يجب أن يبدو برنامج هذا التفريع ، مع مراعاة المبادئ الموضحة أعلاه:



المتفرعة البسيطة
صورة





و القيادة brne ونظيراتها يكون القيد. مسافة القفز 64 كلمة في كل اتجاه. لذلك ، قد يستدعي ماكرو طويل تم إدراجه في فرع "بلا" خارج النطاق.



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



إختر حالة



إذا كان عليك الاختيار من بين عدد كبير من الخيارات ، فسيتم استخدام Select Case في Java:



Select Case <>
    Case <1>
    Case <2>
    Case <3>
    Case else
End select




قفزات الفهرس متوفرة بلغة التجميع لـ AVR. دعنا نظهر خيار التنفيذ.

إختر حالة
صورة





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



للسبب نفسه ، يجب تنفيذ متجه المقاطعة في عمود واحد.



حلقة مع حالة لاحقة



الحلقة ، عند الحاجة إلى تكرار واحد على الأقل ، تبدو هكذا في تدوين Java:

Do
    <>
Loop while <>


مثال على كيفية ظهورها في Excel والكود الناتج في الاستوديو:

حلقة مع حالة لاحقة
صورة





حلقة مع شرط مسبق



مثال في Java:

Do while <>
	<>
Loop


مثال على كيفية ظهورها في Excel والكود الناتج في الاستوديو:

حلقة مع شرط مسبق
صورة





حلقة مع حلقة متداخلة



تتضمن معالجة المصفوفات أو التعامل مع الأرقام استخدام الحلقات المتداخلة. منظر عام للجافو:



Do
    Do
        <>
    Loop while < 2- >
    <>
Loop while < 1- >




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

حلقات متداخلة داخل فرع واحد
صورة





حلقات متداخلة مع التنفيذ عبر الفروع
صورة





حلقة مع خروج مشروط



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



في JLU ، يتم استخدام الأمر break ، والخوارزمية العامة هي كما يلي:



Do 
    <>
    If < > then break
Loop while <>




دعونا نظهر مرة أخرى كيف ستبدو الخوارزمية بدون فروع وبها فروع.

مقاطعة حلقة داخل فرع واحد
صورة





مقاطعة حلقة تنفذ من خلال الفروع
صورة





استدعاء الإجراءات الفرعية



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



المتطلبات الإلزامية للروتين الفرعي:

  • يجب أن يبدأ الروتين الفرعي نفسه باسم تسمية ؛
  • يجب أن يكون الأمر الأخير من روتين متقاعد ووضعها في خط القفز.


الهيكل الداخلي للبرنامج ثانوي يمكن أن يكون أي - تطبق كل نفس التسمية التلقائي تسمية لتنفيذ المنطق.



تشغيل مثال خفيف



هذا هو رمز برنامج اختبار الضوء قيد التشغيل. يتضمن المثال الحلقات والفروع واستدعاءات الروتين الفرعي.



تبدو النتيجة النهائية كما يلي:

تشغيل مخطط الضوء
صورة





سرد البرنامج بأكمله في Excel مع احتواء الصفر على شاشة واحدة:

تشغيل الضوء. كود Excel
صورة





تشغيل الضوء. القائمة النهائية
صورة





النتيجة



ما لم يعجبه



  1. من غير المحتمل أن تكون الطريقة الموصوفة مناسبة للعمل في مشروع كبير بمشاركة فريق كامل. التحكم في الإصدار ، الاختلافات ، إلخ. لا يزال عليك أن تقرر الجانب.
  2. في وضع التصحيح ، يكون الأمر غير مريح للغاية بدون شاشتين. يتم إجراء التصحيح نفسه في الاستوديو والمخطط الانسيابي في Excel. هذه نوافذ مختلفة ، التبديل مطلوب.
  3. يتضخم البرنامج بسرعة أفقيًا. في الوقت نفسه ، يكون التمرير إلى الجانب في Excel صعبًا وغير مريح.
  4. - – . 12801024 5 45 . 20% ( 45 ). – . .






  1. « » . .
  2. Excel . Atmel Studio .
  3. .
  4. . – . , .
  5. Excel . - , - – VBA.






  1. . « » , . 4-5 . « – – – » , « » , « » « ». 4-5 .
  2. عمليات فحص إضافية للأخطاء. من السهل استخدام ماكرو للتحقق من وجود أية كتل "متدلية" لا تنتهي بانتقالات. يمكننا أيضًا استخدام وحدة ماكرو للبحث عن التسميات غير المستخدمة التي تشتت الانتباه أثناء تصحيح الأخطاء وإزالتها.
  3. يمكنك إدخال القواعد الخاصة بك لتلوين الخلايا.
  4. إذا تم تضمين معالج جداول بيانات في الاستوديو كمحرر كود ، فسيكون من الملائم جدًا تصحيح الأخطاء فورًا في مخطط الكتلة هذا.



All Articles