Modern Embedded Systems Programming 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.

The course is intended for newcomers to the embedded software field and is structured as a series of short, focused, hands-on lessons that teach you how to program embedded micro-controllers in the C programming language. But the goal is not just to teach you C—other courses and books 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 the embedded processor.

So, starting from lesson-one you will actually see how the ARM Cortex-M processor executes your code, how it manipulates registers, and how a computer 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.

Course Resources

The following table provides links to useful resources about the development toolsets and the board used in the course.

Texas Instruments, the manufacturer of the board, has re-named it from "Stellaris LaunchPad" (EK-LM4F120XL) to "TivaC LaunchPad" (EK-TM4C123GXL). These two boards are equivalent, and both are equally useful for this course.
Resource
ARM-KEIL MDK (Microcontroller Development Kit)
(scroll down to MDK Editions and choose the MDK-Lite, size-limited evaluation)
The ARM-KEIL MDK is used staring from Lesson 21.
TI Code Composer Studio
(choose the Windows version and make sure to select the ARM GCC compiler during installation)
The CCS toolset and GNU-ARM compiler is used staring from Lesson 19.
IAR Embedded Workbench for ARM
(choose Kickstart, size-limited evaluation)
The IAR toolset is used up to Lesson 18.
Tiva TM4C123GXL LaunchPad User Manual
(applies also for Stellaris EK-LM4F120XL LaunchPad)
Tiva TM4C123GH6PM Data Sheet
(also applies to LM4F120H5QR)
Tiva/Stellaris In-Circuit ICDI Manual
(USB drivers installation instructions)
Course Playlist

Course Videos

The following table lists all lessons released so far together with the accompanying notes (transcripts) and project files (for IAR EWARM). The complete Playlist of this course is available on YouTube.

Running Time Video Title Notes Project
  9:17 Lesson 0: Getting Started notes0
17:06 Lesson 1: Counting notes1 lesson1
11:00 Lesson 2: Flow of Control notes2 lesson2
12:23 Lesson 3: Variables and Pointers notes3 lesson3
16:45 Lesson 4: Blinking the LED notes4 lesson4
14:30 Lesson 5: Preprocessor and volatile notes5 lesson5
17:06 Lesson 6: Bit-wise operators in C notes6 lesson6
15:22 Lesson 7: Arrays and Pointer Arithmetic notes7 lesson7
17:06 Lesson 8: Functions and the Stack notes8 lesson8
19:08 Lesson 9: Modules, Recursion, AAPCS notes9 lesson9
27:42 Lesson 10: Stack Overflow and Other Pitfalls of Functions notes10 lesson10
28:34 Lesson 11: <stdint.h>, Endianness, Mixing Types in Expressions notes11 lesson11
32:11 Lesson 12: Structures and CMSIS notes12 lesson12
23:27 Lesson 13: Startup Code Part-1 notes13 lesson13
25:44 Lesson 14: Startup Code Part-2 notes14 lesson14
27:35 Lesson 15: Startup Code Part-3 notes15 lesson15
15:59 Lesson 0x10: Interrupts Part-1 notes0x10 lesson0x10
19:52 Lesson 17: Interrupts Part-2 notes17 lesson17
15:28 Lesson 18: Interrupts Part-3 notes18 lesson18
22:19 Lesson 19: GNU-ARM and Eclipse notes19 lesson19
CMSIS
16:58 Lesson 20: Race Conditions notes20 lesson20
18:37 Lesson 21: Foreground Background Systems notes21 lesson21
qpc
23:26 Lesson 22: RTOS part-1 notes22 lesson22
qpc
37:36 Lesson 23: RTOS part-2 notes23 lesson23
qpc
19:15 Lesson 24: RTOS part-3 notes24 lesson24
qpc
25:35 Lesson 25: RTOS part-4 notes25 lesson25
qpc
Translations
Turkish Gömülü Sistemler Programlama Dersleri