Follow our illustrated blog on Embedded Software Architecture

How to build a hybrid solar/wind energy harvester?

Mutexes and semaphores: two concepts for two different use cases

Introduction There has always been (and there still is) confusion on terminology and usage of mutexes and semaphores. The main reason is that the term ‘semaphore’ has a different meaning depending on the context. We need to distinguish two contexts or levels: the concept and usage level, and the implementation level. This article is about the […]

Share

System safety: hazard analysis

Introduction The goal of each system is to perform its intended function. Easier said than done in an imperfect world, and that is what this article is about: how to design a system in such a way that the probability of hazard exposure is acceptably low. The presented techniques are well-known in the world of […]

Share

Guidelines to minimize ROM and RAM usage in low-end embedded systems

Introduction Both ROM and RAM strongly determine the cost of an MCU. And therefor, for an embedded developer, it is important to regard it as valuable resources. Especially for high-volume products (e.g. MCU’s for cars) for which cheap hardware is important, it is crucial to optimize ROM and RAM usage. In this post we assume the […]

Share

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 […]

Share

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 […]

Share

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 […]

Share

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. […]

Share

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 […]

Share

Simple Platform Abstraction

What When prototyping, it is uncertain and sometimes even unlikely that the experimentation platform will be the basis of the final industrialized product. Therefor, it is good software developer workmanship to protect the logic development from change with regard to board, processor and real-time operating system, if and whenever possible. A platform abstraction – in […]

Share