اطلاعیه

Collapse
No announcement yet.

اینتراپت

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

    #16
    پاسخ : اینتراپت

    نوشته اصلی توسط skiboy
    سلام
    RTOS=Real-time operating system
    یکی از مثال های بارز برای سیستم های RTOS همین سیستم کامپیوتری هستش که جلوی شماست و پردازش ها به صورت Real time هستش
    http://en.wikipedia.org/wiki/Real-time_operating_system
    http://www.freertos.org/
    http://www.arm.com/community/software-enablement/rtos-real-time-operating-system.php
    http://rtos.com
    داداش میشه بیشتر توضیح بدی؟؟؟؟
    انقدر احمق نیستم که فکر کنم کارم تموم شده

    دیدگاه


      #17
      پاسخ : اینتراپت

      نوشته اصلی توسط SILVER MAN
      داداش میشه بیشتر توضیح بدی؟؟؟؟
      بله چرا نمی شه :biggrin:
      من یک مثال خوب برای این سیستم ها خونده بودم همین را برای شما هم می گم ، شما سیستم ایربگ ماشین در نظر بگیر چی می شه اگه یکمی دیرتر عمل کنه؟؟؟
      امروزه توی وسایل مختلف ، توی embedded system شما می بینید که از RTOS استفاده شده مثلا در اتومبیل ها و لوازم های مختلف خانه
      خب قسمت اصلی و درواقع قلب این سیستم ها را یک OS تشکیل می ده و میکروهایی که قابلیت نصب سیستم عامل دارند از این جمله هستند
      بعضی از چیزهایی که از RTOS استفاده کردند این ها هستند

      LynxOS
      OSE
      QNX
      RTLinux
      VxWorks
      Windows CE
      دسته بندی سیستم های RTOS هم به سه قسمه:
      Hard RTOS_1
      2_Firm RTOS
      3_Soft RTOS
      فکر کنم الان کنجکاو شدی که ببینی برنامه نویسیش چطوره پس این دوتا pdf دانلود کن
      http://www.iar.com/Global/Resources/Developers_Toolbox/RTOS_and_Middleware/Basic_Concepts_for_Real_Time_Operating_Systems.pdf
      http://www.seas.upenn.edu/~rahulm/Teaching/ese519/Reference/Basics-RTOS.pdf

      معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
      اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
      آموزش Modelsim

      دیدگاه


        #18
        پاسخ : اینتراپت

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

        دیدگاه


          #19
          پاسخ : اینتراپت

          تغییر آدرس برگشت از وقفه و حتی زیربرنامه ها بطور کلی ممکن است. برای تغییر آدرس برگشت از روتین وقفه (یا زیربرنامه ها)، باید آدرس push شده در stack سخت افزاری، بصورت نرم افزاری pop شود و بعد از تغییرات مجددا push شود. اما در بسکام به دلیل اینکه دستور Return معادل چندین دستور و در نهایت دستور اسمبلی reti است، چنین کاری تنها با توجه به سورس اسمبلی معادل بسکام ممکن است و با روش های معمول مقدور نیست.
          اوژن: به معنای افکننده و شکست دهنده است
          دانایی، توانایی است-Knowledge is POWER
          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

          دیدگاه


            #20
            پاسخ : اینتراپت

            نوشته اصلی توسط SILVER MAN
            سلام
            با اینتراپت خارجی کار میکنم طوری که برنامه در حین انجام کارش با تحریک اینتراپت وارد روتین اینتراپت میشه
            اما دوس دارم بعد از خروج از روتین اینتراپت برنامه از جای دیگه شروع بشه؟
            داخل روتین اینتراپت که نمیشه برنامه رو به جای دیگه فرستاد چون بایر به RETURN برسه وگرنه قاط میزنه
            درضمن دوستان من با کدویژن کار میکنم
            راهش چیه؟؟؟؟؟؟
            منم به همچین مشکلی خوردم که باید return بکنه
            اومدم یه تابع درست کردم و هر وقت که اینتراپت فعال میشد میرفت توی اون تابع و حالا عملیات مخصوص خودشو میکرد
            مثلا:

            int re_turn (void)
            {
            //your code
            }

            interrupt [EXT_INT0] void ext_int0_isr(void)
            {
            ;() re_turn
            }

            دیدگاه


              #21
              پاسخ : اینتراپت

              نوشته اصلی توسط طراح
              تغییر آدرس برگشت از وقفه و حتی زیربرنامه ها بطور کلی ممکن است. برای تغییر آدرس برگشت از روتین وقفه (یا زیربرنامه ها)، باید آدرس push شده در stack سخت افزاری، بصورت نرم افزاری pop شود و بعد از تغییرات مجددا push شود. اما در بسکام به دلیل اینکه دستور Return معادل چندین دستور و در نهایت دستور اسمبلی reti است، چنین کاری تنها با توجه به سورس اسمبلی معادل بسکام ممکن است و با روش های معمول مقدور نیست.
              سلام توی بسکام میشه به جای دستور Return از کدهای اسمبلی که بهصورت زیر در بسکام تعریف میشن استفاده کرد؟

              $asm
              $endasm
              اگه نه پس لطفا پس از اینکه برنامه کامپایل شد بگید چه طور باید فایل اسمبلی رو ویرایش کرد؟
              اگه تو کدویژن امکان پذیره توضیح بفرمایید ]لطفا[
              [br /][hr]http://pcenter.ir[hr][br /]

              دیدگاه


                #22
                پاسخ : اینتراپت

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

                دیدگاه


                  #23
                  پاسخ : اینتراپت

                  سلام من هم یک سوالی دارم از جناب طراح
                  توی کدویژن که یک پروژه می سازیم به ما فایل اسمبلی ان هم می دهد ومی شه با اون کارد برای بسکام باید چکار کنیم، چطوری می شه اسمبلیش را دید :eek:
                  I'm Very Question and I have more Question,Please Answer All of my Questions


                  [img width=156 height=100]http://uploadtak.com/images/u3536_555_Timer_as_Astable.gif[/img]

                  دیدگاه


                    #24
                    پاسخ : اینتراپت

                    در پاسخ به چگونگی تغییر آدرس برگشت از وقفه در زبان اسمبلی، باید به این نکته توجه کنیم که با ورود به وقفه، آدرس بازگشت به پشته بصورت خودکار PUSH می شود که برای جایگزینی این آدرس باید آدرس مناسب را در محل ذخیره شده از پشته جایگزین کرد. اما ابعاد مختلف انجام این کار بسته به اینکه برنامه اسمبلی برای ذخیره سازی و بازیابی SREG و رجیسترهایی که ممکن است در وقفه تغییر کنند، از پشته سخت افزاری استفاده می کند (با دستورات PUSH و POP) یا از پشته نرم افزاری (با دستورات LD و ST)، کار دقیق و پیچیده ای است که باید توسط یک فرد بسیار مسلط به برنامه نویسی اسمبلی انجام شود و توضیح در مورد آن از حوصله این پست خارج است. در این رابطه توصیه می شود که بجای استفاده از چنین روش هایی، ساختار برنامه نوشته شده تغییر داده شود تا نیاز به انجام چنین عملیاتی وجود نداشته باشد. زیرا در صورت انجام کوچکترین اشتباه و عدم دقت در نوع استفاده از رجیسترها و تاثیر انجام عملیات روی SREG، به نتایج غیر قابل پیش بینی منجر می شود. اما به عنوان مثالی برای چگونگی انجام این کار، با فرض وجود آدرس بازگشت مورد نظر در R17:R16 و آزاد بودن R18 می توان قبل از RETI نوشت:

                    POP R18
                    POP R18
                    PUSH R16
                    PUSH R17
                    RETI


                    نوشته اصلی توسط very question
                    سلام من هم یک سوالی دارم از جناب طراح
                    توی کدویژن که یک پروژه می سازیم به ما فایل اسمبلی ان هم می دهد ومی شه با اون کارد برای بسکام باید چکار کنیم، چطوری می شه اسمبلیش را دید
                    یک فایل با پسوند obj در فایل های تولید شده بسکام وجود دارد که می توانید آن را در AVRStudio باز کنید و سورس اسمبلی معادل را به همراه کد اصلی ببینید.
                    اوژن: به معنای افکننده و شکست دهنده است
                    دانایی، توانایی است-Knowledge is POWER
                    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                    دیدگاه


                      #25
                      پاسخ : اینتراپت

                      نوشته اصلی توسط طراح
                      یک فایل با پسوند obj در فایل های تولید شده بسکام وجود دارد که می توانید آن را در AVRStudio باز کنید و سورس اسمبلی معادل را به همراه کد اصلی ببینید.
                      سلام جناب طراح
                      من رفتم داخل AVRStudio 4 نتونستم اسمبلی برنامه را ببینم، باید برنامه debug بشه و به کامپایلر وصل باشه یا می تونیم همین طوری هم خط به خط برسی کنیم :eek:
                      لطفا راهنمایی کنید @};- @};- @};-
                      I'm Very Question and I have more Question,Please Answer All of my Questions


                      [img width=156 height=100]http://uploadtak.com/images/u3536_555_Timer_as_Astable.gif[/img]

                      دیدگاه


                        #26
                        پاسخ : اینتراپت

                        این هم عکسی از محیط نرم افزار

                        I'm Very Question and I have more Question,Please Answer All of my Questions


                        [img width=156 height=100]http://uploadtak.com/images/u3536_555_Timer_as_Astable.gif[/img]

                        دیدگاه


                          #27
                          پاسخ : اینتراپت

                          مهندس بهتره یه تابع تعریف کنی همون اول برنامه بعد از include i ها
                          بعد آخر دستورهای مربوط به تابع اینتراپت فراخوانیش کن
                          خود تابع رم هر جا که دوس داری بزار

                          long time ago,people who sacrificed their sleep,family,food,laugher and other joys of life
                          were called SAINTS
                          NOW,they are called
                          ENGINEERS

                          دیدگاه


                            #28
                            پاسخ : اینتراپت

                            نوشته اصلی توسط طراح
                            در پاسخ به چگونگی تغییر آدرس برگشت از وقفه در زبان اسمبلی، باید به این نکته توجه کنیم که با ورود به وقفه، آدرس بازگشت به پشته بصورت خودکار PUSH می شود که برای جایگزینی این آدرس باید آدرس مناسب را در محل ذخیره شده از پشته جایگزین کرد. اما ابعاد مختلف انجام این کار بسته به اینکه برنامه اسمبلی برای ذخیره سازی و بازیابی SREG و رجیسترهایی که ممکن است در وقفه تغییر کنند، از پشته سخت افزاری استفاده می کند (با دستورات PUSH و POP) یا از پشته نرم افزاری (با دستورات LD و ST)، کار دقیق و پیچیده ای است که باید توسط یک فرد بسیار مسلط به برنامه نویسی اسمبلی انجام شود و توضیح در مورد آن از حوصله این پست خارج است. در این رابطه توصیه می شود که بجای استفاده از چنین روش هایی، ساختار برنامه نوشته شده تغییر داده شود تا نیاز به انجام چنین عملیاتی وجود نداشته باشد. زیرا در صورت انجام کوچکترین اشتباه و عدم دقت در نوع استفاده از رجیسترها و تاثیر انجام عملیات روی SREG، به نتایج غیر قابل پیش بینی منجر می شود. اما به عنوان مثالی برای چگونگی انجام این کار، با فرض وجود آدرس بازگشت مورد نظر در R17:R16 و آزاد بودن R18 می توان قبل از RETI نوشت:

                            POP R18
                            POP R18
                            PUSH R16
                            PUSH R17
                            RETI
                            مهندس یه راه ساده وجود داره که بشه فهمید کدوم رجیستر خالی هست تا از روی اون مقدار رجیستر SP رو تغییر بدیم؟
                            هیچ راهی نیست که مستقیما توسط بسکام یا کدویژن با نوشتن دستورات اسمبلی آدرس برگشت رو تغییر داد؟
                            چه طور می شه آدرس هر کدام از دستورات روتین اصلی برنامه را پیدا کرد؟
                            [br /][hr]http://pcenter.ir[hr][br /]

                            دیدگاه


                              #29
                              پاسخ : اینتراپت

                              نوشته اصلی توسط very question
                              من رفتم داخل AVRStudio 4 نتونستم اسمبلی برنامه را ببینم
                              از طریق گزینه View/Disassembler می توانید سورس اسمبلی را مشاهده کنید.

                              نوشته اصلی توسط adelavr110
                              مهندس یه راه ساده وجود داره که بشه فهمید کدوم رجیستر خالی هست تا از روی اون مقدار رجیستر SP رو تغییر بدیم؟
                              هیچ راهی نیست که مستقیما توسط بسکام یا کدویژن با نوشتن دستورات اسمبلی آدرس برگشت رو تغییر داد؟
                              چه طور می شه آدرس هر کدام از دستورات روتین اصلی برنامه را پیدا کرد؟
                              در هر کامپایلری از رجیسترهای به خصوصی برای عملیات استفاده می شود که میزان اشغال رجیسترها بستگی به نوع برنامه دارد. دستورات روتین ها هم در همان محیط AVRStudio قابل مشاهده است. به عنوان یک پاسخ کلی، به هیچ وجه انجام چنین عملیاتی در بسکام یا کدویژن به دلیل تسلط لازم برای انجام چنین مواردی در برنامه نویسی اسمبلی ، توصیه نمی شود و اگر برای انجام منظور به خصوصی، حتما تغیر آدرس برگشت لازم باشد (که بسیار بعید است با سایر روش ها نتوان به منظور مورد نظر رسید)، بهتر است روتین وقفه یا کل برنامه بصورت اسمبلی نوشته شود.
                              اوژن: به معنای افکننده و شکست دهنده است
                              دانایی، توانایی است-Knowledge is POWER
                              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                              دیدگاه


                                #30
                                پاسخ : اینتراپت

                                همونطور که میدونید بازگشت از وقفه ها بدون اجرای دستور RETI کار درستی نیست
                                اما در صورتی که در یک پروژه ساده نیاز به تغییر آدرس برگشتی داشته باشید میتوانید بدون تغییرات در اساس برنامه و بدون مشکل تغییر رجیسترهای SREG و رجیسترهای عمومی و SP این کار را انجام بدید
                                نمونه کد برای کامپایلر کدویژن و بسکام قرار دادم


                                Code vision
                                کد:
                                #include <setjmp.h>
                                int b;
                                jmp_buf x;
                                interrupt [2] void ex_int_zero(void)
                                {
                                //Your codes
                                longjmp(x,1);
                                }
                                void main(void)
                                {
                                MCUCR=0x03;
                                GICR=0x40;
                                #asm("sei")
                                b=setjmp(x);
                                if(b==0)
                                PORTC=0x55;
                                else
                                //Your return codes
                                while(1);
                                }
                                Bascom
                                کد:
                                Config Int0 = Rising
                                Enable Int0
                                On Int0 Int0_isr
                                SEI
                                
                                Main:
                                Do
                                Loop
                                
                                Sets:
                                'Your return codes
                                Goto Main
                                
                                End
                                
                                Int0_isr:
                                'Your codes
                                Pop R16
                                pop R16
                                Popall
                                SEI
                                Goto Sets
                                
                                 Return






                                [br /][hr]http://pcenter.ir[hr][br /]

                                دیدگاه

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