Modern Embedded Systems Programming (By: Quantum Leaps, LLC)
About Course
Introduction: In this course, you’ll learn how to program embedded microcontrollers the modern way, from the basics all the way to the contemporary modern embedded programming practice.
Teaching Approach: The unique approach of this course is to step down to the machine level frequently and show you exactly what happens inside your embedded microcontroller. This deeper understanding will allow you to apply the concepts more efficiently and with greater confidence. If you are looking for a practical, hands-on, well-structured, and in-depth course explaining the essential concepts in embedded programming, this free course is right for you.
Instructor: The course is designed and taught by Miro Samek — an embedded software expert with over 30 years of experience. Miro enjoys teaching, and this video course, his books, articles, and conference talks helped many developers improve their skills, pass tough job interviews, and get hired for embedded programming positions.
Relevance: The course started already in 2013, so a legitimate question is: “Is it still relevant?” The answer is YES, perhaps even more so than in 2013, for two main reasons: 1️⃣ Fundamental Concepts: This course focuses on the essential and fundamental concepts in embedded programming, which never go out of style. 2️⃣ ARM Cortex-M Architecture: This course focuses on the prevalent ARM Cortex-M architecture, which over the past decade became unquestionably dominant in the embedded MCU market. Familiarity with ARM Cortex-M is the most sought-after skill that employers are looking for.
Course Content
Modern Embedded Systems Programming
- 11:54
#1 How computers count?
17:06#2 How to change the flow of control through your code
10:59#3 Variables and Pointers
12:22#4 How to control the world outside?
16:44#5 Preprocessor and the “volatile” keyword in C
14:29#6 Bit-wise operators in C
17:05#7 Arrays and Pointer Arithmetic
15:21#8 Functions in C and the call stack
17:05#9 Modules, Recursion, ARM Application Procedure Call Standard(AAPCS)
19:07#10 Stack Overflow and Other Pitfalls of Functions
27:41#11 Standard integers (stdint.h) and mixing integer types
28:34#12 Structures in C and Cortex Microcontroller Software Interface Standard (CMSIS)
32:11#13 Startup Code Part-1: What is startup code and how the CPU gets from reset to main?
23:27#14 Startup Code Part-2: Replacing the vector-table, embedded software build process
25:44#15 Startup Code Part-3: Vector table initialization, exception handlers, interrupt handlers
27:35#16 Interrupts Part-1: What are interrupts, and how they work
15:58#17 interrupts Part-2: How most CPUs (e.g. MSP430) handle interrupts?
19:52#18 interrupts Part-3: How interrupts work on ARM Cortex-M?
15:27#19 GNU-ARM Toolchain and Eclipse IDE
22:18#20 Race Conditions: What are they and how to avoid them?
16:57#21 Foreground-Background Architecture (“Superloop”)
18:36#22 RTOS Part-1: What is a Real-Time Operating System?
23:25#23 RTOS Part-2: Automating the context switch
37:36#24 RTOS Part-3: Automating the scheduling with round-robin policy
19:15#25 RTOS Part-4: Efficient blocking of threads
25:35#26 RTOS Part-5: What is “real-time”? Preemptive, priority-based scheduling
29:31#27 RTOS Part-6: Synchronization and communication among concurrent threads
43:03#28 RTOS Part-7: Mutual exclusion mechanisms
38:02#29 OOP Part-1: Encapsulation (classes) in C and C++
31:28#30 OOP Part-2: Inheritance in C and C++
24:01#31 OOP Part-3: Polymorphism in C++
23:41#32 OOP Part-4: Polymorphism in C
27:29#33 Event-Driven Programming Part-1: GUI example, events, event-loop, run-to-completion, no-blocking
29:32#34 Event-Driven Programming Part-2: Best practices for concurrency & Active Object pattern
39:11#35 State Machines Part-1: What is a state machine?
24:15#36 State Machines Part-2: Guard conditions
14:10#37 State Machines Part-3: Input-Driven State Machines
31:54#38 State Machines Part-4: State Tables and Entry/Exit Actions
26:35#39 State Machines Part-5: Optimal Implementation in C
33:09#40 State Machines Part-6: What is a Hierarchical State Machine?
31:58#41 State Machines Part-7:Automatic Code Generation
30:55#42 State Machines Part-8: Semantics of Hierarchical State Machines
23:02#43 Active Objects in Real-Time Part-1: Run-to-Completion and RMS/RMA
14:10#44 Active Objects in Real-Time Part-2: Mutable Events
23:31#45 Software Tracing with printf
27:52#46 Software Tracing with Binary Protocols
26:36#47 Assertions and Design by Contract, Part-1
13:35#48 Assertions and Design by Contract, Part-2
15:56#49 Embedded Unit Testing
23:45#50 To block or NOT to block, that is the question! Blocking as technical debt…
11:00#51 Traceable Documentation with Doxygen & Spexygen
23:38#52 Using low-power sleep modes in the “superloop” architecture
30:00#53 Priority-based scheduler for the “superloop” architecture
18:25#54 Non-preemptive QV Kernel for Active Objects
28:02