تحلیل رفتار Bascom هنگام کار با EEPROM

مقدمه:

بدون شک کامپایلر بسکام برای دوستداران زبان بیسیک محبوبیت بسیار زیادی داشته و برای نوشتن سریع کدها و برنامه‌های مختلف برای میکروکنترلر AVR فارغ از درگیر شدن با جزئیات رجیسترها بهترین گزینه به شمار می‌رود (البته نسخه قانونی آن). با این حال داشتن دانش قبلی در خصوص رجیسترها و نحوه عملکرد میکروکنترلر AVR از ضروریات است، لیکن Bascom زمان را می‌خرد؛ که مهمترین دارایی ماست.

تنها مشکل بسکام معماری بسته آن است که مشخص نیست دستورهای ساده را چگونه به کد تبدیل می‌کند. به طور مثال اخیراً برای یک پروژه نیاز به کار با مقدار زیادی دیتای EEPROM  داشتیم، بسکام کار را براحتی با تعریف متغیر از نوع ERAM ساده می‌کند اما نکته مهم این بود که آیا طبق گفته برخی مقالات آموزشی باید بعد از دستورات نوشتن و خواندن بصورت دستی از تاخیر waitms 10 استفاده کنیم؟ آیا بسکام مراقب زمان لازم برای نوشتن در EEPRM هست یا نه؟ به طور مثال اگر نیاز به نوشتن 512 بایت EEPROM باشد و هرکدام نیاز به 10 میلی ثانیه تاخیر داشته باشد باید حدود 5 ثانیه برنامه را منتظر بگذاریم؟

 

مهندسی معکوس (تبدیل HEX به ASM با  AVR Disassembler)

در چنین شرایطی تنها راه ممکن اینست که یک برنامه خیلی ساده در حد نوشتن یک عدد در متغیر Eram نوشته و آنرا به Hex تبدیل کنیم. سپس کد Hex را به کمک برنامه DISAVR که یک برنامه کوچک خط فرمان برای تبدیل فایل Hex به ASM است به کد اسمبلی تبدیل و آن را تحلیل کنیم. بدین منظور کد زیر را نوشتیم:

سپس کد hex را با نام ep.hex تولید کرده و به کمک برنامه دیس اسمبلر که می توانید آن را از آدرس زیر دریافت کنید:

https://www.avrfreaks.net/forum/disavr-win32-101-beta-released

یا از این لینک بگیرید:

disavr

و با تایپ دستور

disavr ep.hex > ep.asm

کد اسمبلی زیر را در خروجی تحویل گرفتیم:

 

همانطوریکه در برنامه اسمبلی در خط

avr0042: sbic EECR, 1 ; 0042 99E1

مشاهده می کنید بیت شماره یک یعنی بیت EEWE از رجیستر EECR بررسی شده و فقط در صورت 0 بودن دستورات بعدی را که عملیات خواندن یا نوشتن در EEPROM است انجام  می‌دهد. بنابراین کد تولید شده توسط BASCOM در خصوص کار با متغیرهای EEPROM کاملا اصولی بوده و هیچ نیازی به استفاده از توابع ایجاد تاخیر مثل waitms 10 بعد از دستورات مقداردهی متغیرهای نوع EEPROM نمی‌باشد.

 

نتیجه گیری

در این مقاله آموختیم که چگونه خروجی بسته بسکام را به کد اسمبلی تبدیل کرده و آن را تحلیل کنیم. همچنین یادگرفتیم که براحتی و با اطمینان خاطر از متغیرهای Eram در برنامه استفاده کنیم. البته همیشه سعی کنید در ابتدای برنامه یک کپی از متغیرهای Eram در SRAM ذخیره کنید و برای جلوگیری از سربار اضافه و نیز خراب شدن EEPROM در متن برنامه با رم کار کنید. همچنین هرگز در حلقه‌های تکرار به دفعات در متغیرهای Eram ننویسید تا EEPROM را خراب نکنید چرا که EEPROM محدودیت تعداد دفعات نوشتن دارد.

بازدیدها: 27

دیدگاهتان را بنویسید