We're hiring!

We're actively seeking developers for our new Detroit location. Learn more

Embedded Software

Not Tending to “The Build” – A Common Anti-Pattern

The Build is an essential cog of any software project, but it is most often maintained by identified “experts.” This needs to stop. Agile depends on shared code ownership and understanding of the system — all parts of the system. Consequences of Ignoring the Build Most sufficiently-sized projects use a continuous integration system and some…

Read More »

Also posted in Project Planning, Risk, Testing | Tagged , | Leave a comment

Wireless Communication Between Raspberry Pi and Your Computer

Imagine for a moment that you want to develop a product that uses a Raspberry Pi. Let’s say that this product requires the ability to connect up to a wireless network. Maybe it’s a device that streams music from an online web-service, or maybe it hosts some type of webpage. This functionality should be easy to accomplish…

Read More »

Also posted in Unix, Linux, and Bash | Tagged | 2 Comments

Adventures in Undefined Behavior

I recently had to write my own malloc. While replacing important bits of the C standard library would normally be serious over-engineering, it turned out to be the only option. The Backstory We had taken over an embedded project with known stability issues, and I quickly determined that thread race conditions were involved. After fixing…

Read More »

Posted in Embedded Software | Tagged | 2 Comments

Working with Custom Return Values in GoogleMock

When working with the GoogleMock C++ mocking library, you can get pretty far using only default expectation return values or explicitly specifying expectation return values. There are some additional options that can save you a lot of effort in some circumstances though. Let’s take a look at a few of them. Standard Values Consider an…

Read More »

Also posted in Testing, Tools | Tagged , | Leave a comment

Getting Accustomed to Embedded Development

I have a bachelor’s degree with majors in both Computer Science and Computer Engineering, and have a pretty solid base of theory for programming at pretty much any level of computing. Most of my professional experience to date has been working on either desktop software or web applications. As such, I relished an opportunity that…

Read More »

Posted in Embedded Software | Tagged | Leave a comment

Writing C on Raspberry Pi with Test-Driven Development

The Raspberry Pi is a great product. Undeniably, it presents us tinkerers with unlimited possibilites to get our hands dirty writing custom programs and bringing the Pi to life. If you want to write a program to run on the Pi, you have a lot of languages to choose from. Being an embedded developer, I thought…

Read More »

Posted in Embedded Software | Leave a comment

heatshrink: An Embedded Data Compression Library

In embedded systems, space is always tight. Adding pennies of extra storage can be enough to kill a budget (when multiplied by hundreds of thousands or even millions of units), so available space has to be used effectively. For my current project, I need to fit a lot of data into 16 MB of flash:…

Read More »

Also posted in Tools | Tagged | 13 Comments

Why Haskell Is Worth Learning

When I recommend learning Haskell to the uninitiated, I often get asked: “Why Haskell?” “Is it a practical language?” and ”Is it something I can actually use?” My answer is definitely yes. Haskell isn’t my primary language at work (I mostly write C code for embedded systems), I’ve still found it incredibly useful. And even if…

Read More »

Also posted in Languages, Tools | Tagged , , | 13 Comments

Using UDP Broadcast Messages to Discover Local Clients

On my current project, we have a group of networked devices that will be assigning their own IP address semi-randomly based on a serial number burned into the CPU. This leaves us with a problem: we need to be able to quickly determine who’s on the network. We’ve chosen to have each device listen on…

Read More »

Posted in Embedded Software | 2 Comments

Bit-banding – An Elegant Approach to Setting & Clearing Bits

bit-banding

I was recently working on an embedded project when the term Bit-banding came up. I had never heard this term before. I asked around to a handful of my coworkers, and they hadn’t heard of it either. The Problem with Read-Modify-Write Before I explain what Bit-Banding is, let me give a little bit of context….

Read More »

Posted in Embedded Software | Tagged , , | Leave a comment