EmbeddedRelated.com
The 2026 Embedded Online Conference

Delayed printf for real-time logging

Yossi Kreinin October 25, 20133 comments

You often debug by adding a few printfs and looking at the logs. In some real-time/low-level contexts though, you don't have time for text formatting.

You don't want prints to affect timing too much, because then timing-related bugs you're chasing might disappear. And you certainly don't want the system to stop functioning altogether because prints cause it to miss real-time deadlines.

A common alternative to prints is more "raw" logging - an event buffer, where event is a union keeping...


Coroutines in one page of C

Yossi Kreinin August 20, 201315 comments

A coroutine is a function that you can jump back into after returning from it - and it remembers where it was in the code, and all the variables. This is very useful at times.

One use is generating a sequence of values. Here's how you can generate all the x,y pairs in a 2D range in Python:

def iterate(max_x, max_y): for x in range(max_x): for y in range(max_y): yield x,y for x,y in iterate(2,2): print x,y

This prints:

0 0 0 1 1 0 1 1

The yield keyword is like...


Code Metrics - SLOC Count

Stephen Friederichs August 19, 2013

Many programmers will start having flashbacks at the title of this article because it contains the words 'metrics' and 'SLOC'.  Newer programmers are probably wondering what all of the fuss is about - most probably have no negative connotations with the term 'code metrics' and some may not even know what SLOC is.  While there is much baggage associated with metrics and SLOC you shouldn't be afraid to gather fundamentally useful data such as SLOC count from your programming projects...


[ C Programming Techniques: integer type optimization ]

Fabien Le Mentec May 22, 20131 comment

I am currently working on a voltage controller running on a ATMEGA328P, ATMEL AVR 8 bits microcontroller. The controller logic is implemented in the main() routine and relies on a periodical timer whose frequency is fixed at application setup. Among other things, the timer ISR handler increments some per tick counters which are then used by the main routine to implement the voltage controller timing logic.By looking at the code, one noticed that I use the uint8_t type for counters instead of...


Interfacing LINUX with microcontrollers

Fabien Le Mentec May 7, 20132 comments
Introduction

I am increasingly asked to work on small spare time projects where a user needs to control some device over the INTERNET. Recently, a friend needed to control heater relays and measure the temperature of its geographically distant secondary house. Another case relates to the control of a pan tilt home monitoring camera. A last one is the control of an old XY plotter DACs.

In both applications, the user wants to access the system over a web browser using HTTP. From the user...


C Programming Techniques: Function Call Inlining

Fabien Le Mentec April 29, 20137 comments
Introduction

Abstraction is a key to manage software systems as they increase in size and complexity. As shown in a previous post, abstraction requires a developper to clearly define a software interface for both data and functions, and eventually hide the underlying implementation.When using the C language, the interface is often exposed in a header '.h' file, while the implementation is put in one or more  corresponding '.c' files.

First, separating an interface from its...


Data Hiding in C

Stephen Friederichs April 20, 201317 comments

Strictly speaking, C is not an object-oriented language. Although it provides some features that fit into the object-oriented paradigm it has never had the full object-oriented focus that its successor C++ offers. C++ introduced some very useful concepts and abilities that I miss when I’m developing in ANSI C. One such concept is protected member variables and functions.

When you declare a class in C++ you can also declare member variables and functions as part of that class. Often, these...


Chebyshev Approximation and How It Can Help You Save Money, Win Friends, and Influence People

Jason Sachs September 30, 201221 comments

Well... maybe that's a stretch. I don't think I can recommend anything to help you win friends. Not my forte.

But I am going to try to convince you why you should know about Chebyshev approximation, which is a technique for figuring out how you can come as close as possible to computing the result of a mathematical function, with a minimal amount of design effort and CPU power. Let's explore two use cases:

  • Amy has a low-power 8-bit microcontroller and needs to compute \( \sqrt{x} \)...

Welcome to my life!

Morten Dramstad July 18, 20127 comments

Hi folks!

As an electronic engineer the most of my work is about making new designs where a microcontroller is present in 99.9 % of the applications. Since 2003 I am self-employed and do consultants work for different companies. I have been traveling to different parts of the world doing work for DeLaval International, a company that makes automation equipment for the dairy industry. A lot of the things I have done for them involves use of different Atmel AVR...


10 Software Tools You Should Know

Jason Sachs May 20, 201215 comments

Unless you're designing small analog electronic circuits, it's pretty hard these days to get things done in embedded systems design without the help of computers. I thought I'd share a list of software tools that help me get my job done. Most of these are free or inexpensive. Most of them are also for working with software. If you never have to design, read, or edit any software, then you're one of a few people that won't benefit from reading this. 

Disclaimer: the "best" software...


The Missing Agile Conversation

Steve Branam May 15, 2023

In this article, we learn about Agile practices and how they use stories as units of development. Stories consist of a brief description, one to a few sentences. They don’t contain details sufficient to allow a developer to implement them. The Agile practice is to defer details as long as possible because conditions may change. When a developer takes on a story to implement, that’s the time for them to perform the work that has been deferred. They do this by having a conversation, a series of specific discussions working closely with the various SME’s (Subject Matter Experts) who have information relevant to the story.


Core competencies

Colin Walls May 27, 2024

Creating software from scratch is attractive, as the developer has total control. However, this is rarely economic or even possible with complex systems and tight deadlines.


Hidden Gems from the Embedded Online Conference Archives - Part 2

Tim Guite March 20, 20252 comments

A look back at a deep dive into the Mars Perseverance flight software from one of the technical leads at JPL.


Debugging DSP code.

Mark Browne May 1, 2019

I am fascinated with neural network processing and have been playing with them since the 80's.

I am a frequent contributor to the Numenta forum. Numenta is the current project of Jeff Hawins, the guy that gave us the Palm Pilot. They are working with the HTM model. This is a system based on studies of the functions of the cortical column and has some very interesting properties: It processes sequential data streams and has very effective one shot learning. The data is arranged in Sparse...


Embedded Software Creation II - European Normative & Legislation

Dr. Maykel Alonso December 20, 20116 comments

In this post I will explain the European Normative. I will answer the main questions and I will be open to answer all the doubts any of you could have. Please leave a comment and I will answer if i could.

Why I need to look and accomplish some standards? 

The main reason is if you want to comercialize the product in the European Union, if exists any European Directive that cover the product, the product must be marked with the CE mark. For USA it work in the same way by the...


Thumb Rules for Effective Meetings

Kunal Singh October 3, 2007

Meetings are unavoidable at any work place. At most occasions, meetings can be frustrating. We all face meeting-nightmares in our professional life.

I worked on a project, where none of the team-members were ever interested in any kind of group discussion or formal communication. At early stages of the project, no one wanted to be a part of decision making process. During middle-stages of the project, no one wanted to share any status updates or discuss any critical issues. And finally when...


Hidden Gems from the Embedded Online Conference Archives - Part 1

Tim Guite March 5, 2025

Discussion of a "hidden gem" from the Embedded Online Conference archives!


There are 10 kinds of people in the world

Colin Walls September 27, 2023

It is useful, in embedded software, to be able to specify values in binary. The C language lacks this facility. In this blog we look at how to fix that.


A true pioneer passes away... A farewell to Ritchie.

Gene Breniman October 15, 20115 comments

We all have our heroes.  We all have people who were important to our professional developments.  For me, Dennis Ritchie was one of those people.  I was an early adopter of the C programming language.  Back in the very early 80's a friend and neighbor had excitedly shared with me his copy of "The C Programming Language" by Kernighan and Ritchie.  At first I was a non-believer.  I had for several years been a happy and productive assembly language...


Tracing code and checking timings

Richard Dorfner May 25, 20115 comments

Debugging resource limited systemsApplications writers that write code on large systems have it easy. Well, perhaps not easy, but certainly easier. There are some things that they don't have to worry about and there is a huge array of tools available to them when it comes time to debug. The have choices in their toolsets, lots of choices. They also have a large selection of available methods for getting debugging information out to them such as log files, proc entries, pop up dialog boxes or...


The 2026 Embedded Online Conference