اطلاعیه

Collapse
No announcement yet.

راه اندازی rtx kernel در کیل

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

    راه اندازی rtx kernel در کیل

    اساتید لطفا راهنمایی کنند
    این rtx تسک کنترلر داستانش تو کیل چیه؟ آیا با اضافه کردن هدر rtx.h وتنطیم گزینه operating system از optoin for target در منو project بر روی rtx kernel دیگه تمومه؟؟
    یا اینکه این کرنل رو باید با یه بوت لودر ابتدا رو مثلا lpc2368 پورت کنیم بعد براش تسک اضافه کنیم؟؟
    من که گیج شدم هر چند تمام فایل هلپ رو خوندم وکانفیک های لازم رو می دونم اما موندم منطق این قضیه چطور کار می کنه
    مثلا برای استفاده از rtl.h که تمامی هدر های لازم رو برا کار با مموری و tcp/ip , smtp ,udp ,webserver داره حتما باید rtx باشه؟؟
    اساتید کمک کنن انشاله نتیجه بگیریم

    #2
    پاسخ : راه اندازی rtx kernel در کیل

    rtx یکی از rtos ها است (real time opration system) مثل power pac توی iar بیشتر واسه usb و ethernet مفید هست
    من هم تازه می خوام باهاش کار کنم help درست حسابی هم ندیدم میدونم یه هسته داره و هر چیزی که بخواید باید بهش اضافه بشه امیدوارم دوستان کمک کنند

    دیدگاه


      #3
      پاسخ : راه اندازی rtx kernel در کیل

      ولله چیز شق القمری نیست. منتهی مراتب یک کمی فهم پیش فرض هاش دردسره. راحتترین کارش هم استفاده از نمونه کدهای کیل مثلا EasyWeb یا Blinky هستش. اما خلاصتا (مرتب کردن موارد با خودتون):

      اولین کار (غیر از دو مورد هدر و تنظیم نوع پروژه) مشخص کردن اطلاعات اولیه سیستم است. این مشخصات در فایل
      سیستم RTX_Config.c قید شده که عمدتا شامل موارد زیر هستش:

      - حد اکثر تعداد task های در حال اجرا.
      - حجم پیش فرض پشته برای هر task.
      - از چه تایمری و چه دقت زمانی استفاده بشه. ذکر این نکته ضروریه که سیستم از یک مکانیسم زمانبندی بهره میبره که برای تنظیم این مکانیسم احتیاج به استفاده از یک تایمر داره که بصورت پیش فرض تایمر صفر هستش.

      این فایل رو میتونین از هر پروژه موجودی به کد خودتون اضافه کنین.

      یک تسک (خسته شدم از بس بین فارسی و انگلیسی سوئیچ کردم) بایستی تعریف بشه که این تسک اولیه است و بایستی به os_init_task ارسال بشه. (مثل اینکه نمیشه!!) مثال:


      int main(void)
      {
      os_sys_init(startup_task);
      }


      هر task یک تابع بدون پارامتر یا حداکثر یک پارامتر از نوع void * است که توسط شما نوشته میشه و توسط لغت کلیدی __task مشخص میشه. (توضیح: هر کاری کردم نتونستم این دوتا underline رو قبل از task قرار بدم. عجب ادیتور مزخرفیه.)

      حالا میریم سر خود تسک ها. دو تیپ کار رو ممکنه با یک تسک بخواییم انجام بدیم. یک کار ساده غیر تکراری و یک کار تکراری. برای حالت تکراری بایستی تکرار رو با استفاده از یک حلقه ایجاد کنیم وگرنه تسک پس از اجرای کد خودش پایان میپذیرد (خیلی ادبی شد!). فقط <<<<فرض>>>> بر اینه که هر تسک تمام وقت پروسسور رو برای خودش استفاده میکنه.

      حالا میرسیم به تیکه های قشنگ داستان. همزمانی - وقفه های سخت افزاری و نرم افزاری - ارتباطات.

      همزمانی:
      برای ایجاد همزمانی یا بهتر بگیم هماهنگی بین تسک ها برای دسترسی به منابع مشنرک (که میتونه متغیر - پورت یا حتی اجرای یک تابع باشه) از سه مکانیسم اصلی استفاده میشه. mutex و سمافور و event.
      هر جا بخواییم احساس تعلق رو بیان کنیم و تعلق یک منبع ر مشخص کنیم از mutex استفاده میکنیم. هر جا بخواییم تعدد رو معرفی کنیم از سمافور و برای چک شرایط از event. nvsj udk درست عین windows. بنا بر این برای رفع شبهه به موارد برنامه نویسی تحت windows هم میتونین مراجعه کنین. فقط دو مسئله مهم. اول اینکه چون اینجا میشه روتین وقفه هم داشت اگر بخوایین مثلا یک سمافور رو افزایش بدین اگر درون روتین وقفه باشین بایستی روتین حالت وقفه رو استفاده کنین isr_sem_send و در غیر آن os_sem_send. برای mutex و event هم لیست توابع رو چک کنین. دوم اینکه در اینجا بر خلاف windows هر event موجودیت مستقلی نداره و جزئی از یک تسک حساب میشه.
      ایضا ما اینجا چیزی بنام swi داریم که وقفه نرم افزاری هستش و 8 کد اول برای RTX رزرو شده هست. (swi جزئی از rtx نیست ها. جزء امکانات هسته arm هستش).

      برای ارتباطات بین دو تسک هم میشه از mailbox استفاده کرد.

      ایضا: من برای راحتی روتین هامو به C و در windows مینویسم و پس از تست روی keil کامپایل و روی سخت افزار نهایی تست میکنم. شما هم همین کارو بکنین راحتتر میتونین کد مشابه کار با rtx رو بنویسین.

      دیدگاه


        #4
        پاسخ : راه اندازی rtx kernel در کیل

        بابا reza_agha دمت گرم . کارت خیلی درسته
        اقا ان شا الله که ادامه داشته یاشه و ما هم همراه با شما بتوانیم این موضوع را حل کنیم
        بی صبرانه منتظر هستم که بیشتر این موضوع را ادامه بدهید .
        لطفا اگه می شه چند مرحله را به صورت پله پله تعیین کنید تا با انجام انها بتوانیم بهتر یاد بگیریم .

        دیدگاه


          #5
          پاسخ : راه اندازی rtx kernel در کیل

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

          دیدگاه


            #6
            پاسخ : راه اندازی rtx kernel در کیل

            سلام
            آقا رضا واقعا در مورده RTX توضیحات جالبی دادین ! :applause:

            ولی سورسه این RTX KERNEL رایگانه؟
            این RTOS ماژول GUI هم داره؟
            از همه مهتر این که این کرنل پورت شده هستش؟ یا باید خودمون پورتش کنیم؟


            دیدگاه


              #7
              پاسخ : راه اندازی rtx kernel در کیل

              نوشته اصلی توسط reza_agha
              ولله من مغزم (اگر چیزی ازش مونده باشه) برای این کارا بدرد نمیخوره. یک مسئله ای چیزی طرح کنین. با هم تحلیلش کنیم. (مهمترین مسئله تحلیله) و بعد با هم پیاده سازی کنیم. یکبار که اینکار انجام بشه تا ته خط خودت میری. الان بیشتر مشکل اینه که کار اول رو ببینی چطوری انجامش میدن. کارهای بعدی دیگه فقط جسارتا خرکاریه.
              reza_agha دمت گرم از این میشه برای راه اندازی اترنت استفاده کرد اگر میشه بیایید شروع کنیم مطمئنم خیلی علاقه مند هستند
              www.tehranelec.com

              دیدگاه


                #8
                پاسخ : راه اندازی rtx kernel در کیل

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

                دیدگاه


                  #9
                  پاسخ : راه اندازی rtx kernel در کیل

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

                  دیدگاه


                    #10
                    پاسخ : راه اندازی rtx kernel در کیل

                    http://www.keil.com/support/man/docs...ar_artxarm.htm
                    همه چی اینجا خیلی واضح توضیح داده شده

                    دیدگاه


                      #11
                      پاسخ : راه اندازی rtx kernel در کیل

                      سورس RTX البته موجود هست ولی رایگان نیست. من اینو روی emule پیدا کردم اسم فایلشم اینه:
                      KEIL ARM - MDK 3.40 - REALVIEW REAL TIME LIBRARY 3.40 + KEYGEN - BY CYBERNOX.RAR

                      ولی راسیتش خودم خیلی از شبکه اش خوشم نیومد بخاطر همین نشستم و کل روتین های شبکه ایش رو خودم نوشتم. برای تستش هم از windows و winpcap استفاده کردم.

                      ایضا راجع به gui این rtx شامل gui نمیشه چون اصل این پک برای چیزاییه که روی یک میکرویی مثل 2378 بطور پیش فرض موجود هست. مثلا امکان اجرای برنامه (execution part) قسمت زمانبندی (timers) و قسمت ارتباط شبکه ای. البته پیاده سازی gui هم چیز مشکلی نیست. من خودم خیلی سال پیش درگیر پروژه ای بودم که مجبور شدیم یک GUI نسبتا خوب تحت dos پیاده کنیم. البته اگر خواستید gui های آماده روی emule گیر میاد.

                      راجع به منبع هم help خود کیل رفرنس خوبیه. البته یک کمی گیج میزنه مثلا باید بدونی که ساختار برنامه چطوری باید طراحی بشه. یا اینکه اگه از tcp بخوای استفاده کنی اینجا ram بالایی نداری و بنا بر این نبایستی با حافظه کار کنی و بایستی روال callback معرفی کنی. اما برای اول کار بهتره منطق برنامه رو تحت windows با C بنویسی تا اصول برنامه نویسی بصورت multi-threaded دستت بیاد و بعدش دیگه کار خیلی خیلی آسونتر میشه.

                      سئوالتون رو راجع به پورت شدن نفهمیدم.

                      اگه بشه یک پروژه پیچیده ای تعریف کنین تا پیاده سازی کنیم خیلی بهتره. لااقل میدونیم نیازها چیه و راجع به چی قراره فسفر بسوزونیم.

                      دیدگاه


                        #12
                        پاسخ : راه اندازی rtx kernel در کیل

                        چرا بحث به این خوبی و بدرد بخوری خوابید
                        اقا رضا خواهش می کنیم خودتون همچین پروزه ای رو تعریف کنید
                        و اموزش اون رو قدم به قدم با پیشرفت پروزه بگید تا همه استفاده کنند
                        پیشا پیش ممنون
                        www.tehranelec.com

                        دیدگاه


                          #13
                          پاسخ : راه اندازی rtx kernel در کیل

                          ببخشید. من چند روزی ماموریت بودم. راجع به بحث هم ذکر این نکته جالبه:

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

                          من فعلا بشدت درگیر چند تا کار هستم که نمیتونم قدم به قدم باهاتون بیام. فقط میتونم تا جایی که میتونم کمکتون کنم توی راهی که میخوایین بتونین حرکت کنین. ولی اصل حرکت با خودتونه. شاید بشه برای اول کار یکی دوتا نمونه برنامه های خود کیل رو با هم تحلیل کنیم. اما یک تجربه خوب موقعی پیش میاد که اطلاعات اولیه خوبی با هم داشته باشیم و یک پروژه من درآوردی رو تا انتها هم نه. تا اوایلش با هم بریم. اونوقت مطمئنا به جایی میرسیم که خودتون مطمئن میشین که میتونین بقیه شو انجام بدین. در حل مسئلهء اولی شما اطلاعات اولیه میخوایین. بعدش پشتکار و نهایتا یه کمی کمک. من فقط ممکنه اون قلم آخری باشم.

                          بخاطر همین یک کمی برای طرح مسئله من مشکل دارم.
                          ضمنا یک مسئله ای مثل EasyWEB از مثالهای کیل کلی اطلاعات جنبی میخواد که راسیتش بی تعارف نه وقتشو دارم نه حالشو. با این احوالات برنامه شو خودتون تنظیم کنین. من تا جایی که بتونم کمک میکنم.

                          دیدگاه


                            #14
                            پاسخ : راه اندازی rtx kernel در کیل

                            من یخورده باهاش کار کردم و یه چشمک زن ساده نوشتم هر led توی یه task جدا با wait خودش باهم اجرا شد
                            الان می خوام با ethernet کار کنم با رجیستر ها که فکر نکنم بتونم کار کنم, با rtx از کجا شروع کنم
                            ممنون می شم اگه بگید از کجا شروع کنم؟

                            دیدگاه


                              #15
                              پاسخ : راه اندازی rtx kernel در کیل

                              مثل اینکه من و شما مشکل ارتباطی داریم!!
                              بذارین یه چند تا چیزو همینجوری بگم. شاید کمکی کنه.

                              اولین قدم اینه که روتین های وقفه ای و غیر وقفه ای رو مشخص کنین. روتینهای وقفه ای بایستی تا حد ممکن سبک باشند و سریعا از روتین وقفه بیرون بیان چون قراره با استفاده از این کرنل اصل عملیات در تسک ها انجام بشه نه در وقفه ها. مثلا اگر برای سریال روال وقفه مینویسین در این وقفه اطلاعات رو از بافر ورودی بردارین و داخل بافر داخلی در رم قرار بدین و برای اطلاع تسکی که این اطلاعات رو پردازش میکنه یک سمافور رو اضافه کنه. یا مثلا وقفه دریافت اطلاعات از روی اترنت به تسکی که عملیات رو اترنت رو راهبری میکنه فقط اطلاعا بده یک فریم رسید.

                              دوم یک تخمین حدودی از میزان حافظه ایه که هر تسک به عنوان stack مصرف میکنه.

                              سوم رفتارهای برنامه بطور تقریبی شناسایی بشه. چطوری؟ اینطوری که میگم!!
                              تکنیکی که معمولا برای چند برنامگی استفاده میشه استفاده از سیستم اشتراک زمانیه. یعنی مثلا اگر چند تا تسک داشته باشیم اولی حداکثر 5 میلی ثانیه وقت میکرو رو برای کارهاش استفاده کنه. بعدش سیستم یک 5 میلی ثانیه رو به تسک بعدی بده و الی آخر. هر چه این زمان پایه کوچکتر باشه تسک ها بنظر "باهم" تر اجرا میشن ولی بار اضافه برای سوئیچ کردن بین تسک ها بیشتره. در صورتی که اگه این زمان بیشتر بشه مثلا 50 میلی ثانیه این "با هم اجرا شدن" کمتر نمود پیدا میکنه اما بار اضافه کمتری در واحد زمان برای میکرو ایجاد میشه. خوب طبیعیه چون در حالت اول حداقل 200 بار در ثانیه سوئیچ انجام میشه. ولی در حالت دوم 20 بار.

                              شاید هم بعضی وقتها بخوای هر تسک خودش تصمیم بگیره که کی باید میکرو رو تحویل تسک بعدی بده.

                              اهه این که همش شد جفنگیات! حالا بریم سروقت کار!

                              یک مثال:
                              قراره سه تا تسک داشته باشیم که سه تا led رو با سه سرعت متفاوت روشن و خاموش کنن (البته بدون استفاده از تایمر!)

                              قدمها!

                              یه مسئله کوچولو جا موند. سیستم ما از بابت میزان منابع بشدت مشکل داره و دستش تنگه. پس برای هر کاری بایستی به میزانی که احتیاج هست منابع مصرف بشه نه کمتر (چون برنامه کار نمیکنه) و نه بیشتر (چون اتلاف منابع میشه).

                              سورسی بنام RTX_Config.c رو پیدا کن و در پروژه ات از طریق کپی کردن در دایرکتوری پروژه اضافه کن چون بایستی تغییر داده بشه. سورس رو در کیل بازش کن. و در قسمت پایین ادیتور Configuration Wizard Tab رو انتخاب کن و در پنجره مربوطه این مقادیر رو تصحیح کن:

                              1- تعداد ماکزیمم تسک ها. مثلا اینجا 4 تا داریم. به ازای هر led یک تسک و یکی هم اضافه. (بعد میگم چرا)
                              2- بعضی تسک ها ممکنه بخوان میزان بیشتری حافظه برای stack مصرف کنن. تعداد این گونه تسک ها رو هم مشخص کن.
                              3- حجم پیش فرض stack برای تسک ها به بایت. بهتره حداقل 200 بایت باشه. ولی بستگی به کارت داره. کار؟ آره. تعداد متغیر های داخلی در تابع اصلی. در توابعی که از این تسک صدا زده میشه. و تعداد دفعاتی که توابع به صورت تودرتو صدا زده میشن. به صورت تقریبی.
                              4- اول کار میتونی stack overflow check رو فعال کنی. اما بعدا وقتی خیالت راحت شد خفش کن. سرعتتو پایین میاره.
                              5- فعلا با تایمر های نرم افزاری (user timers) کاری نداریم.
                              6- یکی از کانالهای تایمرت در میکرو برای انجام عملیات زمانی حروم میشه. فرض کن تایمر صفر.
                              7- سرعت کلاک سیستم (برای فیلیپس معمولا کریستال 12 مگ استفاده میشه)
                              8- مقدار پایه زمانبندی که این مقدار رو از این به بعد بهش میگیم tick (البته از نوع غیر عصبی اش!!!!)
                              9- زمان پایه برای سوئیچ کردن بین تسک ها (همون 5 و 50 میلی ثانیه نمونه ای که توضیح دادم) بر حسب تعداد تیک
                              .....ادامه دارد....کی؟ نمیدونم!

                              دیدگاه

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