اطلاعیه

Collapse
No announcement yet.

مدیریت وقفه ها در AVR

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

    مدیریت وقفه ها در AVR

    سلام دوستان
    من یه پروژه ای دارم که توش قراره از هر 4 پورت UART میکرو که 2560 هست استفاده بشه، از قضا هر 4 تا دیتایی که میخوان دریافت بشن هم حساس و اساسین و میکرو بر اساس اونها پردازشش رو انجام میده، بنابراین باید وقتی دیتاشون دریافت شد وقفه اتفاق بیفته. مضاف بر این 4 وقفه، امکان وقوع 6 وقفه خارجی دیگه هم باید باشه بدلیل اینکه اون وقفه ها هم در پردازش نیازن و فقط به مدت 1 ثانیه میتونن 1 باشن و مجددا تغییر حالت میدن و 0 میشن و اگه تو اون یک ثانیه ثبت نشن داده رو از دست میدم. با این شرایط در کل 10 تا وقفه دارم که همشون باید دریافت بشن. متاسفانه میکرو های AVR توانایی انجام همزمان تنها یک وقفه رو دارن و اگر داخل وقفه وقفه ی دیگه ای اتفاق بیفته میکرو ازش صرف نظر میکنه. به همین خاطر برای مدیریت این وقفه ها دچار مشکل شدم. ممکنه کسی از دوستان راهنماییم کنه که چطور میتونم این کار رو انجام بدم؟ قطعه خاصی برای انجام این کار وجود داره؟ ضمنا، من با بسکام کار میکنم.
    ممنون از راهنماییتون
    تشكر نكن، صلوات بفرست:

    [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

    #2
    پاسخ : مدیریت وقفه ها در AVR

    متاسفانه میکرو های AVR توانایی انجام همزمان تنها یک وقفه رو دارن و اگر داخل وقفه وقفه ی دیگه ای اتفاق بیفته میکرو ازش صرف نظر میکنه
    اگر در روتین وقفه مجددا وقفه سراسری رو فعال کنید با رخدادن وقفه دیگر روتین وقفه فعلی قطع شده و برنامه به اجرای اون وقفه میره و از این طریق میشه وقفه های تو در تو داشت، اما بهتر هست بنا به دلایل خاص و جلوگیری از از دست رفتن بعضی اطلاعات سعی کنید بجای اینکه وقفه ها تو در تو اتفاق بیوفتن مدت زمان اجرای روتین وقفه ها رو تا حد امکان کوتاه کنید و در انتخاب منابع وقفه صحیح بیشتر دقت کنید
    از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
    هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
    اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
    اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
    شاد و موفق باشید

    دیدگاه


      #3
      پاسخ : مدیریت وقفه ها در AVR

      نوشته اصلی توسط Study
      اگر در روتین وقفه مجددا وقفه سراسری رو فعال کنید با رخدادن وقفه دیگر روتین وقفه فعلی قطع شده و برنامه به اجرای اون وقفه میره و از این طریق میشه وقفه های تو در تو داشت، اما بهتر هست بنا به دلایل خاص و جلوگیری از از دست رفتن بعضی اطلاعات سعی کنید بجای اینکه وقفه ها تو در تو اتفاق بیوفتن مدت زمان اجرای روتین وقفه ها رو تا حد امکان کوتاه کنید و در انتخاب منابع وقفه صحیح بیشتر دقت کنید
      سلام
      ممنون از راهنماییتون، حتما راجع به این مورد دقتم رو بیشتر میکنم، اما روش یا قطعه خاصی واسه بافر کردن اطلاعات یه وقفه در حین انجام وقفه دیگه میکرو وجود نداره که بشه باهاش یکی رو گرفت و بعدش یکی دیگه رو؟
      مرسی
      تشكر نكن، صلوات بفرست:

      [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

      دیدگاه


        #4
        پاسخ : مدیریت وقفه ها در AVR

        معمولا موقع ورود به وقفه اطلاعات مهم که ممکن هست رد روتین وقفه تغییر کنه یا از دست بره رو در اول روتین درون پشته قرار میدن و در نهایت در آخر روتین وقفه به رجیستر خودشون برشون میگردونن ( از پشته میخوانند ) و در واقع از همون فضای رم برای بکاپ گرفتن استفاده میکنن ولی باید مراقب باشید که پشته سرریز نشه، اگر فکر می کنید فضای کافی وجود نداره و مجبور هستید حتما یکسری اطلاعات رو به همین صورت نگه دارید اون موقع میتونید از حافظه های خارجی استفاده کنید.
        از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
        هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
        اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
        اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
        شاد و موفق باشید

        دیدگاه

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