اطلاعیه

Collapse
No announcement yet.

مشکل پر شدن رم در ATMEGA128

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

    مشکل پر شدن رم در ATMEGA128

    سلام دوستان حافظه ی رم پر شده جا نیس دیگه Data stack size رو هم زیاد میکنم جواب نمیده 2000 بود کردم 2500 باز همون خطلا رو میده میشه راهنمایی کنید.ممنون


    #2
    پاسخ : مشکل پر شدن رم در ATMEGA128

    این
    Data stack size که هست مقداری از حافظه ی رم رو اشغال میکنه تا اطلاعاتی که از ورودی میکرو میخونه اونجا ذخیره کنه تا نسبت حجم اطلاعات با سرعت خواندن اطلاعات یکی باشه !! همچین چیزی فهمیدم!
    این خطایی هم که داده واسه گلوبال رم ، واسه رم میکرو که حجم متغیر ها از رم موجود زیاده است ( من نباید
    Data stack size رو زیاد میکردم چون حافظه ی بیشتری رو از رم میگیره )
    حالا یا باید متغییر هامو ببرم حافظه ی فلش اون موقع نمیدونم چه محدودیت هایی خواهم داشت چوت از توابع زیادی استفاده کرم.<<< راهنمایی کنید>>>>
    یا اینکه میکرو atmega2561 بزارم که رمش 8 کیلو بایته یعنی دو برابر atmega128.

    دلیل: ادغام دو پست برای جلوگیری از اسپم

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

    دیدگاه


      #3
      پاسخ : مشکل پر شدن رم در ATMEGA128

      سلام. حافظه Data Stack برای متغیرهایی هست که توی توابع تعریف شده است. در واقع متغیرهای محلی که در زمان فراخوانی تابع حافطه می گیرند و بعد از پایان تابع حافظه اشغالی آزاد می شود. چیزی که من می بینم حدود 13 درصد رم کم آوردید. این مقدار زیادی نیست. دیگه به هنر برنامه نویسی تون برمیگرده که بتونید بهینه تر از متغیرها استفاده کنید و مثلا برای متغیری که حافظه CHAR کفایت می کند بیخودی حافظه INT تعریف نشود . یا ظرایب ثابت را به جای تعریف در رم به صورت ثابت تعریف کنید تا در حافظه فلش ذخیره شوند.
      توجه داشته باشید که شما نمی تونید متغیری را که قراره در طی برنامه مقدارش عوض بشه را توی فلش تعریف کنید، فقط ضرایب ثابت را فلش تعریف کنید. اگر هم تمایل داشتید سورس را بگزارید شاید بشه پیشنهاداتی داد تا بدون تغییر سخت افزار با بهینه سازی کد مشکل کمبود رم را حل کرد.
      بانک اطلاعاتی مسابقات رباتیک ایران
      http://robocenter.ir/Match/DefaultMatch.aspx
      آموزش جامع ساخت ربات به زبان فارسی در 110 صفحه
      http://www.4shared.com/document/u_72uaga/Robotic_Mechatronic.html

      دیدگاه


        #4
        پاسخ : مشکل پر شدن رم در ATMEGA128

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

        دیدگاه


          #5
          پاسخ : مشکل پر شدن رم در ATMEGA128

          سازمان*دهی حافظه در AVR:
          به طور کلی حافظه ها به دوسته ی ROM و RAM تقسیم می شوند. ROM حافظه های فقط خواندنی هستند که با قطع برق داده های ذخیره شده در آن ها پاک نمی شوند. RAM حافظه های با دسترسی تصادفی هستند که برای ذخیره ی موقت داده ها به کارگرفته می شوند. میکروکنترلرهای AVR هر دو نوع حافظه ی RAM و ROMM را در خود دارند که همانطور که به صورت زیر شرح داده شده است، کاربردهای خاص و معین خود را دارند:
          حافظه های ROM:
          در میکروکنترلرهای AVR دو حافظه ی ROM برای ذخیره سازی کد و همچنین ذخیره سازی داده وجود دارند که به ترتیب از نوع FLASH و EEPROM هستند. در ادامه این دو حافظه شرح داده خواهند شد.
          حافظه ی کد یا برنامه (FLASH):
          همان طور که گفته شد یکی از حافظه های موجود در AVR حافظه ی است که از نوع FLASH می باشد و مخصوص ذخیره سازی برنامه می باشد. به همین دلیل است که به آن حافظه ی برنامه یا حافظه ی کد می گویند. AVR می تواند تا ۸ مگابایت حافظه برای برنامه داشته باشد چون شمارنده ی برنامه ی آن حداکثر ۲۲ بیت پهنا دارد (محدوده ی آدرس ۰۰۰۰۰۰ تا ۳FFFFFH) ولی در همه ی تراشه های آن این مقدار تعبیه نمی شود. به طوری که با توجه به این که تراشه از چه نوعی باشد می تواند از ۱ کیلوبایت تا ۲۵۶ کیلوبایت تغییر کند. پس اولین خانه ی ROM برنامه AVR دارای آدرس ۰۰۰۰۰۰ بوده و آخرین خانه ی آن بسته به اندازه ی ROM موجود در تراشه متفاوت است. یکی از مزیت های AVR در این است که نوع حافظه ی برنامه ی آن از نوع فلش یا آنی است و خیلی سریع در طول چند ثانیه قابل پاک شدن است و می تواند تا ۱۰۰۰۰۰ مرتبه پروگرام یا پاک شود. طول هر خانه ی حافظه کد یک کلمه (دو بایت) می باشد. پس به عنوان مثال در تراشه ی ATmega8 که دارای ۸ کیلوبایت ROM داخلی برنامه است، این حافظه به صورت ۴Kx2Bytes سازماندهی شده و آدرس ۰۰۰۰۰ تا ۰۰FFF$ را به خود اختصاص داده است.
          حافظه ی داده EEPROM:
          در AVR یک حافظه ی EEPROM وجود دارد که برای ذخیره سازی داده به کار می رود که به همین دلیل به آن حافظه ی داده نیز می گویند. حافظه ی EEPROM با قطع برق داده هایش پاک نمی شود به همین دلیل برای ذخیرهی داده هایی به کار می رود که تغییر نمی کنند و یا به ندرت تغییر می کنند. همچنین اطلاعاتی که نباید هنگام خاموش شدن میکروکنترلر پاک شوند در این حافظه ذخیره می گردند. در مورد نحوه ی ذخیره سازی داده ها در EEPROM و همچنین دسترسی به آن ها در مطالب آتی بحث خواهد شد.
          حافظه ی RAM:
          حافظه ی RAM در میکروکنترلر AVR داده هایی را ذخیره می کند که به طور موقت مورد نیاز هستند چون حافظه ی RAM با قطع شدن برق تمامی داده هایش را از دست می دهد. میکروکنترلر AVR می تواند تا ۶۴۴ کیلوبایت فضای RAM داشته باشد ولی این مقدار RAM بر روی تمام تراشه های AVR موجود نیست. فضای رم در AVR به سه قسمت تقسیم می شود: ثبات های همه منظوره، حافظه I/O و SRAM داخلی.

          ثبات های همه منظوره (General purpose registers):
          میکروکنترلرهای AVR از ثبات های زیادی جهت ذخیره سازی موقت داده ها برای انجام محاسبات ریاضی و منطقی استفاده می کنند. در AVR تعداد ۳۲ ثبات همه منظوره وجود دارد که R0 تا R311 نام دارند. این ثبات ها پایین ترین مکان حافظه را به خود اختصاص داده اند (بدون توجه به نوع تراشه ی AVR از خانه ی ۰۰$ تا ۱F$). طول تمام این ثبات ها ۸ بیت است.
          ثبات های I/O یا Special Function Registers:
          مقدار استاندارد حافظه ی I/O در میکروکنترلرهای AVR تعداد ۶۴ بایت می باشد. بدین معنا که تمام تراشه های AVR حداقل ۶۴ بایت فضای حافظه ی I/O دارند. این حافظه برای کارهای خاص از جمله: تایمرها، ارتباط های میکرو، پورتهای ورودی و خروجی، ثبات وضعیت و … به کار می رود. لازم به ذکر است که این حافظه از ثبات های ۸ بیتی تشکیل شده است.
          SRAM داخلی:
          فضای SRAM داخلی برای ذخیره ی موقت داده هایی به کار می رود که توسط AVR و کامپایلر مورد استفاده قرار می گیرند. به این حافظه، حافظه ی موقت نیز می گویند. یکی از کاربردهای SRAM ذخیره ی موقت داده هایی است که از طریق پورت های ورودی و سریال به CPU آورده شده اند. طول خانه های این حافظه ۸ بیت است. اندازه ی این حافظه بسته به نوع تراشه متفاوت است

          دیدگاه

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