Instrumentation Trace Microcell

The ITM can be used to redirect printf() function calls. This allows a printf() style debugging capabilities on an embedded platform, which typically doesn’t have a standard terminal window for output.

The ITM is part of the Coresight debugging and trace system, shown in the right of the below diagram.

core-sight-debug-and-trace-overview-diagram-for-arm-cortex-m3 The ARM Cortex-M3 Coresight debug and trace overview diagram. Image from http://www.keil.com/support/man/docs/ulink2/ulink2_cs_core_sight.htm.

printf()  ultimately relies on the function fputc() to do the low-level character outputting. So this is the function we are going to replace. The following code shows the re-definition of fputc().

Note that the passed in file argument f is ignored altogether.

ITM_SendChar() is a Cortex-M3 function provided by ARM and is defined in core_cm3.h. The declaration of it is shown below (for reference purposes).