Follow our illustrated blog on Embedded Software Architecture

How to build a hybrid solar/wind energy harvester?

Archives for January 2013

Debounced Buttons

A button-driven handbrake Buttons (or switches, or keys) are quite common in the world of the embedded systems. In most cases buttons trigger a software action and – in our context – we will use buttons for configuring the settings of the charge controller. We can also use the buttons as a debugging utility. The […]


Real-time scheduling

Definition A real-time operating system is a system that schedules execution of tasks in a timely deterministic manner, and is scalable. The scheduler follows a set of algorithms that determine which task executes at each moment. Preemptive priority-based scheduling is a mandatory property of the operating systems we evaluate for use in our application. A […]


Not all processors have atomic instructions!

Recently we were involved in improving boot-up times of a Linux based platform. We noticed that the boot-up time was much longer than expected based on the processor speed. The only way to figure out what was happening was to profile the start-up procedure. Something that is not always easy on limited embedded platforms like […]


Driving LEDs by GPIO: finally resolved!

Introduction Probably one of the most fascinating things you had to do in your early embedded career was controlling some LEDs by means of GPIO (General Purpose I/O). This – of course – is so easy i.e. until your project manager passes by: “I want this LED to blink a little faster” “Why is the […]


3 ways to boost your performance as a developer

If you wish to boost your performance as a developer by a non-trivial factor then here are three ways to help you achieve this: loosely couple automate testing automate delivery I saw people -myself included- that started applying these rules and went from being unproductive and frustrated about coding, to being productive and in control […]


MCU pin configuration, GPIOs and a word on software architecture

Basic peripheral setup: pin configuration All MCUs have pins. They might come in different package types such as QFP (Quad Flat Package – Figure left) or BGA (Ball Grid Array – Figure right). But for us, embedded software engineers, pins or balls, we don’t really mind: MCUs have pins and we need to configure them. […]


Operating systems for embedded systems

Loop (no OS) Description The application is one control task which is typically implemented as a delayed loop or as an event-driven loop. Locking (e.g. by disabling interrupts) is usually required to protect the data that is shared between the task and the Interrupt Service Routines (ISR’s). Except e.g. when events are sent with the […]