اطلاعیه

Collapse
No announcement yet.

ترتیب اجرای وقفه ها

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

    ترتیب اجرای وقفه ها

    با سلام مجدد
    اگر هم زمان چند تا وقفه بخواد اجرا بشه مثلا وقفه خارجی همزمان با وقفه تبدیل آنالوگ به دیجیتال همزمان با وقفه spi و....کدام اجرا می شه و کدام منتظر می مونه
    یکی میگفت خدا چرا به حرفای ما گوش نمیده گفتم
    هان ای صنما،دل یک دله کن
    گر سر ندهم ،وانگه گله کن

    #2
    پاسخ : ترتیب اجرای وقفه ها

    نوشته اصلی توسط سید امین گلستانه
    با سلام مجدد
    اگر هم زمان چند تا وقفه بخواد اجرا بشه مثلا وقفه خارجی همزمان با وقفه تبدیل آنالوگ به دیجیتال همزمان با وقفه spi و....کدام اجرا می شه و کدام منتظر می مونه
    سلام...
    در مورد این موضوع باید الویت های وقفه رو مورد بررسی قرار داد.
    پایین ترین آدرس حافظه به بردار Reset و بردارهای وقفه اختصاص دارد. بردار وقفه ای که پایین ترین آدرس را دارد، دارای بالاترین اولویت می باشد.جدول زیر آدرس بردار های وقفه ها را نمایش می دهد.

    دیدگاه


      #3
      پاسخ : ترتیب اجرای وقفه ها

      دو تا سوال دیگه از وقفه ها
      1- اون اینکه اگر مثلا وقفه خارجی بدهیم و در حال اجرای برنامه درون وقفه مثلا وسط برنامه دوباره دستور وقفه خارجی به پایه آن داده بشه چه اتفاقی می افته
      2- اگر این اتفاق توسط مثلا وقفه دیگه مثل تبدیل آنالوگ به دیجیتال بیفته چی
      یکی میگفت خدا چرا به حرفای ما گوش نمیده گفتم
      هان ای صنما،دل یک دله کن
      گر سر ندهم ،وانگه گله کن

      دیدگاه


        #4
        پاسخ : ترتیب اجرای وقفه ها

        سلام
        یکی از مشکلات برنامه نویسی برای میکروکنترلر همین وقفه های روی هم هست

        در هر حالتی اگه در زیر برنامه اینتراپت هر نوع اینتراپتی بیاد اشکالی ایجاد نمیشه مگه اینکه تعدادشون زیاد باشه یا توی زیر برنامه های اونا توابع زیادی رو صدا کنید

        دلیلش هم اینه که توی برنامه های سطح بالا مثله سی یا بیسیک دو جور استک داریم
        استک سخت افزاری که برای ذخیره سازی آدرس برگشت از زیر برنامست که با هر بار فراخوانی (از هر نوعی) یه حجمی از اون پر میشه
        یه استک نرم افزاری داریم که محل ذخیره سازی متغییر های حیاطی میکرو هست
        یعنی هر بار زیر برنامه صدا میشه مثلا رجیستر همه کاره ها توی یه جایی از ram قرار میگیره بعد با دستور Return این رجیستر ها بازیابی میشن
        این کارایی در اسمبلی با دستور pop و push که دست برنامه نویس بود ولی سی و بیسیک نه

        حالا هر جوری با زیر برنامه ها رفتار کنی که استک ها پر بشه ولی خالی نشه(برگشت بموقع نداشته باشه) میکرو اصطلاحا هنگ میکنه و کار های عجیب غریب میکنه

        مثال خیلی جالبش بدست اوردن فاکتوریل با توابع بازگشتیه (اونی که خود تابع رو توی خودش صدا میکنه) اگه مثلا 100! رو بخوای بگیری تابع صد بار خودشو صدا میکنه بدونه بازگشت پس صد تا ادرس بازگشت از زیر برنامه بعلاوه 100 تا 32 بایت رجیستره همه کاره رو ریختی توی ram بدونه اینکه خالی کنی(حالا نرید بنویسید کار کنه ما رو فحش بدید چون کامپایلر ها مخصوصا گرون قیمتها مثله IAR بشدت کد رو optimize یا بهینه میکنن ممکنه کار کنه :mrgreen

        توی بیسیک $swstack و $hwstack برای همین کاره و توی سی توی تنظیمات کامپایلر این موضوع ذکر میشه
        به وبلاگم سر بزنید

        دیدگاه

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