اطلاعیه

Collapse
No announcement yet.

کامپایلر IAR

Collapse
این موضوع برجسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #61
    پاسخ : کامپایلر IAR

    سلام . یه سوال
    مقدار RSTACK و CSTACK رو چجوری باید تعیین کرد ؟
    تو کدویژن خود کامپایلر میگفت که فرضا حدود X بایت برای Stack نیاز داری .
    تو IAR من فایل map رو ایجاد کردم و داخلش دیدم که مقدار CSTACK از 0x400 بیشتر نمیشه و من گذاشتم 0x600 ، اما دیدم برنامه قاطی کرد. گذاشتم 0x800 بهتر شد اما دیگه بیشترش تاثیری رو کار نداشت. متغیر هام که تو حافظه خارجی تعریف کردم و چیپم هم atxmega128a1 هست. حافظه خارجیم هم 512k هست.
    متغیرهام هیچ کدوم overlap ندارند و از رنج بافرشون هم نمیزارم بیشتر بشن و محدود میکنم . اما بازم یه دفعه مثلا یه بافر 65000 بایتی که فعلا من کمتر از 10 کیلو ازش استفاده میکنم میزنه همه چی رو قاطی میکنه.
    من تو برنامه از کلاسها زیاد استفاده کردم و برنامم تقریبا اونجوری در اومده که میخواستم ، امکان داره که کلاسها باعث بشن کامپایلر نتونه درست عمل کنه؟

    دیدگاه


      #62
      پاسخ : کامپایلر IAR

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

      دیدگاه


        #63
        پاسخ : کامپایلر IAR

        نمیدونم چرا اما قاطی میکنه.
        من مدلهای مختلف رو امتحان کردم. برای اینکه آدرس دهی absolut رو با کمترین خطا انجام بدم ، تمام متغیر هام رو تو یه struct ریختم و از اون یه object ساختم و اونو تو آدرس 0x5000 قرار دادم اینجوری آدرس دهی اونا به عهده کامپایلر میافته و راحت تره.
        یه سوال دیگه . آیا قرار دادن یه بافر 70000 بایتی درون یک کلاس ممکنه خرابکاری کنه ؟ البته من او بافر رو بیرون هم تعریف کردم اما ...
        یه سوال دیگه قرار دادن کلمه کلیدی مثل __huge قبل از متغیرهایی که حجمشون بیشتر از 64 کیلو هست لزومی داره یا اینکه اصلا قرار دادنش اشتباست؟
        کلمات near , far , nearfunc اینا کجا کاربرد پیدا میکنن؟
        دیگه دارم خودم قاطی میکنم !

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

        دیدگاه


          #64
          پاسخ : کامپایلر IAR

          همانطور که در پست قبل اشاره کردم، یک امکان وجود Bug در کامپایلر است. اما از سوالی که درباره huge__ و nearfunc__ و مانند آن مطرح کرده اید مشخص است که یکبار باید یک مرور اساسی روی فایل pdf موجود در help مربوط به IAR C/C++ Compiler
          Reference Guide داشته باشید. چرا که مثلا nearfunc__ مربوط به توابعی است که در code segment واقع در flash ذخیره شده اند و ربطی به far__ یا huge__ که مربوط به متغیرهای واقع در Ram هستند، ندارد. در این رابطه از صفحه 137 به بعد را در این فایل مطالعه کنید.
          اوژن: به معنای افکننده و شکست دهنده است
          دانایی، توانایی است-Knowledge is POWER
          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

          دیدگاه


            #65
            پاسخ : کامپایلر IAR

            جناب طراح گویا سوء تفاهم پیش اومده و من منظورم رو نتونستم درست منتقل کنم.
            منظور من از آوردن این کلمات پشت سر هم این نبود که این کلمات همه مربوط به یک موضوع مثلا متغیر های داخل رم هستند.
            سوالم رو طور دیگه مطرح میکنم.
            اصولا باید این کلمات قبل از تعریف متغیرها و توابع استفاده بشه یا خود کامپایلر اتوماتیک میزاره؟

            من قبل از بعضی از بافرهام که تو فضای آدرسی بزرگتری قرار داشتند کلمات huge و far رو قرار دادم و برنامه به شکل محسوسی بهتر عمل کرد و از اون قاطی کردن های زیاد تقریبا اثری نیست.
            منظور من از طرح این موضوع این بود که لزوم استفاده از این کلمات رو بدونم .
            ممنون از توجهتون.

            دیدگاه


              #66
              پاسخ : کامپایلر IAR

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

              دیدگاه


                #67
                پاسخ : کامپایلر IAR

                با تشکر از سایت www.techno-electro.com
                لینک مستقیم

                http://techno.directdl.net/dl1/Softwares/IAR/AVR/CD-EWAVR-5501%5BTechnoElectro.co%5D.zip

                پسورد:www.techno-electro.com
                هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
                بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
                میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

                تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

                دیدگاه


                  #68
                  پاسخ : کامپایلر IAR

                  سلام.
                  حین کار با IAR و XMEGA به مشکلاتی برخورد کردم که تونستم حلش کنم ولی علتش رو متوجه نشدم گفتم اینجا مطرح کنم هم تجربه ای میشه برای دیگر دوستان و هم ممکنه من جوابم رو بگیرم.
                  مسئله از این قراره که توی یه پروژه حدود 10 تا کتابخونه دارم که هموشون در تابع اصلی include نشدن بلکه با توجه به نیاز، توی هر کتابخونه، کتابخونه های دیگه include شده. یه کتابخونه دارم که برای کار با Micro SD هست. این کتابخونه قبلا بدون هیچ مشکلی کار میکرد. الان با توجه به اینکه در تنظیمات سخت افزاری از توابع کتابخانه ای XMEGA یعنی port_driver.h استفاده کرده بودم، فراموشم شده بود که این کتابخونه رو در کتابخونه مربوط به Micro SDآ‌ ، اضافه کنم. ولی این کتابخونه رو در main اضافه کرده بودم.
                  هنگام کامپایل برنامه هیچ خطایی مبنی بر اینکه توابع استفاده شده در کتابخانه Micro SDآ‌ که متعلق به port_driver.h بودن، شناخته شده نیستن، داده نمی شد ولی به صورت خودکار پایه MISOآ‌که باید ورودی باشه تبدیل به خروجی و زمین میشد و ارتباط کارت با میکرو رو قطع میکرد.
                  جالبتر اینکه حین کار در جای دیگه برنامه گاهی چند خط رو تغییر میدادم که کاملا بی ربط به این قسمت بودن، ارتباط با کارت برقرار می شد ولی بعد از چند بار پروگرم کردن بدون هیچ تغییر دوباره از کار می افتاد.
                  حالا سوالم اینه:
                  1. چطور ممکنه بدون اینکه من کتابخونه رو اضافه کردم باشم از توابعش استفاده کنم ولی کامپایلر خطا نگیره؟؟ :eek:
                  2. آیا خروجی شدن بیت MISO به صورت خودکار واقعا به این خاطره که تنظیمات کتابخونه ای درست انجام نشده؟ (الان من کتابخونه رو اضافه کنم درست کار میکنه و اگر کتابخونه رو اضافه نکنم خطا نمیگیره ولی به صورت خودکار بیت MISO رو خروجی و زمین میکنه در حالی که من ورودی و pull upآ‌ کردم)
                  3. آیا اضافه کردن port_driver.c به پروژه باعث میشه که کامپایلر خطا نگیره؟ ولی امکان استفاده از این کتابخونه رو در کتابخونه هایی که اون رو include نکردم فراهم نمیکنه؟

                  در ضمن اگه port_driver.h رو در کتابخونه micro SD اضافه نکنم هشدار زیر رو میده:

                  شأن انسان در ایمان و هجرت و جهاد است و هجرت، مقدمهآ‌ی جهاد فیآ‌سبیلآ‌الله.
                  هجرت، هجرت از سنگینیآ‌هاست و جاذبهآ‌هایی که تو را به خاک میآ‌چسباند.
                  چکمهآ‌هایت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت کن.

                  دیدگاه


                    #69
                    پاسخ : کامپایلر IAR

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

                    دیدگاه


                      #70
                      پاسخ : کامپایلر IAR

                      سلام.
                      بله با CSTACK کاملا آشنایی دارم و این پروژه رو قبلا دقیقا با همین توابع و مشخصات روی ATMega32 جواب گرفتم بنابراین هنگام کار با ATXMEGA32 که دوبرابر ram داره مشکلی نخواهد بود تقریبا سایز همه چیز رو هم دوبرابر کردم و مطمئنم مشکل ازCSTACK نیست.
                      در مورد اتفاقی هم که میفته من با مثال خودتون توضیح میدم.
                      در تابع main کتابخونه A ضمیمه شده حالا یه فایل دیگه دارم به اسم SD که کتابخونه ای هست برای کار با میکرو SD در این فایل از توابع A استفاده شده در حالی که A به اون ضمیمه نشده.
                      اگه در حالتی که فایل Aآ‌رو به SD ضمیمه نکردم برنامه رو اجرا کنم MISO به صورت خودکار خروجی میشه.
                      و فقط یا ضمیمه کردن A به SDآ‌و بدون هیچ تغییری در برنامه MISO ورودی هست(مقدار پیشفرض خودش) و برنامه به درستی کار میکنه.
                      حدسم اینه که چون من A.h رو در کتابخونه SD ضمیمه( include ) نکردم ولی A.c رو هم به پروژه add کردم به همین خاطر خطا نمیگیره ولی درست هم از توابع داخل A.c استفاده نمی کنه.

                      شأن انسان در ایمان و هجرت و جهاد است و هجرت، مقدمهآ‌ی جهاد فیآ‌سبیلآ‌الله.
                      هجرت، هجرت از سنگینیآ‌هاست و جاذبهآ‌هایی که تو را به خاک میآ‌چسباند.
                      چکمهآ‌هایت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت کن.

                      دیدگاه


                        #71
                        پاسخ : کامپایلر IAR

                        دوستان من یک مشکل با sprintf دارم
                        sprintf(buf,"num:%d",a++);
                        ولی هرکار کردم نشون نمی ده متغییر رو
                        ابتدا که اصلا خروجی نداشت بعد از افزایش Cstak تابع خروجی داشت
                        از کتابخانه dlib استفاده می کنم ،مد printf فول هست
                        و خروجی رو برای lcd لازم دارم
                        در ضمن مشابه itoa داخل iar چی هست
                        هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
                        بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
                        میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

                        تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

                        دیدگاه


                          #72
                          پاسخ : کامپایلر IAR

                          مشکل با تغییر به full dlib حل شد
                          و البته باز افزایش cstak
                          حالا سوال پیشامد اگر بخوام برای یک مگا 8 همچین برنامه ای را پیاده کنیم 1/4 یا 1/5 رم مصرف می شود فقط به جهت استفاده از printf که در کامپایلر کدویژن با همچین موردی برخورد نکردم ؟؟

                          و در مورد مشکل اقای محمد نحوی ؛ منم همچین مشکلی پیدا کردم گاهی اوقات باید فایل c رو در پروژه اصلی هم ادد کرد تا کامپایلر ایراد نگیرید
                          هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
                          بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
                          میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

                          تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

                          دیدگاه


                            #73
                            پاسخ : کامپایلر IAR

                            نوشته اصلی توسط n340
                            مشکل با تغییر به full dlib حل شد
                            و البته باز افزایش cstak
                            حالا سوال پیشامد اگر بخوام برای یک مگا 8 همچین برنامه ای را پیاده کنیم 1/4 یا 1/5 رم مصرف می شود فقط به جهت استفاده از printf که در کامپایلر کدویژن با همچین موردی برخورد نکردم ؟؟

                            و در مورد مشکل اقای محمد نحوی ؛ منم همچین مشکلی پیدا کردم گاهی اوقات باید فایل c رو در پروژه اصلی هم ادد کرد تا کامپایلر ایراد نگیرید
                            برای ذخیره جملات برای printf در IAR کافیه از ماکروی flash__ استفاده کنید تا جملات در فلش ذخیره بشن و از فلش هم خونده بشن تا دیگه از رم استفاده نکنه.
                            این یک نمونش که پیغامهای خطا در یک آرایه در فلش ذخیره شده و اصلا از رم استفاده نمیشه:

                            __flash char Error_Description[][ERROR_DESCRIPTION_LENGTH] = {
                            "Unknown",
                            "Engine Communication[Reset Required]",
                            "Engine Command[Reset Required]",
                            "Video over IP Command",
                            "Low Video Bitrate[Reset Required]",
                            "Analog Video Command",
                            "Analog Audio Command",
                            "Digital Audio Command",
                            "TS Validity[Reset Required]",
                            "Engine Set Configuration[Reset Required]",
                            "Unknown",
                            "Engine Audio1 FIFO Full[Reset Required]",
                            "Engine Audio2 FIFO Full[Reset Required]",
                            "Engine User Data FIFO Full[Reset Required]",
                            "Engine Video Error[Reset Required]",
                            "Engine Audio1 FIFO Write[Reset Required]",
                            "Engine Audio2 FIFO Write[Reset Required]",
                            "Engine User Data FIFO Write[Reset Required]",
                            "Engine DTS-PCR Difference[Reset Required]",
                            "Engine Audio1 PES Length[Reset Required]",
                            "Engine Audio2 PES Length[Reset Required]",
                            "Engine User Data PES Length[Reset Required]",
                            "Engine DPDRAM for FPGA[Reset Required]",
                            "Engine SDRAM for SH4[Reset Required]",
                            "Engine SDRAM for Super ENCII[Reset Required]",
                            "Engine SRAM for DSP[Reset Required]",
                            "Engine Flash Memory Protected[Reset Required]",
                            "Engine Flash Write Protected[Reset Required]",
                            "Engine Flash Write[Reset Required]",
                            "Engine ST Clock[Reset Required]",
                            "Engine Video Clock[Reset Required]",
                            "Engine TS Clock[Reset Required]",
                            "Engine FS Clock[Reset Required]",
                            "Engine Audio Clock[Reset Required]",
                            "Engine User Data Clock[Reset Required]",
                            "Engine Audio2 PES Header[Reset Required]",
                            "Engine User Data PES Header[Reset Required]",
                            "Engine Video PES Header[Reset Required]",
                            "Engine Audio2 PES Input[Reset Required]",
                            "Engine User Data PES Input[Reset Required]",
                            "Engine Video PES Input[Reset Required]",
                            "Error Timeout[Reset Required]",
                            "SDI Unlock",
                            "Engine Reset",
                            "System Boot",
                            "System Reset",
                            "FPGA Configuration",
                            "Video Source Analog",
                            "Video Source Digital",
                            "Analog Video Lost[Reset Required]",
                            "Error Timeout Analog[Reset Required]",
                            "Error Timeout Digital[Reset Required]",
                            "Engine New Configuration Front Panel[Reset Required]",
                            "Engine New Configuration Remote Panel[Reset Required]",
                            "New Configuration Front Panel[Reset Required]",
                            "New Configuration Remote Panel[Reset Required]",
                            };
                            اسمایل، تومورو ویل بی وُرس

                            دیدگاه


                              #74
                              پاسخ : کامپایلر IAR

                              نوشته اصلی توسط n340
                              در ضمن مشابه itoa داخل iar چی هست
                              در IAR تابع atoi وجود دارد، اما itoa که جزء توابع استاندارد نیست وجود ندارد. اما با همین تابع sprintf می توانید یک عدد را به کدهای ascii معادل تبدیل کنید. مثلا:

                              sprintf(s,"%u",54321);


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

                              دیدگاه


                                #75
                                پاسخ : کامپایلر IAR

                                جناب ژوپیتر می تونید بیشتر توضیح بدید و یک مثال بزنید
                                بعد سوال برام پیش اومد که اگه تو فلش ثبت بشه که دیگه نمی شه متغییر از رم خوند و نمایش داد
                                هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
                                بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
                                میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

                                تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

                                دیدگاه

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