اطلاعیه

Collapse
No announcement yet.

ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

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

    ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

    سلام

    دو تا سوال داشتم :

    1 - چه ترفندهایی جهت کاهش حجم کدهای ذخیره شده در Data stack وجود داره ؟

    2 - چطوری میشه میزان حافظه Data stack رو زیاد کرد بدون اینکه با سایر نواحی مثل ریجسترهای I/O در حین اجرای برنامه تداخل پیدا نکنه ؟

    برای مثال داخل کدویژن درحالت اصلی میزان Data stack size رو 256 بایت داده که ممکنه در یک برنامه ای این میزان کم باشه .

    ممنون
    تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
    دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
    مقالات و فایل های آموزشی نرم افزار Labview
    حل مشکل درایور و راه اندازی FT232 های غیراورجینال

    #2
    پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

    سلام!!
    تا اونجا که من میدونم کد های موجود در Stack (پشته) رو نمیتونیم کاهش حجم بدیم. فقط میشه حجم فضای پشته رو افزایش داد.که همونظور که خودتون هم گفتین میشه مقدار فضای مناسب رو در همون قسمت از کدویژن تنظیم کرد و یا در سطح اسمبلی در اول برنامه مقدار رجیستر SP رو تنظیم کرد.
    در انتظار تو چشمم سپید گشت و غمی نیست
    اگر قبول تو افتد، فدای چشم سیاهت

    http://upload7.ir/images/83524254953910725183.gif

    دیدگاه


      #3
      پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

      نوشته اصلی توسط مسعود - الف
      سلام!!
      همونظور که خودتون هم گفتین میشه مقدار فضای مناسب رو در همون قسمت از کدویژن تنظیم کرد و یا در سطح اسمبلی در اول برنامه مقدار رجیستر SP رو تنظیم کرد.
      سلام

      درسته . ولی خوب من می خوام بدونم چطوری این مقدار رو تنظیم کنم (یا همون افزایش بدم) که با سایر نواحی دیگه در حین اجرا تداخل پیدا نکنه ؟
      تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
      دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
      مقالات و فایل های آموزشی نرم افزار Labview
      حل مشکل درایور و راه اندازی FT232 های غیراورجینال

      دیدگاه


        #4
        پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

        من کدویژن کار نمی کنم
        اما بسکام خیلی راحت میشه اینکار رو انجام داد.من معمولا یسری متغییر سراسری تعریف میکنم بعنوان temp
        و توی روتین ها از اونا استفاده میکنم. یه سری محاسن داره که خیلی بدرد میخوره
        stak کمتری نیاز داره . متغییرها در صورت نیاز تو روتین های بعدی به راحتی قابل دسترس هستند و ...
        و از همه مهمتر امکان استفاده از gosub
        موفق باشی
        هميشه به ياد خدا باش !

        دیدگاه


          #5
          پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

          فکر میکنم یه روش هم این باشه که شما برنامه تون رو تو AVR Studio شبیه سازی کنین و ماکسیمم مقدار stack رو تو اونجا ببینین !
          بعدش میتونین مقدار sram ی که به اون اختصاص میدین رو تنظیم کنین!
          در انتظار تو چشمم سپید گشت و غمی نیست
          اگر قبول تو افتد، فدای چشم سیاهت

          http://upload7.ir/images/83524254953910725183.gif

          دیدگاه


            #6
            پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

            نوشته اصلی توسط DDR3
            من کدویژن کار نمی کنم
            اما بسکام خیلی راحت میشه اینکار رو انجام داد.من معمولا یسری متغییر سراسری تعریف میکنم بعنوان temp
            و توی روتین ها از اونا استفاده میکنم. یه سری محاسن داره که خیلی بدرد میخوره
            stak کمتری نیاز داره . متغییرها در صورت نیاز تو روتین های بعدی به راحتی قابل دسترس هستند و ...
            و از همه مهمتر امکان استفاده از gosub
            موفق باشی
            ممنون

            یا یک کار دیگه ای که میشه کرد اینه که ثوابت رو داخل حافظه فلش ریخت که Sram بیخودی مشغول نشه .

            نوشته اصلی توسط مسعود - الف
            فکر میکنم یه روش هم این باشه که شما برنامه تون رو تو AVR Studio شبیه سازی کنین و ماکسیمم مقدار stack رو تو اونجا ببینین !
            بعدش میتونین مقدار sram ی که به اون اختصاص میدین رو تنظیم کنین!
            درسته . اما این کاری که می گید برای اینکه بفهمیم چقدر از Stack استفاده شده . من این رو می دونم . من می خوام بدونم شما چطوری مقدار Sram رو تغییر میدید که با سایر قسمت های دیگه تداخل ایجاد نمی کنه ؟
            تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
            دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
            مقالات و فایل های آموزشی نرم افزار Labview
            حل مشکل درایور و راه اندازی FT232 های غیراورجینال

            دیدگاه


              #7
              پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

              خب وقتی شما بدونین که مقدار مصرف ماکزیمم stack چقدره ، اونوقت به همون مقدار براش فضا تو sram در نظر میگیرید دیگه!!! :agree:
              در ضمن در مورد کامپایلر های دیگه این موضوع متفاوته که کدام قسمت از حافظه sram رو برای این کار در نظر بگیرن.
              اما به طور معمول انتهای حافظه رو به stack اختصاص میدن و شما با دونستن اینکه مقدار stack ماکزیمم چقدر میتونه باشه ، این حجم رو تنظیم میکنین.
              حالا 2 مورد پیش میاد:
              1- اگه در سطح اسمبلی برنامه مینویسید ، میتونین انتهای sram رو به stack اختصاص بدین که این کار رو رجیستر SP انجام میده.
              2- اگه high level برنامه مینویسید میتونین با مراجعه به فایل اسمبلی تولید شده کامپایلر ، این مقدار رو دستکاری کنین.
              با شبیه سازی با AVR studio میتونین حجم رو بدست آورده و بدون هیچ نگرانی از بابت تداخل حافظه ، مقدار stack رو تنطیم کنین.
              فکر میکنم منطورتون همین بود. (اگه درست متوجه شده باشم ! )
              در انتظار تو چشمم سپید گشت و غمی نیست
              اگر قبول تو افتد، فدای چشم سیاهت

              http://upload7.ir/images/83524254953910725183.gif

              دیدگاه


                #8
                پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

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

                دیدگاه


                  #9
                  پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

                  نوشته اصلی توسط امیر . م
                  شما اول باید ببینید چه نوع متغیرهایی تو Stack قرار میگیرن.
                  معمولا تو اکثر کامپایلرها متغیرهای Local یا همون متغیرهای محلی بیشترین حجم Stack رو اشغال میکنن. شما میتونید در صورتیکه برنامه به شما اجازه بده و همینطور در صورتیکه امکان اضافه کردن Stack برای شما وجود نداشته باشه بخشی از متغیرهای محلیتون رو (باز هم میگم در صورت امکان) Global یا سراسری کنید. راه بعدی اینه که متغیرهاتون رو (در صورت امکان) در صورتیکه از زبان C استفاده میکنید به صورت static تعریف کنید.
                  همونطور که داخل عنوان تاپیک هم گفتم بیشتر مشکل مربوط به DATA Stack هست که حجم کدهاش زیاده . حجم قسمت متغییرها زیاد نیست.
                  تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
                  دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
                  مقالات و فایل های آموزشی نرم افزار Labview
                  حل مشکل درایور و راه اندازی FT232 های غیراورجینال

                  دیدگاه


                    #10
                    پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

                    تو DataStack که کد قرار نمیگیره، متغیر قرار میگیره.

                    دیدگاه


                      #11
                      پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

                      نوشته اصلی توسط امیر . م
                      تو DataStack که کد قرار نمیگیره، متغیر قرار میگیره.
                      حرفتون درسته . من منظورم از کد / مجموعه متغییرها و مقادیر گذری و ریجسترهای R0 و ... هست . طبق ساختار زیر محل قرار گیری متغیرهای Global جدا از Data Stack هست :


                      الان مثلا یک مشکلی که جدیدا بهش برخورد کردم اینکه داخل یکی از توابع هدرهای برنامم / به علت فراخوانی زیاد / حجم زیادی از Data Stack رو اشغال کرده . به نظر شما اگه متغیرهای اون تابع رو Global کنم چقدر توی این موضوع تاثیر گذاره ؟
                      تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
                      دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
                      مقالات و فایل های آموزشی نرم افزار Labview
                      حل مشکل درایور و راه اندازی FT232 های غیراورجینال

                      دیدگاه


                        #12
                        پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

                        شما میتونید تعداد توابعی رو که توی هم فراخوانی میکنی رو کم کنی. مثلا اگر توابعی رو داری که حجم کد کمی رو میبره میتونی بصورت define تعریف کنی . ببین متغیرهای Formal یا همونایی که به تابع پاس داده میشن جایی نمیگیرن ، تو تا میتونی باید حجم متغیرهای محلی رو باید کم کنی. اگر برنامه رو بزاری بهتر میشه فهمید چه خبره!

                        دیدگاه


                          #13
                          پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

                          نوشته اصلی توسط امیر . م
                          شما میتونید تعداد توابعی رو که توی هم فراخوانی میکنی رو کم کنی. مثلا اگر توابعی رو داری که حجم کد کمی رو میبره میتونی بصورت define تعریف کنی . ببین متغیرهای Formal یا همونایی که به تابع پاس داده میشن جایی نمیگیرن ، تو تا میتونی باید حجم متغیرهای محلی رو باید کم کنی. اگر برنامه رو بزاری بهتر میشه فهمید چه خبره!
                          مشکل از برنامه نیست . مشکل از یکی از توابع هدر کتابخونه Glcd هست به نام enlarge . این تابع توی اکثر تابع های دیگه هدرش مورد استفاده قرار گرفته . تصویر زیر رو ببین چقدر از Data stack رو گرفته ! (دو قسمتی که دورشون خط کشیدم) :


                          یعنی در کل 150 بایت .
                          تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
                          دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
                          مقالات و فایل های آموزشی نرم افزار Labview
                          حل مشکل درایور و راه اندازی FT232 های غیراورجینال

                          دیدگاه


                            #14
                            پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

                            اگر میتونی کل سورس رو بزار یا ایمیل کن وگرنه حداقل سورس تابع enlarge رو بزار ببینیم چه میــــــــــــــکنه این تابع! :read:

                            دیدگاه


                              #15
                              پاسخ : ترفندهای کاهش حجم کدهای ذخیره شده در Data stack ؟

                              نوشته اصلی توسط امیر . م
                              اگر میتونی کل سورس رو بزار یا ایمیل کن وگرنه حداقل سورس تابع enlarge رو بزار ببینیم چه میــــــــــــــکنه این تابع! :read:
                              این کل هدر GLCD . تابع آخر داخل هدر رو به همراه یکسری تغییرات به کتابخونه اضافه کردم . البته مشکلات قبل از این اضافه کردن هم بود .

                              دانلود کن
                              تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
                              دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
                              مقالات و فایل های آموزشی نرم افزار Labview
                              حل مشکل درایور و راه اندازی FT232 های غیراورجینال

                              دیدگاه

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