Позвольте подниму эту тему из далекого забытого прошлого...
До недавнего времени для создания задержек пользовался макроподстановками (кстати, найденными здесь же)
Код
#ifndef F_CPU
# warning "F_CPU not defined for delay.h, using 1MHz"
# warning "To define F_CPU go Proj->Opt->C/C++->Defined symbols"
# define F_CPU 1000000UL
#endif
#define _delay_ns(x) __delay_cycles(x*F_CPU/1000000000)
#define _delay_us(x) __delay_cycles(x*F_CPU/1000000)
#define _delay_ms(x) __delay_cycles(x*F_CPU/1000)
#define _delay_s(x) __delay_cycles(x*F_CPU)
Но внимательно изучая на досуге IAR C/C++ Compiler Reference Guide нашел там следующее:
Цитата
Description Makes the compiler generate code that takes the given amount of cycles to perform, that
is, it inserts a time delay that lasts the specified number of cycles.
The specified value must be a constant integer expression and not an expression that is
evaluated at runtime.
Вот я и позадумался... а правильно ли так использовать?