اطلاعیه

Collapse
No announcement yet.

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

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

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

    تابعی برای اینکار نیست و باید توسط خود شما نگارش بشه.

    دیدگاه


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

      نوشته اصلی توسط امیر . م
      تابعی برای اینکار نیست و باید توسط خود شما نگارش بشه.
      خب شما ایده ای چیزی مد نظرتون نیست؟
      به نظر خودم تنها راه اینه که همه شرط ها رو بررسی کنم و مثلا اگه عدد از 100 کوچکنر بود خودم بصورت دستی داخل تابع sprintf یه 0 قبل عدد بزارم...ولی اینطوری چون که تعداد شروط زیاد میشه حجم کد خیلی بالا میره...راه دیگه ای نیست که بشه یجوری این مشکلو حل کرد؟
      تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

      www.intelart.ir


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

      دیدگاه


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

        نوشته اصلی توسط punisher.x64
        سلام...
        توی برنامه م از sprintf استفاده میکنم....میخوام رشته خروجی یه قالب خاص رو رعایت کنه...

        مثلا :

        کد:
        sprintf(_APP_STRING_BUFFER,"#I%3.1f%3.2f%1.3f%2.1f%1.2f%u",_SP,_Kp,_Ki,_Kd,_EM,_SA);
        ولی ممکنه که بعضی از مقادیر در طول اجرا تغییر کنند....مثلا _kp که 3 رقم صحیح و 2 رقم اعشاری داره(مثلا 123.1) به یه عدد دیگه مثل 12.5 تغییر کنه...
        میشه کاری کرد که در هر صورت مقدار تبدیل شده ، عددی با 3 رقم صحیح و 1 رقم اعشاری باشه؟...مثلا اگه مقدار فعلی 12.9 باشه ، داخل رشته تبدیل شده 012.9 بنویسه...میشه اینکارو کرد؟

        با تشکر
        به صورت زیر بنویسید

        %03.1f
        گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

        دیدگاه


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

          نوشته اصلی توسط Hamed Gh
          به صورت زیر بنویسید

          %03.1f
          خیلی ممنون از پاسختون...
          یعنی یه 0 که بزارم خودش میفهمه که باید 3 رقمی باشه و جاهای خالی رو با 0 پر کنه؟مثلا اگه 1 رقمی بشه خودش 2تا 0 میذاره؟
          تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

          www.intelart.ir


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

          دیدگاه


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

            یه 0 بعد از % بزار، اگر عدد کمتر از مقدار بیشینه طول عدد که تعیین کردید (3 و1) باشه خودش پدگزاری میکنه (جاهای خالی رو با 0 پر میکنه)
            کد:
            sprintf(buf, "%03.1f", _Kp);
            البته فکر کنم واسه سه رقم صحیح و یک اعشار اینجوری باید بنویسین:
            کد:
            sprintf(buf, "%04.1f", _Kp);
            گذشت خصلت مردان است

            دیدگاه


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

              نوشته اصلی توسط مجتبی جباری
              سلام
              یه سری کتابخونه هست که هر کدومشون یه سری هدر رو فراخونی کردن
              ولی مثلا اگه یه هدری تو مسیر a/b.h باشه و تو این هدر فایلی که تو مسیری c/d.h باشه رو به صورت "c/d.h" فراخونی کنیم قبول نمیکنه و حتما باید فایل دوم تو فلدر a باشه
              من یکی از مثال های سایت اتمل رو باز کردم همش سر همین بهم ارور میده
              تو تنظیمات کامپایلر میشه کاری کرد که تو فایل هایی که تو مسیر فرعی هستن اگه یه فایلی رو فراخونی کردیم مسیر اون رو از محلی که فایل main برنامه تو اون قرار داره شروع بشه؟
              در قسمت ToolChain و در قسمت Directories می تونید مسیرهای مختلف رو برای فایلهای header اضافه کنید
              گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

              دیدگاه


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

                سلام. تنظیمات Sprintf را در کجا باید انجام بدیم که مثلا float را هم پشتیبانی کنه؟

                دیدگاه


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

                  نوشته اصلی توسط sadeghmojtabaei
                  سلام. تنظیمات Sprintf را در کجا باید انجام بدیم که مثلا float را هم پشتیبانی کنه؟
                  سلام.از قسمت Project برو به Properties.بعد Toolchain رو انتخاب کن و زیر AVR/GNU Linker گزینه Libraries رو بزن.تو قسمت بالایی یعنی Libraries(-WL,-l) کلید add رو بزن و گزینه های زیر رو اضافه کن.(دوبار)
                  کد:
                  libprintf_flt.a
                  libm.a
                  بعدش از همون AVR/GNU Linker گزینه Miscellaneous رو انتخاب کن و داخل کادر خالی عبارت زیر رو بنویس:

                  کد:
                  -Wl,-u,vfprintf -lprintf_flt -lm
                  پروژه رو کامپیال کن !

                  دیدگاه


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

                    در برنامه ای که در پست 464 و465 آمده و مربوط به یک ساعت است برا ی جبران عقب افتادن ساعت خط هایی زیر را شامل تعریف متغیر a که در ازای هر افزایش متغیر hour یک واحد به آن اضافه می شود و بررسی آن تا به 3 برسد وبعد با رسیدن آن به3 یک واحد به متغیر min اضافه بشود به برنامه اضافه کردم وهدف این است به ازای هر 3 ساعت یک دقیقه زمان جلو برود ولی عمل نمی کند .نظر شما چیه؟
                    کد:
                    #include "rtc.h"
                    #include "setup.h"
                    #include <avr/interrupt.h>
                    
                    char hour;
                    char min;
                    char sec;
                    char a;         //<---
                    
                    ISR(TIMER0_COMPA_vect) {
                      static unsigned short ticks=500;
                      ticks--;
                      
                      if ((ticks&127)==0) btn_tick();
                      
                      if (ticks!=0) return;
                      
                     
                      ticks=500;
                      
                      //
                      sec++;
                      if (sec<60) return;
                      sec=0; min++;
                      if (min<60) return;
                      min=0; hour++;a++;        //<---
                      if (hour<12) return;
                      hour=0;
                      if(a<3) return;      //<---
                      min++;
                      a=0;
                    }

                    دیدگاه


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

                      چون از return زیاد استفاده کردید منطق برنامه رو از دست دادید و تا مقدار hour برابر 12 نباشد برنامه به خط های بعدی نمی رسد و مقدار a همراه با hour اضافه می شود برنامه رو به شکل زیر بنویسید
                      کد:
                      sec++;
                        if (sec<60) return;
                        sec=0; min++;
                        if (min<60) return;
                        min=0; hour++;a++;	//<---
                      if(a==3)      //<---
                        {
                      	min++;
                      	a=0;
                        }
                        if (hour<12) return;
                        hour=0;
                      با این کار نیازی به متغیر a هم نیست و شرط رو می تونیدبرای hour در نظر بگیرید
                      گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

                      دیدگاه


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

                        سلام
                        من میخوام تو برنامه دو تا رشته رو با هم مقایسه کنم ولی هر کاری میکنم که از دستور stcmp استفاده کنم نمیدون چرا نمیشه!!
                        برای همین میام کاراکتر به کاراکتر رشته رو چک میکنم که برای رشته های بزرگ کار عقلانی نیست!
                        این برنامه ای که نوشتم :
                        کد:
                        int a=0;
                        	unsigned char b[10];
                        while (1)
                        	{
                        		b[a]=uart_getc();
                        			if (b[a]!=0){
                        				a++;
                        				b[a]=0;
                        				}	
                        				
                        			if ( !(strcmp (*b,'ok')) ) {
                        				PORTD|=(1<<6);
                        				_delay_ms(100);
                        			}
                        			else
                        				PORTD &= (!(1<<6));
                        	}
                        دیتا رو از پورت سریال میگیره و با رشته ok مقایسه میکنه!
                        استفاده از اشاره گر در مقایسه درسته؟
                        اگه راهنمایی کیند ممنون میشم

                        دیدگاه


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

                          سلام.به جای b* بنویسید b ببینید جوب میده.

                          دیدگاه


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

                            سلام
                            تست کردم جواب نمیده!!
                            ولی اگه شرط رو اینجوری بنویسم جواب میده!!
                            کد:
                            if ( b[0]=='o' && b[1]=='k')

                            دیدگاه


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

                              سلام
                              مشکل رو پیدا کردم به جای " " از ' ' استفاده کرده بودم!!
                              b هم باید به صورت b نوشته بشه نه به صورت اشاره گر b*
                              و در آخر اینکه دستور strcmp برای مقایسه دو رشته ثابت هست به همین دلیل برنامه warning میده ولی کار میکنه
                              بهتره که از دستور memcmp استفاده بشه که برای مقایسه متغیر هست و نحوه عملکردش رو میتونید تو سایت زیر ببینید
                              http://www.cplusplus.com/reference/cstring/memcmp/
                              ممنون

                              دیدگاه


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

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


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

                                دیدگاه

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