[En-Nut-Discussion] ICC Interupt handling corrupting registers

Brett Abbott Brett.Abbott at digital-telemetry.com
Fri Jun 25 12:21:42 CEST 2004


I have spotted a situation with the JTAG which seemed odd and I'd 
appreciate it if anyone knows anything about it.

The ICC compiler allocates registers to cope with parameter passing for 
C functions (as well as managing the underlying code of course).  In the 
case of interupt handlers, it carefully detects and protects registers 
prior to them being used, so as to avoid destroying the data/values in 
the interupted function.

I have been seeing R16/R17 return code corruption during heavy use of 
the uarts.  This is very intermiiteant.  In the case of our uart 
drivers, I am uncertain if ICC has appropriately detected the function 
eventually called, eg. RxComplete.

I think, in some cases, where the application being interupted is 
complex or, when the timing is just wrong, registers may be being corrupted.

Does anyone know if the compiler is protecting the RxComplete functions, 
is it able to detect the fact that the function is called by the 
interupt, even though it is defined via the uart.h structures.

I have a locally defined copy of the RxComplete in my application for 
debugging purposes, is it possible that this is why Im having problems?

The ICC help tells us that if you write your own assembly interupt 
functions, you must protect all registers that you use.  It also states 
that if you have a C code interut handler, and associate an interupt 
pragma with a function, this protection is done automatically for you.

Any help much appreciated.

Brett Abbott, Managing Director, Digital Telemetry Limited
Email: Brett.Abbott at digital-telemetry.com
PO Box 24 036 Manners Street, Wellington, New Zealand
Phone +64 (4) 5666-860  Mobile +64 (21) 656-144
------------------- Commercial in confidence --------------------

More information about the En-Nut-Discussion mailing list