انضغاط صغير ...
في الدرس الأخير ، بحثنا من أين نبدأ إذا قررت دراسة وحدات التحكم الدقيقة STM32: كيفية إعداد IDE ، وكيفية إنشاء مشروع بسيط ، وكيفية تجميع برنامج ، وكيفية تشغيل برنامج للتنفيذ. بعد الإعجاب بمصابيح LED الوامضة على لوحة Discovery)
في بداية مقال جديد ، خططت للانتقال على الفور إلى تحليل مفصل لقائمة البرنامج ، مما جعل مصابيح LED الخاصة بنا تومض بالتناوب ، ولكن عندما بدأت الكتابة ، أدركت فجأة بنفسي أن هناك عددًا كبيرًا من الأسئلة دون إجابة سيكون من الضروري المتابعة للنظر في البرنامج قبل الأوان. بالنسبة لي ، حددت قائمة كاملة بهذه القضايا :
- ما هي عمليات bitwise ؟ كيفية استخدامها؟
- ما هي السجلات وكيف ترتبط بعمليات البت؟
- مما تتكون وحدات التحكم الدقيقة من سلسلة STM32F0xx ، وكيف يتم تسجيل الوقت وما الذي يوفر الحياة داخل MK؟
- كيف تتم تهيئة MK ، لماذا أحتاج إلى ملف بدء التشغيل ، ماذا تفعل وظيفة SystemInit ؟ شرح على الأصابع.
- مما تتكون مكتبة CMSIS ؟ كيف تبحر؟ ما الذي يمكن تعلمه منه وكيفية استخدامه؟
من النظر في هذه القضايا ، أود أن أكمل القصة حول برمجة STM32.
قائمة المقالات:
- بدء دراسة STM32 أو إدارة الضوء بذكاء
- الشروع في العمل STM32: عمليات البت
- الشروع في العمل STM32: ما هي السجلات؟ كيف تعمل معهم؟
العمليات المنطقية الأساسية
بدأت للتو في دراسة الميكروكونترولر ، حيث بدت الكلمتان "تسجيل" و "عمليات البت" غامضتين بالنسبة لي ولم أكن أرغب في الانتقال إلى هذا الموضوع لفترة طويلة. ولكن عندما فهمت بشكل أو بآخر ما كان عليه ، أدركت أنني ذهبت دون جدوى لتأجيل دراسة مثل هذا الموضوع المهم في صندوق بعيد. ربما تكون عمليات البت هي العمليات الأكثر شيوعًا في وحدة التحكم الدقيقة ومعرفة كيف ولماذا يمكن استخدامها في عملنا سيتيح لنا إمكانات هائلة للتحكم في كل شيء وكل شيء في MK!
كلنا ، في دروس علوم الكمبيوتر في المدرسة ، تعرّفنا على ماهية التكنولوجيا الرقمية ، ولماذا تسمى بهذه الطريقة ، وما هي العمليات المنطقية الأساسية الموجودة ، وتعتمد جميع التقنيات الرقمية الحديثة على الرياضيات الثنائية والدوائر المنطقية.
يعمل المتحكم الدقيق دائمًا مع حالتين فقط: "صفر" - بدون جهد ، "واحد" - جهد. دعونا نقوم بتحديث معرفتنا بالعمليات المنطقية الأساسية قليلاً. إنها تشكل أساس كل التكنولوجيا الرقمية.
- اقتران - يسمى "المنطقي AND" أو "الضرب المنطقي" . في الواقع ، نتيجة تنفيذ هذه العملية المنطقية لاثنين من التعبيرات A و B مماثلة لعملية الضرب. أي أن التعبير سيأخذ القيمة "1" فقط إذا كان لكل من A و B القيمة "1". في جميع الحالات الأخرى ، ستكون القيمة "0". يمكن الإشارة إليه بواسطة AND و && و AND و &
- الفصل - يسمى "منطقي OR" أو "إضافة منطقية" . والنتيجة من تنفيذ هاتين العمليتين المنطقيتين للتعبيرات A و B مشابهة لإضافتها. أي أن التعبير سيأخذ القيمة "1" إذا كان أحد التعبيرات A و B على الأقل له القيمة "1". يمكن تعيينه كـ OR ، || ، OR ، |.
- الانقلاب - يسمى "المنطق NOT" أو "الرفض" . نتيجة تنفيذ هذه العملية المنطقية لاثنين للتعبير A هو العكس. أي أن التعبير سيأخذ القيمة 1 إذا كان التعبير A يساوي 0 والعكس صحيح. يمكن تعيينه كـ NOT ،! ، NOT ، ~.
- الفصل الصارم - يسمى "حصريًا أو" أو "إضافة منطقية حصرية أو" . نتيجة تنفيذ هذه العملية المنطقية لاثنين من التعبيرات A و B ستأخذ القيمة 1 إذا كان A و B قيم مختلفة. يمكن تصنيفها على أنها Excl. أو ، XOR ، ^.
عمليات البت
عمليات البت هي تقريبًا نفس العمليات المنطقية ، والفرق الوحيد هو أنها تنطبق على البتات والأرقام الثنائية.
بالمناسبة ، من أجل بساطة دراسة عمليات البت ، استخدمت برنامج حاسبة ASM 32 بت من ManHunter . باستخدام هذا البرنامج ، يمكنك التحقق من نتائج عمليات البت ، ونقل الأرقام من نظام رقم إلى آخر. يحتوي البرنامج على واجهة بديهية وبعد أن أصبح البرنامج أحد الأدوات الرئيسية في عملي مع وحدات التحكم الدقيقة. يوجد شرح صغير لواجهة البرنامج في الصورة أدناه:
عملية البت "NOT" - "~"
إذا كان البت هو "1" ، فسيكون بعد إجراء العملية "NOT" مساويًا لـ "0" ، والعكس صحيح. يتم تنفيذ العملية على الفور على جميع أجزاء الرقم الثنائي. على سبيل المثال ، قم بعكس رقم FF:
تشغيل البت "AND" - "&"
إذا كانت كلتا البتتين في البت تساوي "1" ، فبعد إجراء العملية "AND" ، ستكون النتيجة في البت تساوي "1" ، ولكن إذا كان أحد البتات على الأقل "0" ، فستكون النتيجة "0". يتم تنفيذ العملية أيضًا على مستوى البت. على سبيل المثال ، "ضرب" رقمين 0xFF0 و 0xF0F:
ونتيجة لذلك ، سنرى أنه في تلك الفئات حيث كانت هناك وحدات في كلا الرقمين ، كانت النتيجة وحدات ، في جميع الحالات الأخرى - الأصفار.
فكر في خيارات التطبيق العملي:
- في الحالة التي نحتاج فيها إلى إعادة تعيين بت أو مجموعة معينة من البتات إلى الصفر ، يمكننا استخدام قناع. أعتقد أنه سيكون أوضح إظهار هذا بمثال. لنفترض أننا نأخذ رقمًا و 0xF8F ونحتاج إلى البت السابع ليصبح صفرًا بدلاً من الوحدة. لا توجد مشكلة ، ضع قناعًا وقم بإلغاء تحديد البت المطلوب. اضرب الأرقام واحصل على النتيجة:
- إذا كنا بحاجة إلى التحقق من بت معين في رقم 0 أو 1 - فإننا نستخدم أيضًا القناع للتكاثر. في القناع ، قمنا بتعيين البت الذي نود التحقق منه. إذا كانت البتة المطلوبة هي "0" ، فإن نتيجة الحساب ستكون "0" ، إذا كانت "1" ، فإن "1" على التوالي. إذا أردنا معرفة ما إذا كانت البتة السابعة تساوي واحدة ، فإننا نصنع القناع المقابل ونضرب الرقم في القناع. كل شيء بسيط:
إذا احتجنا إلى التحقق من تماثل الرقم (بمعنى أن يكون الرقم قابلاً للقسمة على رقمين) ، فإننا نتحقق من البت الأول بالطريقة نفسها ، إذا كان "1" ، فإن الرقم غريب ، إذا كان هناك "0" ، فالرقم زوجي. جربها بنفسك ، من أجل التدريب وبناء المهارات ، قم بهذا الاختبار.
عملية أحادي المعامل "OR" - "|"
إذا كان أحد البتتين أو كليهما "1" ، فستكون النتيجة "1" ، وإلا إذا كان كلا البتتين يساوي "0" ، فستكون النتيجة "0". أي ، تقريبًا ، يتم إضافة جميع الوحدات في الأرقام. على سبيل المثال ، إذا أضفنا رقمين 0xF8F و 0x7F ، نحصل على النتيجة التالية:
خذ بعين الاعتبار التطبيق العملي:
- إذا كنا بحاجة إلى تعيين بت معين في رقم إلى 1 ، فإننا نستخدم أيضًا القناع لإجراء الإضافة. على سبيل المثال ، لتعيين البت 15 في الرقم 0xFF0 ، تحتاج إلى إجراء عملية إضافة منطقية وسوف نحصل على النتيجة المطلوبة:
حاول اللعب بأرقام مختلفة بنفسك وشاهد النتائج.
العملية الحصرية أو أحادية البت هي "^"
إذا كانت البتات في البتات مختلفة وليست متساوية ، فستكون النتيجة "1" ، وإلا "0". على سبيل المثال ، إذا قمنا بعمل أرقام XOR 0xF8F و 0x7F ، فسوف نرى أنه في البتات التي يوجد فيها بتات ممتازة ، فإن النتيجة هي "1" وفي الأماكن التي تكون فيها البتات متشابهة ، سواء كانت "0" أو "1" ، فستظهر "0 "في النهاية نحصل على النتيجة التالية:
فكر في خيارات التطبيق العملي:
- إذا احتجنا إلى عكس أي بت في رقم ، يمكننا استخدام القناع للقيام بذلك بسهولة باستخدام عملية XOR. لنقم بعكس الرقمين السادس والسابع في الرقم 0xF8 باستخدام القناع 0xC0. يمكنك مشاهدة النتيجة في الصورة:
- هناك حالات عندما يكون من الضروري مقارنة اثنين من السجلات وتحديد ما إذا كانت متساوية أم لا . في هذه الحالة ، نحتاج إلى تسجيل القيم لعمليات XOR. إذا كانت النتيجة "0" ، فإن السجلات متساوية ، وإلا فهي ليست متساوية:
عمليات تحويل البت
هناك عدد من عمليات البت المثيرة للاهتمام والمفيدة للغاية أحيانًا ويشار إليها باسم عمليات النقل . يمكنك تحريك التصريفات إلى اليمين وإلى اليسار. أثناء هذه العملية ، يتم تحويل جميع بتات الرقم الثنائي من خلال العدد المحدد من المواضع ، في هذه الحالة ، إذا انتقل التحول إلى اليسار ، يتم فقدان البت الأكثر أهمية (أقصى اليسار) ، ويتم كتابة "0" إلى الأقل أهمية (أقصى اليمين). مع التحول المنطقي إلى اليمين ، يحدث الموقف المعاكس - يتم فقدان البت منخفض الترتيب (أقصى اليمين) ، ويتم كتابة "0" إلى البت عالي الترتيب. بالإضافة إلى ذلك ، أود أن أشير إلى أنه في حالة كلمات 32 بت ، يتم تحويل جميع البتات 32 ككل. دعونا ننظر في عمليات التحول بمزيد من التفصيل.
التحول الأيسر - "<<"
يمكنك أن ترى كيف يحدث التحول في الصورة أدناه. أعتقد أن كل شيء واضح تمامًا:
مع التحول الثنائي ، يمكنك ملاحظة ميزة واحدة مثيرة للاهتمام. يؤدي التحويل برقم واحد إلى ضرب عددنا في 2. إذا قمنا بتحويل رقمنا x بالأرقام n ، فإننا نحصل على x * (2 * n). حاول تتبع هذا النمط بشكل مستقل من خلال فائدتنا للعد. =)
الانتقال إلى اليمين - ">>"
تنعكس الصورة بوضوح ما ينتج عن التحول إلى اليمين:
مع التحول الثنائي إلى اليمين ، يمكنك ملاحظة أن الموقف هو عكس التحول إلى اليسار - يتم تقسيم الرقم على 2 ثانية عند نوبة من رقم واحد وبعد ذلك على 2 * n ، حيث n هو عدد البتات التي تم إجراء التحول بها. حاول أيضًا التلاعب بالأرقام بنفسك ، والتي من الواضح أنها مقسمة إلى 2 تمامًا. وسؤال الردم - ماذا ستكون النتيجة إذا قسمت الرقم الفردي بهذه الطريقة؟
ملاحظة مهمة . إذا قمت بتحويل متغير بعلامة سلبية (موقعة) ، فسيتم شغل المراكز التي تم إخلاؤها بأخرى.
في الختام ...
بالنسبة للعديد من المبتدئين ، قد يبدو هذا الموضوع مملًا للغاية ، وقد يبدو أنه ليس من الواضح على الإطلاق أين وكيف يتم تطبيق هذه المعرفة. أسارع إلى طمأنتك ، في المواقف التي تحتاج فيها إلى رفع قدم أو آخر من MK أو كتابة معلمة إلى خيط في كتلة أو وحدة طرفية - هناك ، ستكون هناك حاجة إلى معرفة عمليات البت في كل مكان. نظرًا لأن المقالة اتضح أنها ضخمة للغاية ، فسننقل النظر في التسجيلات إلى الدرس التالي. حسنًا ، يمكنك في المستقبل استخدام هذه المقالة كورقة غش.
كواجبك المنزلي ، حاول تحليل رمز البرنامج بنفسك في حين (1) {...} حظر وفهم كيفية تشغيل وإيقاف تشغيل مصابيح LED الخاصة بنا مع عمليات أحادية البت . حسنًا ، في الدرس التالي سأخبرك كيف يحدث ذلك حقًا!
قائمة المقالات:
- بدء دراسة STM32 أو إدارة الضوء بذكاء
- الشروع في العمل STM32: عمليات البت
- الشروع في العمل STM32: ما هي السجلات؟ كيف تعمل معهم؟