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.
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.
LM-FLASH programmer
(click on "Get Software" to download the flash programmer for your TivaC LaunchPad).
The LM-FLASH tool can be used to recover an unresponsive TivaC Lauchpad board. To recover the board, launch lmflash, click on the "Other Utilities" tab at the top, and select "Debug Port Unlock, Fury, DustDevil, TM4C123 and TM4C129" radio button. Click on the "Unlock" button and follow the instructions.
Troubleshooting TivaC LaunchPad
(fixing common problems with TivaC LaunchPad and related software)
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. The complete Playlist of this course is available on YouTube.

Running Time Video Title (watch on YouTube) Notes Project Video Download
  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 notes16 lesson16
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
16:58 Lesson 20: Race Conditions notes20 lesson20
18:37 Lesson 21: Foreground Background Systems notes21 lesson21
23:26 Lesson 22: RTOS part-1 notes22 lesson22
37:36 Lesson 23: RTOS part-2 notes23 lesson23
19:15 Lesson 24: RTOS part-3 notes24 lesson24
25:35 Lesson 25: RTOS part-4 notes25 lesson25
29:31 Lesson 26: RTOS part-5 notes26 lesson26
43:03 Lesson 27: RTOS part-6 notes27 lesson27
38:02 Lesson 28: RTOS part-7 notes28 lesson28
Turkish Gömülü Sistemler Programlama Dersleri