اطلاعیه

Collapse
No announcement yet.

HW Stack & Data Stack (Soft Stack) on AVR

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

    HW Stack & Data Stack (Soft Stack) on AVR

    سلام
    به نظرم اومد برای دوستانی که از کامپایلر های CodeVision یا Bascom استفاده میکنند در مورد RAM و فضاهایی که کامپایلر برای اون در نظر میگیره و همچنین اهمیت تنظیم مقادیر Hw Stack و Soft Stack (Data Stack) کمی صحبت کنیم
    در نرم افزار CodeVision فضای RAM به 6 ناحیه تقسیم میشه
    1-32*8 Working register این رجیسترها همان R0, R1, R15, R22, R23, R24, R25, R26, R27, R28, R29, R30,R31 خودمونن،ممکنه از R2 تا R15 برای ذخیره متغییرهای بیتی محلی و عمومی استفاده بشه.
    از R16 تا R21 برای تعریف متغییرهای int و char محلی استفاده میشه
    2-I/O Registers که اعم از رجیستر های پورت سریال، تایمرها و غیره هستند
    3- Data Stack برای تعریف متغییر های محلی، ارسال پارامتر به توابع و ذخیره مقادیر R0, R1, R15, R22, R23, R24, R25, R26, R27, R28, R29, R30,R31 استفاده میشه
    4- Global Variables که برای تعریف متغییرهای سراسری و عمومی استفاده میشه
    5- Hardware Stack که برای ذخیره آدرس برگشت از توابع ( Return ) استفاده میشه
    6- Heap که برای تخصیص حافظه بوسیله توابع malloc,calloc,realloc و free استفاده میشه

    javascript:void(0);
    چند نکته تحربی :
    1- ترجیحا پارامترها رو از نوع اشاره گرها تعریف کنید تا در مصرف حافظه صرفه جویی کنید
    2- در صورت امکان از متغییرهای سراسری بجای متغییر های محلی استفاده کنید
    3- مقدار Hardware Stack رو متناسب با عمق فراخوانیها و Data Stack رو متناسب با جمع متغییرهای محلی در فراخوانیهای تو در تو تعریف کنید. عدم تعریف درست یکی از دو مقدار Harsware Stack یا Data Stack میتونه منجر به عدم کارکرد صحیح برنامه شما در بعضی قسمتها یا در تمامی موارد بشه.

    #2
    پاسخ : HW Stack & Data Stack (Soft Stack) on AVR

    بزودی مطالب دیگری هم از همین دست میذارم و سعی میکنم مشکلاتی که داشتم و تجربه شده رو هم تشریح کنم تا انشا ا.. به درد دوستان بخوره

    دیدگاه


      #3
      پاسخ : HW Stack & Data Stack (Soft Stack) on AVR

      ممنون از پست عالیتون ولی بازم در کل نفهمیدم
      مثلا الان من یه برنامه دارم که 45%فلشم رو اشغال کرده و داخلش 8 تا sub دارم و یه lcd گرافیکی و متغیر های بسیار و حالا دچار مشکل شدم و نمی دونم این hwstack swstack framesize رو رووی چند بزارم(من با بیسیک کار میکنم)

      اصلا این 3 چه نسبت هایی با هم دارن و چه نقشی دارن
      مثلا اگه یه ماژول داشته باشم که ارتباط سریال برقرار کرده باشم با هاش باید سخت افزاری رو اضافه کنم یا framesize رو؟و سقفشون چنده؟مثلا واسه اتمگا 64؟
      علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

      دیدگاه


        #4
        پاسخ : HW Stack & Data Stack (Soft Stack) on AVR

        سلام
        خوبی ؟ خوبم.
        ببین اگه برنامه ی خیلی سنگینی نداری
        Soft=32
        hard=32
        frame=64
        بزار اما اگه از چیزی مثل AVR-Dos و این جور چیز ها و یا لایبری ها استفاده میکنی
        Soft=64
        hard=64
        frame=128
        البته دقت کن که مقادیر بالا حافظه ی اس رم رو اشغال میکنه
        اگه دوست داشتی میتونی بالاترم ببری ولی اگه همه رو 256 کنی دیگه 100 مگا 2560 هم بزاری فکر کنم کفایت کنه
        بازم میگم ربط به حجم نداره بسته به پیچیدگی داره oo:
        الهم عجل لولیک الفرج

        فقط 313 نفر...

        دیدگاه


          #5
          پاسخ : HW Stack & Data Stack (Soft Stack) on AVR

          متاسفانه
          fat هم دارم
          glcd هم دارم
          اهنگ هم پخش میکنه
          با یه gps هم سرو کار داره
          dtmf هم داره
          تمامیه کارها رو هم رو مموری backup میگره

          من نمی دونم مشکل از کجاست نکته جالبش اینجاس که تازه متوجه شدم فایل های قبلی که تا چند روز پیش جواب میداد اونا هم به همین مشکل دوچار شدن در صورتی که تا 2 روز پیش بدون مشکل کار میکرد
          علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

          دیدگاه


            #6
            پاسخ : HW Stack & Data Stack (Soft Stack) on AVR

            خب فکر کنم خیلی ریختو پاش کردی :eek: :eek: :eek: :eek: :eek: :eek:اینو که میگم امتحان کن
            Soft=256
            Hard=256
            Frame=512
            البته اگه جاداری برو بالا ولی فکر نکنم بیشتر نیاز شه چون فریم ساز برای Sub و فراخونی و این جور چیزاس
            هارد و سافتم که معلومه
            تست کن ان شا ال.. جواب میگیری
            الهم عجل لولیک الفرج

            فقط 313 نفر...

            دیدگاه


              #7
              پاسخ : HW Stack & Data Stack (Soft Stack) on AVR

              نوشته اصلی توسط FAM
              خب فکر کنم خیلی ریختو پاش کردی :eek: :eek: :eek: :eek: :eek: :eek:اینو که میگم امتحان کن
              Soft=256
              Hard=256
              Frame=512
              البته اگه جاداری برو بالا ولی فکر نکنم بیشتر نیاز شه چون فریم ساز برای Sub و فراخونی و این جور چیزاس
              هارد و سافتم که معلومه
              تست کن ان شا ال.. جواب میگیری
              نه بابا ریخت و پاش کجا بود.جنبه نداره تو 6 تا sub ورجه وورجه کنه یعنی؟

              توپ بترکه تو یه sub دو تا هم call داشته باشم

              if هم خیلی نداره یه 80 یا 90 تایی :mrgreen:

              مرجعت کجا بوده من هر چی گشتم چیزی در موردش ندیدم :sad:


              تست کردم نشد حتی frame رو تا 920 هم بردم نشد
              من 2 تا مشکل دارم در حا حاضر 1.90% اوقات بعضی از متغیر ها خالی میان(که نباید اینجوری باشه)2.بعضی وقتا هم(10%) از sub به جایی که باید برگرده بر نمی گرده
              یعنی به انتهای sub که میرسه تر میزنه

              و در ضمن درست نمی دونم چه قدر باید واسه hwstack بزارم و چه قدر واسه swstack.ایا باید مقدار هر دو مساوی باشه؟یه مرجع ندارین بدین به من؟
              اخه من با usart کار می کنم یه mmc دارم glcd دارم pwm دارم.دو تا interrupt دارم و باقی هم ورودی و خروجی هستند :sad:

              دارم دیوونه میشم به خدا از دستش
              علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

              دیدگاه


                #8
                پاسخ : HW Stack & Data Stack (Soft Stack) on AVR

                hi every body

                how have you been guys?

                excuse me, I think I'm Iranian and my first language is persian :mrgreen:

                چرا pm خارجی میدید؟ من خارجی بلد نیستم oo:

                don't care about that

                در مورد sub ها یه سری توضیح توی help بیسکام هست

                you can check it and enjoy it

                for example you most to attention to byref and byval variables
                byref does not need more space for transferring
                but type of byval need more space

                because type of byval makes copy of that variable but in byref the address of that variable will be send

                anyway

                یه جا نوشته بود که توابع اعشاری و یه چیزای دیگه ساپورت نمیکنه مگه اینکه چند تا رجیستر همه کاره رو اضافه تر ذخیره کنید (نمیدونم از R10 تا r15 بود ... الان یادم نیست)

                بگرد شاید پیدا شد

                یه چیز اساسی تر:

                این استکها همه مربوط به ram هست چرا حرف از rom زدی؟

                استکهارو زیاد کن ... این همه کار رو با هم که شما گفتی یعنی اینکه داری از یه میکرو گردن کلفت استفاده میکنی mega64 یا mega128 یا something like that

                به هر حال یه جایی برای اینکار حتما میخوای

                یه چیزی:

                swstack حجم فضایی هست که بعنوان ورودی توابع دیده میشه ... یعنی اگه byref باشه چون فقط ادرس ارسال میشه پس حجم کمتری میبره (البته این تنها تفاوت این دو نوع نیست ولی بد نیست تا میشه byref باشه)

                hwstack هم همون استک خودمونه که توی معماری کامپیوتر خوندیم

                آدرس بازگشت از زیر برنامه... پس توابع رو تا حد امکان تو در تو نکن

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

                framesize هم برای متغییر محلیه

                :mrgreen: شب بخیر :mrgreen:
                به وبلاگم سر بزنید

                دیدگاه


                  #9
                  پاسخ : HW Stack & Data Stack (Soft Stack) on AVR

                  ممنون از این همه راهنماییت دوست خوبم
                  1.تمام متغیر هام سراسری هستند
                  2.گفتم نهایتا 6 تا call داشتم که اونم کردم 2 تا(ولی بازم همون مشکل رو دارم و وقتی از پورت سریال یه رشته 70 تایی رو میگیرم بعد از این که به چند تا رشته 16 تایی تبدیلش می کنم تا روی lcd نشونش بدم و بتونم باهاش بازی کنم وفقط قسمت اول خوب در میاد و باقیش خالیه
                  کد:
                  input rx_Data
                  input rx_Data2
                  Cls
                  Rec1 = Mid(rx_data , 2 , 16)
                  Rec2 = Mid(rx_data , 18 , 16)
                  Rec3 = Mid(rx_data , 34 , 16)
                  'Rec4 = Mid(rx_data , 61 , 20)
                  Rec4 = Mid(rx_data , 50 , 16)
                  Cls
                  Lcdat 1 , 1 , Rec1
                  Lcdat 2 , 1 , Rec2
                  Lcdat 3 , 1 , Rec3
                  Lcdat 4 , 1 , Rec4
                  Recx = " "
                  Recx = Right(rec1 , 2)
                  Wait 2
                  Rec11 = Mid(rx_data2 , 2 , 16)
                  Rec5 = Mid(rx_data2 , 18 , 16)
                  Rec3 = Mid(rx_data2 , 34 , 16)
                  Rec4 = Mid(rx_data2 , 50 , 16)
                  Lcdat 5 , 1 , Rec1
                  Lcdat 6 , 1 , Rec5
                  Lcdat 7 , 1 , Rec3
                  Lcdat 8 , 1 , Rec4
                  3.من کی گفتم rom که خودم یادم نیست؟

                  4.من اصلا دارم احساسات خرکی می کنم اخه حتی برنامه هایی که قبلا بدون هیچ مشکلی کار می کرد دقیقا همین بلا داره سرش میاد
                  علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

                  دیدگاه

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