ARM Bare Metal Programming, Workshop Report

The "ARM Bare Metal Programming, Workshop" was organized by Zilogic Systems, on May 21 and 22. About 28 people from various organizations, including Burndy, Microchip, NIELIT Calicut, Electron India, SRM Technologies, Visteon, attended the workshop.

Day 1, Forenoon: ARM Architecture

/static/images/arm-wshop-day-1-1.jpg /static/images/arm-wshop-day-1-2.jpg

We started off with a quick review of memory interfacing and device interfacing. The idea of memory mapped IO was re-inforced through a hands on exercise. A PXA270 emulated with Qemu, running U-boot was used to poke through the peripheral registers and understand their behaviour.

With the interface of a processor to the external world, in place, we moved to the internal workings of the ARM processor in the "ARM Architecture" session. The session covered the data flow model of the ARM processor. This was followed by the session "ARM Instruction Set". A poke and learn interface for the ARM instruction called armbox was used for demonstrating the ARM instruction set. The armbox project is hosted at

Day 1, Afternoon: ARM Assembly and Linkers

In the afternoon, we started off with "ARM Assembly" session. Simple programs, were assembled and tested under Qemu. These exercises introduced the audience to various assembler directives.

We then moved on to the next session, which discussed the role of linkers. The ability of linker scripts to control the linker was discussed next. Simple linker scripts were developed to place data in RAM and code in Flash. And the startup code to copy the code from Flash to RAM was also discussed.

Day 2: C Startup & C Library

/static/images/arm-wshop-day-2-1.jpg /static/images/arm-wshop-day-2-2.jpg

The first day focussed on assembly level usage of linker scripts and startup code. In the second day, we discussed the linker script requirements for C code, and startup code. The startup code to setup the stack, initalized the .bss and copy the .data was discussed. We then discussed about the usage of the C library. Specifically enabling printf() and malloc() was discussed. A simple UART driver was written to send out the data throug the serial port.


Many in the audience appreciated the overall structuring and and flow of the workshop. A few people had some very different expectations from the workshop, for example some were expecting low level microntroller / microprocessor initialization. But I hope there was something for them to take back from the event.

Here a few quotes from the comments posted to the Explara page.



We would like to thank all the participants and participating organizations, for all the enthusiasm. We will be returning back with more meticulously hand crafted workshops. Stay tuned, you can sign-up on our enquiry page, to get notifications about upcoming workshops.