اطلاعیه

Collapse
No announcement yet.

مشکل با اولویت بندی اینتراپت ها

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

    مشکل با اولویت بندی اینتراپت ها

    من یه پروژه ای گرفتم که با AVR نتونستم انجام بدم
    ببینید در پروژه از سریال اطلاعات یک مودم GSM رو بصورت اینتراپت دریافت می کردم
    بعد از اون طرف یک سنسور رنگ که بر اساس فرکانسش باید رنگشو تشخیص می دادم به میکرو متصل بود
    خوب تایمر 1 رو مد کلاک خارجی تعداد لبه ها رو می شمرد
    تایمر بعدی روی انتراپت هر 1ms برای محاسبه فرکانس بود و اونجا یک سری اعمال مقایسه که فرکانس درست رو در بیاره و اگر رنگ مورد نظر برد یک متغییری رو یک واحد زیاد کنه
    حالا اشکال کجاست هم اولویت اینتراپت سریال حیاتیه چون اگه من یک بایت از اطلاعات GSM رو از دست بدم دیگه همش بی ارزشه و هم اطلاعات اینتراپت تایمر چون اگه از دستش بدم یه واحد از کالایی که قرار بود شمرده بشه از بین رفته بعد به راحتی به خاطر تداخل اینتراپت ها این اطلاعات می پرید
    خوب اگه اساتید بگن چه طور مشکلو حل کنم که هیچ
    اگرم واقعا با AVR نمیشه ایا با راه اندازی RTOS برای ارم در keilمی توانم مشکل رو حل کنم (بالا خره باید از ارم استفاده کنم یا نه؟)
    www.tehranelec.com

    #2
    پاسخ : مشکل با اولویت بندی اینتراپت ها

    کسی نظری نداره؟
    چطور میشه مشکل اینتراپت ها رو حل کرد کسی راهی پیشنهاد نمی کنه؟
    www.tehranelec.com

    دیدگاه


      #3
      پاسخ : مشکل با اولویت بندی اینتراپت ها

      چی شد؟! بالاخره 3 تا اینتراپت یا 2تا؟!
      بیشتر توضیح یده ...

      هرچند بنظرمن تداخلی پیش نمیاد! این لینک رو ببین :
      http://www.eca.ir/forum2/index.php?topic=37267.0
      از این مسئله که بدتر نیست! صفحه دومش رو بخون میتونه کمکت کنه.

      قسمت وقفه ها رو با اسمبلی بنویس و سعی کن تا جایی که میتونی بهینه بشه.
      winavr میتونه به وقفه ها ویژگی هایی بده که تداخل از کار نندازشون. مثل no_block و ... البته با اسمبلی میتونی اینکارو بکنی. اگه winavr کار میکنی که کارت راحته...
      https://www.linkedin.com/in/mohammadhosseini69

      http://zakhar.blog.ir

      دیدگاه


        #4
        پاسخ : مشکل با اولویت بندی اینتراپت ها

        من یکبار یه همچین مشکلی (تقریبا مشابه )داشتم ،2تا میکرو استفاده کردم ( تقسیم وظیفه به روش مونگا مونگا ) ، برای سینک کردنشون هم از پورت سریال میکروها استفاده کردم
        آن دم که مرا مي زده بر خاک سپاريد زير کفنم خمره اي از باده گذاريد
        تا در سفر دوزخ از اين باده بنوشم
        آنلحظه که با دوزخيان کنم ملاقات يک خمره شراب ارغوان برم به سوغات
        هرقدر که در خاک ننوشيدم از اين باده صافي ، بنشينم و با دوزخيان کنم تلافي

        دیدگاه


          #5
          پاسخ : مشکل با اولویت بندی اینتراپت ها

          بزارید مسئلرئ باز تر کنم وقفه سریال که بخوره احتمالا یه 100 بایتی دیتا پشت هم از مودم GSM میاد که همشون حیاتین تو این حین هم که تایمر مدام داره اینتراپت می خوره و فرکانسو اون قضایا داره حساب میشه
          خوب تازه بعضی موقع ها من نیاز دارم که SMS بفرستم که یک روتین زمان بر هست چون توش چند تا wait داره اونقت تو این مدت کلا اگه اینتراپت تایمر بیاد و کار منو قط کنه قضیه فرستادن SMS منتفی میشه و نباید توی این وقفه بخوره کلا کار هر دو تا بسیار مهمه و نه باید قطه باشه و نباید از دست بره!!!
          با این تفاصیر
          1-اقای محمد حسینی باز اون طوری که فکر می کردید هست وتداخل پیش نمیاد و لینکی که گذاشته بودید تقریبا بی ربط بود
          2- اقای joker خواهش می کنم در مورد این روشتون بیشتر توضیح بدم خیلی مشتاقم بشنوم امیدوارم مشکلمو حل کنه
          3-کسیس می دونه با RTOS مشکلم حل میشه یا نه؟
          www.tehranelec.com

          دیدگاه


            #6
            پاسخ : مشکل با اولویت بندی اینتراپت ها

            نوشته اصلی توسط محسن محمد خانی
            3-کسیس می دونه با RTOS مشکلم حل میشه یا نه؟

            تقسیم وظیفه یعنی اینکه مثلا شما یک میکرو را کامل بزاری برای ارسال sms و یک میکرو را کامل بزاری برای خوندن دیتای GSM
            اینطوری هیچکدوم وظیفه هاشون ربطی به میکرو دیگه نداره
            حالا این وسط اگر هم قرار باشه یه سوال جوابی بین دو میکرو رد و بدل بشه با استفاد از پورت سریال میکروها انجام دادم ، یعنی یک استراکچر ثابت برای خودم در نظر گرفتم که میکرو اونطرفی اگه دیتائی روی پورت سریالش میمومد با کمترین پردازش میدونست باید چیکار کنه.

            پیوست » مشکل من موقعی بود که هم میخواستم یک عدد 4 رقمی را روی سون سگمنت نمایش بدم ( 16 الی 25 رفرش در ثانیه ) و همزمان بتونم با حداکثر سرعت مجاز ( 750میکروثانیه) روی استپرموتورهام پالس بفرستم ، این دوتا روی یک میکرو نمیتونستد همزمان کار کنند !
            البته بعد مشکلم را فهمیدم چی بود ولی اون موقع به روش بالا مسائل اسلام و مسلمین را حل کردم یعنی یک میکرو فقط برای نمایش 7seg و یک میکرو برای پردازش مرکزیم و پالس دادن به استپرموتور با حداکثر سرعت مجاز قابل قبول برای استپرم

            در مورد FreeRTOS : چرا امتحان نمیکنی خبرشو به ما هم بدی ؟
            آن دم که مرا مي زده بر خاک سپاريد زير کفنم خمره اي از باده گذاريد
            تا در سفر دوزخ از اين باده بنوشم
            آنلحظه که با دوزخيان کنم ملاقات يک خمره شراب ارغوان برم به سوغات
            هرقدر که در خاک ننوشيدم از اين باده صافي ، بنشينم و با دوزخيان کنم تلافي

            دیدگاه


              #7
              پاسخ : مشکل با اولویت بندی اینتراپت ها

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

              تقسیم وظیفه یعنی اینکه مثلا شما یک میکرو را کامل بزاری برای ارسال sms و یک میکرو را کامل بزاری برای خوندن دیتای GSM
              اینطوری هیچکدوم وظیفه هاشون ربطی به میکرو دیگه نداره
              حالا این وسط اگر هم قرار باشه یه سوال جوابی بین دو میکرو رد و بدل بشه با استفاد از پورت سریال میکروها انجام دادم ، یعنی یک استراکچر ثابت برای خودم در نظر گرفتم که میکرو اونطرفی اگه دیتائی روی پورت سریالش میمومد با کمترین پردازش میدونست باید چیکار کنه.

              پیوست » مشکل من موقعی بود که هم میخواستم یک عدد 4 رقمی را روی سون سگمنت نمایش بدم ( 16 الی 25 رفرش در ثانیه ) و همزمان بتونم با حداکثر سرعت مجاز ( 750میکروثانیه) روی استپرموتورهام پالس بفرستم ، این دوتا روی یک میکرو نمیتونستد همزمان کار کنند !
              البته بعد مشکلم را فهمیدم چی بود ولی اون موقع به روش بالا مسائل اسلام و مسلمین را حل کردم یعنی یک میکرو فقط برای نمایش 7seg و یک میکرو برای پردازش مرکزیم و پالس دادن به استپرموتور با حداکثر سرعت مجاز قابل قبول برای استپرم

              در مورد FreeRTOS : چرا امتحان نمیکنی خبرشو به ما هم بدی ؟
              قبول دارم که تا حد خیلی خوبی کار رو پیش می بره
              ولی اگه موضوع خیلی حیاتی باشه چه مثلا از دست دادن یه واحد شمارش کالا خیلی مهم باشه
              احتمال داره تو این روش حین تبادل استراکچر ها یه اینتراپتو از دست بده یا موقع اومدن اینتراپت استراکچر بپره و مشکل پیش بیاد
              به نظرتو این روش یه تضمین 100 درصر برای عملکرد صحیح و بدون خطای واحد ها بهمون میده؟
              ممنون بابت جواب دادن
              www.tehranelec.com

              دیدگاه


                #8
                پاسخ : مشکل با اولویت بندی اینتراپت ها

                من تخصص زیادی توی الکترونیک ندارم ، ولی 2تا چیز به ذهنم میرسه
                اول اینکه مشکل شما با استفاده از ic های بافر ممکنه حل بشه ؟ یعنی دیتاها در یک بافر قرار بگیرند و میکرو سرصبر این دیتا را بخونه و پردازش کنه
                مورد دوم سرعت میکروکنترلرها است که مثلا یک avr معمولی 16 مگاهرتز سرعت داره دیتای ورودی مطمئنا با این سرعت تغییر نمیکنه حتی 1 مگاهرتز هم فکر نکنم باشه ؛ در این حالت شما اینقدر وقت آزاد داری که نگوووو
                ارتباطی که من معمولا با ماژولهای gsm داشتم به روش سریال بوده ، در حالت معمولی همه چیز مثل ارتباط پورت سریال استاندارد هست ... خیلی خیلی زیاد بخواد استفاده بشه 115200 هست . و این در مقابل 16 میلیون پردازش در ثانیه میکرو هیچی نیست ، فکر نکنم اگه برنامه را بدون خطا بنویسی به مشکلی بربخوری.


                آن دم که مرا مي زده بر خاک سپاريد زير کفنم خمره اي از باده گذاريد
                تا در سفر دوزخ از اين باده بنوشم
                آنلحظه که با دوزخيان کنم ملاقات يک خمره شراب ارغوان برم به سوغات
                هرقدر که در خاک ننوشيدم از اين باده صافي ، بنشينم و با دوزخيان کنم تلافي

                دیدگاه


                  #9
                  پاسخ : مشکل با اولویت بندی اینتراپت ها

                  یک روش اصولی برنامه نویسی در شرایطی که CPU از نظر بار پردازشی در مرزهای خود قرار داشته باشد و چند وقفه هم فعال باشند، انجام اکثر وظایف در حلقه اصلی برنامه است که بصورت دائمی در حال اجراست و در روتین های وقفه فقط در حد لازم باید عملیات پردازشی انجام شود. در صورت مسئله شما فرض کنید که قرار است 100 بایت بصورت سریال دریافت شود و وقفه های دیگری هم همزمان فعال باشند. در این شرایط باید وقفه دریافت سریال بصورتی برنامه نویسی شود که هربار که یک بایت دریافت می شود، وقفه ای اتفاق بیاقتد و روتین وقفه سریال فقط این عدد را در مکان مناسب ذخیره کند و مثلا شمارنده ای متناسب با شماره بایت دریافتی را تغییر دهد. بنابراین به ازای دریافت 100 بایت عملا 100 بار وقفه سریال اتفاق می افتد و زمان اجرای این وقفه هم می تواند بسیار کوتاه باشد. حال در بین دو وقفه متوالی که زمان قابل توجهی را تشکیل می دهد، حلقه اصلی می تواند اگر پردازشی روی بایت های دریافتی لازم است آن را انجام دهد و بار پردازشی را سبک کند. اگر وقفه های دیگری هم وجود داشته باشند باز باید به همین ترتیب عمل شود. یعنی در هر وقفه برنامه بیجهت معطل نشود و حداقل کاری را که لازم است انجام دهد و این حلقه اصلی است که با flag ها و اطلاعاتی که از نتیجه وقفه ها دریافت می کند، عملیات مدیریت و پردازش داده ها را انجام می دهد. در این شرایط و در کاربردی نظیر آنچه که مورد نظر شماست، کمتر اتفاق می افتد که سرعت AVR با کلاک مثلا 16مگاهرتز برای انجام عملیات کفایت نکند و اگر مشکلی بوجود بیاید بیشتر ناشی از برنامه نویسی غیراصولی است.
                  اوژن: به معنای افکننده و شکست دهنده است
                  دانایی، توانایی است-Knowledge is POWER
                  برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                  وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                  قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                  اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                  ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                  دیدگاه


                    #10
                    پاسخ : مشکل با اولویت بندی اینتراپت ها

                    نوشته اصلی توسط طراح
                    یک روش اصولی برنامه نویسی در شرایطی که CPU از نظر بار پردازشی در مرزهای خود قرار داشته باشد و چند وقفه هم فعال باشند، انجام اکثر وظایف در حلقه اصلی برنامه است که بصورت دائمی در حال اجراست و در روتین های وقفه فقط در حد لازم باید عملیات پردازشی انجام شود. در صورت مسئله شما فرض کنید که قرار است 100 بایت بصورت سریال دریافت شود و وقفه های دیگری هم همزمان فعال باشند. در این شرایط باید وقفه دریافت سریال بصورتی برنامه نویسی شود که هربار که یک بایت دریافت می شود، وقفه ای اتفاق بیاقتد و روتین وقفه سریال فقط این عدد را در مکان مناسب ذخیره کند و مثلا شمارنده ای متناسب با شماره بایت دریافتی را تغییر دهد. بنابراین به ازای دریافت 100 بایت عملا 100 بار وقفه سریال اتفاق می افتد و زمان اجرای این وقفه هم می تواند بسیار کوتاه باشد. حال در بین دو وقفه متوالی که زمان قابل توجهی را تشکیل می دهد، حلقه اصلی می تواند اگر پردازشی روی بایت های دریافتی لازم است آن را انجام دهد و بار پردازشی را سبک کند. اگر وقفه های دیگری هم وجود داشته باشند باز باید به همین ترتیب عمل شود. یعنی در هر وقفه برنامه بیجهت معطل نشود و حداقل کاری را که لازم است انجام دهد و این حلقه اصلی است که با flag ها و اطلاعاتی که از نتیجه وقفه ها دریافت می کند، عملیات مدیریت و پردازش داده ها را انجام می دهد. در این شرایط و در کاربردی نظیر آنچه که مورد نظر شماست، کمتر اتفاق می افتد که سرعت AVR با کلاک مثلا 16مگاهرتز برای انجام عملیات کفایت نکند و اگر مشکلی بوجود بیاید بیشتر ناشی از برنامه نویسی غیراصولی است.
                    به نکته بسیار مفیدی اشاره کردید
                    فکر کنم بتونم مشکلمو حل کنم و اصلا به این توجه نکرده بودم(ممنون)
                    یه سوال دیگه RTOS می تونه همچین کاری رو با انجام این دو تا تسک بصورت موازی انجام بده
                    www.tehranelec.com

                    دیدگاه


                      #11
                      پاسخ : مشکل با اولویت بندی اینتراپت ها

                      نوشته اصلی توسط محسن محمد خانی
                      یه سوال دیگه RTOS می تونه همچین کاری رو با انجام این دو تا تسک بصورت موازی انجام بده
                      اصولا یکی از وظایف اصلی سیستم عامل های Real time، رعایت زمان اجرای task های مختلفی است که بصورت موازی در حال انجام هستند. البته ممکن است کاربردی هایی را بتوان معرفی کرد که رعایت زمان اجرای آن از طرف RTOS مورد نظر به دلیل زیربار رفتن بیش از حد CPU ممکن نباشد. اما رد و بدل کردن تعدادی بایت بصورت سریال و سایر توضیحاتی که شما داده اید بر حسب ظاهر نباید از حدود توانایی یک RTOS اصولی خارج باشد.
                      اوژن: به معنای افکننده و شکست دهنده است
                      دانایی، توانایی است-Knowledge is POWER
                      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                      دیدگاه


                        #12
                        پاسخ : مشکل با اولویت بندی اینتراپت ها

                        کاری رو که میگین براحتی میشه با یک ماشین وضعیت انجام داد. حتی ارسال sms !
                        من مورد مشابهی که داشتم عملیات زیادی روی یک سریال بود و در عین حال یک کلاک رو میبایستی بصورت خاص میشمردم و یک پالس هم برایم اهمیت داشت. تازه روالهای زمانبندی بجای خود.
                        زمان پاسخ روال سریال من حداکثر 2 تا 3 میلی ثانیه بود. آنهم با میکروی 7 مگاهرتزی. من اغلب موارد در حالت idle بودم.

                        دیدگاه


                          #13
                          پاسخ : مشکل با اولویت بندی اینتراپت ها

                          نوشته اصلی توسط reza_agha
                          کاری رو که میگین براحتی میشه با یک ماشین وضعیت انجام داد. حتی ارسال sms !
                          من مورد مشابهی که داشتم عملیات زیادی روی یک سریال بود و در عین حال یک کلاک رو میبایستی بصورت خاص میشمردم و یک پالس هم برایم اهمیت داشت. تازه روالهای زمانبندی بجای خود.
                          زمان پاسخ روال سریال من حداکثر 2 تا 3 میلی ثانیه بود. آنهم با میکروی 7 مگاهرتزی. من اغلب موارد در حالت idle بودم.
                          میشه بیشتر توضیح بدید
                          نحوه عملکردش و اصولش چطوریه
                          می تونید مثالی بزنید؟
                          نمونه کد می تونید برام بذارید
                          www.tehranelec.com

                          دیدگاه


                            #14
                            پاسخ : مشکل با اولویت بندی اینتراپت ها

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

                            دیدگاه


                              #15
                              پاسخ : مشکل با اولویت بندی اینتراپت ها

                              نوشته اصلی توسط reza_agha
                              میتونین سرعت دریافت اطلاعات روی سریال و ماکزیمم زمان محاسبه فرکانس دریافتی یا حداقل کدتون که کار نمیکنه رو بدین تا بشه جواب درست و حسابی براتون آماده کرد؟
                              کد رو بهتون می دم ولی خوب پروژه تجاریه و نمیتونم اونو اینجا قرار بدم
                              ولی بصورت خصوصی به شما می رسونمش شما نکاتش رو در فروم مطرح کنید تا همه استفاده کنند
                              ممنون
                              www.tehranelec.com

                              دیدگاه

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