اطلاعیه

Collapse
No announcement yet.

کوچ کردن از کدویژن به AtmelStudio

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

    پاسخ : کوچ کردن از کدویژن به AtmelStudio

    در مورد تنظیمات قسمت Toolchain برخی تنظیمات تخصصی هستند و باید اطلاعات کافی درباره کامپایلر GCC داشت تا بتوان تفاوتها رو درک کرد و اکثر این تنظیمات باید به همین شکلی که هستند باشند و نیازی به تغییر نیست البته در کنار هر کدام توضیحات کوتاهی وجود دارد اما برای درک بهتر عملکرد هرکدام باید به قسمت GCC Command Options در GCC Manual مراجعه کرد اما برخی تنظیمات هستند که قبلا هم در این تاپیک به آنها اشاره شده و بیشتر مورد استفاده هستند
    مثلا در قسمت Symbols -> Defined symbols هر تعریفی نوشته شود در کل برنامه قابل استفاده هست و اگر تعریف مشابهی در برنامه وجود داشته باشد تنها این تعریف برای کامپایلر شناخته شده هست و کلا از ابتدا این قسمت کامپایل می شود که معمولا در این قسمت می توان F_CPU رو تعریف کرد و در کل برنامه استفاده کرد و روش این کار هم یه این شکل هست که دکمه add رو زده و عبارت F_CPU=16000000UL رو وارد می کنیم در این صورت در کل پروژه F_CPU برابر با این مقدار هست و نیازی به تعریف مجدد نیست.

    در قسمت Optimization -> Optimization Level چهار سطح بهینه سازی وجود دارد که O1, O2, O3 سه سطح بهینه سازی از لحاظ سرعت هست که دلیل وجود سه سطح برای این کار تفاوت در سرعت و حجم کد خروجی برای هر کدام هست که به دلیل تفاوت در نحوه بهینه سازی هر کدام توسط کامپایلر است. Os هم بیشترین سطح بهینه سازی از نظر حجم کد خروجی را دارد. در رابطه با O0- اگر می خواهید عمل دیباگ برنامه رو انجام دهید بهتر هست از این گزینه استفاده کنید اما در حالت عادی اگر این گزینه انتخاب شده باشد هنگام کامپایل به صورت وارنینگ به شما اعلام می شود.

    در قسمت Linker -> Libraries که بیشتر مورد سوال بود اضافه کردن لایبرری های نرم افزار و یا لایبرری که خود شخص نوشته در پروژه انجام می شود. در قسمت بالا لایبرری که در مسیر پیشفرض نرم افزار هست اضافه می شود که فقط باید اسم لایبرری به این قسمت اضافه شود و libm همیشه وجود دارد و در قسمت پائین لایبرری که در مسیر دیگری وجود دارد اضافه می شود. البته راه ساده تر برای این کار راست کلیک بر روی پوشه Libraries یا اسم پروژه و انتخاب گزینه Add Library هست که با این کار لایبرری اضافه شده در ToolChain هم اضافه خواهد شد.
    گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

    دیدگاه


      پاسخ : کوچ کردن از کدویژن به AtmelStudio

      نوشته اصلی توسط Hamed Gh
      در مورد تنظیمات قسمت Toolchain برخی تنظیمات تخصصی هستند و باید اطلاعات کافی درباره کامپایلر GCC داشت تا بتوان تفاوتها رو درک کرد و اکثر این تنظیمات باید به همین شکلی که هستند باشند و نیازی به تغییر نیست البته در کنار هر کدام توضیحات کوتاهی وجود دارد اما برای درک بهتر عملکرد هرکدام باید به قسمت GCC Command Options در GCC Manual مراجعه کرد اما برخی تنظیمات هستند که قبلا هم در این تاپیک به آنها اشاره شده و بیشتر مورد استفاده هستند
      مثلا در قسمت Symbols -> Defined symbols هر تعریفی نوشته شود در کل برنامه قابل استفاده هست و اگر تعریف مشابهی در برنامه وجود داشته باشد تنها این تعریف برای کامپایلر شناخته شده هست و کلا از ابتدا این قسمت کامپایل می شود که معمولا در این قسمت می توان F_CPU رو تعریف کرد و در کل برنامه استفاده کرد و روش این کار هم یه این شکل هست که دکمه add رو زده و عبارت F_CPU=16000000UL رو وارد می کنیم در این صورت در کل پروژه F_CPU برابر با این مقدار هست و نیازی به تعریف مجدد نیست.

      در قسمت Optimization -> Optimization Level چهار سطح بهینه سازی وجود دارد که O1, O2, O3 سه سطح بهینه سازی از لحاظ سرعت هست که دلیل وجود سه سطح برای این کار تفاوت در سرعت و حجم کد خروجی برای هر کدام هست که به دلیل تفاوت در نحوه بهینه سازی هر کدام توسط کامپایلر است. Os هم بیشترین سطح بهینه سازی از نظر حجم کد خروجی را دارد. در رابطه با O0- اگر می خواهید عمل دیباگ برنامه رو انجام دهید بهتر هست از این گزینه استفاده کنید اما در حالت عادی اگر این گزینه انتخاب شده باشد هنگام کامپایل به صورت وارنینگ به شما اعلام می شود.

      در قسمت Linker -> Libraries که بیشتر مورد سوال بود اضافه کردن لایبرری های نرم افزار و یا لایبرری که خود شخص نوشته در پروژه انجام می شود. در قسمت بالا لایبرری که در مسیر پیشفرض نرم افزار هست اضافه می شود که فقط باید اسم لایبرری به این قسمت اضافه شود و libm همیشه وجود دارد و در قسمت پائین لایبرری که در مسیر دیگری وجود دارد اضافه می شود. البته راه ساده تر برای این کار راست کلیک بر روی پوشه Libraries یا اسم پروژه و انتخاب گزینه Add Library هست که با این کار لایبرری اضافه شده در ToolChain هم اضافه خواهد شد.
      خیلی ممنون بابت توضیحاتتون
      یه سوال دیگه :این لایبرری هایی که خودمون مینویسیم پسوند .h دارند و ما اینکلودشون میکنیم...
      تفاوت اون لایبرری های داخل اتمل استودیو با اینی که ما مینویسیم چیه؟..آیا میشه لایبرری های دست ساز خودمون رو هم به اون نوع تبدیل کنیم؟اصلا اونا برتری نسبت به لایبرری های ما دارند؟
      سپاس فراوان
      تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

      www.intelart.ir


      ساخت کنترلر دما PID فازی با AVR [آموزشی]

      دیدگاه


        پاسخ : کوچ کردن از کدویژن به AtmelStudio

        سلام عزیزان.
        من یه مدته که از code vision به اتمل استودیو کوچ کردم و واقعا راضی ام.
        اما حالا به یه سری مشکل بر خوردم ممنون میشم راهنمایی کنید.
        کتابخوانه هایی که برای atmel studio نوشته شده کمتر از کتابخوانه های کدویژنه برای مثال من الان به کتابخوانه های زیر احتیاج دارم که نمیتونم پیدا کنم اگه میشه راهنمایی کنید.
        کتابخوانه mmc
        کتابخوانه lcd گرافیکی
        کتابخوانه lcd n96
        Someone who can change the world
        ELECTRONIC ENGINEER

        دیدگاه


          پاسخ : کوچ کردن از کدویژن به AtmelStudio

          نوشته اصلی توسط punisher.x64
          یه سوال دیگه :این لایبرری هایی که خودمون مینویسیم پسوند .h دارند و ما اینکلودشون میکنیم...
          تفاوت اون لایبرری های داخل اتمل استودیو با اینی که ما مینویسیم چیه؟..آیا میشه لایبرری های دست ساز خودمون رو هم به اون نوع تبدیل کنیم؟اصلا اونا برتری نسبت به لایبرری های ما دارند؟
          در این باره فرض کنیم کتابخانه ای نوشتیم یا شاید دانلود کرده باشیم و این کتابخانه رو در اکثر پروژه ها استفاده می کنیم و هیچ تغییری نه در فایل هدر و نه در سورس آن انجام نمی شود و فقط از پروژه ای به پروژه دیگر کپی می کنیم برای این حالت می توانیم آنرا به صورت یک فایل a. ( مخفف archive ) در پوشه به خصوصی قرار دهیم و آنرا به پروژه ها اضافه کنیم. این همان کاری هست که در کتابخانه های موجود در مسیر اتمل استودیو انجام شده و ما از طریق فایل هدر به توابع مورد نظر دسترسی داریم.
          در رابطه با برتری این روش نسبت به حالت عادی مواردی وجود دارد مثلا نیازی به کپی های مکرر نیست و اینکه کتابخانه ها در یک محل ثابت خواهند بود و از نظر کامپایل کردن کدها هم زمانی که یک برنامه عادی را کامپایل می کنیم یکی از مراحل کامپایل تبدیل کدها به آبجکتهایی هست که پس از مراحل بهینه سازی و لینک شدن تبدیل به کد خروجی و hex می شوند و با این روش تقریبا نصف مسیر کامپایل انجام شده و فقط مراحل بعدی انجام نمی شود و عمل کامپایل سریعتر خواهد بود
          اما ضعف این روش این هست که سورس کتابخانه قابل مشاهده و تغییر نیست و در رابطه با کتابخانه هایی مثل مثلا lcd ها چون نیاز به تغییر و دیفاین پین و پورتهای میکرو هست قابل استفاده نیست اما شاید این مورد به عنوان یک مزیت باشد برای مواردی که احتمالا نیاز هست سورس کتابخانه از دید استفاده کننده آن مخفی بماند و کتابخانه ای که خودمان نوشتیم در انحصار خودمان باشد. مورد دیگر اینکه حتی در صورت استفاده از این روش باز مجبوریم از کتابخانه های جدا هم استفاده کنیم این کار شاید باعث اضافه کاری باشد(شایدم نه).

          برای این کار در اتمل استودیو به این صورت عمل میکنیم:
          در هنگام ایجاد پروژه جدید در قسمت انتخاب زبان برنامه نویسی گزینه Static lib. . . را انتخاب می کنیم و بعد از انتخاب میکروکنترلر وارد محیط برنامه نویسی شده و مانند یک برنامه عادی (بدون تابع main ) سورس کد رو می نویسیم . در قسمت تنظیمات پروژه سربرگ build در قسمت پائین نام کتابخانه که همنام پروژه هست با پسوند a. قرار دارد ( اگر elf. بود از همان قسمت قابل تغییر هست) . پروژه رو کامپایل می کنیم در این حالت در پوشه خروجی برنامه فایل مورد نظر ایجاد می شود.

          روش دیگر استفاده از دستور خاصی است که باید در سربرگ build از قسمت Use External Makefile استفاده شود که توضیحات آن در AVR Libc در قسمت How to Build a Library وجود دارد و همچنین لینک زیر:
          http://msoe.us/taylor/tutorial/ce2810/library

          نحوه استفاده از کتابخانه ای که ایجاد کردیم به این شکل هست که آنرا به همراه فایل هدر و یا جدا در پوشه خاصی قرار می دهیم و از طریق add library به پروژه اضافه می کنیم. برای اینکه بتوانیم فایل هدر را هم اینکلود کنیم در ToolChain در قسمت Directory مسیر آنرا تعریف می کنیم.
          گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

          دیدگاه


            پاسخ : کوچ کردن از کدویژن به AtmelStudio

            نوشته اصلی توسط abritco
            سلام عزیزان.
            من یه مدته که از code vision به اتمل استودیو کوچ کردم و واقعا راضی ام.
            اما حالا به یه سری مشکل بر خوردم ممنون میشم راهنمایی کنید.
            کتابخوانه هایی که برای atmel studio نوشته شده کمتر از کتابخوانه های کدویژنه برای مثال من الان به کتابخوانه های زیر احتیاج دارم که نمیتونم پیدا کنم اگه میشه راهنمایی کنید.
            کتابخوانه mmc
            کتابخوانه lcd گرافیکی
            کتابخوانه lcd n96
            کتابخانه هایی که نام بردید در همین انجمن وجود دارد مثل تاپیک هایی که مهم شدند و همینطور در قسمت پروژه ها و مقالات تکمیل شده مطمئنا از اینها در پروژه ها استفاده شده
            گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

            دیدگاه


              پاسخ : کوچ کردن از کدویژن به AtmelStudio

              نوشته اصلی توسط Hamed Gh
              در این باره فرض کنیم کتابخانه ای نوشتیم یا شاید دانلود کرده باشیم و این کتابخانه رو در اکثر پروژه ها استفاده می کنیم و هیچ تغییری نه در فایل هدر و نه در سورس آن انجام نمی شود و فقط از پروژه ای به پروژه دیگر کپی می کنیم برای این حالت می توانیم آنرا به صورت یک فایل a. ( مخفف archive ) در پوشه به خصوصی قرار دهیم و آنرا به پروژه ها اضافه کنیم. این همان کاری هست که در کتابخانه های موجود در مسیر اتمل استودیو انجام شده و ما از طریق فایل هدر به توابع مورد نظر دسترسی داریم.
              در رابطه با برتری این روش نسبت به حالت عادی مواردی وجود دارد مثلا نیازی به کپی های مکرر نیست و اینکه کتابخانه ها در یک محل ثابت خواهند بود و از نظر کامپایل کردن کدها هم زمانی که یک برنامه عادی را کامپایل می کنیم یکی از مراحل کامپایل تبدیل کدها به آبجکتهایی هست که پس از مراحل بهینه سازی و لینک شدن تبدیل به کد خروجی و hex می شوند و با این روش تقریبا نصف مسیر کامپایل انجام شده و فقط مراحل بعدی انجام نمی شود و عمل کامپایل سریعتر خواهد بود
              اما ضعف این روش این هست که سورس کتابخانه قابل مشاهده و تغییر نیست و در رابطه با کتابخانه هایی مثل مثلا lcd ها چون نیاز به تغییر و دیفاین پین و پورتهای میکرو هست قابل استفاده نیست اما شاید این مورد به عنوان یک مزیت باشد برای مواردی که احتمالا نیاز هست سورس کتابخانه از دید استفاده کننده آن مخفی بماند و کتابخانه ای که خودمان نوشتیم در انحصار خودمان باشد. مورد دیگر اینکه حتی در صورت استفاده از این روش باز مجبوریم از کتابخانه های جدا هم استفاده کنیم این کار شاید باعث اضافه کاری باشد(شایدم نه).

              برای این کار در اتمل استودیو به این صورت عمل میکنیم:
              در هنگام ایجاد پروژه جدید در قسمت انتخاب زبان برنامه نویسی گزینه Static lib. . . را انتخاب می کنیم و بعد از انتخاب میکروکنترلر وارد محیط برنامه نویسی شده و مانند یک برنامه عادی (بدون تابع main ) سورس کد رو می نویسیم . در قسمت تنظیمات پروژه سربرگ build در قسمت پائین نام کتابخانه که همنام پروژه هست با پسوند a. قرار دارد ( اگر elf. بود از همان قسمت قابل تغییر هست) . پروژه رو کامپایل می کنیم در این حالت در پوشه خروجی برنامه فایل مورد نظر ایجاد می شود.

              روش دیگر استفاده از دستور خاصی است که باید در سربرگ build از قسمت Use External Makefile استفاده شود که توضیحات آن در AVR Libc در قسمت How to Build a Library وجود دارد و همچنین لینک زیر:
              http://msoe.us/taylor/tutorial/ce2810/library

              نحوه استفاده از کتابخانه ای که ایجاد کردیم به این شکل هست که آنرا به همراه فایل هدر و یا جدا در پوشه خاصی قرار می دهیم و از طریق add library به پروژه اضافه می کنیم. برای اینکه بتوانیم فایل هدر را هم اینکلود کنیم در ToolChain در قسمت Directory مسیر آنرا تعریف می کنیم.
              خیلی خیلی متشکرم دوست عزیز...
              فقط یه چیز دیگه
              میشه کاری کرد که مثلا تنظیمات کتابخونه رو توی یک فایل با پسوند h. تعریف کنیم ولی توابع و دیفاین های اصلی درون یک فایل با پسوند a. باشند و اون فایل با این فایل اول که تنظیمات داخلش هست ارتباط برقرار کنه؟
              خیلی ممنون از پاسخ هاتون
              تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

              www.intelart.ir


              ساخت کنترلر دما PID فازی با AVR [آموزشی]

              دیدگاه


                پاسخ : کوچ کردن از کدویژن به AtmelStudio

                نوشته اصلی توسط punisher.x64
                میشه کاری کرد که مثلا تنظیمات کتابخونه رو توی یک فایل با پسوند h. تعریف کنیم ولی توابع و دیفاین های اصلی درون یک فایل با پسوند a. باشند و اون فایل با این فایل اول که تنظیمات داخلش هست ارتباط برقرار کنه؟
                ارتباط با کتابخانه آرشیو فقط از طریق فایل هدری امکانپذیر هست که در زمان ایجاد در فایل سورس اینکلود شده باشد و همانطور که اشاره شد استفاده از این روش تنها برای کتابخانه هایی هست که هیچ تغییری در آن انجام نمی شود و استفاده از دستورات پیش پردازنده مثل دیفاین و ... با توجه به اینکه این کتابخانه تقریبا کامپایل می شود برای اعمال تغییرات امکانپذیر نیست. تنها راه اعمال تغییرات استفاده از تابعی که تغییرات مورد نظر از طریق آرگومان به آن ارسال شود که این هم در صورت وجود المانهای زیاد به نظر جالب نیست چون برای هر المان نیاز هست یک متغیر به صورت عمومی تعریف شود و همینطور در توابع بجای استفاده از دستورات مثلا if# که منجر به حجم کد کمتر می شوند باید از if استفاده کرد که اصلا قابل قبول نیست. البته می توان برای تغییرات تک بیتی از bitfield استفاده کرد اما باز هم مجبور به استفاده از if هستیم.
                گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

                دیدگاه


                  پاسخ : کوچ کردن از کدویژن به AtmelStudio

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

                  www.intelart.ir


                  ساخت کنترلر دما PID فازی با AVR [آموزشی]

                  دیدگاه


                    پاسخ : کوچ کردن از کدویژن به AtmelStudio

                    نوشته اصلی توسط punisher.x64
                    عذر میخوام میشه در مورد bitfield هم توضیح بفرمایید؟کلمه کلیدی که نیست درسته؟متغیر تک بیتی هست؟...اصلا هیچی در موردش نمیدونم...
                    Bitfield یا همان ساختمان بیتی نوعی ساختمان هست که طول هرکدام از عناصرش یک بیت هست و به صورت زیر تعریف می شود
                    کد:
                    struct {
                    unsigned f0 : 1;
                    unsigned f1 : 1;
                    unsigned f2 : 1;
                    } flags;
                    دسترسی به هر بیت هم به شکل زیر هست
                    کد:
                    flags.f1 = x
                    که x فقط می تواند 0 یا 1 باشد.
                    گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

                    دیدگاه


                      پاسخ : کوچ کردن از کدویژن به AtmelStudio

                      خیلی متشکرم از وقتی که میذارید...واقعا ممنونم

                      ببخشید یه سوال دیگه هم هست :

                      کد:
                      TIMER_COUNTER_TEMP=(_dt*F_CPU)/(1024*256);
                      یه همچین کدی رو توی برنامه دارم...سوال اولم اینه که خودکامپایلر اون مقادیر ضرب و تقسیم رو انجام میده و عدد رو جاش میذاره ؟(dt_ یک دیفاین هستش مثلا مقدار 0.2 داره)

                      سوال دومم هم اینه که من TIMER_COUNTER_TEMP رو از نوع unsigned int تعریف کردم ، پس اگه مقدار روبه روی اون تو تساوی بالا عددی اعشاری شد ، فقط مقدار صحیحش رو داخل متغیر میریزه...
                      ولی مشکلی که هست اینه که من عبارت بالا رو داخل if میذارم ولی if اصلا اجرا نمیشه ولی اگه به جای اون عبارت مقدار صحیحش رو بذارم درست کار میکنه...مگه نباید مقدار صحیح یک عدد اعشاری داخل اون متغیر قرار بگیره؟
                      سپاس فراوان دوست عزیز
                      تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                      www.intelart.ir


                      ساخت کنترلر دما PID فازی با AVR [آموزشی]

                      دیدگاه


                        پاسخ : کوچ کردن از کدویژن به AtmelStudio

                        نوشته اصلی توسط punisher.x64
                        کد:
                        TIMER_COUNTER_TEMP=(_dt*F_CPU)/(1024*256);
                        یه همچین کدی رو توی برنامه دارم...سوال اولم اینه که خودکامپایلر اون مقادیر ضرب و تقسیم رو انجام میده و عدد رو جاش میذاره ؟(dt_ یک دیفاین هستش مثلا مقدار 0.2 داره)
                        سوال دومم هم اینه که من TIMER_COUNTER_TEMP رو از نوع unsigned int تعریف کردم ، پس اگه مقدار روبه روی اون تو تساوی بالا عددی اعشاری شد ، فقط مقدار صحیحش رو داخل متغیر میریزه...
                        ولی مشکلی که هست اینه که من عبارت بالا رو داخل if میذارم ولی if اصلا اجرا نمیشه ولی اگه به جای اون عبارت مقدار صحیحش رو بذارم درست کار میکنه...مگه نباید مقدار صحیح یک عدد اعشاری داخل اون متغیر قرار بگیره؟
                        سپاس فراوان دوست عزیز
                        بله کامپایلر اعداد ثابت را تشخیص میده و معادلش را میذاره
                        مقدار صحیح هم باید درون متغیر int قرار بگیره، شما اینطوری بنویس ببین حل میشه !
                        کد:
                        TIMER_COUNTER_TEMP=(unsigned int)(_dt*F_CPU)/(1024*256);
                        موفق باشید
                        امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                        دیدگاه


                          پاسخ : کوچ کردن از کدویژن به AtmelStudio

                          میشه یه مثال از کتابخونه های مربوط به آی سی های ADC خارجی معروف بیارین؟
                          خیلی گشتم چیزی پیدا نکردم.
                          خدا نور است و من اشعه ای از او ...

                          دیدگاه


                            پاسخ : کوچ کردن از کدویژن به AtmelStudio

                            نوشته اصلی توسط Abbas Sarami
                            بله کامپایلر اعداد ثابت را تشخیص میده و معادلش را میذاره
                            مقدار صحیح هم باید درون متغیر int قرار بگیره، شما اینطوری بنویس ببین حل میشه !
                            کد:
                            TIMER_COUNTER_TEMP=(unsigned int)(_dt*F_CPU)/(1024*256);
                            موفق باشید
                            خیلی ممنونم دوست عزیز...مشکل از همین تبدیل انواع بود...
                            سپاس فراوان دارم...
                            تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                            www.intelart.ir


                            ساخت کنترلر دما PID فازی با AVR [آموزشی]

                            دیدگاه


                              پاسخ : کوچ کردن از کدویژن به AtmelStudio

                              آقا شرمنده من اینقدر سوال میپرسم

                              من اون تبدیل نوع که فرمودید رو انجام داده موقع کامپایل گیر نمیده ولی اینطوری که متوجه شدم مقدار اون تبدیل رو 0 میکنه:
                              کد:
                              (unsigned int)((_dt*8000000)/(256*1024))
                              مقدار عددی عبارت بالا میشه 6.2 که با تبدیل به unsigned int باید بشه 6...درسته؟
                              ولی مقدارشو 0 میکنه...اگه به جای اون عبارت عدد 6 رو بذارم برنامه بدون هیچ مشکلی کار میکنه؟
                              به نظرتون مشکل از کجاست؟
                              با تشکر
                              تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                              www.intelart.ir


                              ساخت کنترلر دما PID فازی با AVR [آموزشی]

                              دیدگاه


                                پاسخ : کوچ کردن از کدویژن به AtmelStudio

                                نوشته اصلی توسط punisher.x64
                                آقا شرمنده من اینقدر سوال میپرسم
                                ما اومدیم اینجا سوال بپرسیم دیگه :biggrin: انتظار کار دیگه ای نباید داشته باشیم :mrgreen:
                                ببین دوست من کامپایلر توی این همه عدد گیچ شده
                                مثلا 256*1024 یک عدد در اندازه Long میشه و یا 0.2*8000000 یک عدد float هست
                                برای اینکه به کامپایلر کمک کنیم مقادیر را درک کنه باید اینطور بنویسیم:
                                کد:
                                #define _dt 0.2F
                                unsigned int a;
                                a=(unsigned int)((_dt*8000000UL)/(unsigned long)(256UL*1024UL));
                                این دقیقاً برابر با کد زیر است:
                                کد:
                                unsigned int a;
                                a=(unsigned int)6.2;
                                ببین هر کدوم از عدد ها نوعشون مشخص شده :
                                پسوند ها به این ترتیب هستند:
                                کد:
                                UL : unsigned long
                                UI : unsigned int
                                F : float
                                موفق باشید
                                امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                                دیدگاه

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