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.

Home » Video Course

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 TM4C123GXL LaunchPad User Manual

(applies also for Stellaris EK-LM4F120XL LaunchPad)

Tiva TM4C123GH6PM Data Sheet

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

ARM Cortex™-M4 Users Guide

Describes ARM Cortex-M4 instruction set.

Tiva/Stellaris USB Drivers

Tiva/Stellaris USB drivers for Windows.

Tiva/Stellaris In-Circuit ICDI Manual

USB drivers installation instructions.

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 TM4C123GH6PM header file

(also applies to LM4F120H5QR)

Course Videos and Projects

Lesson NumberRunning TimeVideo Title (watch on YouTube)TranscriptToolchainProject DownloadsVideo Download
3524:15Embedded Programming Lesson 35:
State Machines part-1
lesson35.txtARM-KEIL uVisionlesson35.zip
qpc.zip
video35
3439:11Embedded Programming Lesson 34:
Event-Driven Programming part-2
lesson34.txtARM-KEIL uVisionlesson34.zip
qpc.zip
video34
3329:33Embedded Programming Lesson 33:
Event-Driven Programming part-1
lesson33.txtARM-KEIL uVisionlesson33.zip
qpc.zip
video33
3227:30Embedded Programming Lesson 0x20:
OOP part-4-Polymorphism in C
lesson32.txtARM-KEIL uVisionlesson32.zip
qpc.zip
video32
3123:42Embedded Programming Lesson 32:
OOP part-3-Polymorphism in C++
lesson31.txtARM-KEIL uVisionlesson31.zip
qpc.zip
video31
3024:02Embedded Programming Lesson 30:
OOP part-2-Inheritance
lesson30.txtARM-KEIL uVisionlesson30.zip
qpc.zip
video30
2931:29Embedded Programming Lesson 29:
OOP part-1-Encapsulation
lesson29.txtARM-KEIL uVisionlesson29.zip
qpc.zip
video29
2838:02Embedded Programming Lesson 28:
RTOS part-7
lesson28.txtARM-KEIL uVisionlesson28.zip
qpc.zip
video28
2743:03Embedded Programming Lesson 27:
RTOS part-6
lesson27.txtARM-KEIL uVisionlesson27.zip
qpc.zip
video27
2629:31Embedded Programming Lesson 26:
RTOS part-5
lesson26.txtARM-KEIL uVisionlesson26.zip
qpc.zip
video26
2525:35Embedded Programming Lesson 25:
RTOS part-4
lesson25.txtARM-KEIL uVision
lesson25.zip
qpc.zip
video25
2419:15Embedded Programming Lesson 24:
RTOS part-3
lesson24.txtARM-KEIL uVisionlesson24.zip
qpc.zip
video24
2337:36Embedded Programming Lesson 23:
RTOS part-2
lesson23.txtARM-KEIL uVisionlesson23.zip
qpc.zip
video23
2223:26Embedded Programming Lesson 22:
RTOS part-1
lesson22.txtARM-KEIL uVisionlesson22.zip
qpc.zip
video22
2118:37Embedded Programming Lesson 21:
Foreground Background Systems
lesson21.txtARM-KEIL uVisionlesson21.zip
qpc.zip
video21
2016:58Embedded Programming Lesson 20:
Race Conditions
lesson20.txtTI CCS (Eclipse)lesson20.zip
CMSIS.zip
video20
1922:19Embedded Programming Lesson 19:
GNU-ARM and Eclipse
lesson19.txtTI CCS (Eclipse)lesson19.zip
CMSIS.zip
video19
1815:28Embedded Programming Lesson 18:
Interrupts Part-3
lesson18.txtIAR EWARMlesson18.zip
CMSIS.zip
video18
1719:52Embedded Programming Lesson 17:
Interrupts Part-2
lesson17.txtIAR EWARMlesson17.zip
CMSIS.zip
video17
1615:59Embedded Programming Lesson 0x10:
Interrupts Part-1
lesson16.txtIAR EWARMlesson16.zip
CMSIS.zip
video16
1527:35Embedded Programming Lesson 15:
Startup Code Part-3
lesson15.txtIAR EWARMlesson15.zip
CMSIS.zip
video15
1425:44Embedded Programming Lesson 14:
Startup Code Part-2
lesson14.txtIAR EWARMlesson14.zip
CMSIS.zip
video14
1323:27Embedded Programming Lesson 13:
Startup Code Part-1
lesson13.txtIAR EWARMlesson13.zip
CMSIS.zip
video13
1232:11Embedded Programming Lesson 12:
Structures and CMSIS
lesson12.txtIAR EWARMlesson12.zip
CMSIS.zip
video12
1128:34Embedded Programming Lesson 11:
<stdint.h>, Endianness, Mixing Types in Expressions
lesson11.txtIAR EWARMlesson11.zipvideo11
1027:42Embedded Programming Lesson 10:
Stack Overflow and Other Pitfalls of Functions
lesson10.txtIAR EWARMlesson10.zipvideo10
919:08Embedded Programming Lesson 9:
Modules, Recursion, AAPCS
lesson9.txtIAR EWARMlesson9.zipvideo09
817:06Embedded Programming Lesson 8:
Functions and the Stack
lesson8.txtIAR EWARMlesson8.zipvideo08
715:22Embedded Programming Lesson 7:
Arrays and Pointer Arithmetic
lesson7.txtIAR EWARMlesson7.zipvideo07
617:06Embedded Programming Lesson 6:
Bit-wise operators in C
lesson6.txtIAR EWARMlesson6.zipvideo06
514:30Embedded Programming Lesson 5:
Preprocessor and volatile
lesson5.txtIAR EWARMlesson5.zipvideo05
416:45Embedded Programming Lesson 4:
Blinking the LED
lesson4.txtIAR EWARMlesson4.zipvideo04
312:23Embedded Programming Lesson 3:
Variables and Pointers
lesson3.txtIAR EWARMlesson3.zipvideo03
211:00Embedded Programming Lesson 2:
Flow of Control
lesson2.txtIAR EWARMlesson2.zipvideo02
117:06Embedded Programming Lesson 1:
Counting
lesson1.txtIAR EWARMlesson1.zipvideo01
09:17Embedded Programming Lesson 0:
Getting Started
lesson0.txtIAR EWARMvideo00