اطلاعیه

Collapse
No announcement yet.

استفاده از متغییر برای توابع تاخیر در Atmel Studio

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

    استفاده از متغییر برای توابع تاخیر در Atmel Studio

    سلام چرا نمیشه تو AVR GCC به عنوان آرگمان برای توابع از متغییر استفاده کرد؟؟؟؟
    نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

    #2
    پاسخ : استفاده از متغییر برای توابع تاخیر در

    مشکلی وجود نداره مشکلتون چیزه دیگه ای باید باشه
    کد:
    #include <avr/io.h>
    #include <util/delay.h>
    uint8_t func_test(uint8_t arg );
    uint8_t a=0;
    int main(void)
    {
      while(1)
      {
    		_delay_ms(a);
    		_delay_loop_2(a);
    		a=func_test(a);
        //TODO:: Please write your application code 
      }
    	return 0;
    }
    
    uint8_t func_test(uint8_t arg ){
    	
     arg++;	
     return arg;	
    }
    همین برنامه رو سیموله کردم و گزاشتم
    از جمله ی رفتگان این راه دراز
    باز آمده ای کو که به ما گوید راز
    هان بر سر این دو راهه از روی نیاز
    چیزی نگذاری که نمی آیی باز

    دیدگاه


      #3
      پاسخ : استفاده از متغییر برای توابع تاخیر در Atmel Studio

      باور کنید نمیشه
      شاید به خاطر ورژن جدید اتمل هستش الآن پاکش میکنم همون ورژن 6 خالیش رو نصب میکنم این جدیده توابع مربوط به adc کتابخونه avrlib رو هم درست اجرا نمیکنه و باید توشون تغییراتی رو بدیم تا کار کنن الآن که پاکش کنم و نسخه قبلی رو نصب کنم معلوم میشه
      اینم عکس از ارورش (برنامه خودتونه):

      نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

      دیدگاه


        #4
        پاسخ : استفاده از متغییر برای توابع تاخیر در Atmel Studio

        درست نشد
        اگه نمیشه کاریش کرد بگید تا برم سراغ یه راه دیگه برای ایجاد تاخیر یا از یه کتابخونه اکسترنال استفاده کنم
        نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

        دیدگاه


          #5
          پاسخ : استفاده از متغییر برای توابع تاخیر در Atmel Studio

          نوشته اصلی توسط مجتبی جباری
          درست نشد
          اگه نمیشه کاریش کرد بگید تا برم سراغ یه راه دیگه برای ایجاد تاخیر یا از یه کتابخونه اکسترنال استفاده کنم
          اول از همه F_CPU رو برای تابع تعریف کنید!(چون اگه از makefile خارجی استفاده می کردید توش همچین متغییری تعریف شده بود. ولی avrstudio فکر نکنم تعریف شده باشه!)
          کد:
          #ifndef F_CPU
          #define F_CPU 1000000
          #endif
          چون این متغییر تعریف نشده با avrlib هم بدرستی کار نمی کنه!
          در ضمن اگه یه مثال ساده از این مورد که میگین متغییر جهت آرگومان نمی تونید استفاده کنید (البته اگه خود پروژه تون رو بذارین بهتره!) باشه بهتر میشه راهنمایی کرد. ولی حدس اینه که متغییر گیر ویژگی otimize نرم افزار افتاده و در برنامه اصلی وجود نداره

          دیدگاه


            #6
            پاسخ : استفاده از متغییر برای توابع تاخیر در

            آقا مجتبی حق با شماست _delay_ms
            در حالت OPTIMIZE ارور میده !
            از delay_loop استفاده کنید.
            یا اگر قصد دارید کدهای قدیمتون رو دولوپ کنید از این راه هم میتونید استفاده کنید :
            کد:
             
            void delay_ms( int ms ) 
            { 
              for (int i = 0; i < ms; i++) 
              { 
               _delay_ms(1); 
              } 
            }
            از جمله ی رفتگان این راه دراز
            باز آمده ای کو که به ما گوید راز
            هان بر سر این دو راهه از روی نیاز
            چیزی نگذاری که نمی آیی باز

            دیدگاه


              #7
              پاسخ : استفاده از متغییر برای توابع تاخیر در

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

              دیدگاه

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