اطلاعیه

Collapse
No announcement yet.

سلسله مراتب اجرای دستور در میکروکنترلرها و لزوم اجرای دستورات دیگر هنگام اجرای وقفه

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

    سلسله مراتب اجرای دستور در میکروکنترلرها و لزوم اجرای دستورات دیگر هنگام اجرای وقفه

    سلام ؛
    یه سوال داشتم خدمتتون
    اگه من بخوام تو avr یه برنامه بنویسم که مثلا با گرفتن 1 در یه ورودی، فلان خروجی وقفه ایجاد بشه، آیا تا زمان اتمام وقفه دیگه هیچ برنامه ای اجرا نمیشه؟
    یعنی من می خوام هم زمان که یه ورودی وقفه ایجاد شده به ورودی های دیگه و خروجی های دیگه هم کنترل داشته باشم، میشه؟ یا نه اگه 1 ثانیه وقفه باشه باید تا پایان یک ثانیه برنامه دیگه ای اجرا نشه؟
    یعنی برنامه فقط پشت سر هم و از بالا به پایین اجرا میشه، یا هر دستور مجزا هم میشه اجرا بشه؟
    البته برای کار من لازم نیست که دو دستور همزمان اجرا بشن، فقط کافیه در زمانی که دستورات زمان بر مثل وقفه ها یا دیلای ها کار می کنن، ورودی های دیگه سنجش بشه و دستورات لازم برای خروجی های مورد نظر ارسال بشه،
    با تشکر سینا یوشا

    #2
    پاسخ : سلسله مراتب اجرای دستور در میکروکنترلرها و لزوم اجرای دستورات دیگر هنگام اجرای وقفه

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

    دیدگاه


      #3
      پاسخ : سلسله مراتب اجرای دستور در میکروکنترلرها و لزوم اجرای دستورات دیگر هنگام اجرای وقفه

      ممنون از پاسختون
      اما خب این یعنی چی؟ درسته که تو یک سیکل سی پی یو نمی تونه دو دستور رو اجرا کنه، اما یک سیکل یعنی مثلا در مورد stm32f103 1/72 میلیونم ثانیه چی؟، مثلا وقفه یا دیلای من مثلا یک دهم ثانیه هست، تو این مدت سی پی یو هیچ کاری جز کانتر و رسیدن به انتهای دیلای نداره؟ یا اینکه میشه داخل تابع دیلای یه حلقه درست کرد و دستورات رو مجددا داخل اون نوشت؟ البته من شنیدم دیلای و وقفه رو میشه با رجیستر هم انجام داد، شاید بدین صورت که دستور ایجاد دیلای برای یک پایه رو داد و قسمت مجزای واحد دیلای یا وقفه اینتراپت مدیریت وقفه رو در دست بگیره و سی پی یو ادامه دستورات رو پس از دستور دیلای به دست بگیره، حتی قبل از اتمام دیلای، یعنی سی پی یو دستور دیلای رو خونده و اون رو به واحد اینتراپت محول می کنه؟>!!! بنظرت همچین چیزی با توجه به اینکه تو arm کلاک هر قسمت مجزاست انجام داد؟ البته ببخشید که من دیلای رو با اینتراپت یا وقفه قاتی کردم،

      دیدگاه

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