پاسخ : برنامه نویسی به زبان اسمبلی
اخیرا در ارتقاء سخت افزار و نرم افزار یک سیستم صنعتی با مشکلی برخورد کردم، به این ترتیب که ارتباط rs485 در مواردی از عملکرد قطع و ارتباط مختل می شد. با توجه به جواب دادن نسخه قبلی این طرح از نظر نرم افزاری و قطع ناگهانی ارتباط سریال در بین انجام عملیات، احتمالات مختلف و متعددی برای وجود این مشکل از منظر سخت افزاری مطرح بود و مورد بررسی قرار گرفت:
1- قطع بودن یا نقص در اتصالات rs485
2- اشکال در IC های sp485
3- اشکال سخت افزاری در eeprom سریال که اطلاعات از روی آن خوانده و ارسال می شد.
4- سایر اشکالات مرتبط با سخت افزار نظیر عدم پایداری تغذیه و وجود اشکال در اسیلاتورهای دو طرف ارتباط و ...
بعد از ساعت ها بررسی و تست و کار طاقت فرسا، در نهایت معلوم شد که اشکال بوجود آمده متوجه هیچ یک از موارد فوق نبوده است. بلکه علیرغم مشترک بودن نرم افزار در نسخه های قبلی و جدید، تنها به دلیل اضافه شدن 4 دستور اسمبلی sbi و cbi در یک روتین وقفه که چند ده هزار بار احضار می شود، به دلیل بار پردازشی بسیار بالای تحمیل شده در حد 100 درصد به cpu و علیرغم اینکه این دستورت تنها 8 سیکل را از نظر زمانی به خود اختصاص می دهند، این مشکل بوجود آمده بود. در نهایت با بهینه سازی انجام شده در دستورالعمل ها و کاهش چند سیکل از بار پردازشی cpu در روتین وقفه، این مشکل حل شد. این یک نمونه ای از کاربردهایی است که به هیچ وجه نمی توان آن را با توجه به توان پردازشی AVR، با روشی به غیر از برنامه نویسی اسمبلی پیاده سازی کرد و اگر قرار بود به غیر از این روش برنامه نویسی در این کاربرد مورد استفاده قرار بگیرد (C و Basic و ...)، نیاز به خانواده هایی با توان پردازشی بالاتر و فرکانس کلاک بیشتر بود. از این نظر استفاده از حداکثر توان پردازشی avr با استفاده از برنامه نویسی اسمبلی و بدون نیاز به استفاده از خانواده های قویتر، می تواند یک ارزش افزوده ناشی از ابزار نرم افزاری را در تولید ایجاد کند (به دلیل استفاده از سخت افزار ارزان تر) و حداقل در این کاربرد به خصوص، این روش برنامه نویسی به دلیل فراهم کردن امکان انجام کاربرد مورد نظر با avr، بسیار به صرفه بوده است.
اخیرا در ارتقاء سخت افزار و نرم افزار یک سیستم صنعتی با مشکلی برخورد کردم، به این ترتیب که ارتباط rs485 در مواردی از عملکرد قطع و ارتباط مختل می شد. با توجه به جواب دادن نسخه قبلی این طرح از نظر نرم افزاری و قطع ناگهانی ارتباط سریال در بین انجام عملیات، احتمالات مختلف و متعددی برای وجود این مشکل از منظر سخت افزاری مطرح بود و مورد بررسی قرار گرفت:
1- قطع بودن یا نقص در اتصالات rs485
2- اشکال در IC های sp485
3- اشکال سخت افزاری در eeprom سریال که اطلاعات از روی آن خوانده و ارسال می شد.
4- سایر اشکالات مرتبط با سخت افزار نظیر عدم پایداری تغذیه و وجود اشکال در اسیلاتورهای دو طرف ارتباط و ...
بعد از ساعت ها بررسی و تست و کار طاقت فرسا، در نهایت معلوم شد که اشکال بوجود آمده متوجه هیچ یک از موارد فوق نبوده است. بلکه علیرغم مشترک بودن نرم افزار در نسخه های قبلی و جدید، تنها به دلیل اضافه شدن 4 دستور اسمبلی sbi و cbi در یک روتین وقفه که چند ده هزار بار احضار می شود، به دلیل بار پردازشی بسیار بالای تحمیل شده در حد 100 درصد به cpu و علیرغم اینکه این دستورت تنها 8 سیکل را از نظر زمانی به خود اختصاص می دهند، این مشکل بوجود آمده بود. در نهایت با بهینه سازی انجام شده در دستورالعمل ها و کاهش چند سیکل از بار پردازشی cpu در روتین وقفه، این مشکل حل شد. این یک نمونه ای از کاربردهایی است که به هیچ وجه نمی توان آن را با توجه به توان پردازشی AVR، با روشی به غیر از برنامه نویسی اسمبلی پیاده سازی کرد و اگر قرار بود به غیر از این روش برنامه نویسی در این کاربرد مورد استفاده قرار بگیرد (C و Basic و ...)، نیاز به خانواده هایی با توان پردازشی بالاتر و فرکانس کلاک بیشتر بود. از این نظر استفاده از حداکثر توان پردازشی avr با استفاده از برنامه نویسی اسمبلی و بدون نیاز به استفاده از خانواده های قویتر، می تواند یک ارزش افزوده ناشی از ابزار نرم افزاری را در تولید ایجاد کند (به دلیل استفاده از سخت افزار ارزان تر) و حداقل در این کاربرد به خصوص، این روش برنامه نویسی به دلیل فراهم کردن امکان انجام کاربرد مورد نظر با avr، بسیار به صرفه بوده است.
دیدگاه