سلام
برای میکرو AVR از winavr و avrlib استفاده میکنم.
تو avrlib یه تابع داریم به نام delay_us که تاخیر میکرو ثانیه درست میکنه.
حالا مشکل
اصلا تاخیر اجرا نمیشه.
در خود تابه برای تاخیر یه حلقه for نوشته و بعد اینو گذاشته ;{}
ولی کامپالر فکر میکنه که چون جلوی for هیچی نیست پس در واقع کدی برای حلقه for تولید نمیکنه .
احتمالا به یکی از موارد optimize کردن کامپایل مربوط میشه.
چطور بهش بفهمونم که برای این هم کد معادلش رو تولید کنه؟
برای میکرو AVR از winavr و avrlib استفاده میکنم.
تو avrlib یه تابع داریم به نام delay_us که تاخیر میکرو ثانیه درست میکنه.
حالا مشکل
اصلا تاخیر اجرا نمیشه.
در خود تابه برای تاخیر یه حلقه for نوشته و بعد اینو گذاشته ;{}
کد:
void delay_us(unsigned short time_us)
{
unsigned short delay_loops;
register unsigned short i;
delay_loops = (time_us+3)/5*CYCLES_PER_US; // +3 for rounding up (dirty)
// one loop takes 5 cpu cycles
for (i=0; i < delay_loops; i++) {};
}
احتمالا به یکی از موارد optimize کردن کامپایل مربوط میشه.
چطور بهش بفهمونم که برای این هم کد معادلش رو تولید کنه؟




دیدگاه