With the advent of the Internet, the world has seen a considerable increase in embedded systems complexity and consumer's expectations alike. In contrast with that trend, development and production costs are expected to steadily decrease, directly impacting the hardware and software design of consumer electronics. In consequence, programmers are commonly challenged to develop extremelly complex firmware on considerably restricted platforms, while meeting restrictive functional/non-functional requirements.
This presentation discusses a real-life development experience of the firmware of the Philips Somneo Wake-Up Lights Family of Connected Devices. More specifically, how the team addressed the issue of developing a complex firmware on a platform with small amount of program flash (while using C++ to keep the code reusable and testable). Under those circumstances, Caio and his team took inspiration from the Bank Switching technique (here called Soft-Code Banking) to design and develop a solution that allow considerably bigger program sizes while keeping the system simple and reusable.
The presentation discusses the ins-and-outs of Soft-Code Banking and how it affects the development of bare-metal C++ applications. Caio presents code examples and considerations over performance, security, memory management, memory consistency, reusability, and build tooling.
slides are now available