اطلاعیه

Collapse
No announcement yet.

کامپایلر IAR

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

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

    همینطور که عرض کردم در gcc مشکلی نیست ولی در iar برنامه کار نمیکند.حالا سوال اینجاست که چرا؟ به نحوه کامپایل بر می گردد یا تنضیمات یا ...

    دیدگاه


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

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

      دیدگاه


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

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

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

        دیدگاه


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

          با سلام
          چرا math.h رو include نمیکنید ؟

          دیدگاه


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

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

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

            دیدگاه


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

              با سلام
              من در قسمتی از یک برنامه از malloc جهت ساخت یک متغیر [4][2] از نوع int که در میانه های برنامه با دستور realloc سایز ان افزایش پیدا می کند استفاده کرده ام . این برنامه با gcc بدون مشکل کار می کند ولی در iar مشکل دارد و اجرا نمی شود و میکرو ریست میشود.(البته اگر متغییر را از ابتدا بصورت[4][2] int t تعریف کنم مشکلی پیش نمیاد). در ضمن stdlib.h رو هم include کردم.
              لازم به ذکر است در این برنامه متغییر های زیادی تعریف شده که ram رو به میزان قابل توجهی اشغال کرده همچنین مد های مختلف opt هم چک شد ولی جواب نداد !
              لطفا راهنمایی بفرمایید.

              دیدگاه


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

                بعد از بررسی list متوجه شدم که در واقع میزان heap 0x10 می باشد که با افزایش ان مشکل بر طرف شد.

                دیدگاه


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

                  یکی از مباحث مهم و پرکاربرد در C++‎ تخصیص حافظه داینامیک برای متغیر ها می باشد. در حالت معمولی وقتی متغیری داخل برنامه تعریف می شود، آن متغیر داخل حافظه Stack قرار میگیرد. اما با اختصاص حافظه به صورت داینامیک برای یک متغیر آن متغیر داخل حافظه Heap قرار میگیرد. اختصاص حافظه داینامیک در زبان C++‎ کاربرد های زیادی دارد که در ادامه با برخی از آنها آشنا خواهیم شد. برای شروع بهتر است نگاهی به مفهوم حافظه های Stack و Heap داشته باشیم.
                  حافظه Stack: حافظه در داخل برنامه های C++‎ به دو بخش تقسیم می شود: حافظه Stack و حافظه Heap .حافظه Stack برای نگهداری متغیر های معمولی و نگهداری اطلاعات توابع در هنگام فراخوانی استفاده می شود. به طور کلی می توان گفت مهمترین کاربرد حافظه Stack در فراخوانی توابع و کنترل آنها می باشد. برای این که با طرز کار حافظه Stakc بیشتر آشنا شوید، می توان این بخش از حافظه را به ستونی از بشقاب های رو هم قرار گرفته تشبیه کرد. آخرین بشقابی که وارد شده، اول از همه از ستون بشقاب ها خارج می شود. این حالت به LIFO-Last In First Out معروف است. این مسئله در مورد توابع نیز سازگار است. زمانی که تابعی فراخوانی می شود این تابع به همراه تمامی متغیرهای محلی خودش در داخل حافظه Stack قرار می گیرد. با فراخوانی یک تابع جدید این تابع بر روی تابع قبلی قرار میگیرد و کار به همین صورت ادامه پیدا می کند. در حقیقت می توان گفت که بالاترین تابع در حافظه Stack تابعی است که هم اکنون در حال اجرا می باشد. زمانی که کار فراخوانی یک تابع تمام شد آن تابع به همراه تمام متغیرهای مربوطه از داخل حافظه Stack خارج می شود. برای روشن تر شدن موضوع حالت زیر را در نظر بگیرید. کلیه برنامه ها C++‎ با فراخوانی تابع main شروع میشوند. پس اولین تابعی که داخل Stack قرار میگیرد تابع main است. حال فرض کنید که بعد از تابع main تابع func1 و از داخل تابع func1 تابع func2 فراخوانی شود. در این حالت ابتدا تابع func1 در حافظه Stack روی تابع main و سپس تابع func2 بر روی تابع func1 میگیرد که حالت حافظه Stack به صورت زیر در می آید:

                  Stack Memory -> main() | func1 | fun2

                  پس از آنکه فراخوانی تابع func2 به پایان رسید این تابع از داخل حافظه Stack خارج شده و کنترل به تابع func1 باز می گردد و stack به صورت زیر در می آید:

                  Stack Memory -> main() | fun1

                  زمانی که فراخوانی تابع func1 به پایان برسد این تابع از حافظه stack خارج شده و کنترل به تابع main باز میگردد و این روند به همین صورت ادامه دارد تا زمانی که کار فراخوانی تابع main تمام شده و برنامه به اتمام رسد. با اتمام فراخوانی تابع main این تابع از از Stack خارج شده و کنترل به سیستم عامل باز می گردد. برای آشنایی بیشتر با ساختار Stack می توانید به یکی از کتابهای ساختمان داده ها مراجعه کنید.

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

                  دیدگاه


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

                    با سلام

                    دوستان می خواستم بدونم که چطور میشه که یه پوشه ای که حاوی مثلا 20تا سورس هستش رو یه جا با پوشه خودش تو محیط iar اضافه(add) کرد؟

                    مثلا:
                    یه پوشه ای داریم به اسم lib و داخل اون پوشه هم فولدر دیگه ای به نام core داریم و داخل این فولدر 30تا سورس داریم الان می خوایم بدون اینکه تک تک این سورس ها رو add کنیم و یه چیز غیر منظم در بیاد یکجا پوشه lib رو add کنیم تا هر جا که خواستیم هر کدوم از سورس های مورد نظر رو استفاده کنیم.؟
                    دکتر شریعتی:

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

                    دیدگاه


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

                      در IAR امکانی برای تعریف group وجود دارد که شما می توانید برای نظم بیشتر در پروژه، کلیه فایل های مرتبط را در یک گروه با نام دلخواه اضافه کنید و تفاوتی نمی کند که این فایل ها در چه فولدری قرار داشته باشند. تنها مسئله این است که برای include کردن فایل های با پسوند h. باید مسیر فولدر مورد نظر را در include ذکرکنید.
                      مثلا:

                      کد:
                      #include".\lib\core\mylib.h"


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

                      دیدگاه


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

                        سلام

                        با تشکر.بله این امکان وجود دارد.ولی من می خوام خود پوشه مورد نظر رو بدون ایجاد group و مثل add کردن یک سورس اضافه کنم(چون پوشه من تو در تو و شامل سورس هاس زیادی هستش).

                        و سوال دوم هم اینه که کی از قسمت c/c++ compiler>>preprocessor مسیر فایل ها و پوشه های برنامه رو به کامپایلر معرفی می کنیم؟
                        دکتر شریعتی:

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

                        دیدگاه


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

                          راجع به موردی که جناب hadibsb توضیح دادن فقط یک نکته خیلی مهم مغفول مونده و اونهم اینه که چون میکروکنترلر ها عموما حافظه ای بشدت محدود دارن و ضمنا فقط یک برنامه با ساختاری مشخص از این حافظه استفاده میکنه جز در مواقع خاص احتیاجی به استفاده از توابع dynamic memory allocation نیست و بعلت اینکه این توابع با آدرس های فیزیکی کار میکنن و رفتار های برنامه هم در تقابل با heap معمولا ناهمگن هست؛ بعد از مدتی منجر به تولید garbage در حافظه میکرو میشه. یعنی ممکنه حالتی پیش بیاد که با اینکه حافظه heap به اندازه کافی آزاد هست ولی درخواست حافظه شکست بخوره. در این سری موارد پیاده سازی متد هایی مثل garbage collection برای میکرو بشدت الزامی میشه. در این حالت هم نباید از فقط از اشاره گر به حافظه به تنهایی استفاده کرد. تا امکان انجام garbage collection همیشه برقرار باشه.
                          نمونه این فرمهای garbage collection و مهمتر از همه memory compaction رو میتونین در زبانهایی مثل java یا محیطی مثل دات نت ببینین. اگر خواستین این فرم مدیریت حافظه رو پیاده کنین میتونین به پروژه nanovm یک سری بزنین.

                          دیدگاه


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

                            ببخشید اصلا مزیتهای C++ نسبت به سی چیه و کجا لازم میشه که از اون استفاده کرد؟
                            در مورد داینامیک بودن یعنی میشه نوع یک متغیر که تو این ناحیه تعریف شده رو هر کجای برنامه
                            تغییر داد؟
                            و اینکه اصلا نحوه استفاده از این ناحیه به همون شکل تعریف متغیر مرسوم در زبان سی هست یا اینکه باید با اشاره گر ازش استفاده کرد؟

                            دیدگاه


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

                              - ++C دارای ساختارهای OOP هست. یعنی میتونین بفرم شیئ گرا باهاش کار کنین. ضمنا به همین خاطر یک سری امکاناتی رو پشتیبانی میکنه که کامپایلر های عادی C پشتیبانی نمیکنن. معمولا در جاهایی که ساختار های برنامه نویسی پیچیده میشه بهتره که از این زبون استفاده کنین چون طراحی و پیاده سازی و مهمتر از اون نگهداری و توسعه رو خیلی راحتتر میکنه.
                              - متغیر ها رو 2 جور میشه تعریف کرد. یکی بصورت ایستا مثل اینکه میگیم [int i[5 ولی این میزان در زمان نوشتن کد مشخصه ولی اگر احتیاج به تعریف متغیری داشته باشیم که نمیدونیم چه حجمی داره و در زمان اجرا مشخص میشه تنها راهش استفاده از اشاره گر و استفاده از تئابعی مثل malloc برای تخصیص حافظه بصورت پویا یا داینامیک هست.

                              دیدگاه


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

                                نوشته اصلی توسط NAO_ROBOT
                                ولی من می خوام خود پوشه مورد نظر رو بدون ایجاد group و مثل add کردن یک سورس اضافه کنم(چون پوشه من تو در تو و شامل سورس هاس زیادی هستش).

                                و سوال دوم هم اینه که کی از قسمت c/c++ compiler>>preprocessor مسیر فایل ها و پوشه های برنامه رو به کامپایلر معرفی می کنیم؟
                                برای اضافه کردن همه سورس های موجود در یک فولدر و کلیه زیر شاخه های آن، من توضیح خاصی در متون IAR ندیده ام. اما برای Add کردن کل سورسهای موجود در یک فولدر خاص می توانید در هنگام باز شدن پنجره Add Files، از طریق تایپ c.*در بخش File و زدن Enter، همه فایل های با پسوند c (یا مثلا cpp) را نمایش دهید و همه آنها را بصورت توام با هم select کنید.
                                اما تعریف مسیر از طریق Preprocessor این حسن را دارد که در هنگام کامپایل پروژه، به مسیر های معرفی شده هم برای جستحوی فایل هایی که include می شوند، مراجعه می شود و بنابراین نیازی به تعیین مسیر برای این فایل ها وجود نخواهد داشت. مثلا اگر فایل های مذکور در فولدر پروژه و مسیر core\Lib قرار داشته باشند، در پنجره Additional include directory باید خط زیر قرار داده شود:

                                $PROJ_DIR$\core\lib


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

                                دیدگاه

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