Embedded Systems Engineering Roadmap
❓ What is an Embedded System?
▶️ ISO/IEC/IEEE 24765 Standard:computer system that is part of a larger system and performs some of the requirements of that system. For example, a computer systemused in an aircraft or rapid transit system.
The hardware and software of an embedded system are usually minimized and optimized for specific functions. The embedded system includes at least one microcontroller, microprocessor or digital signal processor. The embedded system designed to optimize reliability, cost, size and power saving for applications.▶️ "Making Embedded Systems" Book:
An embedded system is a computerized system that is purpose built for its application.▶️ "Computer Organization and Embedded Systems" Book:
A physical system that employs computer control for a specific purpose, rather than for general-purpose computation, is referred to as an embedded system.▶️ Analog Devices Glossary:
An embedded system is a system in which the computer (generally a microcontroller or microprocessor) is included as an integral part of the system.
Often, the computer is relatively invisible to the user, without obvious applications, files, or operating systems. Examples of products with invisible embedded systems are the controller that runs a microwave oven or the engine control system of a modern automobile.▶️ Embedded Systems Glossary:
A combination of computer hardware and software, and perhaps additional mechanical or other parts, designed to perform a dedicated function.
In some cases, embedded systems are part of a larger system or product, as in the case of an antilock braking system in a car.
🗺️ The Roadmap
🌐 Open the interactive roadmap to explore it in your browser. Click any topic to read its description and see its learning resources, hover over it to see the topics it is related to, filter topics by area (software, hardware, soft skills) or importance, and search across all topics and resources. The roadmap can also be downloaded there as a PDF or PNG image.[!NOTE]
Remember that the importance of individual software and hardware skills can differ depending on the specific requirements of the company and the job role.
[!TIP]
To differentiate between the types of learning resources and the quality of their content, specific symbols are used before each item.
Resource types:
- 📘 : Books
- 🎞️ : Videos
- 📝 : Write-ups, articles, and blog posts
- 🔗 : Other links that do not fit into any of the above categories
Content quality symbols:
- 👶 : Easy-to-understand and beginner-friendly resources. Refer to them if you do not have prior knowledge in a topic.
- 💎 : Well-known references that have truly invaluable and comprehensive content. Refer to them if you want to deepen your understanding of a topic.
[!IMPORTANT]
This repository is not affiliated with or financially supported by any content creator, publisher, or organization. We do not endorse or recommend any specific paid resources. Both free and paid resources are included to provide a range of options, allowing you to choose what best suits your needs and preferences.
😕 Don't Know Where to Start!
If you feel overwhelmed by the extensive list of topics in the roadmap, you're not alone. Before delving too deeply, let's ease into it with some simple starter projects. Learning embedded systems engineering takes time and effort. Don't get discouraged if you don't understand something right away. Keep practicing and you will eventually get there.⚒️ Projects
Engaging in hands-on projects is the most effective approach to learning. Rather than solely relying on theoretical knowledge from books or articles. Undertaking projects allows for practical learning experiences. Even a seemingly basic project has the potential to teach you more than hours of aimless reading. You can refer to books, articles, and courses when faced with difficulties in understanding the problems in real-world projects. Don't try to build a complex project right away. Start with small, manageable projects to get your feet wet.- 🔗 Random Nerd Tutorials | Learn ESP32, ESP8266, Arduino, and Raspberry Pi
- 🔗 Last Minute Engineers
- 🔗 51 STM32 Projects & Tutorials for Beginners and Up - Hackster.io
- 🔗 STM32 (STM32F103C8) Projects & Tutorials
- 🔗 ElectronicWings Projects
- 🔗 STM32 Firmware - Phil’s Lab (YouTube Playlist)
- 🔗 Raspberry Pi Based Embedded Project Ideas
- 🔗 Embedded Linux On ARM | Projects
- 🔗 Embedded System Project Series - Artful Bytes (YouTube Playlist)
- 🔗 ESP32 ESP-IDF Tutorials & IoT Protocols
- 🔗 flip-card - RP2350 fluid-simulation business card (Rust firmware and PCB design)
- 🔗 picoZ80 - RP2350 + ESP32 drop-in Z80 CPU replacement for retro computers
🔎 Search and Ask!
Use search engines to find the answers to your questions. If you can't find what you're looking for using search engines, AI chatbots can also provide assistance. Keep in mind that AI may provide incorrect answers in some cases. It's best to confirm any answers with more reliable references. If you have reservations about relying on AI advice alone, you can also ask your questions from real people:✳️ Career Development
As an embedded systems engineer, it's essential to stay up-to-date with industry trends, best practices, and new technologies to advance your career. Here are some resources to help you achieve your career goals:- 🔗 EmbeddedJobs - A job board focused exclusively on Embedded Systems job market.
🎥 Courses and YouTube Contents
You may have heard that YouTube is a university. And it's true - there is an extensive amount of invaluable free content on embedded systems available on YouTube. You'll also find some excellent free courses through Coursera and EdX. Additionally, Udemy offers some high-quality paid course options.- 🎞️ DigiKey (YouTube Channel)
- 🎞️ Coursera - Introduction to Embedded Systems Software and Development Environments
- 🎞️ Coursera - Embedded Software and Hardware Architecture
- 🎞️ Coursera - ARM Cortex STM32 Deep Dive: Mastering Embedded Systems
- 🎞️ Fastbit Embedded Brain Academy
- 🎞️ Modern Embedded Systems Programming Course (YouTube Playlist)
- 🎞️ element14 presents (YouTube Channel)
- 🎞️ Ben Eater (YouTube Channel)
- 🎞️ Phil’s Lab (YouTube Channel)
- 🎞️ Embedded Systems - Jacob Sorber (YouTube Playlist)
- 🎞️ edX - Embedded Systems - Shape The World: Microcontroller Input/Output
- 🎞️ edX - Embedded Systems - Shape The World: Multi-Threaded Interfacing
- 🎞️ edX - Embedded Systems Essentials with Arm: Getting Started
- 🎞️ Low Byte Productions
🕹️ Arduino
If you do not have any background in programming embedded systems, Arduino boards and libraries are the best choice for you to start and learn the basics. Just keep in mind that most of the Arduino libraries are developed for learning purposes and are not optimized to be used in industry. Additionally, the Arduino Core (the platform-specific implementation of the hardware-independent ArduinoCore-API) takes care of most of the low-level hardware-associated operations that you, as an embedded engineer, should be able to handle yourself or at least have a clear understanding of. If you want to become a professional embedded developer, you should be able to effectively use industry-standard APIs and SDKs provided and approved by microcontroller vendors, such as CMSIS for ARM Cortex-M microcontrollers, STM32Cube for STM32, ESP-IDF for Espressif microcontrollers, etc.- 🔗 Getting Started with Arduino
- 🔗👶 Arduino Built-in Examples
- 🔗 Arduino Language Reference
- 🎞️ All New Arduino R4 WiFi LESSONS for Absolute Beginners (YouTube Playlist)
- 🎞️ New Arduino Tutorials (YouTube Playlist)
- 🎞️ Arduino in a commercial product?
- 🎞️ Arduino Project to Product (YouTube Playlist)
👨🏫 Educational Websites
- 🔗 DeepBlueMbedded
- 🔗 Digital Electronics Deeds
- 🔗💎 Interrupt Blog by Memfault
- 🔗💎 EmbeddedRelated.com
- 🔗 ElectronicWings - Hardware Developers Community
- 🔗 EduTecnica (Italian)
- 🔗 Microchip University
- 🔗 Nordic Developer Academy
- 🔗 Electronics Tutorials
- 🔗 SparkFun Learn: Learn at SparkFun Electronics
- 🔗 Adafruit Learning System
- 🔗 STM32 World
- 🔗 ControllersTech
- 🔗 Embedded Systems News - CNX Software
🗺️ Other Helpful Roadmaps
- 🔗 Embedded Artistry Beginners Roadmap
- 🔗 Embedded Systems Skill Tree
- 🔗 Interactive Embedded Systems Skill Tree (with progress tracking & sync)
- 🔗 PCB Design Skill Tree
- 🔗 FPGA / ASIC Engineering Roadmap
🛠️ IDEs
- 🔗 Keil MDK & µVision
- 🔗 IAR Embedded Workbench
- 🔗 STM32CubeIDE
- 🔗 Microchip Studio for AVR® and SAM Devices
- 🔗 MPLAB® X IDE
- 🔗 MCUXpresso IDE
👨💻 VS Code Extensions
🐜 PlatformIO
PlatformIO is a cross-platform, cross-architecture, multiple framework, professional tool for embedded systems engineers and for software developers who write applications for embedded products. PlatformIO is not yet extensively adopted in industrial and large-scale projects, however, it is an excellent choice for individuals working on smaller projects. This is because it greatly reduces the need to install frameworks and setup build and debug tools, allowing you to concentrate on programming.📚 Learning Resources
[!WARNING]
It is not necessary to read all the books, articles, or watch all the videos you see here. If you try to do so, you will finally get tired and disappointed. You cannot study all the available content here in a reasonable time because it may take years. It is important to study enough to have at least a basic understanding of the required topics. Of course, the more time you dedicate to studying and doing projects, the more profound your knowledge and expertise will become.
Some of the resources mentioned here will just be used as references. Refer to them only when you need them._________________
✳️ Soft Skills
Similar to other professions, embedded engineers require soft skills that can't be solely obtained from reading or watching videos. These skills are cultivated through interactions and tackling various work obstacles. Improving soft skills is not a one-size-fits-all approach. It will vary based on one's individual traits and requires self-awareness of your strengths and areas for growth. Enhancing these skills takes time and effort.- 📝 Soft Skills For Embedded Systems Software Developers
- 📝 10 Skills Every Embedded Engineer Should Have
🔵 Communication Skills
- 🔗👶 Technical Writing Courses - Google for Developers
- 📝💎 How To Ask Questions The Smart Way - Eric S. Raymond
- 🔗 Software documentation guide - Write the Docs
🔵 Problem-Solving Skills & Critical Thinking
- 📘💎 Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems - David J. Agans
- 📝 When debugging, your attitude matters - Julia Evans
🔵 Teamwork & Collaborative Abilities
- 📝 How to Work Well on Teams - Software Engineering at Google
- 📝 Knowledge Sharing - Software Engineering at Google
- 🔗💎 Code Review Developer Guide - Google Engineering Practices
- 🔗 Atlassian Team Playbook
🔵 Organizational & Time Management Skills
- 📘💎 Getting Things Done: The Art of Stress-Free Productivity - David Allen
- 🎞️👶 Work Smarter, Not Harder: Time Management for Personal & Professional Productivity - Coursera
- 📝💎 Maker's Schedule, Manager's Schedule - Paul Graham
🔵 Being Self-Driven and Independent
- 🎞️👶 Learning How to Learn - Coursera
- 📝💎 Teach Yourself Programming in Ten Years - Peter Norvig
- 📝💎 How to Do Great Work - Paul Graham
- 📝 You and Your Research - Richard Hamming
🔵 Adaptability & Patience
- 📘 Mindset: The New Psychology of Success - Carol S. Dweck
- 🎞️👶 The power of believing that you can improve - Carol Dweck (TED Talk)
✳️ Electronics
🔵 Basic Calculus
🔵 Principles of Electric Circuits
- 🔗👶 Lessons in Electric Circuits (All About Circuits)
- 🔗👶💎 Electronics Tutorials
- 📘👶💎 Fundamentals of Electric Circuits - Charles K. Alexander, Matthew Sadiku
- 📘👶💎 Principles of Electric Circuits: Conventional Current Version - Thomas L Floyd, David M. Buchla
- 🎞️💎 Basic Circuit Theory I (By Prof. Razavi) (YouTube Playlist)
🔵 Electronics Fundamentals
- 🔗👶💎 Build Electronic Circuits - Øyvind Nydal Dahl
- 🎞️👶 Electronic Basics - GreatScott! (YouTube Playlist)
- 📘👶 Make: Electronics: Learning by Discovery - Charles Platt
- 📘👶💎 Electronic Devices: Conventional Current Version - Thomas Floyd, David Buchla, Steven Wetterling
- 📘👶💎 Electronics Fundamentals: Circuits, Devices & Applications - Thomas L Floyd, David M. Buchla, Gary D. Snyder
- 📘👶 Practical Electronics for Inventors - Paul Scherz, Simon Monk
- 📘💎 The Art of Electronics - Paul Horowitz, Winfield Hill
- 📝 Here’s a Quick Way to Know about Major Electronic Components
- 📘 Encyclopedia of Electronic Components - Charles Platt
- 🔗 Awesome Electronics: A curated list of electronics resources
🔵 Digital Design
- 🔗👶 Tiny Tapeout > Digital Design Guide
- 🔗👶 Mvidia - From Transistors to Teraflops (interactive course)
- 📘💎 Digital Design - Morris Mano, Michael Ciletti
- 📘👶💎 Digital Design and Computer Architecture: ARM Edition - Sarah Harris, David Harris
- 📘👶💎 Digital Design and Computer Architecture: RISC-V Edition - Sarah Harris, David Harris
- 📘👶 Digital Fundamentals - Thomas L. Floyd
🔵 Computer Architecture
Computer architecture is the backbone of embedded systems, governing the hardware and software interactions. Embedded developers need a grasp of computer architecture to design, develop, and debug embedded software effectively. Expertise in ARM and RISC-V, two prevalent instruction set architectures (ISAs) in embedded systems, is paramount for embedded developers. ARM is the dominant ISA, while RISC-V's open-source nature and flexibility are gaining traction.- 📘👶💎 Computer Organization and Design: ARM Edition - David A. Patterson, John L. Hennessy
- 📘👶💎 Digital Design and Computer Architecture: ARM Edition - Sarah Harris, David Harris
- 📘👶💎 Digital Design and Computer Architecture: RISC-V Edition - Sarah Harris, David Harris
- 📘👶 The Elements of Computing Systems - Noam Nisan, Shimon Schocken
- 📘 Computer Organization and Embedded Systems - Carl Hamacher, Zvonko Vranesic, Safwat Zaky, Naraig Manjikian
- 📘 Embedded Systems Architecture - Tammy Noergaard
- 📘 Embedded Systems Architecture - Daniele Lacamera
- 📘 The Definitive Guide to ARM® Cortex®-M0 and Cortex-M0+ Processors - Joseph Yiu
- 📘 The Definitive Guide to ARM® Cortex®-M3 and Cortex®-M4 Processors - Joseph Yiu
- 🔗 Build an 8-bit computer from scratch
✳️ Using Test Equipment
Embedded systems often require specialized test equipment to verify their functionality and performance. This equipment includes multimeters, oscilloscopes, logic analyzers, function generators, power supplies, and other tools that allow engineers to measure signals, inject stimuli, and monitor the behavior of embedded systems.🔵 Multimeter
🔵 Logic / Protocol Analyzer
🔵 Oscilloscope
- 🎞️👶 What’s an OSCILLOSCOPE?
- 🎞️👶 How to Use an Oscilloscope
- 🎞️👶 How to use an oscilloscope / What is an oscilloscope / Oscilloscope tutorial
- 🎞️ Understanding EMI Debugging with Oscilloscopes
✳️ Prototyping Skills
While hardware design and prototyping are primarily the responsibility of electronic hardware design engineers, embedded software engineers can benefit from a basic understanding of these concepts. This knowledge can be instrumental in identifying and resolving hardware-related issues during embedded system debugging. By having a grasp of hardware principles, embedded software engineers can effectively pinpoint the root causes of problems, leading to quicker and more efficient troubleshooting.🔵 Breadboarding
Breadboarding is a hands-on approach to prototyping circuits, providing a versatile platform for experimentation and circuit design. Embedded systems often utilize breadboards for their ease of use, flexibility, and cost-effectiveness. By connecting components on a breadboard, embedded systems developers can quickly test and refine their designs without the need for permanent soldering. This allows for rapid iterations and efficient debugging, making breadboarding an invaluable tool for embedded system development.🔵 Hardware Design Basics
- 🎞️👶💎 Hardware Design - Phil’s Lab (YouTube Playlist)
- 🎞️ Electronic Circuit Design - IFE - TU Graz (YouTube Playlist)
- 🎞️ Microcontroller-Based Hardware Design With Altium Designer (YouTube Playlist)
🔵 PCB Design / EMC
- 🎞️💎 Altium Academy YouTube Channel
- 🎞️💎 Robert Feranec YouTube Channel
- 🎞️👶 Altium Tutorials for Beginners - Robert Feranec (YouTube Playlist)
- 🎞️👶 Create PCBs for Rapid Prototyping - DigiKey (YouTube Playlist)
- 🎞️👶💎 PCB Design for Beginners - Altium Academy (YouTube Playlist)
- 🎞️ How to Make a Raspberry Pi Compute Module 4 Carrier Board - DigiKey (YouTube Playlist)
- 🎞️💎 How To Learn PCB Design (My Thoughts, Journey, and Resources) - Phil's Lab #87
- 🎞️👶 KiCad 6 STM32 PCB Design Full Tutorial - Phil's Lab #65
- 🎞️👶 Intro to KiCad - DigiKey (YouTube Playlist)
- 🎞️💎 PCB Design for EMI & SI - Phil's Lab #64
- 🎞️💎 PCB Design for Advanced Users (YouTube Playlist)
- [🎞️💎 PCB Knowledge [PCB Production Tips By PCBWay] (YouTube Playlist)](https://www.youtube.com/playlist?list=PLzxdr3n97eVtHuh7gnDzMubuO836kvfu7)
- 🎞️💎 Udemy – High-Speed Board Design Course System On Module - EsteemPCB
- 🎞️💎 Udemy – Advanced Hardware and PCB Design Masterclass 2022
- 🎞️💎 9 Simple Tricks to Improve EMC / EMI on Your Boards - Practical examples (with Min Zhang)
- 🎞️💎 Many EMC Tips to Help You Design Better PCB Boards (with Keith Armstrong)
- 🔗 LearnEMC - EMC Resources
- 🔗 A Better Way to Build PCBs - Flux AI
- 🔗 EasyEDA
- 🔗 KiCad - Free and open-source schematic capture and PCB design software
- 🔗 Fritzing
- 🔗 Cirkit Designer
🔵 Soldering / Rework
- 🎞️👶 How To Solder - Electronics with Becky Stern | Digi-Key Electronics
- 🎞️👶 HOW TO SOLDER! (Beginner's Guide)
- 🎞️👶 Soldering Crash Course: Basic Techniques, Tips and Advice!
- 🎞️ How to Solder Through-Hole Components - Another Teaching Moment | DigiKey Electronics
- 🎞️ How to Solder QFN MLF Package by Hand (Using a Hot Air Rework Station) | Digi-Key Electronics
- 🎞️ From Solderless Breadboard to Soldered Circuit - Electronics with Becky Stern | Digi-Key Electronics
✳️ FPGA Development
FPGAs (Field-Programmable Gate Arrays) are specialized integrated circuits that can be configured to perform various digital logic functions. They are widely used in embedded systems to achieve high performance, flexibility, and cost-effectiveness. FPGA designers use hardware description languages (HDLs) to create customized circuits that map directly to the FPGA architecture. Since FPGA engineering and verification differ significantly from embedded software development, it stands as a specialized domain within embedded systems.- 🔗 FPGA / ASIC Engineering Roadmap
- 📝 What are FPGAs?
- 🎞️ FPGA vs. Microcontroller: How to choose the right one for your project
- 🎞️👶 Introduction to FPGA (YouTube Playlist)
- 🔗👶 FPGA Fundamentals - Nandland
- 🎞️💎 Coursera – FPGA Design for Embedded Systems Specialization
- 📘💎 A Hands-On Guide to Designing Embedded Systems - Adam Taylor, Dan Binnun, Saket Srivastava
✳️ Programming Fundamentals
Mastering programming fundamentals and software development principles is essential for a successful embedded design. Embedded systems demand efficient code, optimized data management, reusable design patterns, and effective memory management to function effectively in resource-constrained environments. Embedded developers must possess a strong foundation in these core concepts to create reliable and performant embedded systems.🔵 Basic Discrete Mathematics
- 🎞️ Coursera - Introduction to Discrete Mathematics for Computer Science Specialization
- 📘👶 Open Access Discrete Mathematics Books by LibreTexts
- 📘👶 Essential Discrete Mathematics for Computer Science - Harry Lewis, Rachel Zax
- 📘👶 Guide to Discrete Mathematics - Gerard O'Regan, Springer
- 📘💎 Bridge to Abstract Mathematics, AMS
🔵 Algorithms & Data Structures
- 📘👶💎 Grokking Algorithms - Aditya Y. Bhargava
- 📘💎 Introduction to Algorithms - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein
- 🔗 Collection of various algorithms in mathematics, machine learning, computer science, physics, etc implemented in C for educational purposes
- 🎞️ Udemy – Embedded Systems State Machines & Data Structures
- 🔗 Data Structures in C
- 🎞️ Data Structures - Full Course Using C and C++
- 🔗 Hello Algo
🔵 Design Patterns
- 📝 Practical Design Patterns: Opaque Pointers and Objects in C
- 📘💎 Design Patterns for Embedded Systems in C - Bruce Powel Douglass
- 📘💎 Making Embedded Systems: Design Patterns for Great Software - Elecia White
- 🎧💎 Making Embedded Systems: Design Patterns for Great Software - Elecia White (Audio Book)
- 🔗 Design Patterns - Refactoring Guru
🔵 State Machines
- 📝 Programming embedded systems the easy way – with state machines
- 🎞️💎 State Machines (YouTube Playlist)
- 🎞️💎 Event-Driven Programming (YouTube Playlist)
- 🎞️💎 Udemy - Embedded System Design using UML State Machines
- 📝 “Input-Driven” vs. Event-Driven State Machines
- 📝 State Machines for Event-Driven Systems
- 📘 Practical UML Statecharts in C/C++ by Miro Samek
🔵 Memory Management
- 🎞️ Understanding the C runtime memory model
- 🎞️ Pointers and dynamic memory - stack vs heap
- 🎞️ Dynamic Memory Allocation | C Programming Tutorial
- 🎞️ Dynamic memory allocation in C - malloc calloc realloc free
- 📝 What is Memory Leak in C/C++? How can we avoid?
- 📝 Understanding Memory Management in Rust
- 📝 Memory Management in Python
✳️ Programming Languages
Low-level languages like C and assembly provide direct hardware access, enabling efficient code optimization for resource-constrained embedded systems. System-level languages like C++ and Rust offer a higher level of abstraction for complex embedded applications, while Python is often employed for testing embedded systems due to its simplicity.🔵 C
- 🎞️👶 Microchip University - Syntax And Structure of C - Simply C
- 🎞️💎 Microchip University - Advanced C Programming
- 🎞️💎 Microchip University - Advanced Embedded C Tips, Tricks, and Cautions
- 🎞️💎 Microchip University - C Programming: Linked List Data Structures
- 🎞️💎 Microchip University - C Programming Callbacks
- 🎞️👶 C Programming for Beginners | Full Course
- 🎞️ C Programming Tutorials (YouTube Playlist)
- 📘💎 The C Programming Language - Brian W. Kernighan, Dennis M. Ritchie
- 🔗👶 C by Example
- 📘👶 The Little Book of C
- 📘👶 Beej's Guide to C Programming
- 📘 C How to Program - Paul Deitel, Harvey Deitel
- 📘 Effective C - An Introduction to Professional C Programming - Robert C. Seacord
- 📘 Modern C - Jens Gustedt
- 🔗 Embedded C Coding Standard
- 🔗 newlib C Library Documentation
- 🔗 The GNU C Library (glibc)
- 📝 From Zero to main(): Bare metal C
- 📝 From Zero to main(): Bootstrapping libc with Newlib
- 🎞️👶 Learn C Programming and OOP with Dr. Chuck
- 📘 Extreme C - Kamran Amini
- 🎞️👶 Coursera - C Programming with Linux Specialization
🔵 C++
- 📝 Modern C++ in Embedded Development: (Don't Fear) The ++
- 📝 C++ On Embedded Systems
- 📝💎 Bare Metal C++ - Alexey Rybachuk
- 🎞️💎 C++ in Constrained Environments - Bjarne Stroustrup - CppCon 2022
- 🎞️👶 C++ Tutorial for Beginners - Full Course
- 🎞️ C++ by The Cherno (YouTube Playlist)
- 🎞️👶💎 Udemy - Beginning C++ Programming - From Beginner to Beyond
- 🎞️💎 CppCon Conferences - YouTube
- 📘💎 A Tour of C++ (3rd Edition) - Bjarne Stroustrup
- 📘💎 The C++ programming Language (C++11) - Bjarne Stroustrup
- 📘💎 Programming -- Principles and Practice Using C++ (3rd Edition) - Bjarne Stroustrup
- 📘💎 Real-Time C++: Efficient Object-Oriented and Template Microcontroller Programming - Christopher Kormanyos
- 📘 Effective Modern C++ - Scott Meyers
- 🎞️👶 The Essence of C++ by Bjarne Stroustrup - YouTube
- 🎞️👶💎 Delivering Safe C++ by Bjarne Stroustrup - CppCon 2023
🔵 Assembly
- 📝👶 Introduction to ARM Assembly Basics
- 🎞️ Udemy – ARM GNU Assembly Programming From Ground Up
- 🎞️ Assembly Language Programming with ARM – Full Tutorial for Beginners
- 📝 How to Use Inline Assembly Language in C Code
- 📘 Raspberry Pi Assembly Language Programming : ARM Processor Coding
- 🔗 Battery info program for x86-64 Linux laptops in 298 bytes of machine code
🔵 Python
- 📝 Python for embedded systems testing
- 📝👶 The Python Handbook – Learn Python for Beginners
- 🔗💎 Real Python: Python Tutorials
- 📘👶💎 Python Crash Course - Eric Matthes
- 🔗 MicroPython - Python for microcontrollers
- 🔗 MicroPython 101 | Arduino Documentation
- 🔗 CircuitPython
- 📝 The Pros and Cons of Designing Embedded Systems with MicroPython
- 📝 Programming the ESP32 with MicroPython
🔵 Rust
- 📝 5 roadblocks to Rust adoption in embedded systems
- 🔗 The Embedded Rust Book
- 🎞️ The Future of Programming: Rust (YouTube Playlist)
- 🔗 Community Rust support projects for STM32 microcontrollers
- 🔗 Rust on ESP Community
- 🎞️ Embedded Rust su ESP32 (Italian) - YouTube Playlist
- 📝 Rust on STM32: Getting started
- 📝 From Zero to main(): Bare metal Rust
- 📝 Writing an OS in Rust - Philipp Oppermann's blog
- 📝 Kernel Driver with Rust in 2022
- 🔗 Rustlings - Small exercises to get you used to reading and writing Rust code!
- 🔗 Learn Rust the Effective Way
🔵 Zig
- 📝 Testing Zig for embedded development
- 🔗 Zig Embedded Group
- 🔗 MicroZig - Unified abstraction layer and HAL for several microcontrollers
- 📝 Zig Bare Metal Programming on STM32F103 — Booting up
✳️ Microcontrollers
Microcontrollers are integrated circuits (ICs) that combine a microprocessor, memory, and input/output (I/O) peripherals on a single chip. They are designed for embedded applications, where they are used to control devices in a variety of industries, including automotive, industrial, consumer electronics, and healthcare. Some popular microcontroller families include AVR, PIC, STM32, MSP430, nRF, and ESP32. Choosing the right microcontroller involves assessing application requirements, processing power, memory needs, and input/output capabilities. Consider ease of use, cost, reliability, availability, and future expansion.- 📝 What Is a Microcontroller? The Defining Characteristics and Architecture of a Common Component
- 📝 How to Choose the Right Microcontroller for Your Application
- 📝 How to Read a Microcontroller Datasheet: Introduction and First Steps
- 📘👶 Make: AVR Programming - Elliot Williams
- 🎞️👶💎 NewbieHack - Microcontroller Tutorial - A Beginners Guide (AVR)
- 🎞️👶 Getting Started with STM32 and Nucleo (YouTube Playlist)
- 📘💎 Mastering STM32 - Carmine Noviello
- 📘💎 Developing IoT Projects with ESP32 - Vedat Ozan Oner
- 🎞️👶 Intro to Raspberry Pi Pico and RP2040 (YouTube Playlist)
- 🔗 Getting started with STM32: STM32 step-by-step
- [🎞