اطلاعیه

Collapse
No announcement yet.

سوال در مورد وقفه

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

    سوال در مورد وقفه

    سلام به همگی . امیدوارم حال همگی خوب باشه.
    من تازه avr رو شروع کردم یه سوالی که واسم پیش اومده اینه که کی باید از وقفه استفاده کنیم؟
    مثلا به برنامه مد نظر خودمه اما مشابه همونو که تو نت میبینم میبینم از وقفه تو برنامه استفاده کرده
    اصلا وقفه واسه چیه؟؟ فیلمای آقای کی نژاد رو دیدم یه کتاب خوب هم خوندم اما....
    ممنون میشم اگه کمکم کنید
    If your dreams don't scare you,They aren't big enough

    #2
    پاسخ : سوال در مورد وقفه

    سلام به شما دوست عزیز

    بطور کلی اگه بخوایم بگیم وقفه چیه ؟

    وقفه موقعی بکار میره که رویدار خارجی اتفاق بیفته و ما بخوایم نسبت به اون واکنش نشون بدیم

    حالا این رویداد خارجی چی هست....

    ببین مثلا من میخوام اگه کلیدی رو فشار دادم(در اینجا فشردن کلید یه رویداد خارجی است) برنامه متوقف بشه ویه کار خاصی برای من انجام بده(این معنای دقیق وقفه است)

    حالا این کار میتونه همه چیز باشه مثل خاموش کردن یه led یا ....

    اگه سوالی بود حتما بپرس....

    دیدگاه


      #3
      پاسخ : پاسخ : سوال در مورد وقفه

      نوشته اصلی توسط h.torabi
      سلام به شما دوست عزیز

      بطور کلی اگه بخوایم بگیم وقفه چیه ؟

      وقفه موقعی بکار میره که رویدار خارجی اتفاق بیفته و ما بخوایم نسبت به اون واکنش نشون بدیم

      حالا این رویداد خارجی چی هست....

      ببین مثلا من میخوام اگه کلیدی رو فشار دادم(در اینجا فشردن کلید یه رویداد خارجی است) برنامه متوقف بشه ویه کار خاصی برای من انجام بده(این معنای دقیق وقفه است)

      حالا این کار میتونه همه چیز باشه مثل خاموش کردن یه led یا ....

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



      If your dreams don't scare you,They aren't big enough

      دیدگاه


        #4
        پاسخ : سوال در مورد وقفه

        فرض کن برنامه بزرگی نوشتی که قسمتی از اون اینه که قراره وقتی دگمه ای فشرده شد یه کاری انجام بشه مثلا یه ال ای دی 3 ثانیه روشن بشه و بعد خاموش بشه.اینجوری هم در نظر بگیر که اگر قرار باشه که حلقه
        while()
        {
        }
        مثلا 1 دقیقه طول بکشه که انجام بشه و برگرد از اول شروع به کار کنه.حالا شما برای این که تشخیص بدی دگه فشرده شده یا نه 2 تا راه داری
        1- این که هر بار که میکرو توی حلقه while بسر می بره ببینه دگه فشرده شده یا نه
        که این کار توی هر 60 ثانیه یک بار می تونه چک بشه درسته؟ یعنی طرف باید 60 ثانیه دگه رو نگه داره تا خیالش راحت باشه که میکرو فهمید و به اون خطی که قراره چک کنه رسیده و اکنش نشون بده.این کار خیلی خوش آیند نیست به خاطر همین از راه دوم استفاده می کنن.
        2-این راه همون وقفه هست یعنی به محض این که دگمه ای فشرده شد.میکرو هر مرحله ای که هست یه ایست میده به همه چی بعد میاد وقفه رو انجام میده و بعد بر می گرده از همون جایی که قبل وقفه بود ادامه کار می ده.
        البته وقفه فقط کارش تو این مورد ختم نیمشه و اگر اشتباه نکنم ای وی ار 21 مورد وقفه داره برای کار های مختلف که نمونه بارزش همین بود که گفتم.
        وقفه رو هم توی برنامه تعریف می کنی و می فهمونی که توی روتین وقفه قراره چه کاری انجام بشه.
        اسمم بابا برقیه می دونین کارم چیه دلم می خواد همه جا که با کمک شما
        مصرف برق کم بشه تا برقمون قطع نشه
        مصرف بی رویه کار خیلی بدیه موقع پخش کارتون برق تلویزیون
        اگه یه دفعه بره حوصله مون سر می ره
        هرگز نشه فراموش لامپ اضافی خاموش

        دیدگاه


          #5
          پاسخ : سوال در مورد وقفه

          نوشته اصلی توسط msm73
          سلام به همگی . امیدوارم حال همگی خوب باشه.
          من تازه avr رو شروع کردم یه سوالی که واسم پیش اومده اینه که کی باید از وقفه استفاده کنیم؟
          مثلا به برنامه مد نظر خودمه اما مشابه همونو که تو نت میبینم میبینم از وقفه تو برنامه استفاده کرده
          اصلا وقفه واسه چیه؟؟ فیلمای آقای کی نژاد رو دیدم یه کتاب خوب هم خوندم اما....
          ممنون میشم اگه کمکم کنید
          ببین دوست من نمی دونم از جواب دوستان ، متوجه قضیه شدی یا نه ولی استاد معماری کامپیوتر ما یه مثال خیلی ساده برای وقفه می زد که خیلی خوب آدم رو متوجه عمق موضوع می کرد اون مثال رو می زنم امیدوارم مفید باشه :mrgreen:
          خب ببین شما می خوایی به عنوان مثال تو برنامت هر وقت یه پایه از میکروت 1 شد یه کاری رو انجام بدی ، خب برای برآوردن این هدفت دو راه داری :
          1 - اینکه تو حلقه اصلی برنامت از دستورات شرطی استفاده کنی و میکرو بیاد و هر وقت به این شرط رسید بیاد وضعیت پایه مورد نظرت رو چک کنه
          2- اینکه بیایی از وقفه استفاده کنی
          خب سوال اینجاست وقفه چه فرقی با دستورات شرطی داره ؟
          جواب در این هست که وقفه می آد به صورت سخت افزاری دستور می گیره و هر وقت وضعیت پایه مورد نظرت 1 شد فارغ از اینکه الان کدوم قسمت برنامت داره اجرا میشه ، می پره و زیر برنامه وقفه رو اجرا میکنه
          حالا مثالی که استادمون در این مورد می زد این بود که مثلا شما میکرو هستی و داخل کلاس نشستی و باید به دوستت که می آد پشت در کلاس یه جزوه بدی ( این میشه کل برنامه روی میکرو ) خب شمایی که میکرو هستی به دو طریق میتونی از اومدن دوستت با خبر بشی :
          1- اینکه هر چند دقیقه یه بار بری بیرون از کلاس و ببینی دوستت اومده یا نه ( این میشه مثل همون دستورات شرطی)

          2- هر وقت دوستت اومد یه تک زنگ بزنه بهت تا تو بری بیرون از کلاس ( این میشه همون روش وقفه یا اینتراپت که تو این روش همینطور که میبینی کمتر وقتت تلف میشه )

          مزایایی که وقفه داره یکی اینکه سرعت اجرای دستورات با حذف دستورات شرطی بالا میره و ضمنن ممکنه در این بازه ای که میکرو در حال اجرای برنامه های دیگه هست یه بار پایه مورد نظرمون 1 بشه و دوباره 0 بشه و میکرو این تغییر وضعیت رو از دست بده :rolleyes:
          امیدوارم این توضیحاتم بدتر گیجت نکرده باشه و به دردت خورده باشه
          خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
          [hr]

          دیدگاه


            #6
            پاسخ : سوال در مورد وقفه

            در تکمیل صحبت دوستان باید اشاره کنم که اینهایی که گفته شد مربوط به وقفه ی خارجی هستن که نو خاصی از وقفه هست. وقفه در کل یعنی آقای میکروکنترلر, اگه فلان اتفاق افتد, اگه آب دستته بذار زمین بیا این کاری که می گم رو انجام بده بعد دوباره برگرد آبتو بخورو هر کاری که قرار بود انجام بدی انجام بده. در اصل هر وقت وقفه اتفاق بیفته برنامه توی هر مکانی که باشه همون جا کارشو ول می کنه, دستورات داخل وقفه رو انجام می ده, وقتی دستورات داخل وقفه تموم شد, بر می گرده و از همون حایی که قبلا کارشو ول کرده بود ادامه می ده. حالا این فلان اتفاق می تونه وقفه خارجی باشه که هموناییه که دوستان گفتن, ممکنه مربوط به تایمر کانتر باشه, مربوط به ارتباط سریال باشه, ...
            مثلاً وقفه ی تایمر کانتر زمانی اتفاق میفته که زمانی خاصی سپری بشه. مثلا می گیم هر یک ثانیه یک بار یه ال ای دی رو روشن خاموش کن. تفاوتش با delay اینه که هم دقتش بیشتره, هم اینکه توی این یک ثانیه میکرو می تونه بقیه ی کاراشو انجام بده. ولی اگه delay بذازیم دیگه میکرو نمی تونه کار دیگه ای انجام بده و منتظر اتمام یک ثانیه می مونه.
            انواع دیگه ی وقفه هم وجود دارن که بدلیل گستردگی نمی شه همشو اینجا توضیح داد.
            ای پادشه خوبان داد از غم تنهایی

            دل بی تو به جان آمد وقت است که باز آیی

            دیدگاه


              #7
              پاسخ : سوال در مورد وقفه

              بینهایت از لطف دوستان سپاسگزارم
              موفق و پیروز باشید
              If your dreams don't scare you,They aren't big enough

              دیدگاه

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