اطلاعیه

Collapse
No announcement yet.

مشکل با وقفه های تو در تو در atmel studio

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل با وقفه های تو در تو در atmel studio

    سلام
    من ی برنامه برای avr دارم که توی اون باید از ی وقفه به صورت تو درتو استفاده کنم
    توی اتمل استودیو هم این کار رو انجام میدم
    و اینکه برای وقفه ها از تابع ISR استفاده میکنم
    کار خیلی شاخی هم نمیخام انجام بدم.کل تابع سرویس وقفه دو خطه.

    ISR(INT1_vect)
    {
    LCDWriteString("salam");
    sei();
    _delay_ms(4000);
    }



    ولی توی پروتیوس که امتحان میکنم یک بار بیشتر وقفه نمیخوره.در واقع توی اون 4ثانیه تاخیری که گذاشتم باید دوباره وقفه بخوره که نمیشه .البته اینم بگم که اون یکی وقفه(INT0) توی این 4 ثانیه کار میکنه
    ممنون میشم راهنماییم کنید
    تشکر

    #2
    پاسخ : مشکل با وقفه های تو در تو در atmel studio

    نوشته اصلی توسط alilooki نمایش پست ها
    سلام
    من ی برنامه برای avr دارم که توی اون باید از ی وقفه به صورت تو درتو استفاده کنم
    توی اتمل استودیو هم این کار رو انجام میدم
    و اینکه برای وقفه ها از تابع ISR استفاده میکنم
    کار خیلی شاخی هم نمیخام انجام بدم.کل تابع سرویس وقفه دو خطه.

    ISR(INT1_vect)
    {
    LCDWriteString("salam");
    sei();
    _delay_ms(4000);
    }



    ولی توی پروتیوس که امتحان میکنم یک بار بیشتر وقفه نمیخوره.در واقع توی اون 4ثانیه تاخیری که گذاشتم باید دوباره وقفه بخوره که نمیشه .البته اینم بگم که اون یکی وقفه(INT0) توی این 4 ثانیه کار میکنه
    ممنون میشم راهنماییم کنید
    تشکر
    سلام
    هیچوقت تو وقفه ای که اتفاق میفته کارایی که باعث ایجاد تاخیر (استفاده از دستور تاخیر ، نمایش روی lcd و ...) در روند برنامه میشه استفاده نکنید و بهترین راه اینه که مقدار یه متغیر رو تغییر بدین و تو روتین اصلی برنامه کاراری مورد نظر رو انجام بدین
    دستور sei() واسه چی گذاشتی؟

    دیدگاه


      #3
      پاسخ : مشکل با وقفه های تو در تو در atmel studio

      sei(); باید آخرین دستور باشه
      تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
      داشتن عقله زيادتر از دیگر آدم ها است

      دیدگاه


        #4
        پاسخ : مشکل با وقفه های تو در تو در atmel studio

        نوشته اصلی توسط M3R-E نمایش پست ها
        سلام
        هیچوقت تو وقفه ای که اتفاق میفته کارایی که باعث ایجاد تاخیر (استفاده از دستور تاخیر ، نمایش روی lcd و ...) در روند برنامه میشه استفاده نکنید و بهترین راه اینه که مقدار یه متغیر رو تغییر بدین و تو روتین اصلی برنامه کاراری مورد نظر رو انجام بدین
        دستور sei() واسه چی گذاشتی؟
        ممنون از اینکه وقت گذاشتید
        اما من منظورتون رو از اینکه مقدار متغیر رو تغییر بدم تا در روتین اصلی استفاده کنم متوجه نمیشم یعنی نمیدونم چجوری باید اینکار رو بکنم.این کار ی جورایی شبیه روش پولینگه.
        اگر امکانش هست دلیل اینکه میفرمایید دستور تاخیر توی روتین وقفه نذارم چیه؟
        دستور sei() هم باید باشه تا بتونم تو در تو استفاده کنم.چون دقیقا مشکل من استفاده تو درتو از وقفه هستش وگرنه به صورت عادی مشکلی ندارم
        باز هم ممنون

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        نوشته اصلی توسط aliila نمایش پست ها
        sei(); باید آخرین دستور باشه
        ممنون از پاسختون
        وقفه تو در تو بعد از دستور sei() قابل استفاده است که اگر اخرین دستور بذارم عملا تو درتو معنا نداره

        دیدگاه


          #5
          پاسخ : مشکل با وقفه های تو در تو در atmel studio

          نوشته اصلی توسط alilooki نمایش پست ها
          ممنون از اینکه وقت گذاشتید
          اما من منظورتون رو از اینکه مقدار متغیر رو تغییر بدم تا در روتین اصلی استفاده کنم متوجه نمیشم یعنی نمیدونم چجوری باید اینکار رو بکنم.این کار ی جورایی شبیه روش پولینگه.
          خواهش میکنم
          مثلا شما قراره وقفه که اومد روی lcd یه عبارت رو نمایش بدین ، یه متغیر تعریف کنید و بعد با اومدن وقفه مقدارش رو مثلا 1 قرار بدین و بعد تو حلقه اصلی برنامه بگین اگه متغیر برابر با 1 بود این متن رو نمایش بده و باقی ماجرا ، باید به روش استیت ماشین برنامه رو بنویسید
          اگر امکانش هست دلیل اینکه میفرمایید دستور تاخیر توی روتین وقفه نذارم چیه؟
          فرض کنید زمان اجرای تاخیر 4 ثانیه یه وقفه دیگه هم رخ بده که تو اون هم 4 ثانیه تاخیر باشه ، برنامه میره به وقفه جدید و اول اون 4 ثانیه رو اجرا میکنه و بعد برمیگرده ادامه تاخیر 4 ثانیه اولی و اگه این بین دوباره یه وقفه دیگه اتفاق بیفته برنامه میره و 4 ثانیه بعد برمیگرده واسه انجام این 4 ثانیه اولی و ممکنه این تاخیر 4 ثانیه که شما گذاشتین خیلی بیشتر طول بکشه
          نمیدونم تونستم منظورم رو برسونم یا نه !!

          دلیل: ادغام دو پست برای جلوگیری از اسپم

          نوشته اصلی توسط aliila نمایش پست ها
          sei(); باید آخرین دستور باشه
          مهندس دلیل خاصی داره که تو تابع وقفه یک بار دیگه دستور sei باید نوشته بشه؟
          یه بار اول برنامه این دستور رو بنویسیم کافی نیست؟

          دیدگاه


            #6
            پاسخ : مشکل با وقفه های تو در تو در atmel studio

            نوشته اصلی توسط M3R-E نمایش پست ها
            مهندس دلیل خاصی داره که تو تابع وقفه یک بار دیگه دستور sei باید نوشته بشه؟
            یه بار اول برنامه این دستور رو بنویسیم کافی نیست؟
            بله
            چون میخام تو در تو استفاده کنم باید توی روتین وقفه این دستور اجرا بشه
            اصل مشکل بنده هم استفاده تو در تو از وقفه است ن چیز دیگه ولی انگار دستور sei به تنهایی کافی نیست

            دیدگاه

            لطفا صبر کنید...
            X