اطلاعیه

Collapse
No announcement yet.

interrupt و اولویت !!

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

    interrupt و اولویت !!

    سلام خدمت دوستان :nerd:
    می خواستم بدونم تو سری 18 پیک اگه مثلا دو وقفه داشته باشیم a و b که a ذر اولویت بالاتر قرار گرفته .حالا فرض کنید وقفه b رسیده و در وسط isr ناگهان وقفه ی a میرسه.حالا می خوام بدونم که میکرو وقفه ی b که در اولویت پایینتری قرار داره رو ادامه می ده و بعد از تموم شدنش سراغ وقفه ی a میره یا نه وقفه ی b رو pause میکنه و سراغ وقفه ی a میره و پس از اتمام دوباره وقفه b رو ادامه میده ؟
    در یک میکرو پروسسوری که قبلا تا حد کمی کار کردم این قابلیت انتخاب پذیر بود که معروف به nested و priority بودن.حالا می خوام بدونم تو این میکروکنترلر وضعیت چه جوریه.با تشکر :redface:
    در ضمن ، هر چند مهم نیس ولی من با mplab x و c8 کار می کنم .
    ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ‌فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
    شهید دکتر مصطفی چمران

    #2
    پاسخ : interrupt و اولویت !!

    نوشته اصلی توسط ali_rostami_72
    .حالا می خوام بدونم که میکرو وقفه ی b که در اولویت پایینتری قرار داره رو ادامه می ده و بعد از تموم شدنش سراغ وقفه ی a میره یا نه وقفه ی b رو pause میکنه و سراغ وقفه ی a میره و پس از اتمام دوباره وقفه b رو ادامه میده ؟
    سلام. قطعا روند روتین مربوط به وقفه b قطع شده و به روتین وقفه a خواهد رفت. در غیر این صورت بحث nested و priority بی معنی میشد.

    دیدگاه


      #3
      پاسخ : interrupt و اولویت !!

      نوشته اصلی توسط e.fazli
      سلام. قطعا روند روتین مربوط به وقفه b قطع شده و به روتین وقفه a خواهد رفت. در غیر این صورت بحث nested و priority بی معنی میشد.
      چرا بی معنی می شد؟اگر وقفه ی a رو ادامه بده و پس از اتمامش به سراغ وقفه ی b بره میشه حالت priority میشه. بعبارتی در حالت اجرا ی یک isr بدون در نظرگرفت سایر اولویت بندی ها، در اون لحظه، وقفه ی در حال اجرا اولویتش از همه بالاتره.
      ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ‌فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
      شهید دکتر مصطفی چمران

      دیدگاه


        #4
        پاسخ : interrupt و اولویت !!

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

        دیدگاه


          #5
          پاسخ : interrupt و اولویت !!

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

          دیدگاه


            #6
            پاسخ : interrupt و اولویت !!

            خواهش میکنم. بله در دیتا شیت هر کدوم از سری 18F در بخش مربوط به Interrupt به طور مختصر توضیحاتی داده شده. در مورد سوال دومتون هم این مورد در PIC های 8 بیتی تا حدود کمی امکان پذیر هست. به طور کلی در سری 18F فقط دو بردار وقفه وجود داره که یکی با اولویت بالا و دیگری با اولویت پائین هست. هرگاه وقفه ای رخ بده بسته به نوع به یکی از این دو بردار ثابت پرش میکنه. مثلا ممکنه در یک برنامه 3 وقفه جنبی با اولویت پائین و 2 وقفه با اولویت بالا وجود داشته باشه. پرچم مربوط به 3 وقفه با اولویت پائین در روتین وقفه با اولویت کمتر به وسیله نرم افزار نوشته شده توسط کاربر چک شده و به دلخواه کاربر اولویت بین این سه وقفه تعیین میشه. در مورد 2 وقفه با اولویت بالاتر هم به همین صورته و این وظیفه کاربر هست که پرچم ها رو چک کنه و وقفه ها رو بررسی کنه.

            دیدگاه


              #7
              پاسخ : interrupt و اولویت !!

              سلام دوستان
              اگر در میکرو pic16f چند وقفه همزمان اتفاق بیفته اولویت با کدومه؟ آیا بعد اجرای وقفه اول،وارد روتین وقفه دوم میشه؟

              دیدگاه


                #8
                پاسخ : interrupt و اولویت !!

                نوشته اصلی توسط javad-movahediyan
                سلام دوستان
                اگر در میکرو pic16f چند وقفه همزمان اتفاق بیفته اولویت با کدومه؟ آیا بعد اجرای وقفه اول،وارد روتین وقفه دوم میشه؟
                سلام.
                اولویت ندارند. برنامه ی هر کدوم که بالاتر نوشته بشه، اولویت اجرا با اون هست.
                معمولا و اصولا در ابتدای روتین هروقفه؛ وقفه ی سراسری رو غیر فعال میکنن تا مشکلی پیش نیاد.
                تو سری 16 و پایینتر، چون فقط یه خونه حافظه برای بردار وقفه(Interrupt Vector) وجود داره، اگه وسط اجرای وقفه؛ یه وقفه ی دیگه بیاد، روتین وقفه ی جاری نیمه کاره رها میشه و دیگه هم برنمیگرده تا تمومش کنه.
                اما تو سری 18 چون دوتا خونه برای بردار وقفه وجود داره تحت عنوان وقفه با اولویت بالا و پایین، بستگی داره که شما کدوم وقفه رو چطوری تعریف کنین؟ اگه وقفه اولویت پایین(Low Priority Interrupt - LPI) در حال اجرا باشه، و وقفه با اولویت بالا (High Priority Interrupt - HPI) اتفاق بیفته،LPI متوقف میشه، HPI انجام میشه،بعد LPI ادامه پیدا میکنه. اما اگه دوتا وقفه با اولویت یکسان اتفاق بیفته، وقفه ی جاری نیمه کاره رها میشه. امیدوارم واضح گفته باشم.

                دیدگاه


                  #9
                  پاسخ : interrupt و اولویت !!

                  ممنون
                  تو کامپایلر mikroc for pic یک سرویس روتین وقفه بیشتر وجود نداره،برای اینکه چند وقفه چک بشه با فلگ های مربوط به وقفه چک بشه درست میگم

                  دیدگاه


                    #10
                    پاسخ : interrupt و اولویت !!

                    نوشته اصلی توسط javad-movahediyan
                    ممنون
                    تو کامپایلر mikroc for pic یک سرویس روتین وقفه بیشتر وجود نداره،برای اینکه چند وقفه چک بشه با فلگ های مربوط به وقفه چک بشه درست میگم
                    بله.این همون بحث ترتیب نوشته شدن اینتراپتها هست. تو روتین void interrupt هر وقفه ای که قراره اتفاق بیفته،باید بیت IF (پرچم وقفه اون ماژول) بررسی بشه.
                    اولین خط بعد از void interrupt، شما وقفه ی سراسری رو غیرفعال کنین (احتمال زیاد بیت اول رجیستر INT_CON با نام GIE)

                    دیدگاه

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