Preparing for Bare Metal


The Ell-i Bare Metal hackathon is two weeks from now. Thanks to Saleae, we will also have very useful prizes, a Saleae Logic Pro 16 for the first prize winner, and Logic 8 and Logic 4 for the second and third prizes.

The vendors, ST, NXP, and Atmel have already delivered boxes full of boards to us, and EIT ICT Labs, Ericsson, Helvar, and Reaktor have promised to supply us with enough of fuel (food and drinks) to last through the 48 hours. We have a full house and the registration is closed. However, if you or someone you know definitely wants to attend the hackathon, we can arrange a few extra seats if really needed.

From ST we have received 15 pieces of STM32F407 discovery kits, each with an Cortex-M4F CPU, 1 MB of flash, and 192 kB of SRAM. NXP has supplied us with 10 pieces LPC1227 LPCEspresso, another 10 pieces of LPC11U14 boards and even a couple of LPC4330-Xplorer Boards. Hence, their range covers pretty much everything from low end LPC11Uxx line, with build-in USB, to the high end dual-core LPC4330 with both a Cortex-M4F and a Cortex-M0 core. Finally, Atmel has provided us with 15 pieces of the SAMD20 explained pro kits, with Cortex-M0+, 256 kB of flash and 32 kB of SRAM. With our own Ellduino boards, with Power-over-Ethernet and STM32F051 providing Cortex-M0, 64 kB of flash and 16 kB of SRAM, we have a plenty of MCUs for starting different designs.


I myself am quite busy preparing my tutorial presentations, trying to condense what I’ve learned about bare metal programming during the last few decades. In a sense, I tipped my toes to bare metal already back in the late 80s, when I fixed bugs in the Altos Unix System V kernel, eventually using adb to patch the live kernel in machine code since in that way the development cycle was much faster than with patching an image rebooting. If it worked, it worked, and then I could apply the patch to the image without rebooting. If it didn’t work, then it crashed, and I needed to reboot anyway.


In late 90s I then did my first deep plunge into the embedded world. In 1998-99 I developed a small operating system for the Lego Mindstorms robotics system, which back at that time had a Hitache H8 8-bit microcontroller with some 24 kilobytes of flash and 4 kilobytes of SRAM, if I remember correctly. Through tweaking the GCC back end to produce more efficient code, carefully integrating assembler, C, C++, and Java code (compiled with gcj to binary), I somehow managed to build a minimal but pretty full fledged Java runtime, with threads, monitors, and everything. Unfortunately the runtime took almost 20 kilobytes, leaving only 4 kilobytes of flash for the actual application, thereby making it an academicly interesting but practically useless experiment.

The third time I really encountered the embedded world in 2005, when I started to renovate our house and wanted to have a home automation system — what a fool idea at that time :-). In the end, I managed to build a working system using the Linet products from Sitecno, a small Finnish electronics design comapany. At that time I managed to design and prototype an AVR-based intelligent light dimmer, but unfortunately the Linet network latency was too long, making the system annoying in practical use. Additionally, I had sensor and actuator problems due to inductive and capacitive coupling, ground currents, and leak currents, which I wasn’t able to solve back at that time. Hence, I ended up with a partical system that controls the lights but nothing else, even though there are unused sensors throughout the house and digital relays and control for the sauna and ventilation.


From 2011, I’ve been mostly dealing with embedded systems. I joined Senseg, a leading haptics startup. From the technical point of view, the Senseg system is very much an embedded system, including physical effect generation, electronics, microcontrollers, and software. While I have mostly been working with software at Senseg, being responsible for the software architecture, I have also learned a lot about electronics just by looking and listening. Hence, now with three years of full-time development work at Senseg and one year of practicing electronics design as a hobby at the Ell-i co-operative, I consider having a pretty complete understanding of most aspects of embedded design.

Hence, I’m now trying to condense the essence of those years of experience into a few hours of tutorials. As there are quite a lot of generic material about bare metal programming available, in the tutorials I’m trying to focus on the gist, what is essential from the practical point of view, what are the things that are hard to get right or where the related documentation spreads over different works.

Of course, just a few hours of explaining things won’t be enough to transfer even a fraction of the practical lessons I’ve learned. We have to think also about other media, such as creating some wiki pages or something.

One thought on “Preparing for Bare Metal

  1. Excellent post. I used to be checking constantly this blog and I’m impressed!
    Extremely useful information specifically the closing section :
    ) I deal with such information much. I was looking for this certain information for a very lengthy time.
    Thanks and good luck.

Share your comments

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s