Actions

icon Post
text/html Subscribe
text/html Unsubscribe

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [coldfire-gnu-discuss] Optimizing problem


  • To: "DMS Tech, John" <john@xxxxxxxxxxxx>
  • Subject: Re: [coldfire-gnu-discuss] Optimizing problem
  • From: David Brown <david@xxxxxxxxxxxxxxx>
  • Date: Fri, 05 Jan 2007 12:22:54 +0100

DMS Tech, John wrote:
When I use the optimize option –O1 I have a problem that a small delay loop, used in a boot-loader program, gets optimized out of the code. Only the function call stays but the actual while loop is removed. Is there any compiler option to make sure this loop stays intact or a ‘__attribute__’, which will make sure this function is not optimized?


You have to remember that the compiler generates code to give you the effects you ask for - it does not do a blind translation of C code to assembly (unless you use no optimization). So if you write something like:

void delay(void) {
	int i;

	for (i = 0; i < 1000; i++);
}

The compiler is smart enough to see that this does nothing, and generates no code.

If you want to force a delay, and don't want to do it properly with a timer or something (such as when you are starting up and have not got timers running, or for very short delays), then the easiest method is to declare the loop variable to be "volatile".

Regarding optimisation - the most sensible choice for most work is -O2 optimisation, which gives good code while still being clear enough for debugging. Sometimes you might want -O1 if you want to examine generated assembly, but I have never found a use for turning off optimisation. If your code works with optimisation off, but fails with it enabled, then your code (or your compiler :-) is broken.

mvh.,

David



John.