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

Kinetis Drone: Remote Controller with SUMD

The bad news: my ESC (see “Kinetis Drone: Graupner ESC S3055 Failure“) for my Kinetis drone is still not repaired :-(. Anyway, I have plenty of other things to make for my drone project. One is to work on the remote controller:

Test Setup

Test Setup

Continue reading

Tutorial: lwip with FreeRTOS and the Freescale FRDM-K64F Board

This tutorial is about how to create a lwIP project with FreeRTOS using the Kinetis SDK V1.3.0 with Kinetis Design Studio on the Freescale FRDM-K64F board.

FRDM-K64F Board with lwIP running

FRDM-K64F Board with lwIP running

Continue reading

Added Micro SD Card Socket to FRDM-K22F

Probably for cost reasons, the Freescale FRDM-K22F does not come with the micro SD card socket populated on the the board:

freescale-frdm-k22f-board with no SD card socket

Freescale FRDM-K22F Board with no SD card socket

With a little soldering skills it is possible to populate the socket so the board can be used with a file system on it :-):

Using SD card with FRDM-K22F Board

Using SD card with FRDM-K22F Board

Continue reading

Linking additional Object Files with GNU Linker

Sometimes I need to link an object file (e.g. bootloader.o) to my application, and I do not want to build it, or I do not have the sources to build it. There is a simple way with the GNU ARM Eclipse plugins to link extra object files:

Other Objects for GNU Linker

Other Objects for GNU Linker

Continue reading

Aligning S19 Records to 64-bit Boundaries

Many tool chains and linker are able to produce S19 files, such as with the GNU tools it is the ‘objcopy‘ which does this job (see “Binary (and S19) Files for the mbed Bootloader with Eclipse and GNU ARM Eclipse Plugins“). But these tools usually cannot handle the special cases. For example on the Freescale Kinetis K64F my serial bootloader (see “Serial Bootloader for the Freedom Board with Processor Expert“) had a problem with these lines in the S19 file:

Not aligned S19 file entries

Not aligned S19 file entries

Continue reading

Using Precompiled Headers with GNU gcc in Eclipse

Some of my robotics projects take a rather long time do a full build. When I developed applications with Visual C++ on the host, using precompiled headers gave me a big boost in compilation speed. I was looking for the same in similar with GNU and gcc, and as expected: gcc does support precompiled headers too. And indeed, I was able to cut down compilation time by 30% :-). So this post is about how to use gcc with precompiled headers in Eclipse/CDT to give my builds a boost.

using precompiled header

using precompiled header

Continue reading

New in Eclipse Mars: Launchbar

In “Going to Mars: Building a DIY Eclipse IDE for ARM Embedded Microcontrollers” I described how to install an Eclipse based IDE for ARM, based on Eclipse Mars (4.5) and CTD (8.7). There are many great new features in Eclipse Mars which makes that switch worthwhile: the Launchbar:

Launchbar in Eclipse Mars

Launchbar in Eclipse Mars

A dream is are now a reality: a really, really easy way to build, run/debug an application!

Continue reading

Going to Mars: Building a DIY Eclipse IDE for ARM Embedded Microcontrollers

It has been a while since I published my ‘build my own DIY IDE’ (see “DIY Free Toolchain for Kinetis: Part 1 – GNU ARM Build Tools“). I have used that approaches in my classes successfully. Now a new semester is coming up, so time to update the instructions using the latest Eclipse IDE (Mars) and tools (GCC ARM Embedded (launchpad) with GNU ARM Eclipse).

Eclipse Mars Splash Screen

Eclipse Mars Splash Screen

Continue reading

Tutorial: Using GNU Profiling (gprof) with ARM Cortex-M

I have published a Sneak Preview how GNU gprof profiling looks for an embedded target ARM Cortex-M in an earlier post:

Freescale Kinetis Microcontroller Application Profiling
Freescale Kinetis Microcontroller Application Profiling

This tutorial explains how to profile an embedded application (no RTOS needed) on ARM Cortex-M devices with GNU gprof. Additionally I explain the inner workings to generate the data necessary for gprof.

Continue reading