Moore’s law is well known in the electronics industry. It states that the number of transistors roughly doubles every two years. Since 1965 Moore’s law has proven to be true, with digital electronics experiencing exponential growth in capabilities. The embedded design industry has greatly benefited from this, with once-cumbersome 8-bit microcontrollers replaced by modern 32-bit MCUs. With the industry’s focus on hardware advancement, the sharp increases in firmware capabilities and the way it is being developed are largely flying under the radar.
Since the dawn of the first computers, firmware has run the switching component of the hardware. Firmware can be thought of as the yin to the hardware yang; firmware and hardware must coexist. In the early days firmware was developed and stored on punch cards -- an example can be seen in Figure 1. The firmware was written to be functional, with reuse and modularity neither needed nor possible.
Figure 1. IBM Punch Card
As hardware capabilities evolved to include programmable Flash, firmware moved from the tedious punch cards to being stored as binary information and loaded onto the microcontroller. Despite the leap in memory capabilities, the firmware itself remained simplistic and functional. Right around 1973, the first version of the C programming language -- which today remains the primary programming language for embedded software -- came into existence.
In the 1980s and ’90s, embedded software development began to change drastically from process and procedural points of view. Firmware had been nearly always developed from scratch and in a functional non-object-oriented way. Reuse and modularity were rare, but techniques for development that allowed reuse and very robust firmware began to emerge.
MORE FROM DESIGN NEWS: Challenges for Embedded Technology Designers in the IoT
At the turn of the millennium and heading into the century’s first decade, the way firmware was developed began to change even more rapidly. Even though the C language was still the primary tool for the embedded software developer, code was no longer written to be just functional but rather to be reusable. Modularity and reuse began to take center stage as development costs and consumer demands for product features began to rise rapidly. Developing firmware from scratch every time was no longer an option.
The way software is being developed today is silently going through a revolution due to the embedded software challenges that developers face. From architectural speed and storage space standpoints, microcontroller technology has evolved to enable firmware developers to employ advanced development techniques. Code shouldn’t be written to be functional; it should use object-oriented techniques that maximize reuse, scalability, and testability. The use of object-oriented techniques allows low-level firmware to be componentized and developed through either high-level tools or automated code generation.
MORE FROM DESIGN NEWS: Famed Hacker: IoT Is Exploitable
Using frameworks, components, and layered architectural design patterns allow embedded software developers to abstract out the hardware and focus on the development of product features rather than how to make a peripheral perform a function the way it was specified. The shift to abstractions and high-level tools is quietly bringing a new advent in firmware development.
A decade from now, firmware development may be nothing more than software integration, grabbing vendor and third-party components, and meshing their APIs together to form a final system. Firmware design may seem to evolve much more slowly than its hardware counterpart, but the way firmware is being developed is going through its own silent revolution.
Jacob Beningo is a Certified Software Development Professional (CSDP) whose expertise is in embedded software. He works with companies to decrease costs and time to market while maintaining a quality and robust product. Feel free to contact him at email@example.com, at his website www.beningo.com, and sign up for his monthly Embedded Bytes Newsletter here.