اطلاعیه

Collapse
No announcement yet.

آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

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

    #61
    پاسخ : آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

    نوشته اصلی توسط shahinbahari
    تاپیک به این باحالی دیگه چرا فعالیتی نمیکنه؟ ما منتظریم :agree:
    من دوتا سوال دارم و درست متوجه نشدم.
    اولیش اینکه اگه دوتا تسک بخوان با یکی از اینترفیس ها مثل SPI کار کنند چطور میشه؟ تمام تنظیمات و دیتا دریافتی که به هم میریزه....
    دوم هم اینکه چطور میشه فهمید که هر تسک به چند بایت برای استک نیاز داره!!!
    به همان دلیلی که روی کامپیوتر شما نمیتونید همزمان با 2 برنامه از یک com پورت استفاده کنید ، اینجا هم نمیشه
    یه بحثی برای منابع اولیه)resource ) ها هست که میاد از سمافورها یا موتکس ها استفاده میکنه که ببینه آیا این منبع آزاد هست یا نه ، اگه آزاد بود اجازه بده که تسک ازش استفاده کنه
    در غیر اینصورت اگه چک نشه ، به هم ریختن اطلاعات دریافتی را در پی خواهد داشت
    سوال دوم را هم نمیدونم... در سیستم FreeRTOS این وظیفه را انجین این سیستم عامل خودش انجام میده ، سورسش را باید بخونید برای درک مطلبش ( برای ما هم بنویسید)
    ولی احتمالا از مقادیر ثابت استفاده میکنه چون تعداد تسکهایی که میشه براش تعریف کرد نامحدود نیست. ( فکر کنم 16تا بود حداکثر)
    آن دم که مرا مي زده بر خاک سپاريد زير کفنم خمره اي از باده گذاريد
    تا در سفر دوزخ از اين باده بنوشم
    آنلحظه که با دوزخيان کنم ملاقات يک خمره شراب ارغوان برم به سوغات
    هرقدر که در خاک ننوشيدم از اين باده صافي ، بنشينم و با دوزخيان کنم تلافي

    دیدگاه


      #62
      پاسخ : آشنایی با سیستم عامل های بلادرنگ – برر

      سلام
      من یک pdf فارسی از نحوه پیاده سازی سیستم عامل rtos پیدا کردم لینکش این زیره:

      www.bohlooli.ir/msc/rtos.pdf

      :read:

      چند فیلم آموزشی از سایت freertos.org :


      http://www.mediafire.com/?01ys6e88cf0607o

      دانلود کل سایت freertos.org:
      http://www.mediafire.com/?2nub2rk3hxxn92x

      دیدگاه


        #63
        پاسخ : آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

        با سلام
        واقعا عالی بود
        اساتید عزیز طفا ادامه بدید ؟

        اگه میشه یه مثال وطنی هم بزارید !

        یه سوال برام پیش امده تمام تسک ها لزوما توی یک فایل نوشته میشن مثل توابع و فقط مدیریت اجراشون با کرنل هست ؟ توی یکی از سورس های اتمل که فکر میکنم مولتی تسکینگ باشه تسک ها هر کدوم یک فایل مجزا هستند که با زمانبند مدیریت میشن فرق اینها با هم چیه ؟

        این سورسی هست که گفتم :
        http://www.atmel.com/dyn/resources/prod_documents/at90usb128-demo-cdc-1_0_3.zip

        دیدگاه


          #64
          پاسخ : آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

          سلام به دوستان
          والا به نظر من سیستم عاملی که برای میکرو می خوایم استفاده کنیم باید بر پایه یکی از سیستم عامل های استاندارد و معروف (مثل لینوکس) باشه تا بشه از درایورها خیلی از چیزهای اون سیستم عامل ها استفاده کرد.
          به طور مثال uclinux که نسخه لینوکس برای میکرو ها هست. مزیتش هم اینه که احتیاجی نداره میکرو mmu داشته باشه. ولی یه مشکلی که هست اینه که کلا سیستم عامل سنگینی هست و بیشتر مناسب ARM هست. اگه بخوایم رویه AVR پیاده اش کنیم باید یه تغییراتی روش انجام بدیم. اگه علاقه و حوصله دارید بسم ا...
          یه سیستم عام دیگه ه تویه این تاپیک هم راجع بهش گفته شد tinyOS هست که پایه اش freeBSD است. اونم خوبه. یه مشکلی که برای پروژه های open source هست اینه که بیشتر توی سایت sourcefoge یزارندش که از ایران قابل دانلود نیست. اگه کسی vpn یا چیز دیگه ای داره دانلود کنه بقیه هم استفاده کنند.
          اگه کسی هم تجربه دیگه ای داره ممنون میشم توضیح بده

          دیدگاه


            #65
            پاسخ : آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

            با سلام خدمت جناب sinaxyz

            آقا راستش من اصلا با سیستم عامل ها کار نکردم ، اما پایم تا آخرش !

            یه چیزی آقا چرا از FREE RTOS استفاده نکنیم ، نمیشه رو AVR پیادش کرد ؟
            و سوال بعدی اینکه شما با چه کامپایلری کار میکنید ؟

            دیدگاه


              #66
              پاسخ : آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

              سلام دوست عزیز
              ببینید دلیل من برای پیشنهاد دادن uclinux و یا tinyos و یا کلا استفاده از سیستم عامل، این هست که شما با استفاده از این سیستم عامل می تونید بعضی از قابلیت های معادل pc اون ها رو روی میکرو پیاده سازی کنید. من خیلی وقت بود که به علت محدودیت های این میکرو ها با اون ها کار نمی کردم. ولی این پروژه واقعا جالبه.
              کتاب هایی هم دیدم راجع به این سیستم عامل ها، ولی همه این بحث ها زمانیه که شما بتونید این سیستم عامل ها رو روی میکرو محدودی مثل AVR پیاده سازی کنید بعد ادامه ماجرا...
              منظورم از محدودیت های AVR فرکانس کاری، RAM، و ROM اون هست. (شد همه چیزش!!!)

              دیدگاه


                #67
                پاسخ : آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

                خوب الان تکلیف چیه ؟چه کنیم ؟

                دیدگاه


                  #68
                  پاسخ : آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

                  سورس کد uclinux رو دانلود کنید،
                  مقداری راجع بهش تحقیق کنید
                  زبان برنامه نویسی C رو اگر بلد نیستید یاد بگیرید
                  لینوکس و مفاهیم و نحوه کارکرد کرنل و درایور و ... (مفاهیم پایه) رو اگر بلد نیستید یاد بگیرید
                  شروع به ویرایش و customise کردن سورس uclinux برای تطبیق با AVR کنید

                  دیدگاه


                    #69
                    پاسخ : آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

                    دوستان حیف نیست بحث به این با ارزشی تکمیل نشه. اگه میشه یه نمونه xmega هم با FreeRTOS پورت بشه خوبه. راستی این سیستم عامل رو میشه تو IAR هم استفاده کرد. درسته؟؟

                    دیدگاه


                      #70
                      پاسخ : آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

                      اساتید میشه این مطالب رو ادامه بدید
                      کسی نیس !!!!!!!!!
                      گذشت خصلت مردان است

                      دیدگاه


                        #71
                        پاسخ : آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

                        سلام دوستان
                        اول از همه دوستان به خصوص آقای jocker بابت پستهای مفیدتون تشکر میکنم.
                        و حالا سوال :
                        همون طور که در این شکل اومده هر task میبایست بعد از انجام یه سری کارها به delay ختم بشه و اونطور که من تست کردم تا زمانی که یک task به دستور delay نرسه محاله task دیگه ای اجرا بشه :



                        کد:
                        void LED1( void *pvParameters )
                        {
                        	DDRB = 0xff;
                        	while(1)
                        	{
                        		PORTB |= (1<<0);
                        		_delay_ms(1);
                        		
                        		PORTB &= ~(1<<0);
                        		_delay_ms(1);
                        		
                        	}
                        }
                        
                        void LED2( void *pvParameters )
                        {
                        	DDRC = 0xff;
                        	while(1)
                        	{
                        		PORTC |= (1<<1);
                        		_delay_ms(1);
                        		
                        		PORTC &= ~(1<<1);
                        		_delay_ms(1);
                        		
                        		
                        	}
                        }
                        portSHORT main(void)
                        {
                        	xTaskCreate( LED1, ( signed char * ) "LED1", 100, NULL, 1, NULL );
                        	xTaskCreate( LED2, ( signed char * ) "LED2", 100, NULL, 1, NULL );
                        
                        	
                        	vTaskStartScheduler();
                        	
                        		return 0;
                        }
                        
                        void vApplicationTickHook( void )
                        {
                        	PORTA++;
                        }

                        در این برنامه فقط LED1 اجرا میشه :


                        در صورتی که در هر دور اجرای حلقه حتی یکبار از vTaskDelay استفاده کنم نتیجه به این صورت میشه که رضایت بخشه :

                        کد:
                        void LED1( void *pvParameters )
                        {
                        	DDRB = 0xff;
                        	while(1)
                        	{
                        		PORTB |= (1<<0);
                        		_delay_ms(1);
                        		
                        		PORTB &= ~(1<<0);
                        		
                        		vTaskDelay(1);
                        	}
                        }
                        
                        void LED2( void *pvParameters )
                        {
                        	DDRC = 0xff;
                        	while(1)
                        	{
                        		PORTC |= (1<<1);
                        		_delay_ms(1);
                        		
                        		PORTC &= ~(1<<1);
                        		
                        		vTaskDelay(1);
                        		
                        	}
                        }
                        portSHORT main(void)
                        {
                        	xTaskCreate( LED2, ( signed char * ) "LED2", 100, NULL, 1, NULL );
                        	xTaskCreate( LED1, ( signed char * ) "LED1", 100, NULL, 1, NULL );
                        	
                        	vTaskStartScheduler();
                        	return 0;
                        }
                        
                        void vApplicationTickHook( void )
                        {
                        	PORTA++;
                        }

                        همون طور که میبینید در این حالت زمانبندی ها کاملا نامنظمه چرا که vTaskDelay باعث سوئیچ شدن بین task ها میشه و تا اون یکی task دوباره به vTaskDelay ش نرسه اجرای تابع طول میکشه. در صورتی که کلا از _delay_ms استفاده نکنیم و بجاش از vTaskDelay استفاده کنیم نتیجه اینطور میشه:

                        که باز هم میشه فهمید که سوئیچ بین task ها رد هنگام فراخوانی vTaskDelay باعث برهم خوردن زمانبندی میشه.

                        همه اینها که گفتم یک سری آزمایش بود که منجر به این شد که من به صحت port شدن میکرو به سیستم عامل شک کنم. برای همین تو فایل پورت رفتم و تو تابع اینتراپت تایمر دستور sei() رو اضافه کردم. نتیجه این شد که بدون فراخوانی vTaskDelay هر دو task اجرا شدن :

                        کد:
                        #if configUSE_PREEMPTION == 1
                        
                        	/*
                        	 * Tick ISR for preemptive scheduler. We can use a naked attribute as
                        	 * the context is saved at the start of vPortYieldFromTick(). The tick
                        	 * count is incremented after the context is saved.
                        	 */
                        	void SIG_OUTPUT_COMPARE1A( void ) __attribute__ ( ( signal, naked ) );
                        	void SIG_OUTPUT_COMPARE1A( void )
                        	{asm volatile ( "sei" );
                        		vPortYieldFromTick();
                        		asm volatile ( "reti" );
                        	}
                        #else
                        
                        	/*
                        	 * Tick ISR for the cooperative scheduler. All this does is increment the
                        	 * tick count. We don't need to switch context, this can only be done by
                        	 * manual calls to taskYIELD();
                        	 */
                        	void SIG_OUTPUT_COMPARE1A( void ) __attribute__ ( ( signal ) );
                        	void SIG_OUTPUT_COMPARE1A( void )
                        	{asm volatile ( "sei" );
                        		vTaskIncrementTick();
                        	}
                        #endif


                        کد:
                        void LED1( void *pvParameters )
                        {
                        	DDRB = 0xff;
                        	while(1)
                        	{
                        		PORTB |= (1<<0);
                        		_delay_ms(1);
                        		PORTB &= ~(1<<0);
                        		_delay_ms(1);
                        	}
                        }
                        
                        void LED2( void *pvParameters )
                        {
                        	DDRC = 0xff;
                        	while(1)
                        	{
                        		PORTC |= (1<<1);
                        		_delay_ms(1);
                        		PORTC &= ~(1<<1);
                        		_delay_ms(1);
                        	}
                        }
                        portSHORT main(void)
                        {
                        	DDRA=0xff;
                        	PORTD++;
                        	xTaskCreate( LED2, ( signed char * ) "LED2", 100, NULL, 1, NULL );
                        	xTaskCreate( LED1, ( signed char * ) "LED1", 100, NULL, 1, NULL );
                        	
                        	vTaskStartScheduler();
                        	return 0;
                        }
                        
                        void vApplicationTickHook( void )
                        {
                        	PORTA++;
                        }



                        راستی تو تمام شکلها خط اول LED1 و خط دوم LED2 خط سوم هم با هر بار فراخوانی vApplicationTickHook تاگل میشه.

                        حالا سوال من اینه که این دستوری که من اضافه کردم باعث ایجاد اختلال در RTOS میشه یا نه؟
                        آیا این موضوع که تا تابع vTaskDelay صدا نشه RTOS بین task ها سوئیچ نمیکنه صحت داره یا من دارم اشتباه کار میکنم؟در این مورد لینک زیر رو هم میشه بررسی کرد:
                        http://stackoverflow.com/questions/5...text-switching

                        مگه قرار نیست که هر task یه مدت زمانی اجرا بشه بعدش task بعدی و همین طور این round-robin scheduling ادامه پیدا کنه؟ اگه قراره سوئیچ بین task ها با صدا کردن vTaskDelay انجام بشه پس این اینتراپت تایمر کلا به چه درد میخوره؟

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

                        دیدگاه


                          #72
                          پاسخ : آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

                          سلام
                          در پی آخرین پستم که فرستادم کلی تلاش نمودندم تا بالاخره فهمیدم
                          اصلا برنامه مشکل نداره، این پروتئوسه که مشکل داره ، هم تو عمل مدار کار کرد و هم تو شبیه سازی Atmel studio و سوال جدیدم اینه که چرا و به چه علت این freertos تو پروتئوس کار نمیکنه؟
                          بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                          اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                          دیدگاه


                            #73
                            پاسخ : آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

                            نوشته اصلی توسط mostafahk
                            سلام
                            در پی آخرین پستم که فرستادم کلی تلاش نمودندم تا بالاخره فهمیدم
                            اصلا برنامه مشکل نداره، این پروتئوسه که مشکل داره ، هم تو عمل مدار کار کرد و هم تو شبیه سازی Atmel studio و سوال جدیدم اینه که چرا و به چه علت این freertos تو پروتئوس کار نمیکنه؟
                            پروتئوس که واقعا نرم افزار قابل اطمینانی نیست، توی کارهای مبتدی شاید جواب بده اما انتظارات حرفه ای نمیشه ازش داشت (حالا نمیدونم این به خاطر ورژن های کرکی هست که ما باهاش کار میکنیم یا کلا نرم افزار سطح پایینیه توی شبیه سازی)
                            اونچيزي که در دانشگاه ياد ميگيريد، "الفبايي" هست براي نوشتن يک "رمان" !!

                            دیدگاه


                              #74
                              پاسخ : آشنایی با سیستم عامل های بلادرنگ – بررسی نحوه عملکرد و پورت کردن FreeRTOS

                              سلام ممنون از دوستان بابت این تایپک، البته قدیمی هم هست و به نظرم خوبه...
                              خب سوال داشتم که میشه این [فمتو] رو با نسخه جدید اتمل استدیو بیلد کرد؟ یا حتما ای*وی*ار استودیو؟ بعد آخرین نسخه پشتیبانی باید چند باشه؟
                              در ضمن اون منبع یا :

                              کد:
                              [COLOR=#D0CAC0][FONT=monospace]<SOURCEFILE>..\..\MainCode\demos_source\code_TestHelloWorld.c</SOURCEFILE><HEADERFILE>..\..\MainCode\demos_headers\config_TestHelloWorld.h</HEADERFILE>
                              [/FONT][/COLOR]
                              این کار نکرد و موقع تنظیم این تنظیمات اخر سر که فایل ها رو پیدا کرد موقع یبلد کردن نزدیک به ۵۰۰ خطا و هشدار داد که اصلا منطقی نبود؟! میشه یه کاری کرد که حتما با ای*وی*ار استودیو یا اتمل باشه نریم سراغ IAR یا Eclips اینا...!

                              خیلی ممنون.
                              <SOURCEFILE>..\..\MainCode\demos_source\code_TestH elloWorld.c</SOURCEFILE><HEADERFILE>..\..\MainCode\demos_header s\config_TestHelloWorld.h</HEADERFILE>
                              Nobody knew her name
                              But she turned up just the same
                              There was a knock on the door
                              A thump on the floor
                              And the party turned insane
                              As she called out her na-a-a-ame

                              And then she walked in looking like dynamite
                              She said, "Now come along boogaloo through the night"
                              And by the way she's moving, well Dyna might
                              Might she not, with all she's got
                              She's got the whole town lighting up dynamite
                              Nobody quite knowing what to do wrong or right
                              But they all know Dyna is dynamite
                              And they're right

                              دیدگاه

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