اطلاعیه

Collapse
No announcement yet.

AVR SIMPLE OS

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

    AVR SIMPLE OS

    سلام به همه
    فکر کنم این اولین بار کسی تو ایران روی سیستم عاملهای میکروکنترلرها کار میکنه ، البته نه زیاد جدی...
    این پروژه ی درس میکروی من بود که البته بیشتر شامل مباحث سیستم عامله تا خود میکرو!
    فعلا بیشتر جنبه ی نمایشی داره ، ولی از اونجایی که کد به طور کامل در کتابخونه های جدا و توابع اختصاصی نوشته شده قابل توسعه است.
    ...در این پروژه از یک میکروکنترلر AVR مدل ATMEGA16 استفاده شده است که قابلیت اتصال به کامپیوتر از طریق پورت سریال را دارد. کد این پروژه به طور کامل به زبان اسمبلی نوشته شده و تمام قسمت های آن از قبیل کنترل LCD ، کنترل رابط سریال و... به صورت کتابخانه هایی جداگانه مخصوص این پروژه به طور کامل نوشته شده است...
    کد و شبیه سازی پروژه رو میتونید دانلود کنید.
    https://skydrive.live.com/redir?resi...14A0550833!107

    #2
    پاسخ : AVR SIMPLE OS

    سلام دوست عزیز
    قطعا اولین بار نیست اما موفق باشی
    همیشه به یاد خدا باش !

    دیدگاه


      #3
      پاسخ : AVR SIMPLE OS

      نوشته اصلی توسط HR_MEHRABIAN
      سلام به همه
      فکر کنم این اولین بار کسی تو ایران روی سیستم عاملهای میکروکنترلرها کار میکنه ، البته نه زیاد جدی...
      این پروژه ی درس میکروی من بود که البته بیشتر شامل مباحث سیستم عامله تا خود میکرو!
      فعلا بیشتر جنبه ی نمایشی داره ، ولی از اونجایی که کد به طور کامل در کتابخونه های جدا و توابع اختصاصی نوشته شده قابل توسعه است.
      کد و شبیه سازی پروژه رو میتونید دانلود کنید.
      https://skydrive.live.com/redir?resi...14A0550833!107
      جالبه مهندس
      میشه یه مقدار از امکانات آن توضیخ بدهید :applause:
      :redface:
      کمتر سخن گویم
      بیشتر عمل کنیم

      دیدگاه


        #4
        پاسخ : AVR SIMPLE OS

        دوست عزیز 100% اولین بارنیست.
        چرا؟
        چون من یادم سال 2007 دوستان رو AT8 سیستم ریختن.

        ولی باز ممنون.کهیاد بچه ها انداختین
        شمر ۱۴۰۰سال پیش مُرد؛شمر زمانت بشناس.
        [img width=400 height=100]http:///uploads/140623781981451.png[/img]
        [glow=green,2,100]یاحسین تشنه لب[/glow]

        دیدگاه


          #5
          پاسخ : AVR SIMPLE OS

          سلام دوست عزیز
          قطعا اولین بار نیست اما موفق باشی
          مرسی ، لطف داری ، اگه قبلا رو این قضیه تو این سطح (داشتن قابلیت مولتی تسکینگ ، داشتن چند درایور مثلا برای LCD و ADC و PWM ، اسمبلی بودن کد به طور کامل و...) کار شده خوشحال میشم در موردش بدونم ، واسه توسعه و ادامه ی کار. چون این فعلا یه پروژه ی تحقیقیه و جای کار زیاد داره.
          جالبه مهندس
          میشه یه مقدار از امکانات آن توضیخ بدهید
          من دارم رو نوشتن یه کرنل 64 بیتی برای پردازنده های اینتل کار میکنم که قراره هسته ی یه سیستم عامل خاص برای یه سری کاربرد حاص باشه. این پروژه ی AVR-SOS رو بیشتر برای تست یه سری از الگوریتم های سیستم عامل (مولتی تسکینگ و سمافرها) نوشتم ، البته جدا از نمره ی درسش!
          فعلا این خوصوصیات و قابلیت ها رو داره : اتصال به کامپیوتر از طریق پورت سریال و گرفتن دستور از کامپیوتر ، امکان نمایش مقادیر ADC برای هر کانال ، زمان ، تعداد تسک های در خال اجرا و داده های روی PORT یا PIN درگاه های میکرو با استفاده از دستورات کامپیوتر ، امکان اجرای حداکثر 4 تسک ، 16 بایت پشته و 8 رجیستر (R16-R23) برای هر تسک ، سرعت اجرای بالا به دلیل اسمبلی بودن زبان کل کد ، داشتن LCD چهار بیتی و...
          کد 4 تسک ساده اند(LED چشمک زن و بوق ، نمایش دما روی LCD هر 1 ثانیه ، شمارش فشردن کلید بر روی LCD و LED ، کنترل شدت نور یک LED با استفاده از یک کلید فشاری و نمایش شدت نور بر روی LCD) و فقط برای نمایش نوشته شدند ، البته براحتی قابل تغییرند و مهم هسته ی سیستم عامله.
          توی اون لینکی که واسه دانلود گذاشتم توضیحات کامل پروژه ، شبیه سازی پروژه ی دمو با Proteus ، کد به طور کامل و عکس های پروژه ی دموی ساخته شده هست.
          دوست عزیز 100% اولین بارنیست.
          چرا؟
          چون من یادم سال 2007 دوستان رو AT8 سیستم ریختن.

          ولی باز ممنون.کهیاد بچه ها انداختین
          مرسی... منظورت از سیستم چیه ؟ اگه منظورت سیستم عامله ، خودشون نوشته بودند؟ والا من که تو اینترنت و این ور اون ور زیاد گشتم ، ولی چیزی پیدا نکردم. تازه خارجیشم تک و توک پیدا میشه. آخه سیستم عامل واسه ی AVR مسخره کاربرد زیادی نداره که، بیشتر جنبه ی نمایشی و آموزشی داره. ولی ما که بخیل نیستیم آفرین به دوستان...

          دیدگاه


            #6
            پاسخ : AVR SIMPLE OS

            ممنون ازتون . من فقط یک سری سوال داشتم:

            1- منظور کلی از سیستم عامل برای avr چیه؟ آخه avr بیشتر یک میکروکنترلر خاص منظورس.

            2- سیستم عامل باید دارای پردازنده ای باشه که حداقل دو مد کاربر (user ) و سرپرست( kernel ) را از هم متمایز کنه و مثلا در صورت اجرای دستورات بخصوصی(مثلا نوشتن در رجیسترهای io) یا دسترسی به جایی از حافظه که غیر مجاز است ، در مد user با استثنا( exception ) از سوی پردازنده مواجه شود و وقفه بخورد تا عمل مد سوچینگ انجام شود. که پردازنده avr این امکان را ندارد.

            3- اینترفیس و رابط کاربر با سیستم عامل چیه؟ چطور کاربر تسک ها را اجرا میکند( در حین کار پردازنده )

            4- برای طراحی استخون بندی سمافورها از غیرفعال کردن وقفه ها استفاده شده؟ سمافور صف میخواد که کار واقعا پیچیده میشه چطور پیاده سازی شده؟ در چه جاهایی از سمافور استفاده کردید؟

            5- slice های زمانی برای process switch را با تایمر های خود میکرو ایجاد میکنید؟ مقدارش رو چقدر گذاشتید؟ چرا حداکثر 4 تسک اینترلیو قابل اجراست ؟ محدودیت زمانی و حافظه است یا کد برای انجام کارای دیگه ننوشتید؟ (اخه سیستم عامل باید طوری باشه که از طریق رابطی یک سری کد برای فرایند بگیره و فارغ از کدها اون ها رو کنارهم اجرا کنه)

            6- فکر میکنم برای سادگی کار PCB کل فریند ها همیشه داخل sram میمونه ولی آخه چطور با مگا 16 اینکار قابل اجراست.

            ببخشید سوالام زیاد شد
            در ضمن تقدیر میکنم از این کارتون ، گسترش دادنش میتونه خیلی مطلب مفیدی در پی داشته باشه.
            راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
            کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
            نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
            http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
            انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

            دیدگاه


              #7
              پاسخ : AVR SIMPLE OS

              1- منظور کلی از سیستم عامل برای avr چیه؟ آخه avr بیشتر یک میکروکنترلر خاص منظورس.
              مزیت بزرگی که بشه چند تا برنامه رو هم زمان روی میکرو داشت. مثلا توی یه روبات سنسورها و رابط های زیادی ممکنه وجود داشته باشه ، خیلی بهتره میشه اگه واسه هر کدوم برنامه ی جدا نوشته بشه و بشه رویدادها و حافظه رو به طور کامل مدیریت کرد.
              مثلا توی همین پروژه ی دمو دو کلید برای دوتا از تسک ها وجود داره. اینجا نمیشه از اینتراپت خارجی استفاده کرد ولی در عوض برای هر تسک میشه با کد نویسی خیلی ساده ، یه حلقه برای انتظار فشردن کلید نوشت. بدون اینکه مزاحم سایر تسک ها شد. خیلی کاربردهای دیگه هم داره.
              اینجا یه لیستی از سیستم عامل های RTOS با لینک سایتاشون هست :
              http://en.wikipedia.org/wiki/List_of...rating_systems
              اینم آدرس سایت یکی از معروف ترین سیستم عامل های AVR به نام Femto OS :
              http://www.femtoos.org/
              2- سیستم عامل باید دارای پردازنده ای باشه که حداقل دو مد کاربر (user ) و سرپرست( kernel ) را از هم متمایز کنه و مثلا در صورت اجرای دستورات بخصوصی(مثلا نوشتن در رجیسترهای io) یا دسترسی به جایی از حافظه که غیر مجاز است ، در مد user با استثنا( exception ) از سوی پردازنده مواجه شود و وقفه بخورد تا عمل مد سوچینگ انجام شود. که پردازنده avr این امکان را ندارد.
              خوب الزامی واسه داشتن چندتا مد توی سیستم عامل وجود نداره ، واسه ی داشتن چند تا مد کاری توی پردازنده ها ، یه سری امکانات سخت افزاری وجود داره که در زمان اجرای دستورات بین مدها تمایز قائل میشه و واسه یه سری از مدها (مثل کاربری) یه سری محدودیت میذاره.
              ولی توی AVR یه همچین امکانی وجود نداره ، پس نمیشه محدودیتی واسه دستورات گذاشت.
              توی AVR نیازی به وجود چند مد کاری نیست ، خودش به اندازه ی کافی محدود هست!
              3- اینترفیس و رابط کاربر با سیستم عامل چیه؟ چطور کاربر تسک ها را اجرا میکند( در حین کار پردازنده )
              میکرو از طریق اینترفیس پورت سریال با کامپیوتر ارتباط داره و با یه برنامه ی ساده توی کامپیوتر میشه دستور واسش ارسال کرد و نتیجه رو دید. یعنی رابطش یه جورایی CommandLine میشه.
              باید به این موضوع توجه کرد که کد برنامه AVR ، توی حافظه ی فلش قرار میگیره و امکان نوشتن توی این حافظه از طریق خود کد دردسرهای خودش رو داره (از طریق دستور SPM و بوت لودر) هر چند بیشتر از این وقت گذاشتن واسه این پروژه فعلا الکیه ، ولی اگه برسم کرنل رو به صورت بوت لودر مینویسم تا بشه از طریق همون پورت سریال برنامه ی تسک ها رو ریخت ، ولی تازه دردسر اصلی شروع میشه! حالا باید یه کامپایلر خاص نوشته بشه که با توجه به محدودیت ها و امکانات سیستم عامل بتونه کد رو کامپایل کنه و توی میکرو پلود کنه.
              اما الان کد تسک ها در زمان پروگرم کردن میکرو تعیین میشند.
              4- برای طراحی استخون بندی سمافورها از غیرفعال کردن وقفه ها استفاده شده؟ سمافور صف میخواد که کار واقعا پیچیده میشه چطور پیاده سازی شده؟ در چه جاهایی از سمافور استفاده کردید؟
              چرا وقفه ها غیر فعال بشند؟ عمل سویچینگ روی وقفه اتفاق میفته ، که اگه وقفه ها غیرفعال بشند همه چی بهم میریزه.
              با توجه به اینکه AVR خیلی محدوده ، سمافورهایی که توی این سیستم عامل وجود داره ساده اند و شمارشی نیستند و صف ندارند. هر زمان که تویه یه تسک نیاز به استفاده از یه منبع بشه قبلش منتظر میمونه که اون منبع از حالت LOCK (که یه فلگ وضعیت منبع رو مشخص میکنه) خارج بشه. ترتیب زمانبندی پردازنده برای تسک ها مرتب و ثابته.
              پس برای هر منبع تسکها منتظر باز شدن منبع میمونند به ترتیب کارشون رو با منبع انجام میدند (بعد از دوباره قفل کردن منبع) و هر بار منبع آزاد میکنند تا تسک بعدی کارش رو با منبع انجام بده. داخل کد همه چی معلومه.
              الان تسک 2 و 3 و 4 از منبع LCD استفاده میکنند. اگه تو شبیه سازی دقت کنید مثلا در زمان نوشتن دما (تسک 3) اگه کلید فشاری تسک 2 فشار داده بشه باید عدد شمارش روی LCD نوشته بشه دیگه ، ولی چون منبع LCD به وسیله ی تسک 2 قفل شده ، تسک 3 منتظر اتمام کار تسک 2 میمونه و بعد عدد رو به LCD میفرسته.
              به غیر از LCD ، منبع ADC هم بین کرنل و تسک 3 (دما سنج) مشترکه.
              5- slice های زمانی برای process switch را با تایمر های خود میکرو ایجاد میکنید؟ مقدارش رو چقدر گذاشتید؟ چرا حداکثر 4 تسک اینترلیو قابل اجراست ؟ محدودیت زمانی و حافظه است یا کد برای انجام کارای دیگه ننوشتید؟ (اخه سیستم عامل باید طوری باشه که از طریق رابطی یک سری کد برای فرایند بگیره و فارغ از کدها اون ها رو کنارهم اجرا کنه)
              آره ، زمان رسیدگی به هر تسک توی فرکانس کاری 16 مگاهرتز تقریبا 10 میلی ثانیه است که نسبتا طولانیه. ولی میدونید که توی عمل مولتی تسکینگ ، عمل سویچ کردن تسک ها زمانبره و برای کمتر اختصاص دادن پردازنده به این عمل زمان اخصاص به هر تسک رو طولانی میگیرند.
              این سیستم عامل فعلا 4 تسک رو همزمان جلو میبره ، علت کم بودنش کم بودن مقدار حافظه ی SRAM میکروه که قراره PCB ها و پشته های هر تسک رو ذخیره کنه. الان واسه ی هر تسک 13 بایت برای PCB (مطمئن نیستم) + 16 بایت پشته وجود داره ، بقیه ی حافظه برای پشته ی کرنل و اطلاعات تسک ها (PID تسک ها ، PID فعلی و...) و حافظه ی آزاد برای برنامه ها استفاده میشند.
              توی فایل stdlib.inc میتونید Memory Map رو ببینید و به راحتی قابل تغییرند. زیاد کردن تسک ها کاری نداره ، ولی حجم حافظه برای هر تسک کمتر میشه. به نظرم الان حافظه زیاد بهینه نیس ، ولی گفتم ، فعلا جنبه ی نمایشی داره.
              6- فکر میکنم برای سادگی کار PCB کل فریند ها همیشه داخل sram میمونه ولی آخه چطور با مگا 16 اینکار قابل اجراست.
              منظورتون رو از ثابت بودن PCB ها متوجه نشدم ولی توی فایل process یه تابع به نام InitProc وجود داره که آدرس شروع تسک توی حافظه ی flash رو میگیره و PCB اون تسک رو میسازه و به صف تسک ها اضافه میکنه. یه تابع هم به نام KillProc وجود داره که PID رو میگیره و اون رو از صف خارج میکنه ولی PCB اون تسک سرجاش میمونه.
              ببخشید سوالام زیاد شد
              در ضمن تقدیر میکنم از این کارتون ، گسترش دادنش میتونه خیلی مطلب مفیدی در پی داشته باشه.
              خواهش میکنم ، اگه بازم سوالی بود خوشحال میشم کمک کنم...

              دیدگاه


                #8
                پاسخ : AVR SIMPLE OS

                امکان پلود مجدد تو یه سایت مثل persiangig وجود داره؟ آخه هرچی تلاش میکنم نمیتونم دانلود کنم.

                خیلی حیفه این تاپیک بره پایین.

                اینطور که من برداشت کردم از پست قبلیتون ، شما اومدید این 4 تا تسک رو ثابت فرض کردید و همیشه PCB و کل کدها در حافظه فلش میمونه( در کل تصویر 4 فرایند برای همیشه در فلش است ) و با دادن دستورات از طریق پورت سریال میاید تسک ها را فعال و غیر فعال میکنید.( لیست دستوراتی که بهش میتونید بدید چیه؟)
                پس نمیشه گفت سیستم عامله ، یه جورایی شبه سیستم عامله. که اصل کارش تایمر میکرو است و دستوراتی که در روتین تایمر نوشتید.(که همونطور که گفتید 10 میلی ثانیه یه بار اینتراپت میخوره و پردازنده رو میده به تسک دیگه.)
                درضمن فکر کنم تو این سیستم عاملتون ، سیستم کال بیمعنیه . همچنین مدهای مختلف (چون کدش رو خودتون نوشتید و دیگه نمیشه دست برد توش که مثلا من کاربر سیستم عاملتون مثلا با مقدار دهی 0 به رجیستر TIMSK کل کار رو خراب کنم (یا ریختن صفر در UCSRB و یا ...) (به خاطر همین نیاز به ساپورت سخت افزاری ندارید) )

                یه سوال خیلی واجب ازتون دارم: تاحالا با دستور spm تو قسمت بوت لودر کار کردید؟ چه جوری میشه با نوشتن این دستور و اجرای اون توسط پردازنده مقادیر حافظه فلش را تغییر داد؟

                درضمن فکر میکنم تجزیه تحلیل سیستم عامل های دسکتاپ ( 32 بیتی ها) مثل ویندوز xp ( که فکر کنم ساختار ترکیبی(تلفیق ریزهسته و یکپارچه(من بش میگم قروقاتی :mrgreen داشته باشه) خیلی بیشتر میتونه اطلاعات بده. شما منبعی برای اینکار سراغ داری؟
                راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                دیدگاه


                  #9
                  پاسخ : AVR SIMPLE OS

                  امکان پلود مجدد تو یه سایت مثل persiangig وجود داره؟ آخه هرچی تلاش میکنم نمیتونم دانلود کنم.
                  AVR-SOS.zip
                  اینطور که من برداشت کردم از پست قبلیتون ، شما اومدید این 4 تا تسک رو ثابت فرض کردید و همیشه PCB و کل کدها در حافظه فلش میمونه( در کل تصویر 4 فرایند برای همیشه در فلش است ) و با دادن دستورات از طریق پورت سریال میاید تسک ها را فعال و غیر فعال میکنید.( لیست دستوراتی که بهش میتونید بدید چیه؟)
                  درسته ، تسک ها با رابط سریال کنترل میشند ، ثابت هستند و کل کدهاشون توی حافظه ی فلشه ، ولی PCB اونا توی حافظه ی SRAM قرار داره و با هر بار سویچ تسک PCB برای تسک قبلی پدیت و برای تسک فعلی لود میشه. لیست دستورات تو فایل توضیحات هست ، کمند ولی خیلی راحت قابل ارتقا و توسعه هستند.
                  پس نمیشه گفت سیستم عامله ، یه جورایی شبه سیستم عامله. که اصل کارش تایمر میکرو است و دستوراتی که در روتین تایمر نوشتید.(که همونطور که گفتید 10 میلی ثانیه یه بار اینتراپت میخوره و پردازنده رو میده به تسک دیگه.)
                  درضمن فکر کنم تو این سیستم عاملتون ، سیستم کال بیمعنیه . همچنین مدهای مختلف (چون کدش رو خودتون نوشتید و دیگه نمیشه دست برد توش که مثلا من کاربر سیستم عاملتون مثلا با مقدار دهی 0 به رجیستر TIMSK کل کار رو خراب کنم (یا ریختن صفر در UCSRB و یا ...) (به خاطر همین نیاز به ساپورت سخت افزاری ندارید) )
                  سیستم عامل به معنی میان افزاری با قابلیت مولتی تسکینگ و مدیریت منابع آره ، ولی مهمترین قسمت سیستم عامل تمایز بین کد قسمت کاربری و کرنل ، و داینامیک بودن کد تسک هاست. این AVR-SOS بیشتر یه هسته است و همون طور که قبلا گفتم قابل توسعه است. AVR به صورت سخت افزاری مولتی مد بودن رو پشتیبانی نمیکنه. ولی اصلا کار سختی نیست اگه بخوایم این کمبودا رو رفع کنیم. راه های زیادی هست مثلا فقط کافیه کد باینری هر دستور برای هر تسک رو قبل از Execute با کد باینری دستورایی که فقط توی مد کرنل مجازند اجرا بشند مقایسه کنیم ، اگه فلگ مد کرنلی فعال بود اونوقت اونا هم مجاز به اجرا باشند و گرنه که اجرا نشند. یا حتی یه زبون اسکریپتی ساده واسش ساخت ، هر چند تو هر دو صورت سرعت پایین میاد.
                  واسه ی داینامیک بودن کدها هم همون طور که توی پست قبلی گفتم باید این سیستم عامل توی قسمت بوت لودر باشه تا بشه برنامه ی تسک های دیگه رو از طریق سیستم عامل دست کاری کرد.
                  واسه ی سیستم کال هم درسته فعلا مد عوض نمیشه ولی همین الانشم تابع های زیادی نوشتم برای تاخیر ، تبدیل عدد به رشته ، کنترل LCD ، کنترل ADC ، کنترل PWM ، تسخیر منابع و... که از توی تسک ها قابل فذاخوانی هستند.
                  در کل بازم میگم ، این AVR-SOS فقط یه بیسه واسه ی توسعه ، فعلا واسم هیچ صرفه ای نداره ، وگرنه خیلی ایده و راه واسه ی توسعه اش دارم.
                  یه سوال خیلی واجب ازتون دارم: تاحالا با دستور spm تو قسمت بوت لودر کار کردید؟ چه جوری میشه با نوشتن این دستور و اجرای اون توسط پردازنده مقادیر حافظه فلش را تغییر داد؟
                  خیلی راحت!
                  اول اینکه برنامه باید توی ناحیه ی بوت لودر باشه. ناحیه ی NRWW که تقریبا 13 درصد حافظه ی فلش میکرو های AVR هستش ، بدون بوت لودر حافظه ی فلش یکپارچه است. فقط توی این ناحیه است که قابلیت نوشتن توی حافظه ی فلش وجود داره البته توی 87 درصد باقی مونده. بوت لودر بر اساس حجم برنامه به 4 دسته تقسیم میشه که باید در زمان پروگرم کردن نوع بوت لودر توی فیوز بیت ها (BootSZ0 و BootSZ1) تعیین بشه. آدرس شروع این ناحیه تو زبان اسمبلی بر اساس حجم FOURTHBOOTSTART ]حجم زیاد که برابره با کل 13 درصد ناحیه ی NRWW [ ، THIRDBOOTSTART ، SECONDBOOTSTART ، FIRSTBOOTSTART ]حجم کم[ هستش که باید یکی از این آدرسا قبل از شروع کد بوت لودر کنار دستور ORG بیاند ، مثل :
                  ; Low Size Bootloader FIRSTBOOTSTART ORG .)
                  بعد باید عملکرد دستور SPM رو از طریق رجیستر SPMCR تعیین کرد. البته بیت SPMEN باید حتما 1 بشه تا بشه از این دستور استفاده کرد.
                  حالا اگه همزمان با SPMEN بیت PGERS یک بشه صفحه ای که آدرسش توی بیت ها 7 تا 13 ثبات Z هستند رو پاک میکنه.
                  اگه بیت PGWRT یک بشه داده هایی که توی بافر قرار دارند (برای نوشتن توی فلش یه بافر 128 بایتی وجود داره) توی صفحه ای از حافظه ی فلش ریخته میشند که آدرس اون صفحه توی بیت های 7 تا 13 ثبات Z قرار داره.
                  اگه BLBSET یک بشه ثبات R0 مقدار بیت قفل هارو تعیین میکنه.
                  اگه بیت RWWSRE یک بشه امکان خواندن با دستور LPM فراهم میشه ، چون این دستور در حالت عادی توی بوت لودر غیر قابل استفادست.
                  اگه هیچ کدوم از این 4 بیت 1 نباشند و بیت SPMEN به تنهایی 1 بشه میشه توی بافر فلش داده نوشت. داده ها به صورت کلمه ای از دو رجیستر R0 و R1 به آدرسی از حافظه ی فلش منتقل میشند که این آدرس توی بیت های 1 تا 6 قرار داره.
                  فقط یه نکته مهم وجود داره که برای استفاده از SPM باید هیچ عمل نوشتن یا خوندنی از حافظه ی EEPROM در حال اجرا نباشه و از فیوز بیتها BOOTRST باید یک باشه.
                  یه نکته ی دیگه اینکه هر وقت بیت SPMEN 1 بشه ، چه از دستور SPM استفاده بشه چه نشه ، بعد از 4 پالس ساعت مقدار این بیت صفر میشه.
                  یه مثال (فیوز بیتای BOOTSZ0 و BOOTSZ1 باید جفتشون 0 باشند تا بوت لودر در حالت FOURTHBOOTSTART باشه):
                  کد:
                  /*
                   * BOOTLOADER.asm
                   *
                   * Created: 7/29/2013 12:23:34 PM
                   *  Author: Hamid
                   */ 
                   .include "m16def.inc"
                  
                   .org	FOURTHBOOTSTART
                   ; Erase Page 1
                   ldi	ZL,LOW(1<<7)
                   ldi	ZH,HIGH(1<<7)
                   ldi	r16,1<<SPMEN | 1<<PGERS
                   OUT	SPMCR,R16
                   SPM
                   NOP	; 4 Cycle do nothing
                   NOP
                   NOP
                   NOP
                   ; Write 0xABCD at address : 0x01 into the Buffer
                   LDI	ZH,0
                   LDI	ZL,2
                   LDI	R16,0xAB
                   MOV	R0,R16
                   LDI	R16,0xCD
                   MOV	R1,R16
                   LDI	r16,1<<SPMEN
                   OUT	SPMCR,R16
                   SPM
                   NOP
                   NOP
                   NOP
                   NOP
                   ; Write Buffer To Page 1 (Address : 0x0080 - 0x00FF)
                   LDI	ZL,LOW(1<<7)
                   LDI	ZH,HIGH(1<<7)
                   LDI	r16,1<<SPMEN | 1<<PGWRT
                   OUT	SPMCR,R16
                   SPM
                   LOOP:
                   RJMP	LOOP
                  توضیحات بیشتر توی این pdf پایین هست.
                  www.atmel.com/images/doc1644.pdf
                  درضمن فکر میکنم تجزیه تحلیل سیستم عامل های دسکتاپ ( 32 بیتی ها) مثل ویندوز xp ( که فکر کنم ساختار ترکیبی(تلفیق ریزهسته و یکپارچه(من بش میگم قروقاتی :mrgreen داشته باشه) خیلی بیشتر میتونه اطلاعات بده. شما منبعی برای اینکار سراغ داری؟
                  صدردصد! این AVR بدبخت دربدر رو چه به این غلطا!
                  سایت های زیادی واسه این کار هست ، مثل :
                  http://wiki.osdev.org/Main_Page
                  http://www.osdever.net/

                  دیدگاه


                    #10
                    پاسخ : AVR SIMPLE OS

                    نوشته اصلی توسط HR_MEHRABIAN
                    AVR-SOS.zipدرسته ، تسک ها با رابط سریال کنترل میشند ، ثابت هستند و کل کدهاشون توی حافظه ی فلشه ، ولی PCB اونا توی حافظه ی SRAM قرار داره و با هر بار سویچ تسک PCB برای تسک قبلی پدیت و برای تسک فعلی لود میشه. لیست دستورات تو فایل توضیحات هست ، کمند ولی خیلی راحت قابل ارتقا و توسعه هستند.سیستم عامل به معنی میان افزاری با قابلیت مولتی تسکینگ و مدیریت منابع آره ، ولی مهمترین قسمت سیستم عامل تمایز بین کد قسمت کاربری و کرنل ، و داینامیک بودن کد تسک هاست. این AVR-SOS بیشتر یه هسته است و همون طور که قبلا گفتم قابل توسعه است. AVR به صورت سخت افزاری مولتی مد بودن رو پشتیبانی نمیکنه. ولی اصلا کار سختی نیست اگه بخوایم این کمبودا رو رفع کنیم. راه های زیادی هست مثلا فقط کافیه کد باینری هر دستور برای هر تسک رو قبل از Execute با کد باینری دستورایی که فقط توی مد کرنل مجازند اجرا بشند مقایسه کنیم ، اگه فلگ مد کرنلی فعال بود اونوقت اونا هم مجاز به اجرا باشند و گرنه که اجرا نشند. یا حتی یه زبون اسکریپتی ساده واسش ساخت ، هر چند تو هر دو صورت سرعت پایین میاد.
                    واسه ی داینامیک بودن کدها هم همون طور که توی پست قبلی گفتم باید این سیستم عامل توی قسمت بوت لودر باشه تا بشه برنامه ی تسک های دیگه رو از طریق سیستم عامل دست کاری کرد.
                    واسه ی سیستم کال هم درسته فعلا مد عوض نمیشه ولی همین الانشم تابع های زیادی نوشتم برای تاخیر ، تبدیل عدد به رشته ، کنترل LCD ، کنترل ADC ، کنترل PWM ، تسخیر منابع و... که از توی تسک ها قابل فذاخوانی هستند.
                    در کل بازم میگم ، این AVR-SOS فقط یه بیسه واسه ی توسعه ، فعلا واسم هیچ صرفه ای نداره ، وگرنه خیلی ایده و راه واسه ی توسعه اش دارم.خیلی راحت!
                    اول اینکه برنامه باید توی ناحیه ی بوت لودر باشه. ناحیه ی NRWW که تقریبا 13 درصد حافظه ی فلش میکرو های AVR هستش ، بدون بوت لودر حافظه ی فلش یکپارچه است. فقط توی این ناحیه است که قابلیت نوشتن توی حافظه ی فلش وجود داره البته توی 87 درصد باقی مونده. بوت لودر بر اساس حجم برنامه به 4 دسته تقسیم میشه که باید در زمان پروگرم کردن نوع بوت لودر توی فیوز بیت ها (BootSZ0 و BootSZ1) تعیین بشه. آدرس شروع این ناحیه تو زبان اسمبلی بر اساس حجم FOURTHBOOTSTART ]حجم زیاد که برابره با کل 13 درصد ناحیه ی NRWW [ ، THIRDBOOTSTART ، SECONDBOOTSTART ، FIRSTBOOTSTART ]حجم کم[ هستش که باید یکی از این آدرسا قبل از شروع کد بوت لودر کنار دستور ORG بیاند ، مثل :
                    ; Low Size Bootloader FIRSTBOOTSTART ORG .)
                    بعد باید عملکرد دستور SPM رو از طریق رجیستر SPMCR تعیین کرد. البته بیت SPMEN باید حتما 1 بشه تا بشه از این دستور استفاده کرد.
                    حالا اگه همزمان با SPMEN بیت PGERS یک بشه صفحه ای که آدرسش توی بیت ها 7 تا 13 ثبات Z هستند رو پاک میکنه.
                    اگه بیت PGWRT یک بشه داده هایی که توی بافر قرار دارند (برای نوشتن توی فلش یه بافر 128 بایتی وجود داره) توی صفحه ای از حافظه ی فلش ریخته میشند که آدرس اون صفحه توی بیت های 7 تا 13 ثبات Z قرار داره.
                    اگه BLBSET یک بشه ثبات R0 مقدار بیت قفل هارو تعیین میکنه.
                    اگه بیت RWWSRE یک بشه امکان خواندن با دستور LPM فراهم میشه ، چون این دستور در حالت عادی توی بوت لودر غیر قابل استفادست.
                    اگه هیچ کدوم از این 4 بیت 1 نباشند و بیت SPMEN به تنهایی 1 بشه میشه توی بافر فلش داده نوشت. داده ها به صورت کلمه ای از دو رجیستر R0 و R1 به آدرسی از حافظه ی فلش منتقل میشند که این آدرس توی بیت های 1 تا 6 قرار داره.
                    فقط یه نکته مهم وجود داره که برای استفاده از SPM باید هیچ عمل نوشتن یا خوندنی از حافظه ی EEPROM در حال اجرا نباشه و از فیوز بیتها BOOTRST باید یک باشه.
                    یه نکته ی دیگه اینکه هر وقت بیت SPMEN 1 بشه ، چه از دستور SPM استفاده بشه چه نشه ، بعد از 4 پالس ساعت مقدار این بیت صفر میشه.
                    یه مثال (فیوز بیتای BOOTSZ0 و BOOTSZ1 باید جفتشون 0 باشند تا بوت لودر در حالت FOURTHBOOTSTART باشه):
                    کد:
                    /*
                     * BOOTLOADER.asm
                     *
                     * Created: 7/29/2013 12:23:34 PM
                     *  Author: Hamid
                     */ 
                     .include "m16def.inc"
                    
                     .org	FOURTHBOOTSTART
                     ; Erase Page 1
                     ldi	ZL,LOW(1<<7)
                     ldi	ZH,HIGH(1<<7)
                     ldi	r16,1<<SPMEN | 1<<PGERS
                     OUT	SPMCR,R16
                     SPM
                     NOP	; 4 Cycle do nothing
                     NOP
                     NOP
                     NOP
                     ; Write 0xABCD at address : 0x01 into the Buffer
                     LDI	ZH,0
                     LDI	ZL,2
                     LDI	R16,0xAB
                     MOV	R0,R16
                     LDI	R16,0xCD
                     MOV	R1,R16
                     LDI	r16,1<<SPMEN
                     OUT	SPMCR,R16
                     SPM
                     NOP
                     NOP
                     NOP
                     NOP
                     ; Write Buffer To Page 1 (Address : 0x0080 - 0x00FF)
                     LDI	ZL,LOW(1<<7)
                     LDI	ZH,HIGH(1<<7)
                     LDI	r16,1<<SPMEN | 1<<PGWRT
                     OUT	SPMCR,R16
                     SPM
                     LOOP:
                     RJMP	LOOP
                    توضیحات بیشتر توی این pdf پایین هست.
                    www.atmel.com/images/doc1644.pdfصدردصد! این AVR بدبخت دربدر رو چه به این غلطا!
                    سایت های زیادی واسه این کار هست ، مثل :
                    http://wiki.osdev.org/Main_Page
                    http://www.osdever.net/
                    جامع و کامل و دقیق و خیلی قشنگ توضیح دادید . ازتون تشکر میکنم.
                    من قصد توهین به کسی رو ندارم و مطمئنا اساتید بزرگی توی این سایت هستند . ولی من با قطعیت میتونم بگم که شما از معدود افرادی هستید که واقعا به مسائل مربوط به پروسسور ها و میکروکنترلر ها و هرچیز مربوط بشون هست ،واقفید . به هیچ وجه قصد هیجگونه تملق رو ندارم، چون اینقدر این شرکت اون شرکت رفتم و با افراد مختلفی که حتی چندین سال تو این کار بودن صحبت کردم ، که تقریبا با چند جمله میتونم بفهمم طرف چیکارس . و خیلیا رو دیدم که حداکثر میتونند از چند تا لایبری استفاده کنند و کار خودشون رو پیش ببرند. که من مطمئنم شما از این دست افراد نیستید و کاملا به مسائل واقفید.
                    فقط یه سوال داشتم ازتون ، شما احیانا رشته تحصیلیتون کامپیوتر نبوده؟ فکر نمیکنم برق باشه چون فکر نمیکنم بچه های برق از این چیزا اطلاع داشته باشند و بیشتر با همون مقاومت و خازن سرو کار دارند .
                    راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                    کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                    نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                    http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                    انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                    دیدگاه


                      #11
                      پاسخ : AVR SIMPLE OS

                      خواهش میکنم ، شما لطف دارید :redface:
                      ولی این سایت استاد کاردرست کم نداره ، یکیش خودتون :biggrin:
                      من مهندسی کامپیوتر - سخت افزار میخونم. آره خوب ، بچه های برق بیشتر درگیر بحثای آنالوگند و پیچیدگی اون درسا به اندازه ای هست که وقت کار روی چیزای دیگه رو پیدا نکنند.

                      دیدگاه


                        #12
                        پاسخ : AVR SIMPLE OS

                        نوشته اصلی توسط RubeuS
                        من قصد توهین به کسی رو ندارم و مطمئنا اساتید بزرگی توی این سایت هستند . ولی من با قطعیت میتونم بگم که شما از معدود افرادی هستید که واقعا به مسائل مربوط به پروسسور ها و میکروکنترلر ها و هرچیز مربوط بشون هست ،واقفید . به هیچ وجه قصد هیجگونه تملق رو ندارم، چون اینقدر این شرکت اون شرکت رفتم و با افراد مختلفی که حتی چندین سال تو این کار بودن صحبت کردم ، که تقریبا با چند جمله میتونم بفهمم طرف چیکارس . و خیلیا رو دیدم که حداکثر میتونند از چند تا لایبری استفاده کنند و کار خودشون رو پیش ببرند. که من مطمئنم شما از این دست افراد نیستید و کاملا به مسائل واقفید.
                        فقط یه سوال داشتم ازتون ، شما احیانا رشته تحصیلیتون کامپیوتر نبوده؟ فکر نمیکنم برق باشه چون فکر نمیکنم بچه های برق از این چیزا اطلاع داشته باشند و بیشتر با همون مقاومت و خازن سرو کار دارند .
                        همه چیز کامپیوتر بر میگرده به برق. کامپیوتر یه قسمت کوچیک و تخصصی از برق هستش. این موضوع اینقده گسترده هستش که هر کدوم یه قسمتی رو واسه خودش انتخاب میکنه و سعی میکنه دیگه توی اون شاخه باشه. منم می تونم براتون برقی پیدا کنم که هیچی کامپیوتری تا حالا ندیدم تا بهش برسه. خوشبختانه در اکثر مواقع دیدم که برقی ها از کامپیوتری ها بالاتر بودن. یه کامپیوتری کم پیدا میشه که خوب از برق سر در بیاره ولی یه برقی خیلی خوب و زود میتونه خودشو به یه کامپیوتری برسونه. اگه اکثر بچه هایی که اینجا هستن و زیاد دنبال برنامه نویسی نیستن علتش اینه که براشون فعلا لازم نیست که اینا رو یاد بگیرن. ما چقد متخصص کامپیوتر داریم توی مملکت؟ هنوز یه سیستم عامل ملی نداریم. ولی شما می تونید در بیشتر مواقع برقی هایی و ببینید که خیلی راحت مثل یه کامپیوتری OSها رو دستکاری میکنن و ازش استفاده میکنن(توی شاخه خودشون هم که باید حماسه ها رو فقط تماشا کنید). خیلی از زنها و افرادی که الان می خوان مدرک بگیرن سعی میکنن اکثرشون مدرک کامپیوتر بگیرن ولی فکر نکنم شما کسی رو پیدا کنید که واسه همچین مقصودی بخواد مدرک برق بگیره(حداقل خیلی کمه).

                        دیدگاه

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