Developing for ARM

First off, what is an ARM processor and why are they so popular?

Advanced Research Machines developed a processor architecture that is really nice to develop with. They have made much common for the embedded engineer. If you want to port an app from one ARM processor to another your job will be pretty easy so long as you’ve developed in C, or another higher language.

The original ARM core used very little silicon. The amount of silicon almost directly determines the cost of a processor, or in fact any Integrated Circuit (IC). So ARM was cheap to implement.

The peripheral bus architectures designed for the ARM core are very well thought out and implemented. It means that anyone can licence the ARM core and attached peripherals to the core with relative ease. The end product is a range of micro-controllers from a range of manufacturers that are 32-bit, fast, cheap and very common.

I don’t want to hang around too much on the history of ARM. The fact is they are virtually an industry standard core now with almost everyone supplying micro-controllers having an ARM offering. It enables companies to invest in reusable software that can be easily ported to new products. It directly affects time-to-market in a significant way.

Raspberry Pi could not have such a capable processor and end product for such little money without ARM. They are a very important company in embedded development.

How common is common?

To back up what I mean by swapping between ARM processors being easy, we should look at the ARM Cortex Microcontroller Software Interface Standard. This standard is cross-compiler code (i.e. it works with GNU GCC, IAR C, etc) that implements low level functions that are commonly used by embedded systems.

The CMSIS standard (from V3.0) provides interfaces that are useful for Real Time Operating Systems (RTOS), Digitial Signal Processing (DSP), and XML files describing the complete processor system. This common functionality is an abstraction layer above the cortex core. If you’re choosing a processor for a new application, make sure you choose a cortex processor in order to have this abstraction layer. It will make any porting effort in the future easier.


There are plenty of options for compilers, and the GNU toolchain has been fully ported to support most ARM targets. There are plenty of install options for the GNU toolchain for both Linux and Windows.

Yagarto (Yet Another GNU ARM Toolchain) is probably the easiest install for Windows users:

For ubuntu users the arm GNU toolchain can be found in universe:

[code]sudo apt-get install gcc-arm-linux-gnueabi[/code]

One thought on “Developing for ARM

Leave a Reply