Making Embedded Systems
A 10-week program with live classes, real-life projects, and teamwork.
If you want to pursue a career as an embedded systems engineer, this course is for you.
After completing these lessons, you will be able to build production systems and work professionally as an embedded systems engineer. You’ll even be ready for the interviews!
Week by week, you'll learn the foundations of embedded systems programming, and will walk away with the ability to design and build products of your own. You'll gain practical knowledge and insights to accelerate your career as an embedded systems engineer.
- Identify what makes an embedded system
- Describe why embedded software is different from other types of software
- Create system diagrams as part of system and software design
- Architect a system, focusing on modularity and information hiding
- Decompose an existing system to better follow the flow of code
- Identify the major portions of a digital circuit schematic, draw block diagrams
- Uses datasheets to answer questions about components
- Recognize the different applications of processor documentation
- Negotiate problem resolution in an interdisciplinary team
- Explain the need for testability in hardware and software
- Identify and implement methods to achieve testability in hardware and software
- Implement a basic embedded system (blinking light)
- Review, decompose and adapt existing HAL code to use both the top and bottom layers
- Understand and solve timer equations
- Deconstruct and document state machines for existing systems
- Construct and document a new state machine
- Explain how interrupts work with state machines
- Describe a small scheduler, define basic RTOS terms
- Group peripherals by type and communication method
- Compare and contrast different peripheral communication methods: ease of use, speed, resilience to noise, and so on
- Prepare a buffering system to work with a data-driven system
- Compute data throughput system requirements
- Describe how an inertial measurement unit (IMU) works at an intuitive level
- Expected results given system orientation
- Analyze how a system's bootloader works
- Criticize firmware update options, identifying potential failure points
- Examine code for common security flaws
- Recognize the main components of a memory map
- Assess resource utilization on a microprocessor
- Identify and solve problems with resource limitations, memory errors, and firmware update
- Describe the differences between precision and accuracy
- Measure and compare algorithm efficiency
- Recognize that the first implementation may only be the most obvious, not the best
- Measure and calculate power consumption in different circumstances
- Articulate how coding choices affect power consumption
- Evaluate which tools will be useful to reduce power consumption under different conditions
What you'll learn
- Build production embedded systems
- Professional embedded systems engineering
- Create a system architecture from an existing system
- Create a system architecture for a new system
- Negotiate design trade-offs with other parts of an interdisciplinary team
- Devise tests as part of the design process
- Improve your interview skills
Who this course is for
Who this course is forTarget Audience
- Professional electrical engineers who are getting into embedded software and want to know more about good software design
- Professional software engineers tasked with bringing up hardware who need to know the differences between embedded software and normal software as well as how to use the tools they aren’t accustomed to
- Software engineers, hardware engineers, IoT professionals, and programmers who want to formalize the bits and pieces of knowledge they have gained by already working in embedded systems
- New college graduates and junior engineers who want to go beyond tactical programming into strategic design and implementation
- Managers who are new to embedded software development and need a big picture view
- Programming in C or C++, intermediate or expert.
Elecia White is the host of the Embedded podcast, author of O'Reilly's Making Embedded Systems, and principal embedded software engineer at Logical Elegance. Elecia has worked on DNA scanners, inertial measurement units for airplanes and race cars, toys for preschoolers, self-driving cars for off-roading, smart rocks for undersea rivers, and assorted other medical and consumer devices.
- Senior Embedded Systems Engineer at Logical Elegance, Inc.
- Author of Making Embedded Systems (O'Reilly Media)
- Shipped dozens of products in varied industries including aerospace, medical, consumer, and automotive. Some have sold tens of millions of units; one product that cost $250k
- Podcast host, blog editor, and author at Embedded.fm
- Published patents related to medical equipment, municipal infrastructure, and education; peer-reviewed articles concerning signal processing, inertial systems, feeding mice, oil quality sensing, and intelligent tutoring systems
- 🏎️ Travelled 180 mph in a racecar while testing hardware
- 🧝♀️ Santa's Elf at LeapFrog, focused on making toys
- 🏜 Melted my hiking boots in the Mojave desert while testing hardware
This is the best introductory book on embedded systems programming I have ever seen and I have seen a lot of them!
Excellent book on the subject! It's well-written, has very useful information, and if you are job hunting in this area, even has interview questions...and descriptions of how the author evaluates responses to them, at the end of each chapter. Very interesting view into the mind of a technical manager there!
A different approach from the usual run of hobby-directed microcontroller books for Arduino, Raspberry Pi etc. The writing is clear and engaging for software people engaging with writing code for the microcontroller domain for the first time.