اطلاعیه

Collapse
No announcement yet.

پاک کردن وقفه های ایجاد شده در حین وقفه

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

    پاک کردن وقفه های ایجاد شده در حین وقفه

    توی یک برنامه از وقفه 0 استفاده کردم.وقتی برنامه میره تو وقفه و بر میگرده وقفه هایی رو که در حین اجرای وقفه دوباره ایجاد شده رو اجرا مینکنه.ولی من میخوام تمام وقفه هایی که در حین ایجاد وقفه اینتراپت صفر ایجاد شدن نادیده گرفته بشن.چیکار کنم؟

    #2
    پاسخ : پاک کردن وقفه های ایجاد شده در حین وقفه

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

    #sim("sei&quot
    اجرای همه وقفه ها
    #sim("cli&quot
    توقف همه وقفه ها
    قنديل، تنديس قطره هايي است كه تسليم جاذبه زمين نشدند. "چگوآرا"

    دیدگاه


      #3
      پاسخ : پاک کردن وقفه های ایجاد شده در حین وقفه

      ببین با فعال و غیر فعال کردن وقفه که کاری انجام نمیشه.وقتی وارد وقفه میشی خود میکرو همه وقفه ها رو غیر فعال میکنه و وقتی اجرای وقفه تموم میشه دوباره همه وقفه هایی رو که فعال بودن فعال میکنه.و اینجایه که اون وقفه ای که وسط اجرای وقفه اومده حالا اجرا میشه!

      دیدگاه


        #4
        پاسخ : پاک کردن وقفه های ایجاد شده در حین وقفه

        سلام
        ببین پسر خوب
        اتفاقا منم همیچین سوالی توی یه تاپیک دیگه کردم
        اما راه حل هم دادم که نمیدونم چقدر قابل تایید باشه
        تیئوری درسته

        طبق گفته دوستمون همون کار انچام بده غیر فعال کردن کل وقفه ها
        و : اخر وقفه بیا بیت پرچم های وقفه های که نمیخوای اجرا بشن رو پاک کن
        همین
        حالا من اینکار کردم
        فکمر کنم جواب میده اما یه مورد دیگه هم هست که نمیدونم این جواب نمیده یا اشکال از اون مورد دیگه ست
        و کاملا مطلع نیستم
        این کاری که میگم با دقت انجام بده و خوب برو تو نخش ببین درست میشه و به اطمینان میرسی که جواب میده
        بعد جوابشو تو همین تاپیک بهم بده عزیز
        برو انجام بده
        چون خودم سرم شلوغه وگرنه میرفتم تو نخش
        [move] :read:[/move]

        یه سری هم به این تاپیک بزن ببینم تو چیزی میدونی برادر عزیز
        http://www.eca.ir/forum2/index.php?topic=88104.0

        دیدگاه


          #5
          پاسخ : پاک کردن وقفه های ایجاد شده در حین وقفه

          تا اونجا که میدونم برای غیر فعال کردن وقفه های AVR باید در بیت متناظر اون وقفه 1 بنویسید !!
          توجه کنید برعکس همه بیت ها که با صفر پاک میشن ، وقفه ها با 1 پاک میشن :surprised:

          دیدگاه


            #6
            پاسخ : پاک کردن وقفه های ایجاد شده در حین وقفه

            نوشته اصلی توسط hamedpc007
            تا اونجا که میدونم برای غیر فعال کردن وقفه های AVR باید در بیت متناظر اون وقفه 1 بنویسید !!
            توجه کنید برعکس همه بیت ها که با صفر پاک میشن ، وقفه ها با 1 پاک میشن :surprised:
            درسته

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

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

            ؟
            انجام بدین ببینتید چی میشه برید تو نخش
            من دستم بنده

            دیدگاه


              #7
              پاسخ : پاک کردن وقفه های ایجاد شده در حین وقفه

              به اینجا هم یک سر بزنید.مطالب خیلی عجیبی گفته
              http://www.avrfreaks.net/index.php?n...ic&p=99961

              دیدگاه


                #8
                پاسخ : پاک کردن وقفه های ایجاد شده در حین وقفه

                نوشته اصلی توسط hamedhamidi
                به اینجا هم یک سر بزنید.مطالب خیلی عجیبی گفته
                http://www.avrfreaks.net/index.php?n...ic&p=99961
                من که چیز عجیبی ندیدم
                چون اصلا نفهمیدم چی گفته
                چرا خودت عملی انجام نمیدی تا بفهمیدی کدوم راه چاره سازه
                من بهت ایده دادم که خودت با پروتوییس یا حتی عملی عملکرد وقفه ها رو چک کنی

                دیدگاه


                  #9
                  پاسخ : پاک کردن وقفه های ایجاد شده در حین وقفه

                  وقتی رجیستر gifr رو مقدار دهی میکنم مقدار نمیگیره باید چیکار کنم؟
                  یعنی وقتی مثلا داخلش بیت هشتمش که مربوط به اینتراپت یک هست ؛ یک مینویسم و دوباره میخونمش میبینم بازم صفره!

                  دیدگاه


                    #10
                    پاسخ : پاک کردن وقفه های ایجاد شده در حین وقفه

                    نوشته اصلی توسط hamedhamidi
                    وقتی رجیستر gifr رو مقدار دهی میکنم مقدار نمیگیره باید چیکار کنم؟
                    یعنی وقتی مثلا داخلش بیت هشتمش که مربوط به اینتراپت یک هست ؛ یک مینویسم و دوباره میخونمش میبینم بازم صفره!

                    هر یک از وقفه های خارجی دارای یک بیت پرچم هستند که در صورت تریگر شدن از پین وقفه ی خارجی و
                    علاوه بر یک شدن پرچم، می ،(I) و فعال بودن بیت فعال ساز وقفه GICR فعال بودن بیت مربوطه در رجیستر
                    پرچم آن وقفه به صورت سخت افزاری پاک می ISR تواند باعث ایجاد وقفه شود. در این حالت پس از اجرای
                    شود.

                    تو داری تو ریجستر پرچم مینویسی
                    خب اگر پین وقفه ت خروجی باشه باعث وقفه میشه و اجرا میشه و باز پرچم صفر میشه

                    برای استفاده از هریک از وقفه های خارجی باید با یک کردن بیت مربوطه در رجیستر GICR آن را فعال نمود:

                    دیدگاه

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