Designing Embedded Software for Change
One way we can alleviate the increasing pressure on software teams is to design our embedded systems in such a way that we can easily respond to changes. Dr. Parnas describes “design for change” alternatively as design for success. Looking back on my career, I might also describe it as design for sanity – being able to more easily change our software and adapt to changing requirements means less fire drills, lost weekends, and late nights (and a happier boss!).
Heapless C++
In this course you will learn about a diverse set of patterns, tools & techniques to create C++ code without ever using the heap. With these you’ll be able to write deterministic & safe programs, that are faster and consume less memory.
The Parnas Design Process
This course is a supplemental component of Designing Embedded Software for Change and Abstractions and Interfaces. We walk through (and expand upon) a process that David Parnas has described in many of his works.
Introduction to Build Systems using Make
This introductory course will teach you the basics of the software construction process using compilers and linkers, the Make language, and how build systems help us to automate the process while avoiding common errors.
Creating a Cross-Platform Build System for Embedded Projects with CMake
In this course, we provide a hands-on approach for learning to use CMake. You’ll create a complex build system from scratch, learning the language as you go. We will teach you all of the necessary skills for managing complex projects that must support multiple processor architectures, build with multiple toolchains, and work on multiple OSes.
Creating a Cross-Platform Build System for Embedded Projects with Meson
In this course, we provide a hands-on approach for learning to use Meson. You’ll create a complex build system from scratch, learning the language as you go. We will teach you all of the necessary skills for managing complex projects that must support multiple processor architectures, build with multiple toolchains, and work on multiple OSes.
Building a Reusable Project Skeleton with CMake
In this course, we guide you through the creation of a reusable CMake-based project skeleton using an existing project as a starting point. You can follow along and build a skeleton using our reference build project, or you can use one of your own projects as the starting point and follow along with our examples.
Building a Reusable Project Skeleton with Meson
In this course, we guide you through the creation of a reusable Meson-based project skeleton using an existing project as a starting point. You can follow along and build a skeleton using our reference build project, or you can use one of your own projects as the starting point and follow along with our examples.
Automating the Deployment of a Reusable Project Skeleton
In this course, we guide you through automating the process of deploying your reusable project skeleton to a new project. We also guide you through automating the setup process for a new development machine.
Consulting Lessons Learned
This course documents the lessons we’ve learned while working as consultants and contractors.
Diving into the C and C++ Standard Libraries
This members-only course is meant to serve as a compendium of interesting lessons learned from writing and maintaining a C standard library. We will also be featuring implementation analyses, refactoring demonstrations, and tooling integrations as we continue to maintain and improve the library.
Behind the Scenes at Embedded Artistry HQ
All of our members get exclusive behind-the-scenes access videos and articles showing how we work at Embedded Artistry.
Open Ventilator Design Review
Medtronic released the full set of design, manufacturing, and test files for the PB560 during the COVID-19 pandemic. This is a rare opportunity for engineers to study the design of a commercial medical product in detail. This course will provide our review and commentary on the PB560 design files, documentation, and source code. All Embedded Artistry members receive access to this course.
Abstractions and Interfaces
(Under construction) A key aspect of system design is defining interfaces. We explore techniques and processes that we can use to improve the interfaces we design.
Building Testable Embedded Systems
(Under development) One way we can alleviate the Increasing Pressure on Software Teams is to build our systems so that they are testable, which enables us to leverage testing automation in our development processes.
CI/CD for Embedded Systems
(Under development) This course is a guide for creating a CI/CD pipeline for your embedded projects.
Effective Documentation
This is an early working outline for our Effective Documentation course. Why Documentation is Important Why Documentation is Important Lessons Module Introduction: Why Documentation is Important Insufficient Documentation Wastes Everyone’s Time Preview We Can’t Read Your Mind The Forces Driving Inadequate Documentation The Forces Driving Inadequate Documentation Lessons Module Introduction: The Forces Driving Inadequate Documentation What Documentation has the Highest Impact? What Documentation has the Highest Impact? Lessons Module Introduction: What Documentation Has the Highest Impact? How to Document Effectively How to Document Effectively Lessons Module Introduction: How to Document Effectively Use the Right Level of Detail Buy – $2,000.00
