اطلاعیه

Collapse
No announcement yet.

تعریف کردن متغیر رشته ای

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

    تعریف کردن متغیر رشته ای

    با سلام.
    من میخواستم برای مگا 8 دو تا متغیر رشته ای با مقدار 512 بایت تعریف کنم. اما گیر میده و میگه فضای SRAM کافی نیست.
    مگه 1024 بایت فضای SRAM نداره؟؟؟
    هر دوتاشو 500 تایی گذاشتم و دوباره گیر داد؟
    با مگا 88 هم همینطوره و 16 و 162 هم همین ارور رو میده.
    آیا دلیل خاصی داره؟
    میدونم با 32 میشه اما گزینه آخر هستش و در صورت نشدن با 8 یا 16 میرم سراغش

    با تشکر
    نيست بر لوح دلم جز الف قامت دوست *** چه کنم حرف دگر ياد نداد استادم

    #2
    پاسخ : تعریف کردن متغیر رشته ای

    فضای داخلی یک اتومبیل مثل پیکان ممکنه به اندازه 7 نفر (از لحاظ حجمی) جا داشته باشه اما معمولا 5 نفر بیشتر توش جا نمیشه. چون هر فردی که توی اتومبیل میشینه یک مقدار فضای پرت هم میخواد.
    برنامه شما ممکنه دو تا آرایه 512 بایتی بیشتر نداشته باشه و میکرو تون هم 1024 بایت اما همین فضای پرت هم اینجا مورد احتیاجه. حداقل مسئله اش اینه که مگه نمیخوایین تابع main صدا زده بشه؟ همین جا یک دستور call دارین که خودش 2 بایت فضا در پشته میخواد. یک سری روتین دارین که این روتین ها متغیر محلی تعریف کردن اینها هم در پشته جا میخواد. یک سری روال های نرم افزاری مستتر هم هست مثل جمع کردن 2 عدد یا تبدیل یک عدد به رشته و غیرهم که اینها هم ممکنه علاوه بر داده محلی چند بایتی فضا برای کارهای دیگه شون احتیاج داشته باشن.
    البته در شرایط بسیار بسیار خاص کل این 1024 بایت رو برای داده استفاده کرد اما ایجاد این شرایط در یک برنامه به زبان سطح بالا مثل C اگر نشدنی نباشه بسیار بسیار سخته. همون در حد نشدن. ضمنا به علت اینکه حافظه مورد نیاز پشته (استک) برنامه از همین فضا تامین میشه به صرف جا شدن متغیر ها در حافظه هم ممکنه برنامه تون اجرا نشه. چون در زمان اجرا برنامه احتیاج به فضای حافظه برای پشته داره که معمولا در زمان کامپایل دیده نمیشه.

    بنا براین بهتره یا حافظه خارجی استفاده کنین یا میکرو با رم بالاتر و یا اصلا از خیر این کار بگذرین.

    دیدگاه


      #3
      پاسخ : تعریف کردن متغیر رشته ای

      :eek:
      کجا ؟
      نمیشه بیشتر از 256 گذاشت !!!!
      بیشتر از 256 اصلا ساپرت نمیکنه و توی هلپ بیسکام نوشته که ساپورت نمیکنه
      در ضمن نمی دونم اقای اقا زاده توضیح دادن یا نه ولی 3 تا متغر دیگه نیز توی sram جا میگیره که معمولا حجمش در حدود 30 بایت میشه !!
      اون سه تا معلفه
      $swstack = 32
      $hwstack = 64
      $framesize = 64
      هستن در ضمن خیلی چیز های دیگه هم توی srm ذخیره میشه که بازم فضای مورد نظر شما رو کم میکنه
      مثلا اون چیزی که من میتونم استدلال کنم اینه که حتی سر برگه ی وقفه هم باید در srm ذخیره بشه !!
      من خودم تا حالا با sram خارجی کار نکردم میتونید از اون استفاده کنید معمولا یه چیپ 8 پایست
      [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

      دیدگاه


        #4
        پاسخ : تعریف کردن متغیر رشته ای

        :applause:
        سپاسگذارم از اینکه جواب دادید.
        برای من اینش عجیبه که تو دیتا شیت گفته 1 کیلو sramداره ولی من اومدم بعد از معرفی میکرو و کریستال یه متغیر با تعداد 1000 تا ساختم که قبول نکرد!
        مگه نباید 1023 تا قبول کنه؟؟
        دقیقا 960 بایت قبول میکنه و دیگه فکر نکنم هیچ دستوری رو بشه اجرا کرد
        برنامه ای که میخوام اجرا کنم حجمش زیاد نیست و اگه بخوام بریزمش روی مگا32 حدود 6یا نهایتا 7درصدشو پر میکنه. برای این مگا 8 رو انتخاب کردیم که کلا حجم فایل نهایی در حدود 5 کیلو هستش و در تعداد بالا به صرفه تره که یه میکرویه 1500 تومنی بزاری تا یه میکروی 4000 تومنی!
        چطور میشه یه حافظه خارجی رو بعنوان SRAM براش قرار داد؟ آیا میشه از MMC استفاده کرد؟
        سرعت رو پایین نمیاره؟
        نيست بر لوح دلم جز الف قامت دوست *** چه کنم حرف دگر ياد نداد استادم

        دیدگاه


          #5
          پاسخ : تعریف کردن متغیر رشته ای

          :redface:
          خانوم پارسا نمی دونم درس میکرو پروسوسور یا میکرو کنترلر یادتون هست یا نه
          یه درسی بود که در مورد خط لوله حافظه و هزار تا چیز چیرت دیگه !!! بحث میکرد در اون کاملا با شکل بلوک بندی شده توضیح داده !!
          اون طور که یادم هست حتی ddr پورت ها هم sram میخواد :eek:
          یعنی شما هر کاری کنید این اس رمه کم میاد
          چون خود میکرو استفاده میکنه
          [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

          دیدگاه


            #6
            پاسخ : تعریف کردن متغیر رشته ای

            اون درسها رو که اساتید حسابی به ما یاد دادن!!! و ما هم مثلا یاد گرفتیم!!!!!! :mrgreen:
            نمیشه براش یجور sram با mmc و یا سری 24 حافظه ها ساخت(البته این سری eprom هستن)
            اگه کلا غیر ممکنه تا بریم سراغ همون مگا 32
            نيست بر لوح دلم جز الف قامت دوست *** چه کنم حرف دگر ياد نداد استادم

            دیدگاه


              #7
              پاسخ : تعریف کردن متغیر رشته ای

              خانوم پارسا بازم میگم من هم همین مشکل رو داشتم بعد از اینکه میکرو رو عوض کردم یه مشکل دیگه به وجود اومد اصلا متغیر استرینگ بیشتر از 255 کارکتر نمیشه ساخت :eek: :eek:
              این شاید بشه سند حرفم
              Since a string is terminated by a 0 byte, you can't use 0 for n.

              Using 0 for m will result in a string of 255 bytes, because there is no check on a length assign of 0.

              bascam >>>help <<index <<string
              [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

              دیدگاه


                #8
                پاسخ : تعریف کردن متغیر رشته ای

                :mrgreen:
                یادم رفت راه حل :
                ساخت 2 تا متغیر 255 بایتی !!!
                ولی روی کار هایی که میخواین روش انجام بدین دستتن بسته می مونه !!
                [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

                دیدگاه


                  #9
                  پاسخ : تعریف کردن متغیر رشته ای

                  نوشته اصلی توسط حامد رحیمی
                  خانوم پارسا بازم میگم من هم همین مشکل رو داشتم بعد از اینکه میکرو رو عوض کردم یه مشکل دیگه به وجود اومد اصلا متغیر استرینگ بیشتر از 255 کارکتر نمیشه ساخت
                  این شاید بشه سند حرفم
                  Since a string is terminated by a 0 byte, you can't use 0 for n.

                  Using 0 for m will result in a string of 255 bytes, because there is no check on a length assign of 0.

                  bascam >>>help <<index <<string


                  فهمیدم چی میگید!!!
                  منظور من از رشته ای همون آرایه ای هستش!!!(dim a(10) as byte)
                  حالا من بجای 10 تا به 1024 تا احتیاج دارم(دوتا 512 تایی)
                  اگه بشه از mmc استفاده کرد خوب میشه. چون تو مدار یه 256 مگابایتی داریم.(در اصل این دوتا 512 تایی هم برای خوندن از همون mmc هستن)
                  نيست بر لوح دلم جز الف قامت دوست *** چه کنم حرف دگر ياد نداد استادم

                  دیدگاه


                    #10
                    پاسخ : تعریف کردن متغیر رشته ای

                    :mrgreen:
                    اهان
                    من خودم با mmc کار کردم ولی در مورد سرعتش نمیدونم نضری بدم در ضمن خود این برنامه که برای راه اندازی mmc استفاده میشه روی مگا 32 جواب نمیده چه برسه به 8 :cry:
                    دو تا اینکلود داره که روی 32 ارور میده و همین out of sram :eek:
                    یکی از بچه ها توی iran led تغیرش داده بود ولی هنگ میکرد !!! روی 32 به زور کار میکرد
                    [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

                    دیدگاه


                      #11
                      پاسخ : تعریف کردن متغیر رشته ای


                      بر پایه fat نیست که(وگرنه براچیش بود 512 تا ؟؟؟ اینا همون سکتورای خودمونن دیگه) :mrgreen:
                      کی میگه جواب نمیده؟
                      من قبلا با مگا16 هم راه انداختم.
                      یکی از بچه های فامیل هم یه دستگاه ساخته بود با مگا 32 به راحتی کار میکرد و الان بالای 3 ساله بدون مشکل 24 ساعته داره کار میکنه؟!!

                      نمیشه از فلش خود میکرو بعنوان sramاستفاده کرد؟
                      نيست بر لوح دلم جز الف قامت دوست *** چه کنم حرف دگر ياد نداد استادم

                      دیدگاه


                        #12
                        پاسخ : تعریف کردن متغیر رشته ای

                        نوشته اصلی توسط ساناز.پارســا

                        بر پایه fat نیست که(وگرنه براچیش بود 512 تا ؟؟؟ اینا همون سکتورای خودمونن دیگه) :mrgreen:
                        کی میگه جواب نمیده؟
                        من قبلا با مگا16 هم راه انداختم.
                        یکی از بچه های فامیل هم یه دستگاه ساخته بود با مگا 32 به راحتی کار میکرد و الان بالای 3 ساله بدون مشکل 24 ساعته داره کار میکنه؟!!

                        نمیشه از فلش خود میکرو بعنوان sramاستفاده کرد؟
                        نوشته اصلی توسط ساناز.پارســا

                        بر پایه fat نیست که(وگرنه براچیش بود 512 تا ؟؟؟ اینا همون سکتورای خودمونن دیگه) :mrgreen:
                        کی میگه جواب نمیده؟
                        من قبلا با مگا16 هم راه انداختم.
                        یکی از بچه های فامیل هم یه دستگاه ساخته بود با مگا 32 به راحتی کار میکرد و الان بالای 3 ساله بدون مشکل 24 ساعته داره کار میکنه؟!!

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

                        دیدگاه


                          #13
                          پاسخ : تعریف کردن متغیر رشته ای


                          دو تا مشکل هست
                          دفعات نوشتن و خوندن
                          سرعت
                          عدم دست رسی به فلش از طریق خود میکررو !! یعنی من تا حالا ندیدم کسی رو بتونه به فلش میکرو بدون پروگرمر دست رسی پیدا کنه !!!
                          در ضمن موقع پرو گرم کردن فلش باید برنامه ایست کنه ؟!!!
                          چون باید حتما پایه ریست میکرو فعال بشه !!!!!!!!
                          این شد 4 تا :mrgreen:
                          [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

                          دیدگاه


                            #14
                            پاسخ : تعریف کردن متغیر رشته ای

                            دارین اصلا راه رو اشتباه میرین.
                            sram برای نگهداری داده هایی هست که در حین اجرای برنامه به سرعت عوض میشه و دسترسی به اونها هم بار مینیمم رو روی دوش میکرو میذاره. اما فلش برای نگهداری کد و مقادیر ثابت داره استفاده میشه. ضمنا برای استفاده از رم خارجی اگر پارالل باشه که کلی پین ازتون حروم میکنه و اگر سریال باشه کلی پول. الزاما هم یک کار رو با یک میکروی خیلی خیلی کوچیک انجام دادن هنر نیست. اصل هنر اینه که کارتون انجام بشه و کار کنه. ایضا استفاده از رم خارجی با میکروی کوچیکی مثل یک مگا هشت و یا مگا 16 توی این ترکیب وقتی یک مگا 32 کارتون رو براحتی راه میندازه مثل همون قضیه نون و پنیر و دل درد و چلوکباب میمونه. تازه شما باید به صورت عرف کلی هزینه برای جای دو تا آی سی بدین. جای بیشتری روی PCB میخواد و توان بالاتری هم مصرف میکنه. ضمنا mmc برای دسترسی های سریع ساخته نشده چون حافظه جنبی محسوب میشه. و خودش کلی sram برای مدیریت داده هاش میخواد. و البته فلش برای کد اش.
                            مطمئنم با این شرایطی که فرمودین همون استفاده از مگا 32 به صلاح تر باشه.
                            ضمنا یکی از مشکلات دسترسی به mmc نبود چیزی مثل DMA در میکرو های AVR هست که فقط وقت میکرو را حروم میکنه. اگر از این بابت مشکلی ندارین میتونین با اضافه کردن یک سری کد (نسبتا حجیم البته) از این مورد هم استفاده کنین ولی در زمان نگهداری و توسعه این سیستم احتمالا دچار دردسر بیشتری میشین که دیگه تفاوت 2 - 3 هزار تومنی کمترین مشکلتون خواهد بود.

                            دیدگاه


                              #15
                              پاسخ : تعریف کردن متغیر رشته ای

                              بسیار ممنونم جناب آقازاده
                              برنامه رو از غروب شروع کردم به نوشتن و همون 32 رو انتخاب کردم.

                              با تشکر مجدد
                              نيست بر لوح دلم جز الف قامت دوست *** چه کنم حرف دگر ياد نداد استادم

                              دیدگاه

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