Modern Embedded Systems Programming Video Course

This is the companion web-page to the YouTube video course about programming embedded systems the modern way. The course is taught by Quantum Leaps’ Miro Samek.

Here you can find various resources for the course as well as links to all released videos and project downloads.

share on: 
Share on reddit
Share on linkedin
Share on twitter
Share on email

About the Course...

The course consists of focused, fast-paced, hands-on lessons that teach you how to program embedded microcontrollers in C. The course begins with the fundamentals, but gradually covers increasingly advanced concepts all the way to the contemporary modern embedded programming practice.

The course is specifically designed not just to be watched, but to be actively followed along on your own computer (Windows based PC) and a small, self-contained, very inexpensive evaluation board. This companion web-page provides the project downloads that you can open in a specific embedded toolchain and run on your PC at home.

The goal of the course is not just to teach C–other sources do it already quite well. But there are virtually no courses that would step down to the machine level and show you exactly what happens inside a microcontroller.

So, starting from Lesson 1 you will actually see how the ARM Cortex-M processor executes your code, how it manipulates registers, and how an embedded microcontroller can “do” things in the real world, such as turn on and off an LED.

This deeper understanding will allow you to use the C language more efficiently and with greater confidence. You will gain understanding not just what your program does, but also how the C statements translate to machine instructions and get a sense for how fast the processor can execute them. Also, you will get some familiarity with the ARM Cortex-M core, which will look really good on your resume.

The course has been going from January 2013, but it is never too late to join. Stay tuned…

Course Resources

The following list provides links to useful resources about the embedded board and the development toolchains used in the course.

Embedded Board: TivaC LaunchPad

This course is based on the inexpensive and widely available EK-TM4C123GXL board from Texas Instruments, also known under the name TivaC LaunchPad.

The board is based on the ARM Cortex-M4 CPU.

To be able to run the projects provided below, you need to use the exact board. No other board, even if based on the same ARM Cortex-M4 CPU, will allow you to run the projects prepared for the TivaC LaunchPad.

The TivaC LaunchPad board was previously called EK-LM4F120XL "Stellaris LaunchPad" and the first segment of lessons refers to the board by its old name. But the two boards (TivaC LaunchPad and Stellaris LaunchPad) are essentially equivalent and both are equally suitable for this course.

Troubleshooting TivaC LaunchPad

Application Note describing how to fix common problems with TivaC LaunchPad and related software.

Tiva TM4C123GH6PM Data Sheet

Document that describes in detail the microcontroller: the CPU, all peripherals and registers.

Tiva/Stellaris USB Drivers

Tiva/Stellaris USB drivers for Windows.

LM-FLASH programmer

The LM-FLASH tool can be used to recover an unresponsive TivaC Lauchpad board. Please see the "Troubleshooting TivaC LaunchPad" for details.

Tiva TM4C123GXL LaunchPad User Manual

(applies also for Stellaris EK-LM4F120XL LaunchPad)

ARM Cortex™-M4 Users Guide

Describes ARM Cortex-M4 instruction set.

Tiva/Stellaris In-Circuit ICDI Manual

USB drivers installation instructions.

Tiva TM4C123GH6PM header file

(also applies to LM4F120H5QR)

Modern Embedded Systems Programming
Videos and Projects

Lesson NumberRunning TimeVideo Title (watch on YouTube)TranscriptToolchainProject DownloadsVideo Download
4223:02#42 State Machines Part-8:
Semantics of Hierarchical State Machines
lesson42.txtARM-KEIL uVisionlesson42.zip
qp-bundle
video42
4130:56#41 State Machines Part-7:
Automatic Code Generation
lesson41.txtARM-KEIL uVisionlesson41.zip
qp-bundle
video41
4031:59#40 State Machines Part-6:
What is a Hierarchical State Machine?
lesson40.txtARM-KEIL uVisionlesson40.zip
qpc.zip
video40
3933:09#39 State Machines Part-5:
Optimal Implementation in C
lesson39.txtARM-KEIL uVisionlesson39.zip
qpc.zip
video39
3826:36#38 State Machines Part-4:
State Tables and Entry/Exit Actions
lesson38.txtARM-KEIL uVisionlesson38.zip
qpc.zip
video38
3731:55#37 State Machines Part-3:
Input-Driven State Machines
lesson37.txtARM-KEIL uVisionlesson37.zip
qpc.zip
video37
3614:11#36 State Machines Part-2:
Guard conditions
lesson36.txtARM-KEIL uVisionlesson36.zip
qpc.zip
video36
3524:15#35 State Machines Part-1:
What is a state machine?
lesson35.txtARM-KEIL uVisionlesson35.zip
qpc.zip
video35
3439:11#34 Event-Driven Programming Part-2:
Best practices for concurrency & Active Object pattern
lesson34.txtARM-KEIL uVisionlesson34.zip
qpc.zip
video34
3329:33#33 Event-Driven Programming Part-1:
GUI example, events, event-loop, run-to-completion, no-blocking
lesson33.txtARM-KEIL uVisionlesson33.zip
qpc.zip
video33
3227:30#32 OOP Part-4:
Polymorphism in C
lesson32.txtARM-KEIL uVisionlesson32.zip
qpc.zip
video32
3123:42#31 OOP Part-3:
Polymorphism in C++
lesson31.txtARM-KEIL uVisionlesson31.zip
qpc.zip
video31
3024:02#30 OOP Part-2:
Inheritance in C and C++
lesson30.txtARM-KEIL uVisionlesson30.zip
qpc.zip
video30
2931:29#29 OOP Part-1:
Encapsulation (classes) in C and C++
lesson29.txtARM-KEIL uVisionlesson29.zip
qpc.zip
video29
2838:02#28 RTOS Part-7:
Mutual exclusion mechanisms
lesson28.txtARM-KEIL uVisionlesson28.zip
qpc.zip
video28
2743:03#27 RTOS Part-6:
Synchronization and communication among concurrent threads
lesson27.txtARM-KEIL uVisionlesson27.zip
qpc.zip
video27
2629:31#26 RTOS Part-5:
What is "real-time"? Preemptive, priority-based scheduling
lesson26.txtARM-KEIL uVisionlesson26.zip
qpc.zip
video26
2525:35#25 RTOS Part-4:
Efficient blocking of threads
lesson25.txtARM-KEIL uVision
lesson25.zip
qpc.zip
video25
2419:15#24 RTOS Part-3:
Automating the scheduling process
lesson24.txtARM-KEIL uVisionlesson24.zip
lesson24_gnu.zip
qpc.zip
video24
2337:36#23 RTOS Part-2:
Automating the context switch
lesson23.txtARM-KEIL uVisionlesson23.zip
lesson23_iar.zip
qpc.zip
video23
2223:26#22 RTOS Part-1:
What is a Real-Time Operating System?
lesson22.txtARM-KEIL uVisionlesson22.zip
qpc.zip
video22
2118:37#21 Foreground-Background Architecture
("Superloop")
lesson21.txtARM-KEIL uVisionlesson21.zip
qpc.zip
video21
2016:58#20 Race Conditions:
What are they and how to avoid them?
lesson20.txtTI CCS (Eclipse)lesson20.zip
CMSIS.zip
video20
1922:19#19 GNU-ARM Toolchain and Eclipse IDElesson19.txtTI CCS (Eclipse)lesson19.zip
CMSIS.zip
video19
1815:28#18 interrupts Part-3:
How interrupts work on ARM Cortex-M?
lesson18.txtIAR EWARMlesson18.zip
CMSIS.zip
video18
1719:52#17 interrupts Part-2:
How most CPUs (e.g. MSP430) handle interrupts?
lesson17.txtIAR EWARMlesson17.zip
CMSIS.zip
video17
1615:59#16 Interrupts Part-1:
What are interrupts and how they work?
lesson16.txtIAR EWARMlesson16.zip
CMSIS.zip
video16
1527:35#15 Startup Code Part-3:
Vector table initialization, exception handlers, interrupt handlers
lesson15.txtIAR EWARMlesson15.zip
CMSIS.zip
video15
1425:44#14 Startup Code Part-2:
Replacing the vector-table, embedded software build process
lesson14.txtIAR EWARMlesson14.zip
CMSIS.zip
video14
1323:27#13 Startup Code Part-1:
What is startup code and how the CPU gets from reset to main?
lesson13.txtIAR EWARMlesson13.zip
CMSIS.zip
video13
1232:11#12 Structures in C and
Cortex Microcontroller Software Interface Standard (CMSIS)
lesson12.txtIAR EWARMlesson12.zip
CMSIS.zip
video12
1128:34#11 Standard integers (stdint.h)
and mixing integer types
lesson11.txtIAR EWARMlesson11.zipvideo11
1027:42#10 Stack Overflow and
Other Pitfalls of Functions
lesson10.txtIAR EWARMlesson10.zipvideo10
919:08#9 Modules, Recursion,
ARM Application Procedure Call Standard (AAPCS)
lesson9.txtIAR EWARMlesson9.zipvideo09
817:06#8 Functions in C and the call stacklesson8.txtIAR EWARMlesson8.zipvideo08
715:22#7 Arrays and Pointer Arithmeticlesson7.txtIAR EWARMlesson7.zipvideo07
617:06#6 Bit-wise operators in Clesson6.txtIAR EWARMlesson6.zipvideo06
514:30#5 Preprocessor and
the "volatile" keyword in C
lesson5.txtIAR EWARMlesson5.zipvideo05
416:45#4 How a computer can change anything outside,
like blinking an LED?
lesson4.txtIAR EWARMlesson4.zipvideo04
312:23#3 Variables and Pointerslesson3.txtIAR EWARMlesson3.zipvideo03
211:00#2 How to change the flow of control
through your code
lesson2.txtIAR EWARMlesson2.zipvideo02
117:06#1 How computers count?lesson1.txtIAR EWARMlesson1.zipvideo01
09:17#0 Modern Embedded Systems Programming:
Getting Started
lesson0.txtIAR EWARMvideo00