اطلاعیه

Collapse
No announcement yet.

رخ دادن همزمان دو وقفه مثله تایمر

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

    رخ دادن همزمان دو وقفه مثله تایمر

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

    2- بر فرض یه تایمر داریم که هر 100 میلی ثانیه سرریز میشه ، خوب بعد از اولین 100 میلی ثانیه سرریز ما هستیم داخل لیبل مربوط به این تایمر ، حالا ما میآیم داخل این لیبل وقفه 200 میلی ثانیه میزاریم ، حالا تو این 200 میلی ثانیه که دوبار تایمر سرریز میشه ، چه اتفاقی میاوفته ؟؟


    با تشکر.
    به سمت نور خورشید حرکت کن،تو میتونی تابش خورشید رو حس کنی ،حتی اگه کور باشی.
    (پیش به سوی هدف)

    #2
    پاسخ : رخ دادن همزمان دو وقفه مثله تایمر

    سلام
    کاملاً بستگی به نوع میکرو و برنامه نویسی داره
    در سطح برنامه نویسی اسمبلی اگه بخوایم هنگام اجرای روتین وقفه وقفه دیگه ای اتفاق نیفته ابتدا از دستور push و در انتها هم از دستور pop استفاده می کنیم( البته چند وقفه هستند که حتی با غیر فعال کردن وقفه سراسری هم غیر فعال نمیشن،ولی خوب از این وقفه هایی که ما اصولاً استفاده میکنیم نیستند،حالا اگه این وقفه های به خصوص اتفاق بیفتند وارد روتین وقفه جدید میشه)
    اگر هم از دستورات بالا استفاده نکنیم وقفه ها اولویت بندی دارند اگر هنگام اجرای یک وقفه وقفه ای با اولویت بالاتر بیاد وارد روتین وقفه جدید میشه و اگه با اولویت پایین تر باشه وارد روتین وقفه جدید نمیشه تا اینکه روتین وقفه در حال اجرا تموم بشه بعد وارد روتین وقفه جدید بشه
    اینایی که گفتم برای هر میکرویی این طور نیست به خاطر همینه که میگم بستگی به سخت افزار هم داره
    البته درستش اینه که تو روتین وقفه ها از دستورات زمان بر استفاده نشه
    [آموزشی] کنترل رله با پیامک توسط sim800l
    [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
    [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
    [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
    صفحه اینستاگرام : ecdco_ir

    دیدگاه


      #3
      پاسخ : رخ دادن همزمان دو وقفه مثله تایمر

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


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

      دیدگاه


        #4
        پاسخ : رخ دادن همزمان دو وقفه مثله تایمر

        نوشته اصلی توسط reza0506 نمایش پست ها
        سلام
        کاملاً بستگی به نوع میکرو و برنامه نویسی داره
        در سطح برنامه نویسی اسمبلی اگه بخوایم هنگام اجرای روتین وقفه وقفه دیگه ای اتفاق نیفته ابتدا از دستور push و در انتها هم از دستور pop استفاده می کنیم( البته چند وقفه هستند که حتی با غیر فعال کردن وقفه سراسری هم غیر فعال نمیشن،ولی خوب از این وقفه هایی که ما اصولاً استفاده میکنیم نیستند،حالا اگه این وقفه های به خصوص اتفاق بیفتند وارد روتین وقفه جدید میشه)
        اگر هم از دستورات بالا استفاده نکنیم وقفه ها اولویت بندی دارند اگر هنگام اجرای یک وقفه وقفه ای با اولویت بالاتر بیاد وارد روتین وقفه جدید میشه و اگه با اولویت پایین تر باشه وارد روتین وقفه جدید نمیشه تا اینکه روتین وقفه در حال اجرا تموم بشه بعد وارد روتین وقفه جدید بشه
        اینایی که گفتم برای هر میکرویی این طور نیست به خاطر همینه که میگم بستگی به سخت افزار هم داره
        البته درستش اینه که تو روتین وقفه ها از دستورات زمان بر استفاده نشه
        اینطور ک شما میفرمایید نیست...
        وقتی وارد وقفه شد حتی اگه وقفه با اولویت بالاتر هم بیاد از وقفه فعلی دیگه خارج نمیشه چون که اصولا وقتی وارد وقفه میشه اینتراپت سراسری غیرفعال میشه...اون اولویت واسه درخواست همزمان اینتراپت تاثیر داره نه واسه وقتی که وارد روتین اینتراپت شده....

        در ضمن استفاده از دستورات تاخیر در روتین اینتراپت اصلا کار صحیحی نیست و حتی تا جایی ک ممکنه باید از دستورات کوتاه در روتین اینتراپت استفاده بشه...

        Sent from my E2333 using Tapatalk
        تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

        www.intelart.ir


        ساخت کنترلر دما PID فازی با AVR [آموزشی]

        دیدگاه


          #5
          پاسخ : رخ دادن همزمان دو وقفه مثله تایمر

          سلام
          فکر کنم کامپایلر های سطح بالا وقتی کد رو به زبان اسمبلی تبدیل میکنند تو روتین وقفه ها، وقفه ها رو غیر فعال میکنند و هنگام خروج دوباره فعالشون میکنند
          اما اگه بخوایم اسمبلی کد بنویسیم فکر کنم تو اکثر پردازنده ها باید خودمون وقفه های دیگه رو تو روتین وقفه غیر فعال کنیم و اگر این کار رو نکنیم اگر وقفه با اولویت بالاتر بیاد حتی اگر اجرای روتین وقفه قبلی تموم نشده باشه،وارد روتین وقفه جدید میشه
          البته اصراری رو حرفام ندارم،شاید حق با شما باشه و من دارم اشتباه می کنم
          [آموزشی] کنترل رله با پیامک توسط sim800l
          [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
          [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
          [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
          صفحه اینستاگرام : ecdco_ir

          دیدگاه


            #6
            پاسخ : رخ دادن همزمان دو وقفه مثله تایمر

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

            از ی طرف دیگه برای هر وقفه تنها ۲ بایت فضا دارید و نمیتونید تو اون فضای کم هم ادرس روتین بدید و هم وقفه رو غیر فعال کنید!پس این مورد هم اطمینان میده که وقفه اتوماتیک غیرفعال بشه...

            میتونید کد سطح بالا رو ب اسمبلی تبدیل کنید و نتیجه ش رو مشاهده کنید...
            تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

            www.intelart.ir


            ساخت کنترلر دما PID فازی با AVR [آموزشی]

            دیدگاه


              #7
              پاسخ : رخ دادن همزمان دو وقفه مثله تایمر

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

              دیدگاه


                #8
                پاسخ : رخ دادن همزمان دو وقفه مثله تایمر

                نوشته اصلی توسط Mahdi.Faani نمایش پست ها
                خیر اگر اسمبلی هم بنویسید وقتی وارد روتین وقفه بشید وقفه سراسری توسط cpu غیر فعال میشه...و برای فعال کردنش باید خودتون داخل روتین وقفه اونو فعال کنید....

                از ی طرف دیگه برای هر وقفه تنها ۲ بایت فضا دارید و نمیتونید تو اون فضای کم هم ادرس روتین بدید و هم وقفه رو غیر فعال کنید!پس این مورد هم اطمینان میده که وقفه اتوماتیک غیرفعال بشه...

                میتونید کد سطح بالا رو ب اسمبلی تبدیل کنید و نتیجه ش رو مشاهده کنید...
                جناب فانی ، یعنی فقط میتونیم برای هر وقفه 2 بایت کد نویسی داشته باشیم؟؟



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

                این تایمر ها و وقفه های داخل میکرو ، با خودشون مشکل خانوادگی دارن انگار.
                به سمت نور خورشید حرکت کن،تو میتونی تابش خورشید رو حس کنی ،حتی اگه کور باشی.
                (پیش به سوی هدف)

                دیدگاه


                  #9
                  پاسخ : رخ دادن همزمان دو وقفه مثله تایمر

                  بله فقط ۲ بایت فضا دارید(در مدل های با حافظه بیشتر این مقدار تغییر میکنه)ولی مثلا واسه مگا۸ دوبایت جا دارید...وکتورهای اینتراپت رو نگاه کنید متوجه میشید...شما کدهای اینتراپت رو هرجای حافظه که خاسنید قرار میدی و فقط ادرس اون روتین رو در اون دوبایت قرار میدید...و برنامه از اونجا بوسیله دستور rjmp میپره به ادرسی که شما بهش دادید...

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

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

                  www.intelart.ir


                  ساخت کنترلر دما PID فازی با AVR [آموزشی]

                  دیدگاه


                    #10
                    پاسخ : رخ دادن همزمان دو وقفه مثله تایمر

                    ببینید من یه تایمر رو برای اندازه گرفتن زمان راه انداختم ، حالا میخام هر طوری هست ، هر اتفاقی افتاد ، هرکجا که سی پی یو بود ، این وقفه ی زمان اجرا بشه ،
                    حالا سوال اینجاست من میتونم داخل روتین وقفه های دیگه ، فقط اینتراپت زمان رو فعال کنم ؟؟ بقیه فعال نباشه ، !!
                    یا فقط کل اینتراپت ها فعال میشه؟؟!!



                    با تشکر دوستان.
                    به سمت نور خورشید حرکت کن،تو میتونی تابش خورشید رو حس کنی ،حتی اگه کور باشی.
                    (پیش به سوی هدف)

                    دیدگاه


                      #11
                      پاسخ : رخ دادن همزمان دو وقفه مثله تایمر

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

                      www.intelart.ir


                      ساخت کنترلر دما PID فازی با AVR [آموزشی]

                      دیدگاه

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