اطلاعیه

Collapse
No announcement yet.

وقفه

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

    #16
    پاسخ : وقفه

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


    دوستان یه سوالم برا من پیش اومد
    من دارم یه ربات می سازم چهار چرخ داره و هرچهار چرخ انکودر
    خوب شما پیشنهاد می کنید به وقفه های خارجی وصل کنم تا احتمال یک در میلیون نشه که همزمان شن :icon_razz: :icon_razz: :icon_razz:
    و یا به کانتر وصل کنم کدوم رو پیشنهاد می کننین
    البته همزمانی رو بیخیال که من می خوام a++;
    کنم که بسار کم زمان میگیره
    هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
    بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
    میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

    تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

    دیدگاه


      #17
      پاسخ : وقفه

      نوشته اصلی توسط n340
      دوستان
      تا جایی که من می دونم وقفها خارجی بترتتیب 0 و 1 و2 و3 و تا... اولویت داردند
      اون زمان های نانو ثانیه ای برای ما اصلا مهم نیست
      در هر صورت شما از هر وقفه ای استفاده کنی اگه حتی همزمان هم اتفاق بیافته بالاخره وقفه دومت اجرا میشه
      اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

      دیدگاه


        #18
        پاسخ : وقفه

        اگه انگلیسی :
        پس تمامی کتابهای فارسی رو دور بریز چون منابع رفرنس لاتین زیاده
        ببین دوست من هدف توی انجمن چیزیه دیگه اییه نه اینکه من بخوام با شما کل کل کنم . من گفتم منبع سازنده معتبر تره نه منبع فارسی یا انگلیسی.مثلا همین MMC Module که توی بازاره و کاره ایرانی هاست از طرف طراح اون حدود 70 صفحه راهما داره ! مگه اتمل در مورد این چیزی گفته ؟ پس بهترین منبع همون دفترچه همراه مازوله کا طراح اونو نوشته !

        گه فارسی :
        پس چرا اینقدر چوب اتمل رو بخودت می زنی تا اونجا که من می دونم اتمل فارسی چیزی چاپ نکرده
        من گفتم در مورد AVR و منابع وقفه اون که از محصولات اتمله ، بهترین منبع اتمله نه اینکه منابع دیگه چه فارسی یا انگلیسی فایده ای نداره . ولی اگه در موردی مثل همین اینتراپت ها بعضی شک ها وجود داره بهتره به گفته ی سازنده اعتماد داشته باشیم .

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

        اگه در مورد اینتراپت منبع میخوای (به عنوان مثال ATMEGA16 ) برو به دیتاشیت اون زیر عنوان Interrupts دقیقا بردار های وقفه و جدولی که مورد نظره رو اونجا می تونی ببینی :bye

        دیدگاه


          #19
          پاسخ : وقفه

          نوشته اصلی توسط n340
          تا جایی که من می دونم وقفها خارجی بترتتیب 0 و 1 و2 و3 و تا... اولویت داردند
          بعدم مگه شما تو اجرای زیر وقفه ها چی می هوای اجرا کنی
          چند بایت رو دستکاری کن بقیه رو بفرست به مین اصلی
          تا همزمان بودنشون مشکل ایجاد نکنه
          دقیقا همون چیزی که منم گفتم

          نوشته اصلی توسط saeed bagherani
          اون زمان های نانو ثانیه ای برای ما اصلا مهم نیست
          در هر صورت شما از هر وقفه ای استفاده کنی اگه حتی همزمان هم اتفاق بیافته بالاخره وقفه دومت اجرا میشه
          ده دیگه اجرا نمیشه دیگه
          چرا خودتو میزنی به اون راه
          1) اگه دو تا وقفه همزمان رخ بدهند آن وقفه ای اجرا میشود که بردار وقفه آن اولویت بالاتری دارد
          2) وقتی روتین یک وقفه ای در حال اجرا است دیگر وقفه ها به صورت کامل غیر فعال میشوند

          هر دو مورد به صورت کاملا سخت افزاری هستند.

          این مسائل رو بارها تست کردم و اوایل به دلیل ندانستن این موضوع به مشکل برخوردم

          میخواستم بدونم شما چطوری دوتا وقفه همزمان حتی بدون اختلاف نانو ثانیه به میکرو اعمال کردید؟؟؟

          دیدگاه


            #20
            پاسخ : وقفه

            یه راهش اینه که تو روتین وقفه صفر یه حلقه while بینهایت مینویسی و تا زمانی که اطلاعاتی تو بافر usart نیومده و وقفه دریافت usart فعال نشده از حلقه خارج نشه

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

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

            اینو من خودم بارها تست کردم

            دیدگاه


              #21
              پاسخ : وقفه

              سلام به همگی
              طبق برداشت هایی که من از صحبت های بچه ها داشتم متوجه شدم که بعضی از صحبتها ضد ونقیض داره
              من اون صحبتها رو اینجا جمع می کنم + اینکه می تونم همشو اثبات کنم اگه کسی خلاف اونو می تونه اثبات کنه یا ایرادی توی اون مطالب می بینه بگه تا با تبادل نظر حل کنیم
              1- برای مثال : اگه وقفه خارجی 0و1 به طور همزمان اتفاق بیافته
              (که عملی هم هست مثلا اون دو تا پایه رو فعال کنیم و بعد میکرو رو روشن کنیم در جواب آقای n340 که فرمودند چطوری همزمان با هم وقفه ایجاد کردی )

              ایتدا به آدرس زیر روال وقفه صفر میره و بلافاصله حتی قبل از اجرای دستور اول به آدرس زیر روال وقفه 1 میره و دستورات زیر روال 1 رو اجرا میکنه بعد به محل آدرس قبلی (همون زیر روال وقف صفر ) میره و دستورات اونو اجرا می کنه
              بنابراین در این حالت اگرچه ابتدا به زیر روال 0 رفته ولی در عمل زیر روال 1 سریعتر اجرا میشه و شما دستوراتی که در زیر روال 1 نوشته اید رو در ابتدای امر مشاهده می کنید


              2- وقفه ها تا زمانی که حافظه پشته اجازه بده می تونن تودرتو و حتی وقفه روی خود همون وقفه اجرا بشه
              توضیح
              فرض کنید در زیر روال وقفه صفر تاخیر 100 ثانیه ای داشته باشیم و 10 تا وقفه پشت سر هم با فواصل زمانی 1 ثانیه ایجاد کنیم در این صورت حالت زیر پیش میاد
              زیر روال وقفه قبل از اینکه تموم بشه به ابتدای زیر روال میره و دوباره اجرا میشه و در نهایت 10 بار به دستور return خواهیم رسید و تاخیر 1000 ثانیه ای صرفنظر از رمان اجرایی خود دستورات خواهیم داشت

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




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

              دیدگاه


                #22
                پاسخ : وقفه

                نوشته اصلی توسط saeed bagherani
                [size=10pt]
                1- برای مثال : اگه وقفه خارجی 0و1 به طور همزمان اتفاق بیافته
                (که عملی هم هست مثلا اون دو تا پایه رو فعال کنیم و بعد میکرو رو روشن کنیم در جواب آقای n340 که فرمودند چطوری همزمان با هم وقفه ایجاد کردی )

                ایتدا به آدرس زیر روال وقفه صفر میره و بلافاصله حتی قبل از اجرای دستور اول به آدرس زیر روال وقفه 1 میره و دستورات زیر روال 1 رو اجرا میکنه بعد به محل آدرس قبلی (همون زیر روال وقف صفر ) میره و دستورات اونو اجرا می کنه
                بنابراین در این حالت اگرچه ابتدا به زیر روال 0 رفته ولی در عمل زیر روال 1 سریعتر اجرا میشه و شما دستوراتی که در زیر روال 1 نوشته اید رو در ابتدای امر مشاهده می کنید

                /size]



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

                تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

                دیدگاه


                  #23
                  پاسخ : وقفه

                  نوشته اصلی توسط n340

                  من اینجا رو قبول ندارم
                  فقط وقفه 0 اجرا میشه

                  برنامه زیر رو تست کن


                  $regfile = "m32def.dat"
                  $crystal = 1000000
                  Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.0 , Rs = Porta.1
                  Config Lcd = 16 * 2
                  Config Lcdbus = 4
                  Locate 1 , 1
                  Lcd "1388/11/01"
                  Locate 2 , 1
                  Lcd "test interrupts "
                  Wait 1
                  Cls
                  Config Timer0 = Timer , Prescale = 1024

                  Config Int1 = Falling
                  Config Int0 = Falling



                  On Int1 Int1_isr
                  On Int0 Int0_isr
                  On Ovf0 Ovf0_isr

                  Enable Int1
                  Enable Int0 'enable the interrupt

                  Enable Timer0
                  Enable Ovf0
                  Start Timer0

                  Locate 1 , 1

                  Enable Interrupts
                  Do
                  Idle

                  Loop

                  End







                  Ovf0_isr:
                  Disable Ovf0
                  Enable Interrupts
                  Lcd "T"
                  Wait 5

                  Lcd "t"
                  Enable Ovf0
                  Wait 10
                  Return


                  Int1_isr:
                  Enable Interrupts
                  Lcd "1"
                  Lcd "a"
                  Wait 10
                  Return




                  Int0_isr:
                  Enable Interrupts
                  Lcd "0"
                  Lcd "b"
                  Wait 10
                  Return


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

                  دیدگاه


                    #24
                    پاسخ : وقفه

                    سلام
                    من یه برنامه نوشتم که از وقفه سریال استفاده شده ولی این وقفه منو دیونه کرده .
                    چون هر روتینی که زمان داشته باشه را اجرا نمیکنه لطفاد راهنمایی کنید چه کار کنم :angry: :angry: :angry:
                    مثلا اگه یه روتین با مدت زمان 900 میلی ثانیه بخوای اجرا بشه دیگه این روتین را اجرا نمیکنه .
                    مثلا این طوری

                    On Urxc Serial_int
                    Enable Urxc
                    Enable Interrupts

                    Serial_int
                    Set Portb.2

                    'Waitms 900
                    'Reset Portb.2

                    انوقت بعد زمان 900 را دیگه اجرا نمیکنه
                    یا اگ یه حلقه که داخلش از مدت زمان 100 میلی ثانیه بیشتر استفاده شده دیگه اجرا نمی کنه
                    ایا روتینی هست که بتونم در زمان خواصی در برنامه استفاده کنم و این وقفه را غیر فعالش کنم تا برنامه هام که دارای زمان هست را خوب اجرا کنه .

                    دیدگاه


                      #25
                      پاسخ : وقفه

                      سلام دارم
                      من خیلی وقت پیش به این موضوع برخوردم
                      یه نگاهی به کامنت ها انداختم
                      کاری ندارم // اما من واقعا ذهن خودمو درگیر کرده بود
                      بحث اصلی این نیست کدوم وقفه زودتر اجرا میشه مثلا بین 0 و 1
                      تئوری میگه 0 باید زودتر اجرا بشه // که شایدم بشه
                      امااااااا چرا تو در تو
                      من امتحان کردم قبلا // وقفه سخت افزاری که میاد بیت فعال ساز وقفه ها رو صفر میکنه
                      تا هیچ وقفه دیگه ای اجرا نشه // اما من صفر فعال کردم و توی برنامه وقفه 0
                      یه وایل بی نهایت گذاشتم
                      و اینجا بیت فعال سازم صفر یعنی همه وقفه ها باید اجرا نشن
                      اما باز وقفه 1 تحریک کردم که وقفه ش اجرا شده
                      یعنی چیزی که تو کتابا نوشته همش کشک
                      من امتحان کردم // :question:

                      دیدگاه


                        #26
                        پاسخ : وقفه

                        سلام
                        یه سوال دارم ؟
                        اگه ما یه تاخیر 10 ثانیه بزاریم و حین اون یه وقفه رخ بده و مثلا اجرای دستورات وقفه 1 ثانیه زمان ببره کدوم حالت زیر اتفاق میوفته ؟

                        اجرای خط جاری ( delay ) به پایان میرسه و به زیر روال وقفه پرش میکنه ؟
                        خط جاری رو ول میکنه و به زیر روال وقفه پرش میکنه و در برگشت خط جاری رواز اول شروع میکنه؟
                        delay کار خودشو میکنه و دقیقا 10 ثانیه طول میکشه ،همون وسط هم اینتراپت اجرا میشه و تاثیری رو تاخیر نداره ؟

                        من اینو تو مثال 11 فصل 11 کتاب جابر الوندی دیدم ، برای محاسبه دیوتی سایکل اومده تو main وقفه رو فعال کرده ، تو حلقه while حدود 200 میلی ثانیه delay نوشته و بعد نتایج رو نمایش داده . با این حساب باید گزینه 3 یا 2 درست بشه.


                        یه سوال دیگه : از کجا بفهمم هر کد در زبان c چند کلاک طول میکشه ؟

                        ******** یَاربَّ الحسَینِ ؛ بحَقٍِّ الحسَینِ ؛ اِشفِ صَدرَ الحسَینِ ؛ بِظُهوُرِالحجَّةِ *******
                        اللهم صل علی محمد وآل محمد و عجل فرجهم

                        دیدگاه

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