اطلاعیه

Collapse
No announcement yet.

سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

Collapse
این موضوع برجسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #91
    پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

    مثال خیلی خوبی بود. چشم و گوشمون باز شد!
    https://www.linkedin.com/in/mohammadhosseini69

    http://zakhar.blog.ir

    دیدگاه


      #92
      پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

      با سلام
      اول تشکر میکنم از دوست خوبمون آقای حسینی که این بحث رو شروع کرد و آموزشهای خوبشون که نظرم رو درباره ی سیستم عامل عوض کرد و همینطور از دیگر اعضا که ایشون رو یاری کردند

      چندتا سوال برام پیش اومده
      1. در RL-RTX میشه از مدهای کم کردن توان مثل SLEEP استفاده کرد؟ چون تو بحث وسایلی که با باطری کار می کنه خیلی مهمه , لطفا اگه میشه توضیح بدید

      2. میکروهایی مثل LPC2101 , LPC2103 , LPC1313 که هم رم و فلش کمی دارن و هم تایمر سیستم ندارن قابلیت استفاده از RL-RTX کیل رو دارن؟

      3. اندروید که یه سیستم عامل مولتی تسکه می تونه مثل ریل تایم ها تویه یک برنامه همزمان چند کار رو انجام بده یا اینکه باید چندتا برنامه بنویسم؟

      با تشکر

      دیدگاه


        #93
        پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

        در RL-RTX میشه از مدهای کم کردن توان مثل SLEEP استفاده کرد
        شدنش میشه. فقط یک شرط داره. اصولا مواقعی که میخواییم این حالت رو استفاده کنیم؛ برنامه رو بایستی به فرمی بنویسیم که بر اساس رویداد ها کار کنه. این رویداد ها میتونن از طرف وقفه های سخت افزاری تحریک بشن یا از مکانیسم هایی استفاده کنن که منتج از این روشهاست. نهایتا در یک تابع داخلی کیل os_idle_demon میتونین مکانیسم sleep رو فعال کنین. این تابع فقط موقعی اجرا میشه که تسک دیگه ای احتیاج به اجرا شدن نداشته باشه. یعنی بطور مطلق باید وقت میکرو حروم بشه. اما این اتلاف وقت نبایستی به اتلاف توان منجر بشه. بنا براین sleep میکنیم. این sleep حداکثر یک کلاک بیشتر دوام نمیاره و با تیک تایمر اصلی؛ سیستم دوباره به کار میفته. scheduler موارد مربوط به wait ها رو چک میکنه. و اگر زودتر از این موارد وقفه ای پیش بیاد از داخل اون وقفه ها میشه مکانیسم های عملیاتی رو تحریک کرد و تازه خود اون وقفه ها باعث بیدار شدن سیستم میشن.

        یکروهایی مثل LPC2101 , LPC2103 , LPC1313
        مسلما اولین و مهمترین شرط اینه که کد و اطلاعات شما داخل این میکرو جا بشه. بعد از اون این میکرو دارای تایمر هست. پس احتمال خیلی خیلی قوی میتونه. اما خوب چک کردنش کاری نداره. یک پروژه حداقل رو برای 2378 کامپایل کنین ببینین حجم کد و رم مورد نیازش چقدر میشه. دستتون میاد که با رم 2 کیلو بایتی میشه این کارو کرد یا نه.

        اندروید که یه سیستم عامل مولتی تسکه می تونه مثل...
        من اندروید رو نمیشناسم (فقط اسمشو شنیدم) اما اگر بصورت یک سیستم عامل کار کنه؛ احتمالا نتونه. مگر اینکه multi-thread باشه.

        دیدگاه


          #94
          پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

          سلام
          من می خواهم با rtx برای سریال برنامه بنویسم آیا در این زمینه باید با اینتراپت سریال کار کنم یا بخاطر داشتن تسک دیگر احتیاج به این کار نیست

          دیدگاه


            #95
            پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

            این بیشتر به طراحی تون برمیگرده. وقفه فقط باید به برنامه اطلاع بده که چیزی اتفاق افتاده و بس. حالا میشه پردازش این "اتفاق" رو درون حلقه اصلی برنامه انجام داد یا یک تسک براش گذاشت. تازه این مورد به خیلی پارامتر های دیگه هم بستگی پیدا میکنه. مثلا سرعت تبادل داده ها روی سریال. شاید روی سرعت 9600 که دریافت یک بایت نزدیک 1.2 میلی ثانیه طول میکشه بشه پردازش رو جای دیگه گذاشت ولی مسلما در سرعت 115200 خیلی سخت میشه. ولی عموما من خودم لااقل روی ARM اخذ یا ارسال اطلاعات رو توی وقفه انجام میدم ولی پردازش جای دیگه. ولی میگم! این الزاما بهترین روش نیست.

            دیدگاه


              #96
              پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

              سلام و خسته نباشید
              جا داره از زحمات استادان حسینی و آقازاده واقعا تشکر کنم
              واقعا مطالب عالیه ،اما نمی دونم چرا متوقف شد :cry2:
              کاری ندارم این وری هستی یا اون وری چپی یا راست
              همیشه ایرانی باش و به ایرانی بودنت افتخار کن
              ایران و هیچ وقت تنها نزار
              اگه خدا رو قبول داری اجرت با خدا

              دیدگاه


                #97
                پاسخ : پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

                محمد جون خیلی عالی توضیح میدی دمت گرم.

                دیدگاه


                  #98
                  پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

                  سلام
                  من از این سیستم عامل هیچی نمیدونم
                  این سیستم عامل TCP/IP داره؟ با اترنت میتونه ارتباط برقرار کنه؟

                  دیدگاه


                    #99
                    پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

                    نوشته اصلی توسط vahidsport
                    سلام
                    من از این سیستم عامل هیچی نمیدونم
                    این سیستم عامل TCP/IP داره؟ با اترنت میتونه ارتباط برقرار کنه؟
                    اوهوم (بله)
                    https://www.linkedin.com/in/mohammadhosseini69

                    http://zakhar.blog.ir

                    دیدگاه


                      پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

                      با سلام و تشکرات ویژه

                      من تازه کار با RTX رو شروع کردم و یه برنامه واسه کار با MMC و Usart نوشتم برنامه جواب میده ولی یه مشکل هست که نتونستم پیدا کنم ، اونم اینه که فقط تسک MMC اجرا میشه انگار زمان بیشتری بهش اختصاص داده شده و در اجرا کلا دیتا تسک MMC در خروجی Usart است با سرعت خیلی بالا که خودم هم تعجب کردم . چون به صورت راندبین کار می کنه باید زمان به صورت مساوی بین تسک ها داده بشه و لی اینطور نمیشه . مابین دیتا ارسالی تسک MMC چند بار دیتا سایر تسک ها ارسال می شود و لی زمان خیلی کمه مثلا 10 میلی ثانیه و این زمان خیلی اندکه حتی روشن و خاموش شدن LED سایر تسک ها هم دیده نمیشه . اگه میشه راهنمایی کنید
                      برنامه رو هم پایین می زارم با تشکر

                      کد:
                      [left][font=arial]#include <AT91SAM7X256.h>
                      #include <rtl.h>
                      #include <stdio.h>
                      #include "usart.h"
                      #include "board.h"
                      #include "spi.h"
                      #include "sd_spi.h"
                      
                      #define BOAR_CLK	48000000
                      
                      char buferID1[20];
                      char buferID2[20];
                      char buf[]="\r\nTASK1\n\r";	
                      char buf1[]="TASK2\n\r";	
                      unsigned char data[20] = "Mohsen Joudi\n\r";
                      unsigned char bufmmc[30];
                      OS_TID  tsk_ID1, tsk_ID2;
                      __task void task_init(void);
                      __task void task1(void);
                      __task void task2(void);
                      __task void MMC(void);
                      void blink1(void);
                      void blink2(void);
                      
                      int main()
                      { 
                        init_usart();
                        spiInit();
                        USART_WriteBuffer(USART0,"Test RTX USART MCC\n\r",sizeof("Test RTX USART MMC\n\r"));
                        if(sdCardInit() == 1)
                      	{
                      		if(sdWriteBlock(1000,data) == 1)
                      		{
                      		
                      		USART_WriteBuffer(USART0,"ok MMC",sizeof("ok MMC"));
                      			
                      		}
                      	else
                      		{
                               USART_WriteBuffer(USART0,"not init",sizeof("not init")); }	
                      	}
                      	else
                      		{USART_WriteBuffer(USART0,"error",sizeof("error"));}
                        os_sys_init(task_init);
                      
                        while(1){}
                        return 0;
                      }
                      
                      __task void task_init(void)
                      {
                        //initialization ports for led
                        *AT91C_PIOB_PER = (1 << 0) | (1 << 1);
                        *AT91C_PIOB_OER = (1 << 0) | (1 << 1);
                        *AT91C_PIOB_OWER = (1 << 0) | (1 << 1);
                        
                        tsk_ID1 = os_tsk_create(task1, 1);  //priority:1
                        tsk_ID2 = os_tsk_create(task2, 1);  //priority:1
                        os_tsk_create(MMC, 1);  //priority:1
                        sprintf(buferID1,"ID1: %d\n\r", tsk_ID1);
                        sprintf(buferID2,"ID2: %d\n\r", tsk_ID2);
                        os_tsk_delete_self();   //necessary
                      }
                      
                      __task void task1(void)
                      {
                        int i = 0;
                        while(1){
                         for (i = 0; i < 0x8ffff; i++);//process
                      	  
                         blink1();
                        }
                      }
                      
                      __task void task2(void)
                      {
                        int i = 0;
                        while(1){
                         for (i = 0; i < 0x8ffff; i++);//process
                      	 
                         blink2();
                        }
                      }
                      
                      __task void MMC(void)
                      {
                       int i;
                       while(1){
                         os_dly_wait(50);
                         sdReadBlock(1000,bufmmc);
                         USART_Write(USART0,'\r',0);
                         for(i=0 ; i < 20 ;i++)
                         USART_Write(USART0,bufmmc[i],0); 
                      
                        }
                      }
                      
                      void blink1(void)
                      {
                        *AT91C_PIOB_ODSR ^= (1 << 0);
                        USART_WriteBuffer(USART0,buferID1,sizeof(buferID1));
                       
                      }
                      
                      void blink2(void)
                      {
                        *AT91C_PIOB_ODSR ^= (1 << 1);
                        USART_WriteBuffer(USART0,buferID2,sizeof(buferID2));
                      }[/font][/left]
                      اینم لینک دانلود http://arm-mohsen-avr.persiangig.com...SART%20RTX.rar

                      دیدگاه


                        پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

                        یه سوال از قسمت can برام پیش اومده.
                        من اگه بخوام یکی از نود هام از چند تا ID مختلف دریافت کنه چی کار باید کنم؟ با تابع CAN_rx_object فقط میشه یه ID رو تو لیست فیلتر قرار داد. حالا من 3-4 تا آدرس رو بخوام تکلیف چیه؟
                        [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                        دیدگاه


                          پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

                          شرمنده من پا برهنه میپرم وسط اینهمه مهندس!!

                          من رشته ام کامپیوتره و تا به حال این دو تا علامت رو ندیده بودم تو زبان سی ، آیا مخصوص میکرو کنترولرهاست؟
                          به هر حال معنیش رو اگر کسی بگه ممنون میشم

                          1- >>
                          2- =^

                          با سپاس

                          دیدگاه


                            پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

                            نوشته اصلی توسط alamdar_313
                            شرمنده من پا برهنه میپرم وسط اینهمه مهندس!!

                            من رشته ام کامپیوتره و تا به حال این دو تا علامت رو ندیده بودم تو زبان سی ، آیا مخصوص میکرو کنترولرهاست؟
                            به هر حال معنیش رو اگر کسی بگه ممنون میشم

                            1- >>
                            2- =^

                            با سپاس
                            این علامت ها که شما گزاشتید رو من هم ندیدم تا حالا اما اگه منظورتون >> هست معنیش میشه شیفت دادن به سمت چپ یا راست.اگه با دستورات اسمبلی آشنا باشید متوجه کارش میشید.تاثیرش مثل این هست که *2 کنیم یا /2
                            ^ هم علامت x-or هست که یکی از گیت های منطقی هست.
                            [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                            دیدگاه


                              پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

                              نوشته اصلی توسط shahinbahari
                              این علامت ها که شما گزاشتید رو من هم ندیدم تا حالا اما اگه منظورتون >> هست معنیش میشه شیفت دادن به سمت چپ یا راست.اگه با دستورات اسمبلی آشنا باشید متوجه کارش میشید.تاثیرش مثل این هست که *2 کنیم یا /2
                              ^ هم علامت x-or هست که یکی از گیت های منطقی هست.
                              ممنون دوست عزیز
                              منم تو کدهای صفحه اول همین تاپیک دیدم ... نمونه:

                              *AT91C_PIOB_ODSR ^= (1 << 0); //led1

                              *AT91C_PIOB_ODSR ^= (1 << 1); //led2

                              دیدگاه


                                پاسخ : سیستم عامل بی درنگ RTX برای ARM7/9 و Cortex-M

                                مسلما اولین و مهمترین شرط اینه که کد و اطلاعات شما داخل این میکرو جا بشه. بعد از اون این میکرو دارای تایمر هست. پس احتمال خیلی خیلی قوی میتونه. اما خوب چک کردنش کاری نداره. یک پروژه حداقل رو برای 2378 کامپایل کنین ببینین حجم کد و رم مورد نیازش چقدر میشه. دستتون میاد که با رم 2 کیلو بایتی میشه این کارو کرد یا نه.
                                سلام

                                روز مرد بر تمامی فقط مرد های ECA مبارک....

                                من یه مثال ساده چشمک زن رو برای LPC2103 نوشتم الان هم تو دیباگر کیل کار میکنه ولی تو پروتئوس کار نمیکنه

                                چه طوری بفهمم که حجم برنامه هم از لحاظ Flash و هم از لحاظ حجم RAM چقدر شده ؟

                                ممنون

                                دیدگاه

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