اطلاعیه

Collapse
No announcement yet.

آیا برنامه ام بدون تعریف حافظه پشته به مشکل بر میخوره؟

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

    آیا برنامه ام بدون تعریف حافظه پشته به مشکل بر میخوره؟

    سلام. من یه برنامه برای یه دستگاه نوشتم و میکروکنترلر هم مگا8 هست. من از تمام حافظه SRAM برای تعریف متغیر ها استفاده کردم و دیگه حتی یه بایت خالی هم نداره. از اونجایی که میگن تعریف پشته های نرم افزاری و سخت افزاری و فریم سایز لازمه و من اصلا نمیتونم تعریف کنم (چون این حافظه ها از اس رم تامین میشن) میخواستم کسایی که تجربه دارن سوال کنم برنامه ام تو طولانی مدت به مشکل بر میخوره یا نه؟
    البته الان یکی دو روزه خیلی خوب داره کار میکنه اما میترسم تو شرایطی هنگ کنه و....
    ممنون

    #2
    پاسخ : آیا برنامه ام بدون تعریف حافظه پشته به مشکل بر میخوره؟

    با چی برنامه مینویسی؟
    اگه زیر برنامه تو برنامت زیاده و return و این حرفا پشته و فریم سایز و اینا رو براش بنویس ولی ربطی به هنگ کردن نداره
    من بیشتر اوقات بدون تعریف این موارد برنامه مینویسیم البته کار رو باید اصولی انجام داد ولی من که تاحالا متوجه نشدم چطوری باید تعریفشون کنی منظورم مقدارشون هست. ولی معمولا هرموقع بزنم 128 میزنم
    اللهم عجل لولیک الفرج
    تعجیل در فرج آقا امام زمان(روحی و ارواح العالمین لتراب مقدم الفداه) صلوات

    دیدگاه


      #3
      پاسخ : آیا برنامه ام بدون تعریف حافظه پشته به مشکل بر میخوره؟

      راستی یه سوال یعنی شما وقتی میخوای فایل هگز رو تولید کنی چند درصد از حافظه رو برات نشون میده یعنی 100 درصدش رو پر گردی
      من خیلی با مگا کار کردم معمولا مقدار برنامت که از 70 درصد میزنه بالا احتمال هنگ میکرو خیلی زیاد میشه علی الخصوص اینکه ما همه با نرم افزار های قفل شکسته برنامه نویسی می کنیم و همشون باگ نرم افزاری دارد. معمولا یه 30 درصدی رو خالی بزار برای همون پشته و این حرفا که اگه تعریف هم نکردی خودشون فکر کنم یه پیشفرضی میگیرن
      اگه طول برنامت خیلی هست از یه میکرو با حافظه بیشتر استفاده کن که تو دردسر نیوفتی یا اینکه تو بنرامت قسمت های تکراری رو به شکل تابع بنویس
      موفق باشید
      اللهم عجل لولیک الفرج
      تعجیل در فرج آقا امام زمان(روحی و ارواح العالمین لتراب مقدم الفداه) صلوات

      دیدگاه


        #4
        پاسخ : آیا برنامه ام بدون تعریف حافظه پشته به مشکل بر میخوره؟

        نوشته اصلی توسط ali-1992
        با چی برنامه مینویسی؟
        اگه زیر برنامه تو برنامت زیاده و return و این حرفا پشته و فریم سایز و اینا رو براش بنویس ولی ربطی به هنگ کردن نداره
        من بیشتر اوقات بدون تعریف این موارد برنامه مینویسیم البته کار رو باید اصولی انجام داد ولی من که تاحالا متوجه نشدم چطوری باید تعریفشون کنی منظورم مقدارشون هست. ولی معمولا هرموقع بزنم 128 میزنم
        با bascom
        اگه ربطی به هنگ نداره پس چه اتفاقی ممکنه برای برنامه رخ بده؟
        تو خود برنامه و از منوی option در سربرگ compiler و در برگه chip به صورت پیشفرض یه مقادیری نوشته که اگه ننویسیم اونها انتخاب میشه

        نوشته اصلی توسط ali-1992
        راستی یه سوال یعنی شما وقتی میخوای فایل هگز رو تولید کنی چند درصد از حافظه رو برات نشون میده یعنی 100 درصدش رو پر گردی
        من خیلی با مگا کار کردم معمولا مقدار برنامت که از 70 درصد میزنه بالا احتمال هنگ میکرو خیلی زیاد میشه علی الخصوص اینکه ما همه با نرم افزار های قفل شکسته برنامه نویسی می کنیم و همشون باگ نرم افزاری دارد. معمولا یه 30 درصدی رو خالی بزار برای همون پشته و این حرفا که اگه تعریف هم نکردی خودشون فکر کنم یه پیشفرضی میگیرن
        اگه طول برنامت خیلی هست از یه میکرو با حافظه بیشتر استفاده کن که تو دردسر نیوفتی یا اینکه تو بنرامت قسمت های تکراری رو به شکل تابع بنویس
        موفق باشید
        حدودا 98 درصد پر شده. نمیتونم میکرو را عوض کنم. آخه مجبور باشیم حداقل 30% میکرو رو خالی بزاریم که اصلا اصولی نیست

        دیدگاه


          #5
          پاسخ : آیا برنامه ام بدون تعریف حافظه پشته به مشکل بر میخوره؟

          مجبور نیستی برادر میتونی 100 درصد هم استفاده کنی
          اینی که بهت گفتم 70 درصد تجربه چندین ساله بنده هست و همیشه سعی میکنم اینطوری از میکرو ها استفاده کنم
          ولی گفتم کارشون اینه که یه فضایی از sram میکرو رو (همونقدر که جلوی هرکدومشون هست) واسه عملیات غیر برنامه اصلی استفاده میکنه (مثل زیر برنامه ها، پرش به بخش های مختلف برنامه و غیره). خوب شما اگه 98 درصد فول میکنی این بیچاره ها سردر گم میشن
          با این اوصاف تنها راهی که داری کم کردن حجم برنامه هست قسمت های تکراری رو تو پایان برنامت بشکل تابع بنوبیس و بهشون پرش کن (gosub-return) به جای شرط های زیاد از select case استفاده کن
          اللهم عجل لولیک الفرج
          تعجیل در فرج آقا امام زمان(روحی و ارواح العالمین لتراب مقدم الفداه) صلوات

          دیدگاه


            #6
            پاسخ : آیا برنامه ام بدون تعریف حافظه پشته به مشکل بر میخوره؟

            نوشته اصلی توسط ali-1992
            ....
            با این اوصاف تنها راهی که داری کم کردن حجم برنامه هست قسمت های تکراری رو تو پایان برنامت بشکل تابع بنوبیس و بهشون پرش کن (gosub-return) به جای شرط های زیاد از select case استفاده کن
            یعنی کم کردن حجم برنامه عدم داشتن حافظه پشته را جبران میکنه؟ فکر نکنم اینها به هم مربوط بشن. البته من تجربه ای ندارم

            دیدگاه


              #7
              پاسخ : آیا برنامه ام بدون تعریف حافظه پشته به مشکل بر میخوره؟

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

              دیدگاه


                #8
                پاسخ : آیا برنامه ام بدون تعریف حافظه پشته به مشکل بر میخوره؟

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

                دیدگاه


                  #9
                  پاسخ : آیا برنامه ام بدون تعریف حافظه پشته به مشکل بر میخوره؟

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

                  دیدگاه

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