Joe Buck wrote:
Georg Bauhaus <[EMAIL PROTECTED]> writes:
| A busy-loop function is used to effect a delay, not too precise,
| but portably. Like
| | #define COUNT 1000
| | void f() {
| /*volatile*/ /*register*/ int i;
| | for (i = 0; i < COUNT; ++i)
| ;
Unfortunately, where there is a good argument for not using empty loops as busy-waits, at one time it was documented GCC behavior that it would work, so we can't really blame the users for trusting the doc.
That's not to say that it was ever a good idea, because of the lack of control. If you need a precisely timed busy-wait, an inline assembly construct is the best bet.
Yeah, but that just raises the "barrier for entry" for a lot of people starting out in e.g. embedded programming. It's much easier to throw together a do-nothing for loop in C then it is to try and wade through understanding how to do GCC inline assembly. Would it be reasonable to implement what Georg wants iff volatile and register are used, even if it has to be restricted to the C99 construct?:
for(register volatile int i = 0; i < COUNT; ++i);
I know it's terribly inaccurate as a delay, and it should be discouraged, but unfortunately it seems to be a common idiom in embedded code.
Thanks Eric