- Home
- security
security
How-to articles about the design of secure embedded systems.
Arizona Lottery's Not-So-Random Number Generator
Random numbers -- really, truly random numbers -- play a very important role in security. Unfortunately, they are also common sources of non-random behavior, as in the Arizona Lottery drawing.
- Read more
- Share



Inexpensive Firmware Process Improvements for Small Teams
Learn practical and easy-to-apply software process improvements that even the smallest design teams can use to make firmware easier to code, debug and test, with a tools cost of less than $600.
- Read more
- Share



ESC Boston: Dangerous Flaws in Safety-Critical Device Design
On May 3, 2017, Barr Group CTO and software expert Michael Barr delivered this keynote about the safety and security of Internet of Things devices at the Embedded Systems Conference in Boston.
- Read more
- Share



Security and the IoT
In a recent DDoS attack, devices such as webcams and DVRs were used to launch an attack on domain service provider, Dyn. The enormity of this event brings to light the importance of securing all devices capable of connecting to the Internet.
- Read more
- Share



How to Prevent and Detect Stack Overflow
The safety and security of every embedded system is dependent upon proper operation of the stack (or stacks, if there are multiple). If a stack overflow occurs, a major or minor malfunction is very likely to follow. Despite this, the stack in the majority of embedded systems is sized based on nothing more than a hunch. As well, run-time stack monitoring is too seldom used.
- Read more
- Share



How to Protect Non-Volatile Data
Unexpected power loss and software bugs can undermine the reliability of non-volatile data. Fortunately, there are various ways to make non-volatile data resilient to such corruption.
- Read more
- Share



How to Avoid Common Firmware Bugs
Understanding software and hardware bugs in other embedded systems can help you identify, diagnose, and fix bugs in your own.
- Read more
- Share



State Machines for Event-Driven Systems
State machines are perhaps the most effective method for developing robust event-driven code for embedded systems.
- Read more
- Share



Bug-Killing Coding Standard Rules for Embedded C
A C coding standard can help keep bugs out of embedded software by leveraging common language features and development tools.
- Read more
- Share



More Bug-Killing Coding Standards for Embedded C
This second article on enforceable coding standards for embedded systems adds a set of additional bug-killing rules for using certain C keywords and naming global variables.
- Read more
- Share



2016 Safety & Security Survey
Barr Group's 2016 Embedded Systems Safety & Security Survey had participation from more than 2,500 embedded systems design engineers and revealed a number of interesting trends in the embedded industry.
- Read more
- Share



How to Prevent Bugs in Embedded Software with TDD
It’s a fact: When you create code, you create bugs. Listen in as we present the finer points of Test-Driven Development (TDD) - a game-changing approach to embedded software development that can greatly reduce bugs early in the development process. TDD is not a debugging technique but rather an approach to proactively preventing defects.
- Read more
- Share



Software Reliability and the Internet of Things
As Internet connectivity advances, the transportation, automotive, medical device, smart grid and other industry sectors have become more dependent on embedded software. But is software reliable?
- Read more
- Share



How to Find and Fix the Most Common Embedded Software Bugs
As if debugging traditional PC/server software or even smartphone apps wasn't hard enough, debugging embedded software adds significant challenges.
- Read more
- Share



How to Secure Consumable Components of Medical Devices and Other Embedded Systems
A number of embedded systems, such as medical devices and printers, feature replaceable components designed to be installed new, consumed through one or more cycles of product use, and ultimately disposed.
- Read more
- Share



How to Handle User Errors
With thoughtful design, user interfaces for embedded systems can avoid some user errors altogether and helpfully guide the user through the rest.
- Read more
- Share



Portable Fixed-Width Integers in C
For embedded software developers, the most significant improvements to the C programming language made in the ISO C99 standard update are in the new <stdint.h> header file. Learn the typedef names for the new fixed width integer data types, to make hardware interfacing in C easier.
- Read more
- Share



How to Choose a Real-Time Operating System
In the market for a real-time operating system (RTOS)? This article provides an overview of RTOSes and how you can select the best one for your project.
- Read more
- Share



How to Use Lint for Static Code Analysis
Language specifications, including those for C and C++, are often loosely written. A static analysis tool called lint can help you find dangerous and non-portable constructs in your code before your compiler turns them into run-time bugs.
- Read more
- Share



How to Detect Memory Leaks
Memory leaks can be particularly risky for long-running embedded systems. Here are some tools to identify, track, and analyze memory leaks in embedded C and C++ programs.
- Read more
- Share



How to Define Your Own assert() Macro for Embedded Systems
Embedded systems programmers often value the assert() macro. This article explores the underlying definition of this handy macro, to show you how to roll your own.
- Read more
- Share



How and When to Use C's assert() Macro
The assert() macro is one of those simple tools that would not seem to merit an entire article, but I have come across an alarming number of engineers who have not heard of it or do not use it.
- Read more
- Share



How to Use Watchdog Timers Properly when Multitasking
To keep a watchdog timer from resetting your system, you've got to kick it regularly. But that's not all there is to watchdog science. We will examine the use and testing of a watchdog, as well as the integration of a watchdog into a multitasking environment.
- Read more
- Share



CRC Series, Part 3: CRC Implementation Code in C/C++
CRCs are among the best checksums available to detect and/or correct errors in communications transmissions. This article shows how to implement an efficient CRC in C or C++.
- Read more
- Share



CRC Series, Part 2: CRC Mathematics and Theory
Many common types of data transmission errors cannot be detected by additive checksums. This article describes a stronger type of checksum known as a CRC.
- Read more
- Share



CRC Series, Part 1: Additive Checksums
What if data is lost or corrupted in transit? Communication protocols usually attempt to detect such errors automatically. To do that they use checksums.
- Read more
- Share



