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.
The following table provides links to useful resources about the development toolsets and the board used in the course.
| 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)
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
|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
|Turkish||Gömülü Sistemler Programlama Dersleri|