اطلاعیه

Collapse
No announcement yet.

مشکل با TABLE یا آرایه در AVR و بسکام

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

    مشکل با TABLE یا آرایه در AVR و بسکام

    دوست من این راه eeprom به ذهنم خورد اما نمیخوام از این راه برم.
    چون متاسفانه اسمبلی درست و حسابی بلد نیستم نمیدونم چی کار کنم!
    ببینید با دستور restore یک table رو بصورت اتوماتیک میریزند در حافظه
    مثلا:
    restore table_data
    و با دستور read دیتاهای داخل حافظه رو میریزند در آرایه مثلا:
    I = 1
    Do
    Read C(i)
    Incr I
    Loop Until I > 256
    حالا من table ندارم میخوام 256 تا داده در حافظه بریزم و بعد با دستور read اونا رو در آرایه بریزم.
    فکر کنم حالا سوالم واضح واضح شد.

    با تشکر

    #2
    پاسخ : فرق دستورات gosub و call و goto چیست؟

    مثل اینکه اینا دستورات بیسیک هستن درسته؟ (اولش میخواستم از فرق دستورات پرش تو اسمبلی بگم که خودت بری دنبالش بفهمی اینا چه فرقی میکنن ولی خودم الان سرچ کردم دستم اومد ...)

    دستور goto سریع به یک label پرش میکنه و قابلیت برگشت هم نداره. اما دستور gosub قابلیت برگشت داره. بخاطر اینکه قبل از پرش آدرس محلی که از اونجا پرش انجام شده رو تو استک ذخیره میکنه. اگه میخوای پرش انجام بدی و برگردی باید از gosub استفاده کنی. اگه نه نمی خوای برگردی از goto.
    دلیلش اینه که اگه مکرر از gosub استفاده کنی هردفعه آدرس رو تو استک ذخیره کردی و چون برنمیگردی (return نمیکنی) آدرس از استک پاک نمیشه و این باعث پر شدن استک (یا به اصلاح سریز - stack overflow) میشه. (ضمن اینکه ممکنه تو برنامه اختلال ایجاد کنه)
    من احتمال میدم بجای استفاده از goto از gosub استفاده کردی. جایی که لازم نیست برگردی از goto استفاده کن.
    تا اونجایی که از بیسیک یادم هست دستور call هم برای فراخوانی تابع استفاده میشه دیگه نه؟!
    https://www.linkedin.com/in/mohammadhosseini69

    http://zakhar.blog.ir

    دیدگاه


      #3
      پاسخ : فرق دستورات gosub و call و goto چیست؟

      مشکل پر شدن RAM چی کار کنم؟

      دیدگاه


        #4
        پاسخ : مشکلی که هیچ وقت حل نشد!

        دوست من این راه eeprom به ذهنم خورد اما نمیخوام از این راه برم.
        چون متاسفانه اسمبلی درست و حسابی بلد نیستم نمیدونم چی کار کنم!
        ببینید با دستور restore یک table رو بصورت اتوماتیک میریزند در حافظه
        مثلا:
        restore table_data
        و با دستور read دیتاهای داخل حافظه رو میریزند در آرایه مثلا:
        I = 1
        Do
        Read C(i)
        Incr I
        Loop Until I > 256
        حالا من table ندارم میخوام 256 تا داده در حافظه بریزم و بعد با دستور read اونا رو در آرایه بریزم.
        فکر کنم حالا سوالم واضح واضح شد.

        با تشکر

        دیدگاه


          #5
          پاسخ : فرق دستورات gosub و call و goto چیست؟

          ببخشید.من یه نظری دارم.از اونجایی که من خبر دارم دیتای داخل lookup Table رو نمیشه عوض کرد.(که اگه بشه کلی از مشکلات خود من هم عوض میشه و اگه میشه و کسی یادداره لطفا بگه.)
          ولی شما میتونید از EEROM استفاده کنید.از یه آدرسی که میتونه آدرس H0000 باشه شروع کنی به نوشتن و هر وقت خواستی با همون آدرس(که مال شما I هست)بردارید و بازخوانی کنید.دقیقا میشه همون Lookup Table اما با قابلیت ذخیره دائمی اطلاعات(که بهتره). :mrgreen:
          چطوره؟

          دیدگاه


            #6
            پاسخ : فرق دستورات gosub و call و goto چیست؟

            راستی زیاد نمیتونی بین دستورات Goto و Gosub و Call تفاوت پیدا کنی.ولی مهمترینش اینه که Goto برگشت نداره.
            نمیدونم چرا ولی برنامه نویسهای حرفه ای که من باهاشون سروکاداشتم،اصلا استفاده از Goto رو پیشنهاد نمیکنن.و بین اون دوتا هم Call بهتر عمل میکنه.(دلیلشو اگه کسی میدونه بگه.)

            دیدگاه


              #7
              پاسخ : فرق دستورات gosub و call و goto چیست؟

              دوست من این راه eeprom به ذهنم خورد اما نمیخوام از این راه برم.
              چون متاسفانه اسمبلی درست و حسابی بلد نیستم نمیدونم چی کار کنم!
              ببینید با دستور restore یک table رو بصورت اتوماتیک میریزند در حافظه
              مثلا:
              restore table_data
              و با دستور read دیتاهای داخل حافظه رو میریزند در آرایه مثلا:
              I = 1
              Do
              Read C(i)
              Incr I
              Loop Until I > 256
              حالا من table ندارم میخوام 256 تا داده در حافظه بریزم و بعد با دستور read اونا رو در آرایه بریزم.
              فکر کنم حالا سوالم واضح واضح شد.

              با تشکر

              دیدگاه


                #8
                پاسخ : مشکل با دستورات اسمبلی در AVR

                restore چیزی داخل حافظه نمیریزه بلکه مشخص میکنه که عمل read بعدی از کجا باید شروع بشه.
                ضمنا با توجه به اصول برنامه نویسی ساختیافته استفاده از goto توصیه نمیشه چون مسیر منطقی برنامه رو بهم میریزه و برنامه نویس رو گیج میکنه. اما بعضی جاها توصیه شده که حتما استفاده بشه. اما در هنگامی که مجبور هستین استفاده کنین و از اسامی درست و حسابی با توضیح کافی که برنامه نویس در هنگام خواندن برنامه دفعه بعدی گیج نشه.

                دیدگاه


                  #9
                  پاسخ : مشکل با دستورات اسمبلی در AVR

                  حالا من باید چی کار کنم؟ منظورم فهمیدی؟
                  من میخوام دیتاها یک جوری باشه که با دستور read بریزم داخل آرایه

                  دیدگاه


                    #10
                    پاسخ : مشکل با دستورات اسمبلی در AVR

                    همون کد اول کار درسته.

                    دیدگاه


                      #11
                      پاسخ : مشکل با دستورات اسمبلی در AVR

                      دوست من شما واقعا با این کدها کار کردید؟
                      ببینید من دارم میگم فرمان restore دیتاهای table رو آماده خوندن read میکنه
                      من دیتاهام داخل table نیست و مستقیم دیتاها ریختم داخل آرایه که بدردم نمیخوره باید طوری باشه که با دستور read دیتاها داخل آرایه ببرم.
                      آقا شما 256 تا دیتا دارید میخواهید اینها رو با دستور read یا ... داخل آرایه بریزید با چه دستوری این کار میکنید؟
                      push یا pull یا ....؟

                      دیدگاه


                        #12
                        پاسخ : مشکل با دستورات اسمبلی در AVR

                        این کد روی basic های روی pc مثل (turbo basic - microsoft basic - gwbasic و غیره) جواب میده. اما روی بسکام.....شرمنده من با بسکام کار نمیکنم. چون عادت ندارم از ابزاری استفاده کنم که نمیدونم توش چه خبره.

                        دیدگاه


                          #13
                          پاسخ : مشکل با دستورات اسمبلی در AVR

                          کدام کد میگویید؟
                          دوستان یعنی کسی نیست میکرو با اسمبلی کار کرده باشه؟
                          خیلی جالبه اکثر خارجی ها میکروها رو با زبان اسمبلی و سی کار میکنند البته اونایی هم که با بیسیک مینویسند مسلط به اسمبلی کامل هستند اما متاسفانه من و انگار خیلی ها اسمبلی رو انداختند دور! البته توی این جو ایران کی دیگه دنبال اسمبلی میره :cry2: کسانی که اسمبلی کار کردند یا 8051 و امثالهم کار میکنند نه AVR :cry2:

                          دیدگاه


                            #14
                            پاسخ : مشکل با دستورات اسمبلی در AVR

                            نوشته اصلی توسط masoodhashemy
                            کدام کد میگویید؟
                            دوستان یعنی کسی نیست میکرو با اسمبلی کار کرده باشه؟
                            خیلی جالبه اکثر خارجی ها میکروها رو با زبان اسمبلی و سی کار میکنند البته اونایی هم که با بیسیک مینویسند مسلط به اسمبلی کامل هستند اما متاسفانه من و انگار خیلی ها اسمبلی رو انداختند دور! البته توی این جو ایران کی دیگه دنبال اسمبلی میره :cry2: کسانی که اسمبلی کار کردند یا 8051 و امثالهم کار میکنند نه AVR :cry2:
                            در پست های اول و سوم و چهارم شما یک مطلب عینا تکرارشده که ظاهرا ربطی به برنامه نویسی اسمبلی ندارد.لطفا بطور مشخص سوال خود را در مورد برنامه نویسی اسمبلی مطرح کنید تا به آن پاسخ داده شود.
                            اوژن: به معنای افکننده و شکست دهنده است
                            دانایی، توانایی است-Knowledge is POWER
                            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                            دیدگاه


                              #15
                              پاسخ : مشکل با دستورات اسمبلی در AVR

                              ببین فرض کن یک جدول دارید که حاوی 256 دیتا هست شما اول باید این رو بنویسید:
                              restore table_1
                              بعد اومدم با دستور زیر دیتاهای داخل جدول رو در آرایه ریخیتم:
                              I = 1
                              Do
                              Read C(i)
                              Incr I
                              Loop Until I > 256

                              تا اینجا همه چیز OK هست.
                              اگر هم 1000 بار این اتفاق بیفتد درست هست

                              مشکل من:
                              متاسفانه در این مرحله 256 دیتاهایم داخل جدول نیست و طبق شرایط خاص تولید میشوند
                              حالا من باید این 256 دیتا رو داخل آرایه
                              c(i)
                              بریزم
                              اومدم با چند تا for این کار رو کردم و 256 دیتا رو داخل آرایه ریختم (در هر حال دیتاها توی آرایه ریخته شد)

                              ظاهرا همه چیز درسته! اما در حالت دوم(که همان مشکل من هست):
                              بار اول که دیتاها میریزم داخل آرایه هیچ مشکلی نیست!
                              بار دوم که دیتاها داخل آرایه ریخته میشه میگه میکرو نیاز به external ram داره و نمیتونه کار کنه!
                              فکر کنم واضح تر از این جملات چیزی نیست :cry2:

                              دیدگاه

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