لمسألة AVR والسجلات العالمية

افعلها بشكل جيد ، فستتحول بشكل سيئ


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

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

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

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

بالطبع ، عند معرفة بروتوكول الإرسال ، من الممكن ، من اعتبارات عامة ، العثور على الحد الأقصى من عدم التطابق المسموح به بين سرعات الإرسال والاستقبال (0.5 / 9.5 = 5.2٪) ، ولكن هذا سيكون تحقيقًا عن الحصان الكروي الذي تعرفه ، لأنه:

  1. يمكن لمتطلبات المعيار أن تكون أكثر صرامة من الحساب النظري المشابه للحد الأقصى من عدم التطابق المسموح به ؛
  2. معرفة رقم عدم التطابق النهائي لن يعطينا بأي حال من الأحوال ميزانية جهاز الإرسال والاستقبال.

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

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

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

لذلك نفتح الوثائق (يمكنك فتح الملف في العارض ، ولكن لدي نسخة مطبعية من الوصف الذي طبعته الشركة المصنعة نفسها - نعم ، كان عليه في السابق) وابحث عن القسم المناسب. المعلمات التي نهتم بها موجودة في قسم "مذبذب RC الداخلي المعاير" ، ثم اتبع الروابط إذا لزم الأمر. ونحن هنا (بالتأكيد ، لست متأكدًا منك) ننتظر خيبة الأمل الأولى - لقد كنت أعمل مع منتجات Atmel لفترة طويلة (حوالي 15 عامًا) ، ودائمًا ما كنا نعتقد أن لديهم وثائق جيدة لـ MK. وفقًا للأطباء النفسيين ، "لا يوجد أشخاص أصحاء ، ولا يوجد أشخاص غير مكتشفين" وقد أكدت دراسة متأنية للقسم ذي الصلة هذه الحقيقة ، حيث لم أتمكن من ملاحظة مثل هذه الإخفاقات في الوثائق من قبل. في دفاعي ، يمكنني أن أقول فقط:

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

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

الجزء الأول من باليه مارليسون هو الدقة الاسمية.

نجد على الفور المعلمة المطلوبة - جدول دقة توليف المولد ، حيث نرى خطين "معايرة المصنع" بالقيمة المحددة ± 10٪ و "المعايرة اليدوية" بنفس المعلمة ± 2٪.

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

ولكن مع السطر الثاني من الحالة ، يكون الأمر أسوأ - يتم تحديد حدود التغيرات في درجة الحرارة وجهد الإمداد ويمكن القول بأنه باستخدام نوع من إجراءات المعايرة السحرية ، يمكنك تحقيق أفضل بكثير من نتيجة المصنع في النطاق بأكمله. يطرح سؤالي على الفور - إذا كان من الممكن تحقيق ذلك في كل مكان (في أي وقت في درجة الحرارة وإمدادات الطاقة) وتعرف الشركة المصنعة كيفية القيام بذلك ، فلماذا لم تفعل ذلك بنفسها في معايرة المصنع في نقطة معينة في الظروف؟ ننتقل إلى وصف بايت المعايرة ونرى أنه يأخذ 128 قيمة وهذا يغطي النطاق من 50٪ إلى 200٪ من القيمة الاسمية ، وهو ما يتوافق مع 150/128 ~ 1.17٪ من تغير التردد لكل قيمة معايرة الوحدة ، والتي يجب أن تعطي الدقة المتوقعة أفضل مما في 1٪ ولكن بعد ذلك يجب أن نأخذ في الاعتبار أن خاصية الضبط ليست خطية بشكل واضح وفي منطقة قيم المعايرة الكبيرة لدينا 60٪ / 32 ~ 2٪ من الخطوة (البيانات المأخوذة من الرسم البياني ، لقد عبرت مرارًا وتكرارًا عن موقفي تجاه طريقة مشابهة لتمثيل المعلمات التقنية ، لكني أكرر - هذا غير مقبول الطريقة ، على الرغم من أنها بالطبع أفضل من لا شيء) ، والتي تعطي دقة بنسبة 1 ٪ وإذا أخذنا في الاعتبار رتابة خاصية الضبط (نعم ، هذا ما تقوله الوثائق ، لم يتم رسمه في الرسم البياني ، ولكنه موضح بوضوح في النص. أرفض بشكل قاطع أن أفهم ل ل، والأهم من ذلك لماذا، والشركة تريد أن تجعل من قانون التعديل، لكنه تمكن)، التي تنص بوضوح في المبادئ التوجيهية، فمن الضروري النظر في دقة 2٪ غير قابلة للتحقيق تماما. لا يعجبني حقًا أن عليّ النظر إلى الرسم البياني ، لكن هذا ليس ضروريًا وبيانات الجدول كافية. في هذا الجزء ، يجب اعتبار الوثائق مفهومة تمامًا ومتسقة ، ومعيار الصحة يقع خارج نطاق اختصاصنا.

الجزء الثاني من باليه مارليزون. - تأثير الظروف الخارجية.

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

حسنًا ، لقد مررنا ، سنحاول استخراج بعض المعلومات على الأقل ونرى أنه عندما تتغير درجة الحرارة من -40 إلى + 80 درجة مئوية ، فإن تردد المولد يتغير بنسبة ± 4٪. صورة مماثلة مع جهد الإمداد - فقط الرسومات النموذجية والخطأ الناتج في -6 + 2٪ من 3.3 إلى 5.5. لا تُعطى البيانات المتعلقة بعمر المولد ببساطة ، وهو أمر منطقي بشكل عام ، لأنه على خلفية المعلمات المقدمة بالفعل ، فإن دقة واحد بالمائة لمدة 5 سنوات (قيمة مميزة للسيليكون) لا تزعج أي شخص.

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

الآن سيبدأ نقد المنشور أعلاه. أولاً ، دعنا نفكر في كيفية التأكد من فحص الجهاز للتأكد من توافقه مع متطلبات واجهة معينة. يمكنني اقتراح الطرق التالية:

  1. طريقة جيدة هي قياس المعلمات الحاسمة لواجهة الجهاز ومقارنتها بمتطلبات المعيار - يمكن القيام بذلك باستخدام أدوات عالمية (في حالتنا ، راسم الذبذبة وطول فترة البت أو النقل الكامل) ، أو باستخدام جهاز متخصص معتمد لاختبار هذه الواجهة.
  2. So-so way - لتنظيم التفاعل مع جهاز آخر ينفذ جزء الاستجابة للواجهة ويتم إثباته (يلبي متطلبات المعيار). بالطبع ، هذا الفحص غير كافٍ تمامًا ، وبدلاً من ذلك ، يمكن تطبيقه أكثر لتأكيد عطل الجهاز قيد الاختبار ، ولكنه يفعل شيئًا على الأقل.
  3. تتمثل الطريقة السيئة في تنفيذ جزء الاستجابة من الواجهة بشكل مستقل (في نفس الجهاز أو في جهاز آخر) والتفاعل معه. نظرًا لعدم إثبات كلا الجهازين بشكل واضح ، فإن فائدة مثل هذا الفحص أمر مشكوك فيه للغاية. مثال جيد على هذا النهج هو "صدى" على قناة تسلسلية ، والتي لا تثبت شيئًا وتبلغ عن شيء أكثر من لا شيء عن سرعة الجهاز ، من حيث المبدأ ، لم يتم كسرها وقادرة على نقل شيء ما بطريقة أو بأخرى.
  4. طريقة رهيبة هي أن تأخذ كمختبر جهازًا لا يفي بمتطلبات المعيار على الإطلاق (أو بالأحرى ، الذي يتعارض معه) ويعمل كما في الفقرة السابقة.

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

الاستنتاج العام مما ورد أعلاه:

  1. عند تصميم الأجهزة ، يجب التركيز على التوثيق (RTFM) ،
  2. تحتاج إلى دراسة الوثائق وتفسير ما تقرأه بشكل صحيح (RTFMF) ،
  3. ضع في اعتبارك أن التوثيق في عصرنا يمكن أن يكون سوء فهم ، وعدم دقة (وحتى أخطاء) ، لذلك
  4. تحقق من المعلومات الواردة من أجل الاتساق والمصداقية
  5. استخدام المعلومات التي تم الحصول عليها تجريبيا فقط لتأكيد الاستنتاجات التي تم الحصول عليها من تحليل الوثائق ، بينما
  6. اختر بعناية طرق التجارب لمعدات الاختبار للحصول على نتيجة موثوقة.

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

.equ delay=15 TX_Byte: cli ; ld r18,Z+ ; cp r18,r1 ; breq Exit_Transmit ; dec r1 cbi port, TX_line Delay_TX: ldi r16,delay Do_Delay_TX: nop dec r16 brne Do_Delay_TX TX_Bit: sbrc r18,0 sbi port,TX_line sbrs r18,0 cbi port,TX_line lsr r18 lsr r17 brcs Delay_TX sbi port, TX_line ldi r16,delay Stop_Bit_TX: nop dec r16 brne Stop_Bit_TX Sei 

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

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

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

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

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

 .equ delay=15 TX_Byte: cli sec ;   - clt ;  - TransBit: ;    in r17,port bld r17,Tx_line out port,r17 Delay_TX: ;     ldi r17,delay Do_Delay_TX: nop dec r17 brne Do_Delay_TX TX_Bit: bst r16,0 ror r16 clc brne TransBit ;    brcs TransBit ;  - Exit_Transmit: Sei 

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

يرتبط التحسين التالي بتشكيل مدة الفاصل الزمني للبت ، والذي يتم تنفيذه في البرنامج الأصلي على دورة مكونة من 4 دورات. إذا جعلناها 3 ساعات (أصغر ما يمكن في هذا MK) ، يمكننا حفظ بايت واحد من التعليمات البرمجية ويمكن أن نحسن معلمات الدقة ، حيث أن تأجيل التأخير سيصبح أقل (لا يتجاوز الانحراف نصف حجم المنفصل مع التقريب المناسب). ولكن يجب أن يوضع في الاعتبار أنه في حالة معينة قد نفقد الدقة ، كل هذا يتوقف على بيانات المصدر. ظرف آخر يمكن أن يؤثر على اختيار مدة الدورة هذه - الحد الأقصى لحجم التأخير لعداد البايت هو 256 قيمة - للخيار المتاح ، يمكنك استخدام سرعات من 9600 بالباود وأعلى ، ولكن مع تأخير دورة 3 هذا غير ممكن. سيكون من اللطيف للغاية أن تعكس هذا الظرف (الحد الأدنى لسرعة المنفذ المسموح بها) في التعليقات على البرنامج وفي نفس الوقت عرض رسالة تحذير في حالة انتهاك هذا الشرط. حسنًا ، قم بإجراء التعديلات المناسبة على وحدات ماكرو تكوين المعلمات لتكوين تأخير ، مع عدم نسيان استخدام أسماء "التحدث" للإشارة إلى المتغيرات.

 .equ Freq = 8000000 .equ BaudRate = 115200 .equ PayLoad = 9 ;     .equ CycleTime = 3 ;    .equ delay=((Freq*2/BaudRate - PayLoad*2)+CycleTime)/(CycleTime*2) TX_Byte: cli ldi r18,10 sec ;   - clt ;  - TransBit: in r17,port bld r17,Tx_line out port,r17 Delay_TX: ldi r17,delay Do_Delay_TX: dec r17 brne Do_Delay_TX TX_Bit: bst r16,0 ror r16 dec r18 brne TransBit Exit_Transmit: sei 

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

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

حسنًا وفي الختام - تبدو مهمة كتابة التعليمات البرمجية بالحجم الأدنى في الوقت الحاضر مثيرة للجدل إلى حد ما ، ولكن ، بشكل غير متوقع تمامًا ، تتلقى تأكيدًا لحيويتها. في نهاية العام الماضي (2016 ، هذه هي الفترة التي كانت فيها هذه المشاركة تنتظر دورها) ، تم الإعلان عن عضو كنيست جديد من عائلة MSP430 ، والذي إلى جانب السعر المنخفض بشكل فريد (26 سنتًا - نحن ننتظر ظهور الأجهزة الصينية بناءً على ذلك) لديه أيضًا حجم ذاكرة برنامج صغير فريد - 512 بايت (لا ، لم أكن مخطئا ، والحرف "ك" مباشرة بعد الرقم ليس). لذلك قد يتبين أن حجم الشفرة مهم عند استخدام هذا الجهاز ، وتتطلب كتابة مثل هذه البرامج المتطرفة بشكل عام دراسة متعمقة لـ MK ، و "العمل في حد ذاته نعمة".

Source: https://habr.com/ru/post/ar412959/


All Articles