Follow our illustrated blog on Embedded Software Architecture

How to build a hybrid solar/wind energy harvester?

Priority inversion

I found the inspiration for this article while working on a consultancy job: Priority inversion. In computer science, priority inversion is a (potential) problematic scenario in scheduling in which a high priority task is indirectly preempted by a medium priority task effectively inverting the relative priorities of the two tasks. (http://en.wikipedia.org/wiki/Priority_inversion) To put it more […]

Share

Programs, processes and threads – Part 2

This post is Part 2 of the series. Part1, which explains Programs and Processes, can be found here. Thread A thread is a single path of execution and schedulable by the CPU. It has its own stack, program counter and set of registers. A process (living program and container of all resources — see Part1) has one […]

Share

Programs, processes and threads – Part 1

Introduction Especially process and thread are terms which have many different definitions and implementations. And therefor, it is easy to get confused, and hard to get the concepts crystallized in your mind. Just do some googling and you will find plenty of sources which more or less contradict each other. We will add another source […]

Share

Real-time: designing task algorithms

In an earlier article, we talked about real-time behaviour, meeting deadlines and how a real-time OS operates. To recapitulate: the highest priority task that becomes runnable pre-empts all other tasks and runs to completion (until it ends, yields or sleeps). Also, we can have different layers of processing. high-to-low priority run-to-completion interrupts run first (all […]

Share

Real-time scheduling: no locks, please.

In a previous post, the assignment of priorities was discussed. There are a couple of axioms involved. One must mention at least these two: No resource sharing, locks or busy-waits. Static priorities (i.e. the task with the highest static priority that is runnable immediately preempts all other tasks, and the task priority does not change […]

Share

Real-time scheduling: assigning priorities

Real-time scheduling in practice In one of our previous items we talked about Real-time scheduling. Now, we want to show how priorities could be assigned in practice and how deterministic system response can be designed. Deterministic response needs to take into account the worst case scenario: everything is happening at once, at the worst possible […]

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