سلام
برای میکرو 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 کردن کامپایل مربوط میشه.
چطور بهش بفهمونم که برای این هم کد معادلش رو تولید کنه؟
دیدگاه