سلام دوستان
میخواستم در مورد تابع زیر بهم توضیح بدید که هر خط چکار میکنه.
البته میفهمم تا حدودی ،منتها اصلا با این سبک نگارش کد اسمبلی آشنا نیستم .
این تابع مال یه فانکشن ژنراتور با AVR هست که فایل اصلی را ضمیمه میکنم .
(راستش دارم مهارت خودما افزایش میدم و کد های مختلف را بررسی میکنم . اخیرا هم دارم رو یه کد کار میکنم که باش بتونم حد اقل تا 100 کیلو هرتز موج سینوسی تولید کنم که تا الان با کریستال 16 مگ و یک جدول 256 تایی برای موج سینوسی ،فقط تا حد4-5 کیلو هرتز تونستم تولید کنم . برای همین میخوام یه قسمت هایی را با اسمبلی بنویسم تا سرعت بالاتر بره-با اسمبلی هم تا حدو.دی آشنا هستم و علاقه زیادی بهش دارم)
پیشاپیش تشکر میکنم .
اینم فایل اصلی :
میخواستم در مورد تابع زیر بهم توضیح بدید که هر خط چکار میکنه.
البته میفهمم تا حدودی ،منتها اصلا با این سبک نگارش کد اسمبلی آشنا نیستم .
این تابع مال یه فانکشن ژنراتور با AVR هست که فایل اصلی را ضمیمه میکنم .
(راستش دارم مهارت خودما افزایش میدم و کد های مختلف را بررسی میکنم . اخیرا هم دارم رو یه کد کار میکنم که باش بتونم حد اقل تا 100 کیلو هرتز موج سینوسی تولید کنم که تا الان با کریستال 16 مگ و یک جدول 256 تایی برای موج سینوسی ،فقط تا حد4-5 کیلو هرتز تونستم تولید کنم . برای همین میخوام یه قسمت هایی را با اسمبلی بنویسم تا سرعت بالاتر بره-با اسمبلی هم تا حدو.دی آشنا هستم و علاقه زیادی بهش دارم)
پیشاپیش تشکر میکنم .
void static inline Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)
{
asm volatile( "eor r18, r18 ;r18<-0" "\n\t"
"eor r19, r19 ;r19<-0" "\n\t"
"1:" "\n\t"
"add r18, %0 ;1 cycle" "\n\t"
"adc r19, %1 ;1 cycle" "\n\t"
"adc %A3, %2 ;1 cycle" "\n\t"
"lpm ;3 cycles" "\n\t"
"out %4, __tmp_reg__ ;1 cycle" "\n\t"
"sbis %5, 2 ;1 cycle if no skip" "\n\t"
"rjmp 1b ;2 cycles. Total 10 cycles" "\n\t"
:
:"r" (ad0),"r" (ad1),"r" (ad2),"e" (signal),"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR))
:"r18", "r19"
);
}
اینم فایل اصلی :
دیدگاه