Coldfire (MCF5235) Interrupt Problem

Andrei Chichak groups at
Fri May 11 18:05:21 UTC 2012

On 2012-May-11, at 11:45 AM, Claus, Ric wrote:

> BTW, what is the purpose of the "do {...} while(0)" construct?  I've seen it used several times in RTEMS code and don't understand its purpose.  Is there some side-effect I'm not aware of?  Otherwise, why not use "{...}" by itself to introduce a new scope block?  Please educate me.
> Ric

The do while(0) in a macro is a rare but useful construct;


#define TPUInterruptSetHandler(a,b,c) \
rtems_interrupt_disable(a); \


if (cond) 
	TPUInterruptSetHandler( 42, 17, "Hike");

You get something that doesn't quite do what you want. Only the first line of the macro will be conditional.

Wrap the define in a do/while(0) and it executes exactly once, but it becomes essentially a single statement and can handle being put in an ill formed if. This is probably why the MISRA guidelines say to always put curlies on ifs even though they are one liners.


More information about the users mailing list