اطلاعیه

Collapse
No announcement yet.

Multi tasking...

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

    #16
    پاسخ : Multi tasking...

    ریجستر های working سر جای خودشون مقدار دهی میشن. هر تسک نیاز به ریجستر های خودش داره پس ما به ازای هر تسک یه سری ریجستر جدید داریم. همه این ها به صورت مجازی هست چوم در اصل ما یه سری ریجستر داریم. با تعویض هر تسک , ریجستر های مجازی تسک جدید سر جای ریجستر های اصلی میرن و پردازنده از ادامه تسک جدید ادامه میده. اگر کمی در مورد برنامه نویسی اسمبلی بخونید کاربرد این ریجستر ها رو تو نوشتن برنامه پیدا میکنید.
    ساده تر بگم: هر تسک مثل یه برنامه کوچیکه. هر برنامه هم یه سری پارامتر ها رو داره که ضروری اند. پردازنده فقط یه دسته از این پارامتر ها رو میتونه نگه داره. پس ما توی وقفه هامون جای این پارامتر ها رو عوض میکنیم. پارامتر های بقیه تسک ها روی رم ما ذخیره میشه تا نوبت به استفاده از اون ها بشه.
    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

    دیدگاه


      #17
      پاسخ : Multi tasking...

      یه برنامه نوشتم به چا خوبی تازه دوتا تسک رو هم با هم اجرا میکنه :nice:
      به ریجستر ها هم نیازی نداره :mrgreen:

      $regfile = "M32def.dat "
      $crystal = 8000000
      Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 8
      Dim A As Word
      Dim B As Word
      Declare Sub Task1
      Declare Sub Task2


      Do
      Call Task1
      Wait 1
      Call Task2
      Loop

      End



      Sub Task1
      Pwm1a = 100
      End Sub

      Sub Task2
      Pwm1b = 100
      End Sub

      پس چرا اینطوری شد ؟ =))

      اینم عکسش :mrgreen:

      http://s2.picofile.com/file/7278232896/ScreenHunter_03_Feb_02_00_48.gif

      دیدگاه


        #18
        پاسخ : Multi tasking...

        شما 2 تا تابع رو پشت سر هم صدا میکنید. باهم اجرا نمیشن که
        جدا از این مساله شما دارید از PWM استفاده میکنید.این مستغل از پردازنده کار میکنه. برای تست از IO ها استفاده کنید که پردازنده مقدارشونو تغییر بده.
        [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

        دیدگاه


          #19
          پاسخ : Multi tasking...

          من نفمیدم باید چیکار کنم
          این برنامه جدید :

          $regfile = "M32def.dat "
          $crystal = 8000000
          Config Porta = Output
          Dim A As Word
          Dim B As Word
          Declare Sub Task1
          Declare Sub Task2

          Do
          Call Task1
          Call Task2
          Loop

          End

          Sub Task1
          Reset Porta.1
          Set Porta.0
          End Sub

          Sub Task2
          Reset Porta.0
          Set Porta.1
          End Sub

          دیدگاه


            #20
            پاسخ : Multi tasking...

            مفهوم مالتی تسکینگ اینه که چند تا تسک با هم پیش برن.مثلا 1 میلی ثانیه تسک 1 اجرا بشه و بعد 1 میلی ثانیه تسک 2.این زمان هایی که نیازه رو یکی از تایمر های میکرو باید تامین کنه.(تو میکرو های بزرگتر یه تایمر اختصاصی برای مالتی تسکینگ درنظر میگرندsystem tick )
            کاری که شما کردید فقط تسک اول باید تا ته اجرا بشه و بعد تسک دوم شروع به کار کنه.با بیسیک نمیدونم میشه چنین چیزی رو پیاده سازی کرد یا نه اما یه هر حال باید از وقفه ی تایمر استفاده کرد.
            [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

            دیدگاه


              #21
              پاسخ : Multi tasking...

              اگر یه برنامه داشته باشیم که توش تاچ و دکودر mp3 که به کار رفته باشه باید اینا طبق زمان بندی باشه مثلا 0.01 ثانیه برای تاچ 1 ثانیه برای دکودر Mp3 اگر هم زمان تموم شد ولش کنه اینی که گفتم درسته ؟؟

              هرچی جلو تر میرم بیشتر اینطوری میشم
              RTOS چیه ؟

              دیدگاه


                #22
                پاسخ : Multi tasking...

                اگه اولویت بندی نداشته باشیم دقیقا همین طوره. البته برای تاچ زمان خیلی کمتری نیازه تا مثلا خوندن از مموری.باید زمان طوری تقسیم بشه که زمان پردازنده الکی تلف نشه.مثلا تو سیستم عامل های درست حسابی اگه از تابع تاخیر خود سیستم عامل استفاده کنید,تو اون بازه پردازنده مشغول انجام کار های دیگه میشه و بعد از گذشتن اون تایم برمیگرده به همون تسک. اگه راهنمای یه سیستم عامل بخونید خیلی کمک میکنه تا بهتر درک کنید...
                RTOS=Real Time Operation System که یه سیستم ریل تایم هست.دقیقا مثل همین مثال.اینکه هر تسک چقدر زمان میبره مشخص هست.این مساله رو زمان پاسخگویی سیستم تاثیر داره.
                [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                دیدگاه


                  #23
                  پاسخ : Multi tasking...

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

                  دیدگاه


                    #24
                    پاسخ : Multi tasking...

                    نوشته اصلی توسط erfan m
                    خوب توی کد ویژن اسم این تایمر چیه ؟
                    تایمر معمولی.
                    تایمر 0 یا تایمر 2
                    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                    دیدگاه


                      #25
                      پاسخ : Multi tasking...

                      تازه فهمیدم چه طورشد :mrgreen:

                      مثلا می خوایم دوتا ال ای دی چشمک بزنه یکی یواش اون یکی سریع تر با هم هم باشن :mrgreen:

                      حالا مثلا پردازنده برنامه رو تا یه جای اجرا کرده چطوری می تونیم ذخیرش کنیم که تا ایجا اجرا کرده و بره سراغ تسک دیگه ؟؟

                      دیدگاه


                        #26
                        پاسخ : Multi tasking...

                        نبودی عرفان جان.یاد تاپیک های قدیمی کردی.......
                        این مثال LED رو با یه تسک هم میشه نوشت ولی به هر حال معنی مستقل بودن رو میشه گرفت.
                        پردازنده آدرس های برگشتی خودش رو از کجا میاره؟ از استک. پس باید ما استک رو ذخیره کنیم. نتیجه محاسبات(مثل کری و...) کجاست تو رجیستر SREG . رجیستر های working که از R0 تا R31 هستند و برای همه کارا استفاده میشن(از آدرس دهی حافظه تا متغیر.....)رو هم باید ذخیره کنید. این رجیستر ها توی استک پوش میشه و با استک یه جا ذخیره میشه و موقع بازیابی پاپ میشه و.......
                        فکر کنم برای avr همین ها بود.برای هر پردازنده دیگه هم باید با معماریش آشنا باشید و به همین شکل پیاده کنید. البته فقط تا حد آشنایی کافیه چون باز نویسی یه هسته کامل وقت تلف کردن هست.
                        [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                        دیدگاه


                          #27
                          پاسخ : Multi tasking...

                          خوب اتسک توی کجا ذخیر میشه ؟

                          چطوری میشه ذخیرش کرد ؟

                          دیدگاه


                            #28
                            پاسخ : Multi tasking...

                            استک توی رم هستش. از سر جاش به یه قسمت دیگه رم انتقال میدید. واسه این که ببینید کجا هم هست باید از رجیستر SP یا اشاره گر استک کمک بگیرید.
                            [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                            دیدگاه


                              #29
                              پاسخ : Multi tasking...

                              رجیستر SP کجا هست ؟ :mrgreen:

                              بعد که استک رو ذخیر کردم چطوری میشه یه تسک دیگه رو RUN کرد ؟

                              //////////////

                              کلا میشه :

                              ریجستر استک رو یه جای دیگه ذخیر کنم یه تسک دیگه رو RUN کنم بعد دوباه استک تسک جدید رو ذخیر کنم ... .

                              دیدگاه


                                #30
                                پاسخ : Multi tasking...

                                دقیقا یعنی چی رجیستر SP کجاست؟ یکم بالاتر از PORTA نرسیده به SREG . :mrgreen:
                                شما اینجوری کار کنید باهاش: SP=0x01;
                                کلا هم اشتباه گفتی.همه ی استک باید یه جای دیگه ذخیره بشه و نه فقط رجیستر اشاره گرش .جدا از این قضیه گفتم رجیستر های working و وضعیت هم هستند......
                                شما یه کتاب آموزش اسمبلی پیدا کنید. قسمتی که دستور POP و PUSH رو توضیح داده رو یه مطالعه بکنید. بعد از اون متوجه قضیه استک میشید.....
                                [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                                دیدگاه

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