-
Why Take an Embedded Systems Course?
Embedded systems are special-purpose computers that users don’t think of as computers. Examples include cell phones, traffic light controllers, and programmable thermostats. In earlier posts I argued why any computer scientist should take a compilers course and an operating systems course. These were easy arguments to make since these areas are core CS: all graduates…
-
Margin in Software Systems
Margin of safety is a fundamental engineering concept where a system is built to tolerate loads exceeding the maximum expected load by some factor. For example, structural elements of buildings typically have a margin of safety of 100%: they can withstand twice the expected maximum load. Pressure vessels have more margin, in the range 250%-300%,…
-
C and C++ Make It Hard to Read a Register for Its Side Effects
[ This post was co-written with Nigel Jones, who maintains an excellent embedded blog Stack Overflow. Nigel and I share an interest in volatile pitfalls in embedded C/C++ and this post resulted from an email discussion we had. Since we both have blogs, we decided to both post it. However, since comments are not enabled…
-
Computer Science Fiction
Science fiction explores the effect of technological progress on society. It is ironic, then, that the majority of SF authors miserably failed to predict the impact of computers and information technology. Why does Google return no meaningful hits for “computer science fiction?” Is it not obvious that this term needs to exist, if we wish…
-
Nine ways to break your systems code using volatile
The volatile qualifier in C/C++ is a little bit like the C preprocessor: an ugly, blunt tool that is easy to misuse but that — in a very narrow set of circumstances — gets the job done. This article will first briefly explain volatile and its history and then, through a series of examples about…
-
Is That a Compiler Bug?
It’s common for a computer program to display behavior seemingly unrelated to its source code. Additionally, programs written in C/C++ frequently change their behavior when the compiler optimization options are changed. This post is a quick guide to figuring out if the compiler is at fault. This post was motivated by a blog post by…