اطلاعیه

Collapse
No announcement yet.

تداخل اینتراپت systick و usart و هنگ کردن میکرو

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

    تداخل اینتراپت systick و usart و هنگ کردن میکرو

    مسئله این صورت هست که من روی میکرو یه وقفه systick دارم که هر 1ms اتفاق میفته و توی سرویس وقفه، یه سری تایمر نرم افزاری رو پدیت میکنم. از طرفی یه پورت سریال (USART) هم دارم که وقفه دریافت روش فعال هست.
    حالا اگر مثلا 50 بایت رو پشت سر هم بفرستم برای میکرو، میکرو کاملا هنگ میکنه و البته نمیدونم دقیقا چه نوع faultی اتفاق میفته
    تنها راهی هم که براش پیدا کردم، اینه که تعداد دستوراتی که توی وقفه systick قراره اجرا بشه رو از یه حدی کمتر کنم. یعنی زودتر از سرویس وقفه بیاد بیرون. و در غیر اینصورت حتما هنگ میکنه
    - میکرو stm32f103vct6 هست
    - کامپایلر IAR 7.3
    - کد 3.5 Standard peripheral library
    - دستکاری کردن اولویت وقفه ها فایده ای نداشت
    - فقط همین دو تا وقفه رو دارم
    - با غیر فعال کردن هر یک از وقفه ها مشکل برطرف میشه
    - هیچ optimization ای استفاده نکردم. درصورت استفاده از size optimization، مشکل برطرف میشه. اما قسمت های دیگه برنامه رو خراب میکنه و ترجیح میدم استفاده نکنم

    #2
    پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

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

    www.intelart.ir


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

    دیدگاه


      #3
      پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

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

      دیدگاه


        #4
        پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

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

        www.intelart.ir


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

        دیدگاه


          #5
          پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

          بله تسک ها خیلی زیادن و همگی باید به موقع انجام بشن
          ممکنه بتونم به قول شما یه مقدار صرفه جویی کنم
          اما چیزی که الان مهمه برام اینه که بفهمم دلیل این هنگ کردن چیه. چون اگر فرض کنیم کد های مربوط به وقفه systick در حال اجرا باشن و وقفه usart هم برسه، نهایتا یا اجرای این کد ها نا تموم میمونه، یا اینکه وقفه usart میمونه تو نوبت. دلیل هنگ کردن چیه؟

          دیدگاه


            #6
            پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

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

            www.intelart.ir


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

            دیدگاه


              #7
              پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

              والا تو هیچ کدوم از وقفه ها کدی ندارم که بخواد باعث بشه برنامه معطل بمونه. جالب اینجاست که وقتی هیچ کدی هم برای اجرا تو وقفه سریال نمیآ‌ذارم بازم گیر میکنه. حتی هندلر وقفه سریال رو هم که کلا کامنت میکنم، بازم این اتفاق میفته

              دیدگاه


                #8
                پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

                والا چی بگم...تنها چیزی ک ممکنه باعثش بشه میتونه کدتون باشه... :redface:
                اگه مهم نیست کدتون رو بزارید تا دوستان دیگه هم ببینن شاید مشکل حل بشه...
                تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                www.intelart.ir


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

                دیدگاه


                  #9
                  پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

                  بزنامت رو دیباگ کن ببین کجا گیر می کنه!
                  زمان systic رو زیاد کن ببین چی میشه
                  هميشه به ياد خدا باش !

                  دیدگاه


                    #10
                    پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

                    نوشته اصلی توسط DDR3
                    بزنامت رو دیباگ کن ببین کجا گیر می کنه!
                    زمان systic رو زیاد کن ببین چی میشه
                    برنامه رو دیباگ میآ‌کنم، اما اون لحظه که هنگ میکنه انگار کرسر گم میشه و نمیشه فهمید کجاست
                    با زیاد کردن زمان systick کمی بهتر میشه

                    نوشته اصلی توسط Mahdi.Faani
                    والا چی بگم...تنها چیزی ک ممکنه باعثش بشه میتونه کدتون باشه... :redface:
                    اگه مهم نیست کدتون رو بزارید تا دوستان دیگه هم ببینن شاید مشکل حل بشه...
                    من برای تست یه برنامه خیلی کوچیک تر با همون code template st که اول گفتم ساختم. یعنی چیز خاصی نیست. تو لوپ اصلی برنامه هیچی ندارم و فقط دو تا وقفه هست. توی وقفه systick مقدار چند تا متغیر رو افزایش میدم و در وقفه سریال هم فقط یک بایت دریافتی رو میخونم که فلگ پاک بشه. همین!

                    دیدگاه


                      #11
                      پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

                      خب الان فهمیدم که همه چیز از کار میفته، غیر از systick که همچنان اینتراپت میده

                      دیدگاه


                        #12
                        پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

                        هیچ کسی هم نیست جواب بده...
                        والا خودمم تا بحال با همچین مشکلی بر نخوردم..البته خیلی هم در زمینه آرم حرفه ای نیستم...30 تا تسک و این حرفا رو تجربه نکردم تا بحال... :mrgreen:
                        تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                        www.intelart.ir


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

                        دیدگاه


                          #13
                          پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

                          خب یه چیز دیگه هم که کشف کردم اینه که در یکی از دفعات اجرای اینتراپت usart، میکرو دیگه برنمیآ‌گرده سر جای قبل و ظاهرا میره تو باقالی ها. شاید بشه گفت یه بلایی سر استک میاد

                          دیدگاه


                            #14
                            پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

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

                            www.intelart.ir


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

                            دیدگاه


                              #15
                              پاسخ : تداخل اینتراپت systick و usart و هنگ کردن میکرو

                              سلام،
                              وقفه sys. tick که تنها وقفه هسته arm هستشو با وقفه های عادی مثل تایمر، یارت و ... کمی مشکل داره.
                              این مشکل معمولا زمانی پیش میاد که شما توی یکی از روال های وقفه میکرو، وقفه sys tick داشته باشید (یا بلعکس)
                              مثل اگر شما توی روال وقفه تایمر بیاید سیستم sys tick رو فعال کنید توی 70 درصد مواقع سیستم مشکل پیدا میکنه !
                              پیشنهاد من : استفاده از وقفه تایمر بجای sys tick

                              دیدگاه

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