اطلاعیه

Collapse
No announcement yet.

هنگ کردن برنامه در اثر کبمود RAM

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

    هنگ کردن برنامه در اثر کبمود RAM

    سلام به همه دوستان:

    پروژه ایی که دارم انجام میدم شامل یک انکودر Jpeg هست. کد اولیه به صورت کامل در GCC(در داخل کامپیوتر) کامپایل و تست شده و خروجی های مورد نظر تولید شده. حالا میخوام کد رو روی برد بریزم. من از برد FRDM-KL46Z استفاده میکنم که 256 کیلو بایت فلش و 32 کیلوبایت رم داره. کامپایلری هم که دارم KEIL آخرین ورژن هست. کاری که دارم انجام میدم این هست که یک عکس حدودا 4 کیلوبایتی رو باید به jpeg تبدیل کنم. از اونجا که توابعی که استفاده کردم حافظه زیادی داخل رم اشغال میکنند و مدام call میشن, مجبور شدم stack و HEAP رو افزایش بدم و در حال حاظر به جایی رسیدم که حتی از 1 بایت دیگه هم نمیتونم داخل RAM استفاده کنم( ارور کیل هنگامی که از مقدار قابل دسترس رم عبور کنم):
    کد:
    .\Objects\Test.axf: Error: L6220E: Execution region RW_IRAM1 size (32772 bytes) exceeds limit (32768 bytes). Region contains 5 bytes of padding and 0 bytes of veneers (total 5 bytes of linker generated content).
    میخواستم بدونم آیا هیچ راهی هست که بتونم بدون تغییر پروسسور کد رو اجرا کنم؟؟ توی شبیه سازی میشه با تغییر مقدار IRAM کد رو اجرا کرد ولی خوب واضح هست که وقتی کد رو میخوام روی پروسسور اجرا کنم هنگ میکنه!
    این هم خروجی KEIL از پروژه(فایل .map):
    کد:
    ==============================================================================
    
    
       Code (inc. data)  RO Data  RW Data  ZI Data   Debug  
    
       17984    996    300   15504   15544   45256  Grand Totals
       17984    996    300   12624   15544   45256  ELF Image Totals (compressed)
       17984    996    300   12624     0     0  ROM Totals
    
    ==============================================================================
    
      Total RO Size (Code + RO Data)        18284 ( 17.86kB)
      Total RW Size (RW Data + ZI Data)       31048 ( 30.32kB)
      Total ROM Size (Code + RO Data + RW Data)   30908 ( 30.18kB)
    
    ==============================================================================

    #2
    پاسخ : هنگ کردن برنامه در اثر کبمود RAM

    کدت رو بهینه کن

    دیدگاه


      #3
      پاسخ : هنگ کردن برنامه در اثر کبمود RAM

      نوشته اصلی توسط gbg
      کدت رو بهینه کن
      ممنون! خیلی روش کار کردم و سعی کردم بهینه ترش کنم فعلا که کاری نتونستم از پیش ببرم. فقط حدود 5-6 کیلو بایت کم دارم. :angry: :angry: :angry: :angry:

      دیدگاه


        #4
        پاسخ : هنگ کردن برنامه در اثر کبمود RAM

        نوشته اصلی توسط mohammadh1387
        سلام به همه دوستان:

        پروژه ایی که دارم انجام میدم شامل یک انکودر Jpeg هست. کد اولیه به صورت کامل در GCC(در داخل کامپیوتر) کامپایل و تست شده و خروجی های مورد نظر تولید شده. حالا میخوام کد رو روی برد بریزم. من از برد FRDM-KL46Z استفاده میکنم که 256 کیلو بایت فلش و 32 کیلوبایت رم داره. کامپایلری هم که دارم KEIL آخرین ورژن هست. کاری که دارم انجام میدم این هست که یک عکس حدودا 4 کیلوبایتی رو باید به jpeg تبدیل کنم. از اونجا که توابعی که استفاده کردم حافظه زیادی داخل رم اشغال میکنند و مدام call میشن, مجبور شدم stack و HEAP رو افزایش بدم و در حال حاظر به جایی رسیدم که حتی از 1 بایت دیگه هم نمیتونم داخل RAM استفاده کنم( ارور کیل هنگامی که از مقدار قابل دسترس رم عبور کنم):
        کد:
        .\Objects\Test.axf: Error: L6220E: Execution region RW_IRAM1 size (32772 bytes) exceeds limit (32768 bytes). Region contains 5 bytes of padding and 0 bytes of veneers (total 5 bytes of linker generated content).
        میخواستم بدونم آیا هیچ راهی هست که بتونم بدون تغییر پروسسور کد رو اجرا کنم؟؟ توی شبیه سازی میشه با تغییر مقدار IRAM کد رو اجرا کرد ولی خوب واضح هست که وقتی کد رو میخوام روی پروسسور اجرا کنم هنگ میکنه!
        این هم خروجی KEIL از پروژه(فایل .map):
        کد:
        ==============================================================================
        
        
           Code (inc. data)  RO Data  RW Data  ZI Data   Debug  
        
           17984    996    300   15504   15544   45256  Grand Totals
           17984    996    300   12624   15544   45256  ELF Image Totals (compressed)
           17984    996    300   12624     0     0  ROM Totals
        
        ==============================================================================
        
          Total RO Size (Code + RO Data)        18284 ( 17.86kB)
          Total RW Size (RW Data + ZI Data)       31048 ( 30.32kB)
          Total ROM Size (Code + RO Data + RW Data)   30908 ( 30.18kB)
        
        ==============================================================================
        سلام
        مهندس نمیدونم این چیزی که میگم به کارت میاد ی انه اما میگم
        شما بیا حافظه ای رو که متغیرات داخل برنامه هست رو به صورت پویا تعریف کن و بعد از انجام کار ازادشون کن
        اون متغیرهایی رو که میتونی این کارو باهاشون انجام بدی. یجوری متغیراتو دینامیک کن
        میتونی همچین کارایی رو داخل توابعت انجام بدی؟ :question:
        در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

        دیدگاه


          #5
          پاسخ : هنگ کردن برنامه در اثر کبمود RAM

          با سلام
          دوستان راه های خوبی گفتن،
          به نظرم کد باید بهینه شه بعدش اگه نشد میکرو رو ارتقا بدین.
          چند تا نکته به ذهنم رسید.
          اگه ارایه ای چیزی دارین که ثابته میشه const تعریف کرد تا به جای رم بره تو رام.
          اگه متغیرهایی میشه محلی باشن، از حالت گلوبال خارج کنین.
          طول متغیر به اندازه نیاز باشه، 16 بیت مثلا برای چیزی که 8 بیت کافیشه خب اضافست دیگه.
          اگه دارین فلگ چک می کنین برای هر کدوم یک متغیر تعریف نکنین مثلا با استفاده از bitmask یه 16 بیتی رو به عنوان 16 فلگ استفاده کنین.
          حالا که heap زیاده همون که دوستمون گفتن از متغیر های دینامیک استفاده کنیدو فضا رو ازاد کنید.
          امیدوارم مفید بوده باشه.
          The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

          دیدگاه


            #6
            پاسخ : هنگ کردن برنامه در اثر کبمود RAM

            اگر هم از متغییرهای دینامیک استفاده نمی کنی هیپ رو کوچیک کن ، در ضمن مموری کارت از هیپ استفاده میکنه

            دیدگاه


              #7
              پاسخ : هنگ کردن برنامه در اثر کبمود RAM

              ممنون از همه دوستان

              یادم رفت بگم که من سایز HEAP رو صفر قرار دادم و مجبور شدم STACK رو تا 0x7B5 افزایش دادم :angry: :angry: :angry:
              متاسفانه چند تا متغییر دارم که long باید تعریف بشن و هیچ راهی هم ندارم. فکر کنم تنها راه باقی مونده همون برد جدید باشه :(

              دیدگاه


                #8
                پاسخ : هنگ کردن برنامه در اثر کبمود RAM

                میکروت چیه؟
                x256

                دیدگاه


                  #9
                  پاسخ : هنگ کردن برنامه در اثر کبمود RAM

                  به این میگن میکرو، ادم دوست داره غیر بهینه بنویسه اصلا(lpc1788)
                  کد:
                  ==============================================================================
                  
                    Total RO Size (Code + RO Data)        214148 ( 209.13kB)
                    Total RW Size (RW Data + ZI Data)     12885312 (12583.31kB)
                    Total ROM Size (Code + RO Data + RW Data)   226872 ( 221.55kB)
                  
                  ==============================================================================
                  The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

                  دیدگاه


                    #10
                    پاسخ : هنگ کردن برنامه در اثر کبمود RAM

                    من از MKL46Z256VLL4MCU استفاده میکنم. در اصل از برد زیر: إ¾ٖhttp://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-KL46Z

                    دیدگاه


                      #11
                      پاسخ : هنگ کردن برنامه در اثر کبمود RAM

                      سلام به همه دوستان


                      من platform رو از CortexM0+ به CortexM4 تغییر دادم و برای اینکه توی کد زیاد دستکاری نکنم از همون سری بردهای FRDM استفاده کردم. این دفعه از برد K64F استفاده کردم که 1MB فلش و 256KB رم داره


                      واقعا برد قویی هست. من همون کد Jpeg Encoder رو با همون کامپایلر قبلی کامپایل کردم و با کمال تعجب دیدم حافظه رم کمتری اشغال کرد :eek:
                      کد:
                      ==============================================================================
                      
                        Total RO Size (Code + RO Data)        11508 ( 11.24kB)
                        Total RW Size (RW Data + ZI Data)       46848 ( 45.75kB)
                        Total ROM Size (Code + RO Data + RW Data)   24144 ( 23.58kB)
                      
                      ==============================================================================
                      و خدا رو شکر کد به راحتی کامپایل و ران شد. واقعا موندم چرا این همه تغییر توی سایز کد ایجاد شد! کسی نظری نداره؟؟؟

                      دیدگاه

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