اطلاعیه

Collapse
No announcement yet.

نحوه کار کرنل های مولتی تسک

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

    #16
    پاسخ : نحوه کار کرنل های مولتی تسک

    دوستان این پروژه رو بخونید:
    www.bohlooli.ir/msc/rtos.pdf
    خودم باورم نمیشه که توی ایران به این چیزا اهمییت بدن!!! :mrgreen:
    خیلی عالیه با AVR یه سیستم عامل preemative رو توضیح داده تقریبا کامله همراه سورس.
    گپ های خالی ذهنم رو پر کرد.البته بازم باید مطالعه کنم. :read:
    (می خوام اون برد قبلیمو که با pic18 بود با DSpic30f همراه سیستم عامل مولتی تسک خودم با یه سری امکانات دیگه اپ دیت کنم .{تاپیک بردی جالب با سیستمی جالب})
    راستی شما چرا بجای یک کرنل مالتی تسک یکه همه جا هست یک کرنل مبتنی بر state machine نمینویسین؟ کلی بار زمانیش هم کمتره و از حافظه هم استفاده بهینه تری میشه. فقط باید یک ادیتور مثل VisualState داشته باشین تا کلا دیگه بترکونه.
    روی اینم فکر میکنم.ممنون
    :job:
    :bye

    [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

    دیدگاه


      #17
      پاسخ : نحوه کار کرنل های مولتی تسک

      با سلام :biggrin:
      یه جوون مردی نیست که بگه: :mrgreen:
      وقتی که برنامه داره اجرا میشه کدوم ریجستر ها رو باید ذخیره کنیم بعد بریم یه جای دیگه و وقتی برگشتیم دوباره ذخیره شده ها رو ری استور کنیم که برنامه در حال اجرا درست و بدون مشکل اجرا بشه؟
      یه سری شو میدونم شامل:
      FSR ها 0 و 1 و 2
      TOS ( top of stack) l
      دیگه چی؟
      :question:

      [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

      دیدگاه


        #18
        پاسخ : نحوه کار کرنل های مولتی تسک

        سلام عباس جون
        آقا من یه فیلمی توی یوتوب دیدک ... شدم با یه LPC و همین LCD رنگی خودمون یه برنامه نوشته بود که هم از HC SD پشتیبانی میکرد هم رفت و یه فایل MP3 پخش کرد اونوقت در حال پخش فایل MP3 رفت و یه عکس تمام صفحه هم باز کرد ...
        الهم عجل لولیک الفرج

        فقط 313 نفر...

        دیدگاه


          #19
          پاسخ : نحوه کار کرنل های مولتی تسک

          آقا جون خیلی هول نشین. lpc مجهز به کانالهای متعدد DMA هست. بنابراین الزامی نداره که همیشه برای هر کاری میکرو عملیاتی انجام بده میتونسته با این جور مشخصاتش کار کرده باشه. الزاما به multitasking میتونه ربط نداشته باشه.

          دیدگاه


            #20
            پاسخ : نحوه کار کرنل های مولتی تسک

            ممنون امیر حسام
            ولی حق با اقا رضا هست چون داره فایل mp3 پخش می کنه عکس هم باز می کنه دلیل بر مولتی تسک نیست !!!
            ممکنه برای هر کار از وقفه یا DMA استفاده کرده باشه.اگر دیدی چند تا کار دیگه هم هم زمان داره انجام میشه اونو به مولتی تسکینگ شک کرد.
            (البته بعید نیست هم که با مولتی تسکینگ این کارو کرده باشه)
            وقتی که برنامه داره اجرا میشه کدوم ریجستر ها رو باید ذخیره کنیم بعد بریم یه جای دیگه و وقتی برگشتیم دوباره ذخیره شده ها رو ری استور کنیم که برنامه در حال اجرا درست و بدون مشکل اجرا بشه؟
            بستگی به میکرو داره
            توی سری 18 فقط سه ریجستری:
            BSR
            STATUS
            W reg
            البته هر سه ریجستر برای اینتراپتهای سریع مجهز به ریجستر های shadow هستند.
            ولی اگه روال برنامه بیاد از ریجستر های دیگه هم استفاده کنه باید اونارو هم ذخیره کنیم مثلا کامپایلر mikrobasic میاد 21 تا ریجستر کمکی از رم برای پردازشهای سنگین به عنوان استک نرم افزاری میگیره.

            [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

            دیدگاه


              #21
              پاسخ : نحوه کار کرنل های مولتی تسک

              نوشته اصلی توسط abbasmh
              با سلام خدمت تمامی دوستان و اساتید : :bye
              یه چند وقتیه که بد جوری فکرم مشغول پروژه مولتی تسکینگ با استفاده از میکرو های PIC یا (ترجیحا) DSPIC شده! :surprised:
              البته شاید این سوال پیش بیاد که اصلا مگه کاری هست که نیاز به مولتی تسک داشته باشه اونم با میکرو ؟
              البته می شه بگیم در سطح ما ها با پروژه های سادمون نه نیازی نداریم.ولی دونستن یه چیز همیشه بهتر از ندونستنشه و احتمالا در اینده نزدیک به در دمون می خوره!
              حالا طبق اطلاعات اندک من توی سیستم های مولتی تسکینگ یه تایمر داریم که با فاصله زمانی معین اینتراپت ایجاد می کنه تا بتونه فعالیت حاضر را متوقف کنه و یه فعالیت بعدی رو پیش بگیره.
              حالا ممکنه که فعالیت رو یه دستور اسمبلی تعریف کنیم یا تکه از برنامه که مثلا روی ال سی دی می نویسه . که این خودش جای بحث زیادی داره!
              حالا این جا پای استک میاد وسط با استک پوینتر (stack & stack pointer)
              من یه سری اطلاعات دیگه ایی از این سیستم های مولتی تسکینگ دارم ولی بدلیل پراکندگی و دید کلی ناقص می خوام که دوستانی که اطلاعات دقیقتر و کاملتری دارن یه توضیح کامل از قسمتهای مختلف این نوع سیستمها بدن تا بعد بریم سراغ قسمتهای بعدی!
              فکر میکنم بهتره که با برنامه پیش بریم طبق زیر:(پس حدالمقدور از برنامه خارج نشیم و پست های نا مربوط نزنیم :redface
              1- اشنایی کلی و دقیق با سیستمهای مولتی تسکینک (برای میکرو نه کامپیوتر)
              2-اشنایی دقیق با قسمتهای مختلف این سیستم و وظیفه و نحوه کارکرد هر قسمت
              3-سعی در پیاده سازی همین سیستم برای یک میکرو خاص (DSPIC30F6014)

              بسم الله
              هر کدوم از دوستان که میتونه به پیشرفت مرحله اول کمک کنه بیاد جلو . مامنتظریم!!!
              مثل اینکه من و شما یه جوری هدفمون یکیه منتها شما یه چیز هایی ساختید من دنبال ابزار مناسب هستم منم میخوام یه سیستم همه کاره (تبلت) بسازم
              منم توی مولتی تسکینگ گیر کردم ببینم شما برای سوییچ بین تسک ها از چی دقیقا استفاده میکنید؟آدرس تسک رو میدید؟با اینتراپت؟؟؟
              ممنون

              دیدگاه


                #22
                پاسخ : نحوه کار کرنل های مولتی تسک

                شرمنده که دیر جواب میدم اخه این اول چند وقته سرم خیلی شلوغه :angry:
                بستگی داره که از سیستم coprative استفاده کنید یا preemative
                توی اولی خودمون میایم تسک رو عوض می کنیم و لی توی دومی وقفه میاد تسک رو عوض می کنه.
                اون برنامه که گذاشتم از نوع اولی هست.
                فکر کنم تاپیکو کامل نخوندی ها؟؟!!! :mrgreen:
                ببینم شما برای سوییچ بین تسک ها از چی دقیقا استفاده میکنید؟آدرس تسک رو میدید؟با اینتراپت؟؟؟
                سوالتو متوجه نمی شم؟

                [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

                دیدگاه


                  #23
                  پاسخ : نحوه کار کرنل ها مولت تسک

                  میشه در هر دو مورد بیشتر توضیح بدید؟سوال دومم اینه که روش این که یه تسک قابل اجرا رو با یکى دیکه عوض کنیم؟

                  دیدگاه


                    #24
                    پاسخ : نحوه کار کرنل های مولتی تسک

                    من بازم معتقدم تاپیکو بازم نخوندی :mrgreen:
                    بابا توضیح دادم دیگه؟؟؟!!!!

                    [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

                    دیدگاه


                      #25
                      پاسخ : نحوه کار کرنل های مولتی تسک

                      بار پنجمه که میخونم آخه چرا بیسیک؟؟؟C بهتر نبود؟

                      دیدگاه


                        #26
                        پاسخ : نحوه کار کرنل های مولتی تسک

                        بار پنجمه که میخونم
                        شرمنده آخه سوالت طوری بود که . . .
                        چرا خوب مسلما C بهتره ولی برای من که برای علاقه و بصورت اماتوری کار می کنم بیسیک راحتتره!!!

                        [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

                        دیدگاه


                          #27
                          پاسخ : نحوه کار کرنل های مولتی تسک

                          خوب منم آماتوری کار میکنم
                          حالا میشه برنامتون رو ترجمه کنید؟

                          دیدگاه


                            #28
                            پاسخ : نحوه کار کرنل های مولتی تسک

                            program POP
                            dim sfr_temp as byte[2][6] 'for FSR
                            dim stack_temp as byte[2][3] 'for stack address
                            dim i,j,nn as byte
                            پراسیجر اصلی تغییر تسک
                            sub procedure S_T() 'switch task
                            چک میکنیم که الان از کدام تسک باز گشتیم
                            if nn=0 then
                            ذخیره کردن ریجستر های ادرس دهی غیر مستقیم (برای کار با ارایه ها خیلی بدرد می خورن و همونطور که می دونیم pic18f8722 سه تا از اونا رو داره)
                            sfr_temp[0][0]=FSR0L ''
                            sfr_temp[0][1]=FSR0H '
                            sfr_temp[0][2]=FSR1L 'save FSR
                            sfr_temp[0][3]=FSR1H '
                            sfr_temp[0][4]=FSR2L '
                            sfr_temp[0][5]=FSR2H ''
                            خواندن و ذخیره ادرس پوش شده توسط اولین تسک (ادرس بازگشتی تسک)
                            stack_temp[0][2]=TOSL ''
                            stack_temp[0][1]=TOSH 'read top of stack
                            stack_temp[0][0]=TOSU ''
                            نوشتن مقدار جدید در ادرس بازگشتی
                            TOSL=stack_temp[1][2] ''
                            TOSH=stack_temp[1][1] 'write top of stak
                            TOSU=stack_temp[1][0] ''
                            تغییر فلگ انتخاب تسک
                            nn=1
                            بازیابی fsr های ذخیره شده برای تسک قبلی
                            FSR0L=sfr_temp[0][0] ''
                            FSR0H=sfr_temp[0][1] '
                            FSR1L=sfr_temp[0][2] 'get FSR
                            FSR1H=sfr_temp[0][3] '
                            FSR2L=sfr_temp[0][4] '
                            FSR2H=sfr_temp[0][5] ''
                            else
                            دقیقا مثل اول شرط هست ولی برعکس یعنی دوباره مقادیر خوانده شده و مقادیر مربوط به تسک قبلی نوشته می شوند
                            sfr_temp[1][0]=FSR0L ''
                            sfr_temp[1][1]=FSR0H '
                            sfr_temp[1][2]=FSR1L 'save FSR
                            sfr_temp[1][3]=FSR1H '
                            sfr_temp[1][4]=FSR2L '
                            sfr_temp[1][5]=FSR2H ''

                            stack_temp[1][2]=TOSL ''
                            stack_temp[1][1]=TOSH 'read top of stack
                            stack_temp[1][0]=TOSU ''
                            TOSL=stack_temp[0][2] ''
                            TOSH=stack_temp[0][1] 'write top of stack
                            TOSU=stack_temp[0][0] ''
                            nn=0
                            FSR0L=sfr_temp[1][0] ''
                            FSR0H=sfr_temp[1][1] '
                            FSR1L=sfr_temp[1][2] 'get FSR
                            FSR1H=sfr_temp[1][3] '
                            FSR2L=sfr_temp[1][4] '
                            FSR2H=sfr_temp[1][5] ''
                            end if
                            end sub
                            تسک اول
                            sub procedure T_1()
                            while 1
                            portj.5=1
                            delay_ms(500)
                            تغییر تسک S_T()
                            portj.5=0
                            delay_ms(500)
                            تغییر تسک S_T()
                            wend
                            end sub
                            تسک دوم
                            sub procedure T_2()
                            while 1
                            portj.7=1
                            delay_ms(500)
                            تغییر تسک S_T()
                            portj.7=0
                            delay_ms(500)
                            تغییر تسک S_T()
                            wend
                            end sub

                            main:
                            trisj=0
                            nn=0
                            گرفتن ادرس شروع تسک اول و دوم بر روی فلش میکرو
                            asm 'get start address of T_1 in flash
                            MOVLW @@#_T_1
                            MOVWF _stack_temp+0, 0
                            MOVLW @#_T_1
                            MOVWF _stack_temp+1, 0
                            MOVLW #_T_1
                            MOVWF _stack_temp+2, 0
                            end asm
                            asm 'get start address of T_2 in flash
                            MOVLW @@#_T_2
                            MOVWF _stack_temp+3, 0
                            MOVLW @#_T_2
                            MOVWF _stack_temp+4, 0
                            MOVLW #_T_2
                            MOVWF _stack_temp+5, 0
                            end asm

                            while 1
                            T_1()
                            T_2()
                            wend
                            end.

                            [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

                            دیدگاه


                              #29
                              پاسخ : نحوه کار کرنل های مولتی تسک

                              با سلامی مجدد بعد از 120 روز
                              دوستان من خیلی نزدیک تموم کردن یه سیستم عامل مولتی تسک و preemative برای DSPIC (و خود PIC) هستم.
                              آیا این کار ارزش اینو داره که ثبت رسمی اختراع بشه؟
                              با وجود اینکه بیش از 10 سیستم عامل برای این سری های میکرو نوشته شده.
                              حتی با وجود اینکه چند صد خط بیشتر نباشه و با Mikrobasic نوشته شده باشه ؟؟؟
                              ممنون میشم اگه راهنمایی کنید. :nice:

                              [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

                              دیدگاه


                                #30
                                پاسخ : نحوه کار کرنل های مولتی تسک

                                چون بحث نرم افزاریه احتمالا باید بری شورای عالی انفورماتیک ( این 20 هزارتومن)
                                بعد ارجاعت میدن به رسانه های دیجیتال وزارت ارشاد ( این 100 تومن )
                                + هزینه محضرخانه ( جهت گواهی امضا : 3500 تومن )
                                هزینه پست ( شورا و رسانه ها ) 7000 تومن
                                سی دی و پک و اعصاب خوردیش هم حساب نکردم
                                آخرش هیچ ارزشی جز یه قاب گرفتن نداره
                                آن دم که مرا می زده بر خاک سپارید زیر کفنم خمره ای از باده گذارید
                                تا در سفر دوزخ از این باده بنوشم
                                آنلحظه که با دوزخیان کنم ملاقات یک خمره شراب ارغوان برم به سوغات
                                هرقدر که در خاک ننوشیدم از این باده صافی ، بنشینم و با دوزخیان کنم تلافی

                                دیدگاه

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