GNU gcc printf() and BuiltIn Optimizations

Readers of my blog know: I’m not a fan of printf(), and I think for many good reasons. Still printf() is widely used, and the GNU gcc tries to optimize things. This is observed with a simple example: If I’m writing

printf("a");

Then the code produced (ARM Cortex-M0+ with GNU ARM Embedded 4.9 2015q2 gives:

movs r0, #97    ; 0x61
bl 0xa98

Instead of calling printf(), it is calling putchar()! Why is that?

PutChar instead of Printf

PutChar instead of Printf

Continue reading

Segger SystemView: Realtime Analysis and Visualization for FreeRTOS

One of the most important aspects for developing complex realtime applications is get insights into what is going on the target. Segger just has released a free tool which gives an incredible useful insight view and visualization:

Segger System View for FreeRTOS

Segger System View for FreeRTOS

Continue reading

McuOnEclipse Components: 08-Nov-2015 Release

Time is flying fast, time for another McuOnEclipse components release on SourceForge with the following main changes and features:

  1. New component for Segger RTT makes adding a console communication interface super easy (and fast!)
  2. RTT support for the command line Shell component
  3. RTT component used for Percepio FreeRTOS Tracing
  4. Updated USB component, support for USB CDC blocking/waiting and endpoint configuration
  5. Updated FreeRTOS to V8.2.3, memory heap selection improved and setting for time slicing
  6. RingBuffer implements a Delete() method
  7. Extended Kinetis SDK support in components, added by default
Segger RTT Console

Segger RTT Console

Continue reading