اطلاعیه

Collapse
No announcement yet.

سوال در مورد stack pointer در bascom

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

    سوال در مورد stack pointer در bascom

    سلام خدمت دوستان گرامی
    چرا به Stack pointer در bascom عدد می دهند مگر خود کامپایلر محل پشته را تنظیم نمیکنه و ادرس Stack pointer را؟مقدار دهیش چطوریه؟ خودمون دستی بدیم چی میشه؟ :eek:
    این framesize چیه؟ مقداردهیش چطوریه؟به چه دردی می خوره؟ :read:

    hwstack = 32
    swstack = 10
    framesize = 40

    معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
    اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
    آموزش Modelsim

    #2
    پاسخ : سوال در مورد stack pointer در bascom

    برای مواقعی که حافظه و وقفه های بیشتری داری و پیش بینی می کنی که حافظه بیشتری لازم داری و یا برعکس
    مثلا در attiny 13 اگر اون مقادیر باشن عملا رم میکرو پر شده و حتما باید مقداری کمتر از اون مقدار در نظر بگیری


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

    دیدگاه


      #3
      پاسخ : سوال در مورد stack pointer در bascom

      نوشته اصلی توسط سعید باقرانی
      برای مواقعی که حافظه و وقفه های بیشتری داری و پیش بینی می کنی که حافظه بیشتری لازم داری و یا برعکس
      مثلا در attiny 13 اگر اون مقادیر باشن عملا رم میکرو پر شده و حتما باید مقداری کمتر از اون مقدار در نظر بگیری


      ممنون میشه بیش تر توضیح بدهید من در HELP این نرم افزار در بیشتر برنام ها این دستورات را می بینم اگه ننویسیم چی می شه ؟ در واقع دلیل اصلی نوشتنش چیه؟ :surprised:
      معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
      اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
      آموزش Modelsim

      دیدگاه


        #4
        پاسخ : سوال در مورد stack pointer در bascom

        سلام
        بعضی از مواقع می بینین که هنگام پرش به یه لیبل و اجرا کردن دستورات میکرو ریست می شه یا نهایتا بعضی از دستورات اجرا نمی شه و این بابت همین حافظه های مجازی یا افزایش آنها برای نگهداری حافظه هست.شاید دیده باشین گاهی وقت پرش به یه تابع مقدار آرگومان تابع داخل تابع مقدارشو از دست می ده یا از داخل این تابع نمی شه به توابع دیگر پرید و این بابت این هست که بخش حافظه stack کم در نظر گرفته شده است.این حافظه ها از انتهای حافظه SRAm شروع به پر کردن می کننه تا بع متغییرهای دیگه برنامه خللی وارد نشه.
        هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

        دیدگاه


          #5
          پاسخ : سوال در مورد stack pointer در bascom

          نوشته اصلی توسط baby_1
          سلام
          بعضی از مواقع می بینین که هنگام پرش به یه لیبل و اجرا کردن دستورات میکرو ریست می شه یا نهایتا بعضی از دستورات اجرا نمی شه و این بابت همین حافظه های مجازی یا افزایش آنها برای نگهداری حافظه هست.شاید دیده باشین گاهی وقت پرش به یه تابع مقدار آرگومان تابع داخل تابع مقدارشو از دست می ده یا از داخل این تابع نمی شه به توابع دیگر پرید و این بابت این هست که بخش حافظه stack کم در نظر گرفته شده است.این حافظه ها از انتهای حافظه SRAm شروع به پر کردن می کننه تا بع متغییرهای دیگه برنامه خللی وارد نشه.
          یعنی مثلا بعضی موقع ها در محل هایی که مخصوص پشته هست برنامه روی اون نوشته میشه وبرعکس وباعث می شه دیگه برنامه نتونه به پشته دست رسی داشته باشه
          یه همچین چیزی؟ :question: مگه خود کامپایلر وظیفه اش این نیست که پشته را در محل های خاص بزاره
          اون عددها که بهش نسبت می دیم چی آدرس هستنند
          framesize چی ؟ این برای چیه؟ :eek:
          معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
          اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
          آموزش Modelsim

          دیدگاه


            #6
            پاسخ : سوال در مورد stack pointer در bascom

            سلام
            این عکس رو اول ببینید


            این اعدادی که بهش می دیم یعنی از آخر حافظه چند بایت رو به خودش تخصیص می ده(مثلا اگر 32 بدین یعنی 32 بایت) یعنی اعداد بیانگر آدرس حافظه نیست بلکه مقدار حافظه مورد نیاز هست

            کامپایلر یه اعداد رو به صورت پیش فرض در نظر گرفته که به هر برنامه جدید اختصاص می دهد و فرقی براش نمی کنه شما 100 بایت می خواین بریزین داخل stack ponter یا 2 بایت جمعا فکر کنم 30 تا 35 بایت در نظر گرفته که اکثر جاها تو برنامه نویسی زیاد کم می یاد و کاربر فکر می کنن تراشه نویز گرفته که ریست می شه غافل از اینکه برنامشون اشتباست
            بسکام کامپیلر ویندوز نیست که به خوبی و با قدرت اونا عمل کنه و خودش تخصیص خودکار به هر برنامه بده پیش فرضای خودش رو اعمال می کنه


            framesize
            توابعی که با رشته ها کار می کنن مثل PRINT, LCD, INPUT
            از یک مکان حافظه SRAm استفاده می کنن که مقدار پیش فرض 24 بایت هست که اگر بیشتر استفاده دارین باید تغییر در مقدار این متغییر کنین

            هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

            دیدگاه


              #7
              پاسخ : پاسخ : سوال در مورد stack pointer در bascom

              نوشته اصلی توسط baby_1


              این اعدادی که بهش می دیم یعنی از آخر حافظه چند بایت رو به خودش تخصیص می ده(مثلا اگر 32 بدین یعنی 32 بایت) یعنی اعداد بیانگر آدرس حافظه نیست بلکه مقدار حافظه مورد نیاز هست

              کامپایلر یه اعداد رو به صورت پیش فرض در نظر گرفته که به هر برنامه جدید اختصاص می دهد و فرقی براش نمی کنه شما 100 بایت می خواین بریزین داخل stack ponter یا 2 بایت جمعا فکر کنم 30 تا 35 بایت در نظر گرفته که اکثر جاها تو برنامه نویسی زیاد کم می یاد و کاربر فکر می کنن تراشه نویز گرفته که ریست می شه غافل از اینکه برنامشون اشتباست
              بسکام کامپیلر ویندوز نیست که به خوبی و با قدرت اونا عمل کنه و خودش تخصیص خودکار به هر برنامه بده پیش فرضای خودش رو اعمال می کنه


              framesize
              توابعی که با رشته ها کار می کنن مثل PRINT, LCD, INPUT
              از یک مکان حافظه SRAm استفاده می کنن که مقدار پیش فرض 24 بایت هست که اگر بیشتر استفاده دارین باید تغییر در مقدار این متغییر کنین
              مرسی baby @};- @};- @};- @};- @};-
              فهمیدم قضیه از چه قراره تو کامپایلر کدویژن هم قضیه از همین قراره؟
              من اون جا ندیدم از این کارا بکنند؟
              معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
              اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
              آموزش Modelsim

              دیدگاه


                #8
                پاسخ : سوال در مورد stack pointer در bascom

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

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

                این تقسیم بندی شامل دو بخش عمده میشه :
                1. تقسیم بندی فضای فایل رجیستر (رجیستر های عمومی )
                2. تقسیم بندی حافظه داده داخلی SRAM
                3. تقسیم بندی حافظه داده خارجی (در صورت وجود)

                یه بخشی هم که دیگه هموراه ثابت هست و بین این دو قرار داره رجیستر های I/O هستند.

                دیدگاه


                  #9
                  پاسخ : سوال در مورد stack pointer در bascom

                  ممنون از دوستان
                  حالا یک مسئله ای برام پیش اومده چه مقداری برای اختصاص دادن به این حافظه برای stack pointer مناسب است ؟مقدار آن راچطور می توان محاسبه کرد ؟
                  مگه این فضا برای استفاده از این نیست که وقتی از یک لیبلی پرش کردیم دوباره بتونیم به محل مورد نظر برگردیم همون (push،pop ها ) یعنی این پرش ها هر چه زیادتر شوند نیاز به فضای بیشتری برای stack pointer داریم ؟
                  معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
                  اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
                  آموزش Modelsim

                  دیدگاه


                    #10
                    پاسخ : سوال در مورد stack pointer در bascom

                    سلام
                    وقتی از دستور Gosub استفاده می کنین دو بایت و در صورتی که از call , sub , function استفاده می شه فضای بیشتری از پشته گرفته می شه(و این به دلیل متغییر های محلی داخل تابع و ... هست) توضیحاتش خیلی زیاد هست اگر اجازه بدین امروز وقت شد براتون همیجا توضیح می دهم
                    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                    دیدگاه


                      #11
                      پاسخ : سوال در مورد stack pointer در bascom

                      نوشته اصلی توسط baby_1
                      سلام
                      وقتی از دستور Gosub استفاده می کنین دو بایت و در صورتی که از call , sub , function استفاده می شه فضای بیشتری از پشته گرفته می شه(و این به دلیل متغییر های محلی داخل تابع و ... هست) توضیحاتش خیلی زیاد هست اگر اجازه بدین امروز وقت شد براتون همیجا توضیح می دهم
                      خیلی ممنون منتظر راهنمایی های ارزنده شما خواهم بود
                      معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
                      اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
                      آموزش Modelsim

                      دیدگاه


                        #12
                        پاسخ : سوال در مورد stack pointer در bascom

                        نوشته اصلی توسط skiboys
                        حالا یک مسئله ای برام پیش اومده چه مقداری برای اختصاص دادن به این حافظه برای stack pointer مناسب است ؟مقدار آن راچطور می توان محاسبه کرد ؟
                        مگه این فضا برای استفاده از این نیست که وقتی از یک لیبلی پرش کردیم دوباره بتونیم به محل مورد نظر برگردیم همون (push،pop ها ) یعنی این پرش ها هر چه زیادتر شوند نیاز به فضای بیشتری برای stack pointer داریم ؟
                        ببینید الان اینجا دو تا مسئله وجود داره :
                        1. ذخیره آدرس برگشتی از توابع و وقفه ها
                        2. ذخیره مقدار متغیر های محلی ، آرگومان توابع و ذخیره برخی رجیستر ها که کامپایلر تو توابع با اونها کار میکنه که یکی از مهمترین اونها رجیستر وضعیت هست یعنی sreg و بقیه هم برخی از رجیستر های عمومی که حالا شماره هاشون از کامپایلر به کامپایلر میتونه متفاوت بشه (بهتره که با این رجیستر ها آشنا باشید چرا که اگه یه زمانی خواستید یه روتین critical time بنویسید مجبور بشید روتینتون رو برای ذخیره زمان به اسمبلی بنویسید).توجه کنید که این ذخیره سازی ها تنها نتیجه عمل پوش و یا ذخیره سازی غیر مستقیم و یا مستقیم در حافظه هست.

                        حالا برای این دو هر کامپایلری میاد یه بخشی از sram رو اختصاص میده به این ترتیب که مثلا تو کدویژن قسمت اول رو در بخشی از sram که نقطه شروع اون رو با رجیستر( sp ( stack pointer تعیین میکنه به نام استک سخت افزای و قسمت دوم رو در بخشی که نقطه شروع اون توسط رجیستر اشاره گر Y (توجه کنید هم رجیستر SP هم Y شانزده بیتی هستند چرا که قراره به آدرس حافظه SRAM که 16 بیتی هست اشاره کنه که پس از هر بار پرش مقدارشون یک واحد کاهش پیدا میکنه و به آدرس قبلی از حافظه اشاره میکنن یعنی از بالا به پایین پر میشن البته دسترسی به آدرس ها و مقادیر به صورت LIFO)به نام دیتا استک ذخیره میکنه .

                        خوب حالا میدونیم که چی کجا ذخیره میشه ، بنابراین برای محاسبه مقدار ناحیه اول یعنی استک سخت افزاری باید ببنید که حداکثر پرش در پرشتون چند تا هست بعد اون رو در 2 ضرب کنید مقدار بدست امده میشه اندازه استک سخت افزاری و اما برای محاسبه دیتا استک باید این مسئله رو بدونید که کامپایلر وقی که به یه تابع معمولی پرش میکنه چه رجیستر هایی رو پوش میکنه وقتی که به روتین وقفه پرش میکنه چه رجیسترهایی رو پوش میکنه وقتی که از روتین یه تابع یا یه وقفه به یه تابع دیگه پرش میکنه باز چه رجیسترهای اضافه دیگه رو پوش میکنه وقتی که به یه تابع پرش میکنه با چه رجیسترهایی کار میکنه و آیا با رجیستر هایی که در روال اصلی برنامه از اون ها استفاده میکنه آیا تداخل داره یا نه در این صورت شما میتونید با محاسبه بیشترین پوش در هر پرش پرش که لزوما نباید انتظار داشت که این حداکثر پوش در حداکثر پرش در پرش رخ بده بنابراین یه جورایی امکان محاسبه اون از روی کد سی امکان نداره و باید به خروجی اسمبلی کامپایلر مراجعه کنید و بعد مقدار حداکثر پرش در پرش رو از روی اون محاسبه کنید اما این کار هم زیاد به لحاظ زمانی به صرفه نیست به خاطر همین معمولا خود کامپایلر ها میان یه فایلی به نام MAP تولید میکنن که داخل اون میزان استفاده از دیتا استک در هر پرش یا پرش در پرش محاسبه شده که با توجه به ماکزیمم مقدار مصرف شده میتونبد به همون اندازه از فضای SRAM رو به دیتا استک اختصاص بدید . مثلا کدویژن بعد از کامپایل اگه دقت کرده باشید خودش تو گزارشی که میده مقدار حداکثر پوش و به عبارت بهتر میزان دیتا استک مورد نیاز رو تخمین میزنه که اگه از اونچه شما برای اون تعریف کردید بیشتر باشه با ارور مواجه خواهید شد .

                        دیدگاه


                          #13
                          پاسخ : سوال در مورد stack pointer در bascom

                          نوشته اصلی توسط mojtaba_led
                          ببینید الان اینجا دو تا مسئله وجود داره :
                          1. ذخیره آدرس برگشتی از توابع و وقفه ها
                          2. ذخیره مقدار متغیر های محلی ، آرگومان توابع و ذخیره برخی رجیستر ها که کامپایلر تو توابع با اونها کار میکنه که یکی از مهمترین اونها رجیستر وضعیت هست یعنی sreg و بقیه هم برخی از رجیستر های عمومی که حالا شماره هاشون از کامپایلر به کامپایلر میتونه متفاوت بشه (بهتره که با این رجیستر ها آشنا باشید چرا که اگه یه زمانی خواستید یه روتین critical time بنویسید مجبور بشید روتینتون رو برای ذخیره زمان به اسمبلی بنویسید).توجه کنید که این ذخیره سازی ها تنها نتیجه عمل پوش و یا ذخیره سازی غیر مستقیم و یا مستقیم در حافظه هست.

                          حالا برای این دو هر کامپایلری میاد یه بخشی از sram رو اختصاص میده به این ترتیب که مثلا تو کدویژن قسمت اول رو در بخشی از sram که نقطه شروع اون رو با رجیستر( sp ( stack pointer تعیین میکنه به نام استک سخت افزای و قسمت دوم رو در بخشی که نقطه شروع اون توسط رجیستر اشاره گر Y (توجه کنید هم رجیستر SP هم Y شانزده بیتی هستند چرا که قراره به آدرس حافظه SRAM که 16 بیتی هست اشاره کنه که پس از هر بار پرش مقدارشون یک واحد کاهش پیدا میکنه و به آدرس قبلی از حافظه اشاره میکنن یعنی از بالا به پایین پر میشن البته دسترسی به آدرس ها و مقادیر به صورت LIFO)به نام دیتا استک ذخیره میکنه .

                          خوب حالا میدونیم که چی کجا ذخیره میشه ، بنابراین برای محاسبه مقدار ناحیه اول یعنی استک سخت افزاری باید ببنید که حداکثر پرش در پرشتون چند تا هست بعد اون رو در 2 ضرب کنید مقدار بدست امده میشه اندازه استک سخت افزاری و اما برای محاسبه دیتا استک باید این مسئله رو بدونید که کامپایلر وقی که به یه تابع معمولی پرش میکنه چه رجیستر هایی رو پوش میکنه وقتی که به روتین وقفه پرش میکنه چه رجیسترهایی رو پوش میکنه وقتی که از روتین یه تابع یا یه وقفه به یه تابع دیگه پرش میکنه باز چه رجیسترهای اضافه دیگه رو پوش میکنه وقتی که به یه تابع پرش میکنه با چه رجیسترهایی کار میکنه و آیا با رجیستر هایی که در روال اصلی برنامه از اون ها استفاده میکنه آیا تداخل داره یا نه در این صورت شما میتونید با محاسبه بیشترین پوش در هر پرش پرش که لزوما نباید انتظار داشت که این حداکثر پوش در حداکثر پرش در پرش رخ بده بنابراین یه جورایی امکان محاسبه اون از روی کد سی امکان نداره و باید به خروجی اسمبلی کامپایلر مراجعه کنید و بعد مقدار حداکثر پرش در پرش رو از روی اون محاسبه کنید اما این کار هم زیاد به لحاظ زمانی به صرفه نیست به خاطر همین معمولا خود کامپایلر ها میان یه فایلی به نام MAP تولید میکنن که داخل اون میزان استفاده از دیتا استک در هر پرش یا پرش در پرش محاسبه شده که با توجه به ماکزیمم مقدار مصرف شده میتونبد به همون اندازه از فضای SRAM رو به دیتا استک اختصاص بدید . مثلا کدویژن بعد از کامپایل اگه دقت کرده باشید خودش تو گزارشی که میده مقدار حداکثر پوش و به عبارت بهتر میزان دیتا استک مورد نیاز رو تخمین میزنه که اگه از اونچه شما برای اون تعریف کردید بیشتر باشه با ارور مواجه خواهید شد .
                          ممنون از توضیحات کاملتان اقا مجتبی
                          حالا بهتره که خودمان دستی این مقدار حافظه را مشخص کنیم یا به عهده کامپایلر بگذاریم ؟ با این اوصاف فکر نکنم در برنامه های ساده نیاز به تغییر دادن آن باشه و هر چه که آرگومان ها و متغیر های ما و همچنین لیبل ها و در واقع پرش ها ما زیادتر میشه نیاز به فضای بیشتری داریم ؟ این طور که شما گفته اید حساب کردن این فضا خیلی دردسرداره
                          اگه بخواهید به صورت تجربی بگید چه مقدار را مناسب می دانید؟ :eek: :eek:
                          معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
                          اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
                          آموزش Modelsim

                          دیدگاه


                            #14
                            پاسخ : سوال در مورد stack pointer در bascom

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

                            خوب گذشته از این مطالب ، بستگی داره که با چه کامپایلری کار میکنید من که کلا برای بسکام روشی محاسباتی رو پیدا نکردم چون نه فایل map داره نه خروجی اسمبلی و تنها روشی هم برای تعیین اون نواحی استفاده میکردم این بود که برنامه رو اول کامپایل میکردم بعد میومدم میکرو رو پروگرام میکردم اگه بدون مشکل کار میکرد میومدم این نواحی رو کم میکردم و دوباره برنامه رو تو عمل تست میکردم و..و خلاصه اینقدر این کار رو میکردم که برسم به نقطه مطلوب البته این رو هم بگم از روی بیکاری هیچ وقت اینکار رو نکنید و اگه واقعا فضای sram تون برای متغیر های گلوبالتون میبنید کم هست و میشه با این کار اون رو افزایش همچین کاری بکنبد والا این کار هیچ معنی نمیده !
                            اما تو کدویژن ، خوب همونطور که گفتم کدویژن میاد یه گزارش میده من از همون برای تعیین اندازه دیتا استک استفاده میکنم ،اما در مورد استک سخت افزاری تو کدویژن نمیشه مستقیما اندازه این فضا رو مشخص کرد در واقع کاری که تو کدویژن انجام میشه تعیین ناحیه دیتا استک و متغیرهای گلوبال و یه ناحیه دیگه که مربوط میشه به متغیرهای داینامیک که چون به ندرت مورد استفاده قرار میگیرند معمولا مقدارش رو صفر میزاریم که حالا کسر تمامی این نواحی و فایل رجیستر عمومی و رجیستر های i/o از کل اندازه حافظه sram میشه اندازه ناحیه استک سخت افزاری.
                            اگه با کامپایلر های دیگه کار میکنید بگید تا در موردش توضیح بدم .

                            دیدگاه


                              #15
                              پاسخ : سوال در مورد stack pointer در bascom

                              ممنون اقا مجتبی به خاطر توضیحات کامل وجامعتون حالا که زحمت کشیدید یه توضیحی از مدیریت حافظه در کامبایلرهای دیکه مثل IAR,WINAVR,AVRSTUDIOبدهید که عالی میشه
                              فکرکنم IARاز همه بیشرفته ترباشه وهوشمندتر عمل کنه
                              مثل همیشه منتظر راهنمایی های ارزنده شما هستیم
                              معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
                              اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
                              آموزش Modelsim

                              دیدگاه

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