ايران ويج

نسخه‌ی کامل: مشکل در INT 0
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
بایدم حل میشد چون مدارت اشتباه بود :d
کد php:
#include <mega32.h>
#include <delay.h>
#include <stdio.h>
#include <alcd.h>

unsigned char i d[20];

interrupt [EXT_INT0void ext_int0_isr(void)
{
    
i++;
    
sprintf(d,"value=%d",i);
    
lcd_gotoxy(0,0);
    
lcd_puts(d);
}

void main(void)
{
    
GICR|=0x40;
    
MCUCR=0x02;
    
MCUCSR=0x00;
    
GIFR=0x40;
    
#asm("sei")


سوال یک:
برنامه بالا کار میکنه الان یا چون while رو حذف کردم اجراش زود به پایان میرسه؟
چون while رو حذف کردی می رسه به END و میکرو دیگه کار نمی کنه.
البته عملا تست نکردم ، اما قاعدتا همینطورهه Biggrin
(۱۵-آبان-۱۳۹۳, ۲۲:۱۷:۲۶)sharin نوشته است: [ -> ]چون while رو حذف کردی می رسه به END و میکرو دیگه کار نمی کنه.
البته عملا تست نکردم ، اما قاعدتا همینطورهه Biggrin

خب اینطوری هم که درست نیست توی یه حلقه بی نهایت برنامه رو اجرا کنیم!! اصلا بهینه نیست!
راه حل پیشنهادی چیست؟
سلام

چه راه حل پیشنهادی !
ابن که نرم افزاریه وقتی سخت افزاری هم کد میزنیم با هرسیکل یه سری دستورات اجرا میشن.کل سخت افزار هم همینه. همش تکراره
(۱۵-آبان-۱۳۹۳, ۲۳:۴۸:۲۶)Ambassador نوشته است: [ -> ]چه راه حل پیشنهادی !
ابن که نرم افزاریه وقتی سخت افزاری هم کد میزنیم با هرسیکل یه سری دستورات اجرا میشن.کل سخت افزار هم همینه. همش تکراره

اینکه سخت افزار تکرار میشه وظیفه سخت افزاره که همین کارو کنه!

ولی توی نرم افزار اینکه کلا از حلقه بی نهایت استفاده بشه واسه اینکه برkامه به انتها نرسه فکر نمیکنم درست باشه ها!!
اگه قرار بود توی نرم افزار هم مدام یه سری دستورات اجرا بشن که وقفه‌ها رو ایجاد نمیکردند!
حقیقت امر اینه که وقتی میکرو به END میرسه باز هم فعاله ولی شرایطش قابل پیش بینی نیست بستگی به کامپایلر داره
ولی اصول اینه که وقفه هنوز کار کنه
اما حلقه بینهایت رو چرا میزارن؟ چون وقتی برنامه به END میرسه همینطوری که گفتم عملکردش قابل پیشبینی نیست و ممکن هست هر کاری بکنه و شاید ادامه Flash رو بخونه که اطلاعات درستی توش نیست برای همین حلقه رو میزارن که هیچ وقت به اون جا نرسه
(مثلا بیسکام این رو خودش اجرا می کنه یعنی دستور END درواقع یه حلقه هست!)
اما در مورد بهینه بودن
باید بگم این مورد توی avr صادق نیست
توی cpu یا دیگر دستگاه ها وقتی چیزی برای پردازش نباشه Thread ها و core ها غیر فعال میشن و یکی از thread ها می مونه که اونم تا حد امکان فرکانس کاریش پایین میاد
برای همین مصرف کم میشه
اما توی AVR اینطوری نیست سرعت عوض نمیشه و همواره درحال پردازش هست حتی اون موقعی که هیچ برنامه ای نیست!!! درواقع داره از flash دستور هیچی رو میگیره و همواره
اجرا می کنه برای همین هست که وجود و یا عدم وجود حلقه تاثیری در بهینه بودن برنامه نداره
(میدونم که بد توضیح دادم:d)
منم با نظر شما موافقم حقیقتن همین طوری که گفتید وقتی میکرو به END میرسه باز هم فعاله ولی شرایطش قابل پیش بینی نیست
خیلی خوب توضیح دادید.
صفحه‌ها: 1 2