اطلاعیه

Collapse
No announcement yet.

SRAM و SDRAM

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

    #16
    پاسخ : SRAM و SDRAM

    بله غیر فعال هست.
    من تمام حالتها رو بررسی کردم اما تو هیچ حالتی برنامه کار نمیکنه . تنظیمات به حالت شکلی است که در چند پست پیش قرار داده بودم.
    حتی بیس آدرس و حجم رم رو هم تغییرات زیادی دادم گفتم شاااااااااااید....
    اما ... :angry:
    واللا دیگه نمیدونم چیکار کنم . کارم هم بدجور لنگه . نمیدونم ظاهرا مشکل از تنظیمات IAR هست ، حالا کجاشو باید سیخ بزنم نمیدونم...

    دیدگاه


      #17
      پاسخ : SRAM و SDRAM

      :wow: :nice: :nice: :wow: :nice:
      آقا من موفق شدم رم خارجی رو راه بندازم.
      من هرچی با تنظیمات IAR ور رفتم نشد که نشد.
      آخر سر یه checkbox رو غیر فعال کردم و این گزینه میاد اکثر تنظیمات رو به جای تنظیمات نرم افزار ، از یه فایل به اسم lnkxm64a1h.xcl برمیداره ، حالا خیلی از تنظیمات غیر فعال هستند (در منوی Option) اما شما میتونید تو این فایل مقادیر رو دستی تغییر بدین.
      و بدین سان من تونستم یک رو 128 کیلویی رو با atxmega64a1 راه اندازی کنم.

      اینم محل اختفای مجرم :NO:



      امیدوارم این پست بتونه کمک کننده باشه.

      دیدگاه


        #18
        پاسخ : SRAM و SDRAM

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

        دیدگاه


          #19
          پاسخ : SRAM و SDRAM

          ببینید ، چون تعداد و حجم بافرها زیاده و همچنین نوع اونها که ممکنه بایت باشه ، int باشه و یا حتی long باشه من نمیتونم از تابع برای نوشتن و خوندن از رم خارجی استفاده کنم ، چه بسا اگر میخواستم با تابع کار کنم میتونستم با همون atmega128 معمولی ، با لچ کردن آدرس بیام مثل xmega تا 16M رو با همون 2 تا پورت آدرس بدم .
          نکته بعدی این که اون روشی رو که شمه معرفی کردین برای تعریف متغیر در رم خارجی با این شرط درسته که باس خارجی فعال باشه ، در غیر این صورت اگر فرضا من به بافر 100000 تایی بخوام کامپایلر خطا میگیره و از طرفی هم با فعال کردن باس خارجی برنامه از کار میافتاد که من با روشی که گفتم تونستم این کار رو انجام بدم . حالا من کجا اشتباه کرده بودم که برنامه از کار افتاده بود نمیدونم . اما الان مشکل خدار و شکر حل شد . خوشحال میشم اگر نتیجه بررسیتون رو اعلام کنید. چون دوست دارم بدونم کجای کارم اشکال داشته .
          ممنون :nerd:

          دیدگاه


            #20
            پاسخ : SRAM و SDRAM

            نوشته اصلی توسط امیر محمدی
            اون روشی رو که شمه معرفی کردین برای تعریف متغیر در رم خارجی با این شرط درسته که باس خارجی فعال باشه ، در غیر این صورت اگر فرضا من به بافر 100000 تایی بخوام کامپایلر خطا میگیره
            شخصا این روش را در IAR تست کردم و هیچگونه خطایی در صورت فعال نبودن باس خارجی ایجاد نمی شود. با غیر فعال کردن فایل xcl هم عملا تنظیمات SYSTEM و برخی تنظیمات Library از کار می افتند که نرم افزار شما عمل می کند. در ضمن نسخه IAR شما چیست؟
            اوژن: به معنای افکننده و شکست دهنده است
            دانایی، توانایی است-Knowledge is POWER
            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

            دیدگاه


              #21
              پاسخ : SRAM و SDRAM

              ورژن IAR من 5.4 هست .اون تیک که من گفتم برداریم فایل xcl رو غیر فعال نمیکنه بلکه به جای اینکه کامپایلر تنظیمات خودشو از IDE برداره میره و از اون فایل برمیداره که شما میتونین مقادیر داخل اون فایل رو براحتی تغییر بدین و با مقادیر جدید برنامه رو کامپایل کنید.
              ..........
              در ضمن من مجددا کدی رو که شما در چند پست قبل قرار داده بودین وارد برنامه کردم و در کمال ناباوری دیدم کار کرد . اشتباه از من بوده و به طرز وحشتناکی از شما عذر میخوام . احتمالا به خاطر خستگی ذهنی ، اون موقع یه جا رو اشتباه کرده بودم.

              با تشکر فراوان. :redface:

              دیدگاه


                #22
                پاسخ : SRAM و SDRAM

                سلام مجدد.
                من دوباره با مشکل رم برگشتم. من وقتی یک بافر 100000 تایی رو با مقادیری پر کردم و اون رو خوندم دیدم که درست نوشته و خونده . پیش خودم گفتم خب حل شد دیگه ، وقتی کد جناب طراح عزیز رو هم مجددا تست کردم دیدم که اون کد هم جواب میده گفتم دیگه مشکلی نیست.
                اما وقتی برای شروع برنامه اصلی اقدام کردم ، برای اینکه برنامه رو تا حدی اصولی بنویسم از کلاس استفاده کردم و توی چند تا از کلاسهام یک سری متغیر خصوصی و عمومی داشتم که حجم هر کدوم 5 ، 6 کیلو بود .
                من نمیتونستم بدون اینکه گزینه Enable External memory bus رو فعال کنم این حجم متغیر رو تعریف کنم.
                متغیر Global نیمخواستم تعریف کنم و از روش جناب طراح هم نمیشد استفاده کرد ، چون میبایست آدرس محل قرار گیری بافر رو توی رم مشخص کنیم که عملا با نامشخص بودن تعداد آبجکتها غیر ممکن بود.

                حالا شدیدا نیاز به کمک و همیاری دوستان دارم.

                ممنون

                دیدگاه


                  #23
                  پاسخ : SRAM و SDRAM

                  متغیرهای مورد نظر شما در CSTACK تعریف می شود. اما مشکل این است که با امتحان شکل های مختلف تنظیمات IAR، عملکرد خروجی در سیمولاتور AVRStudio درست به نظر نمی رسد. از جمله اینکه در هر شرایطی RSTACK را در حافظه خارجی تعریف می کند و معلوم نیست که در XMEGA اصولا چنین قابلیتی وجود داشته باشد. برای حل این مشکل تلاش هایی را انجام می دهم و نتیجه آن را به شما اطلاع خواهم داد.
                  اوژن: به معنای افکننده و شکست دهنده است
                  دانایی، توانایی است-Knowledge is POWER
                  برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                  وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                  قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                  اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                  ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                  دیدگاه


                    #24
                    پاسخ : SRAM و SDRAM

                    اجازه بدین تا نتایجی رو که امروز با کنکاش در برنامه بدست آوردم بگم شاید اینجوری شما بهتر بتونین وضعیت موجود رو بررسی کنید.
                    همونطور که میدونین تابعی هست به نام char __low_level_init() که در فایلی به نام low_level_init.c موجود میباشد . بعد از اینکه این فایل روبه برنامه اضافه کردم دیدم بدون اینکه تابع فوق فراخوانی بشه ، اجرا شد. ظاهرا کدی که در این تابع نوشته میشود اولا قبل از main اجرا میشود و ثانیا از هیچ تابع دیگه ای نباید استفاده بشه و فقط یکسری رجیستر باید مقدار دهی بشه.(شرایطش رو تو همون فایل بصورت توضیحات نوشته).
                    من رجیستر های EBI رو در این تابع مقدار دهی کردم . بعد یک پین که به buzzer متصل بود رو در آخر تابع on کردم و اول با یک تاخیر خاموش کردم.
                    برنامه در حالتی که گزینه Enable external memory غیر فعال بود درست اجرا میشد و یک بیپ کوتاه زده میشد.
                    اما موقعی که گزینه مذکور فعال میشد ، برنامه پس از رسیدن به انتهای تایه low_level_init و روشن کردن buzzer به main نرفت. و نتیجه تستهای بعدی این بود که دستور call درست انجام نمیشود . من RSTACK رو هم در حافظه خارجی و هم در حافظه داخلی امتحان کردم اما نتیجه نداد.

                    اگر من بخوام external memory bus رو فعال نکنم ، اونوقت نمیتونم CSTACK رو بیشتر از مقدار internal ram تعریف کنم ، چون کامپایلر خطا میده و میگه مقدار cstack زیاد تعریف شده.
                    برای اینکه rstack رو در رم خارجی قرار بدیم از دستور زیر استفاده میشود :
                    __require(__RSTACK_in_external_ram);
                    اگر دستوری مشابه باشه که بتونم cstack رو در رم خارجی تعریف کنم فکر میکنم مشکلم با غیر فعال کردن گزینه های بخش تنظیمات و دستکاری دستی فایل lnkxm64a1l.xcl مشکل رو حل کنم.
                    ممنون میشم منو راهنمایی کنید.

                    دیدگاه


                      #25
                      پاسخ : SRAM و SDRAM

                      در راستای مشکل شما سوالی را از بخش پشتیبانی Atmel پرسیدم که خوشبختانه برخلاف همیشه به سرعت جواب دادند که یکی از موارد پاسخ آنها این است که AVRStudio از RAM خارجی در سیمولاتور پشتیبانی نمی کند.

                      Unfortunately External RAM support is not available yet in simulator.


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

                      دیدگاه


                        #26
                        پاسخ : SRAM و SDRAM

                        آقا من واقعا ازتون ممنونم که اینقدر نسبت به اینجانب حسن نظر دارید .
                        من یه نکته جالب رو تو سیمولاتور خود IAR دبدم. ما چه گزینه RSTACK in external memory رو فعال کنیم ، چه نکنیم کد زیر در اول برنامه اجرا میشه :
                        کد:
                        ?zero_reg_initialization:
                        __RESTART:
                          00033C  24FF       CLR   R15
                          00033E  BEF8       OUT   RAMPD,R15
                        __RSTACK_in_external_ram:
                          000340  EC00       LDI   R16,0xC0
                          000342  BF05       OUT   0x35,R16
                          000344  E90F       LDI   R16,0x9F
                          000346  BF0D       OUT   SPL,R16
                          000348  E000       LDI   R16,0x00
                          00034A  BF0E       OUT   SPH,R16
                          00034C  EAC0       LDI   R28,0xA0
                          00034E  E0D2       LDI   R29,0x02
                          000350  E0E0       LDI   R30,0x00
                          000352  BFEA       OUT   RAMPY,R30
                        ?call_low_level_init:
                          000354  940E 00FA    CALL  __low_level_init
                        ?need_segment_init:
                          000358  2300       TST   R16
                          00035A  F011       BREQ  ?cstartup_call_main
                          00035C  940E 01EC    CALL  __segment_init
                        ?cstartup_call_main:
                          000360  940E 0172    CALL  main

                        البته من خیلی با اسمبلی avr آشنایی ندارم اما چیزی که مشخصه در هر دو صورت با فعال کردن باس خارجی rstack به حافظه خارجی منتقل میشود و در اصل گزینه "Place rstack in external memory" هویجی بیش نیست.
                        چون در هر صورت اون رو در رم خارجی قرار میده.

                        در ضمن سیمولاتور IAR برنامه رو خط به خط درست اجرا میکنه اما در عمل... :angry:
                        نتیجه گیری من اینه که به سیمولاتور IAR در این مورد نمیتونم اعتماد کنم.
                        حالا اگر جایی رو اشتباه گفتم بگین.
                        این تست اصلا نیازی به سخت افزار نداره.
                        اینم لینک پروژه : http://www.4shared.com/file/p_DlFQnG/EBI_Test.html


                        شما میتونید تست کنید
                        یکبار بدون فعال بودن باس خارجی
                        یکبار با فعال بودن باس خارجی و rstack در رم خارجی
                        یکبار با فعال بودن باس خارجی و rstack در رم داخلی

                        میبینید که در دو مورد آخر کد اسمبلی فوق اجرا میشود.

                        دیدگاه


                          #27
                          پاسخ : SRAM و SDRAM

                          دقیقا همین مطلب را در سیمولاتور AVRStudio مشاهده کرده بودم که از Atmel در مورد وجود Stack در حافظه خارجی سوال کردم و بخشی از پاسخ در پست قبل آورده شد. در مورد قرار گرفتن Stack در حافظه خارجی، پاسخ Atmel توام با شک و شبهه است و توصیه کرده که این ناحیه در حافظه داخلی قرار داده شود. به دلیل دو پهلو بودن این پاسخ، مجددا بصورت واضح تر سوال خود را مطرح کردم و منتظر جواب مجدد هستم. برای پیشبرد کار هم به شما توصیه می کنم که به محتوای AVR1312 مراجعه کنید و مشاهده کنید که در بخشی از آن برای GCC تعاریفی انجام داده که با استفاده از آن می توانید بصورت 24 بیتی آدرس دهی کنید و بررسی کنید که آیا فعلا می توانید کار خود را با GCC به پیش ببرید یا خیر.
                          اوژن: به معنای افکننده و شکست دهنده است
                          دانایی، توانایی است-Knowledge is POWER
                          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                          دیدگاه


                            #28
                            پاسخ : SRAM و SDRAM

                            آقا اگر من خواستم RSTACK_BASE , RSTACK_END رو تو برنامه دستی تعریف کنم . ام میگه قبلا تعریف شدند.
                            حالا من تو فایل های IAR هر چی میگردم جایی نیست.
                            سایزش رو میدونم تو فایل کجا تعریف شده. اما شروع و انتهاش رو...
                            فکر میکنم اگر این قضیه حل بشه و مثلا آدرس شروعش رو 0x60 و انتهاش رو 0x100 بزارم ، دیگه نمیره تو رم خارجی.

                            دیدگاه


                              #29
                              پاسخ : SRAM و SDRAM

                              پاسخ مجدد از Atmel دریافت شد که بر اساس آن، تعریف Stack در حافظه خارجی مشکلی ندارد و فقط سرعت را کاهش می دهد:

                              http://www.eca.ir/forum2/index.php?t...1549#msg251549

                              بنابراین مجددا آزمایش هایی را در IAR انجام دادم و در سیمولاتور آن مشاهده می شود که عملکرد خروجی کد درست است و بخشی از متغیرها را در حافظه داخلی و بقیه آن را در حافظه خارجی ذخیره می کند. اما در هر صورت RSTACK را در حافظه خارجی قرار می دهد که بنابر پاسخ Atmel مشکل خاصی ایجاد نمی شود. این کد در نسخه 5.50 تست شد:

                              کد:
                              #include<ioavr.h>
                              
                              unsigned char b[0x200]; 
                              void main()
                              { 
                               unsigned char a[0x5000]; 
                               unsigned int i=0;
                               do a[i]=0xAA; while (++i!=0x5000);
                               i=0;
                               do b[i]=0xBB; while (++i!=0x200); 
                               while(1);
                              }


                              مقدار CSTACK برابر 0x5100 و آدرس شروع RAM خارجی 0x4000 است که با تحلیل کد اسمبلی مشخص است که عملیات به درستی انجام می شوند. محل تعریف شروع و طول مقادیر خارجی هم به راحتی توسط Project/Options/General options/System قابل انجام است و چه نیازی هست که بصورت دستی آن را تعریف کنید؟ ضمنا در AVRFreaks که تشکیل تاپیک داده اید چندان منتظر پاسخگویی در رابطه با مسائل XMEGA و IAR نباشید. زیرا به دلیل گران بودن IAR و جدید بودن XMEGA کمتر کسی در مورد آن اطلاعات دارد و اخیرا بسیاری از این سوالات را خود من شخصا در آن سایت پاسخ می دهم.

                              اوژن: به معنای افکننده و شکست دهنده است
                              دانایی، توانایی است-Knowledge is POWER
                              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                              دیدگاه


                                #30
                                پاسخ : SRAM و SDRAM

                                من اصلا به چیزی شک کردم. شما گفتین ورژن IAR تون 5.50 هست. مال من 5.4 هست. امکان داره اشکال از کامپایلر من باشه؟
                                راستی imagecraft چجوریه؟
                                پوینتر آدرس اون 16 بیتی هست یا بیشتره؟ IAR حدود 2،3 میلیونه اما imagecraft نزدیک 400 هزار تومنه.

                                دیدگاه

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