# C Programming and Embedded Systems This is a curated list of courses, channels, playlists and videos from various sources to help assist in learning C Programming for Embedded Systems Development. Portions of this list were taken from Forrest Knight's [Open Source CS](https://github.com/ForrestKnight/open-source-cs) github page. ## Computer Science Basics Course Title | School | Duration | Effort | Prerequisites :-- | :--: | :--: | :--: | :--: [Intro to Computer Science](https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x) | Harvard | 10 weeks | 10-20 hours/week | none [Mathematical Thinking in Computer Science](https://click.linksynergy.com/deeplink?id=PtFMiHYfEVk&mid=40328&murl=https%3A%2F%2Fwww.coursera.org%2Flearn%2Fwhat-is-a-proof) | UC San Diego | 6 weeks | 2-5 hours/week | none ## Math Course Title | School | Duration | Effort | Prerequisites :-- | :--: | :--: | :--: | :--: [College Algebra and Problem Solving]() | ASU | 15 Weeks | Not specified | Basic math skills | [Single Variable Calculus (Precalculus)](https://ocw.mit.edu/courses/mathematics/18-01-single-variable-calculus-fall-2006/) | MIT | 35 lectures | 9–10 hours/week | College Algebra [Calculus 1A: Differentiation](https://www.edx.org/course/calculus-1a-differentiation) | MIT | 12 weeks | 6-10 hours/week | [Precalculus](https://www.edx.org/course/precalculus-asux-mat170x) [Calculus 1B: Integration](https://www.edx.org/course/calculus-1b-integration) | MIT | 15 weeks | 6-10 hours/week | Calculus 1A: Differentiation [Calculus 1C: Coordinate Systems & Infinite Series](https://www.edx.org/course/calculus-1c-coordinate-systems-infinite-mitx-18-01-3x-0)| MIT | 8 weeks | 6-10 hours/week | Calculus 1B: Integration [Linear Algebra - Foundations to Frontiers](https://www.edx.org/course/linear-algebra-foundations-to-frontiers) | UT Austin | 15 weeks | 6-10 hours/week | [Precalculus](https://www.edx.org/course/precalculus-asux-mat170x) [Introduction to Probability and Data](https://click.linksynergy.com/deeplink?id=PtFMiHYfEVk&mid=40328&murl=https%3A%2F%2Fwww.coursera.org%2Flearn%2Fprobability-intro) | Duke | 5 weeks | 5-7 hours/week | none [Intro to Statistics ](https://www.udacity.com/course/intro-to-statistics--st101) | Udacity | 8 weeks | 5-7 hours/week | none ## Theory Course Title | School | Duration | Effort | Frequency | Prerequisites :-- | :--: | :--: | :--: | :--: | :--: [Computer Science: Algorithms, Theory, and Machines](https://click.linksynergy.com/deeplink?id=PtFMiHYfEVk&mid=40328&murl=https%3A%2F%2Fwww.coursera.org%2Flearn%2Fcs-algorithms-theory-machines) | Princeton | 10 weeks | 2-5 hours/week | once a month | Calculus 1A (all), basic programming [Algorithms, Part I](https://click.linksynergy.com/deeplink?id=PtFMiHYfEVk&mid=40328&murl=https%3A%2F%2Fwww.coursera.org%2Flearn%2Falgorithms-part1) | Princeton | 6 weeks | 6-12 hours/week | once a month | Computer Science: Algorithms, Theory, and Machines [Algorithms, Part II](https://click.linksynergy.com/deeplink?id=PtFMiHYfEVk&mid=40328&murl=https%3A%2F%2Fwww.coursera.org%2Flearn%2Falgorithms-part2) | Princeton | 6 weeks | 6-12 hours/week | once a month | Algorithms, Part I ## C Programming Course Title | Provider | Duration | Prerequisites :-- | :--: | :--: | :--: [C Programming](https://www.software-skills-training.com/Courses/c-programming-course.htm) | Software Skills Training, Inc. | 5 days | Understanding of fundamental programming concepts. [C Programming Tutorial for Absolute Beginners with Examples](https://www.udemy.com/course/c-programming-tutorial-for-absolute-beginners/) | Udemy | 5 hours | none [C Programming For Beginners - Master the C Language](https://www.udemy.com/course/c-programming-for-beginners-/) | Udemy | 23.5 hours | none ## Microprocessors & C Programming Course Title | Provider | Duration | Frequency | Prerequisites :-- | :--: | :--: | :--: | :--: [Introduction to ARM Cortex-M Assembly Programming (FREE)](https://www.udemy.com/course/arm-cortex-m-assembly-programming/)| Udemy | 4 hours | self-paced | none [ARM Cortex-M : Modular Embedded Systems Design (FREE!)](https://www.udemy.com/course/arm-cortex-m-building-your-own-autonomous-robot-from-scratch/)| Udemy | hours | self-paced | none [Foundations of Embedded Systems with ARM Cortex and STM32](https://www.udemy.com/course/cortex-m/)| Udemy | hours | self-paced | none [Embedded Systems Programming on ARM Cortex-M3/M4 Processor](https://www.udemy.com/course/embedded-system-programming-on-arm-cortex-m3m4/)| Udemy | hours | self-paced | none [Bare Metal Embedded - C Programming (TM4C123)](https://www.udemy.com/course/bare-metal-embedded-c-programming-tm4c123/)| Udemy | hours | self-paced | none [Embedded Systems Bare-Metal Programming Ground Up (STM32)](https://www.udemy.com/course/embedded-systems-bare-metal-programming/)| Udemy | hours | self-paced | none [ARM Cortex-M Bare-Metal Embedded-C Programming](https://www.udemy.com/course/cortex-m-internals-master-pointers-structures-memory-etc/)| Udemy | hours | self-paced | none [Embedded Systems using the ARM Mbed Platform](https://www.udemy.com/course/arm-mbed/)| Udemy | hours | self-paced | none [Mastering Microcontroller : TIMERS, PWM, CAN, RTC, LOW POWER](https://www.udemy.com/course/microcontroller-programming-stm32-timers-pwm-can-bus-protocol/)| Udemy | hours | self-paced | none [ARM Cortex M Microcontroller DMA Programming Demystified](https://www.udemy.com/course/microcontroller-dma-programming-fundamentals-to-advanced/)| Udemy | hours | self-paced | none [Hands on projects with the I2C protocol - Learn by doing!](https://www.udemy.com/course/i2c-protocol/)| Udemy | hours | self-paced | none ## Robot Operating Systems (ROS) Course Title | Provider | Duration | Frequency | Prerequisites :-- | :--: | :--: | :--: | :--: [Arduino FreeRTOS From Ground Up : Build RealTime Projects](https://www.udemy.com/course/arduino-freertos/) | Udemy | | self-paced | none [ROS for Beginners: Basics, Motion, and OpenCV](https://www.udemy.com/course/ros-essentials/) | Udemy | | self-paced | none ## Applications Course Title | School | Duration | Effort | Frequency | Prerequisites :-- | :--: | :--: | :--: | :--: | :--: [Software Engineering: Introduction](https://www.edx.org/course/software-engineering-introduction-ubcx-softeng1x) | UBCx | 6 weeks | 8-10 hours/week | self-paced | Java Programming: Build a Recommendation System [Machine Learning](https://click.linksynergy.com/deeplink?id=PtFMiHYfEVk&mid=40328&murl=https%3A%2F%2Fwww.coursera.org%2Flearn%2Fmachine-learning) | Stanford | 11 weeks | 5-7 hours/week | twice a month | Linear Algebra - Foundations to Frontiers ## Linux and Unix Course Title | School | Duration | Effort | Frequency | Prerequisites :-- | :--: | :--: | :--: | :--: | :--: [Linux Command Line Basics](https://www.udacity.com/course/linux-command-line-basics--ud595) | Udacity | 1 week | 5 hours/week | self-paced | none [The Unix Workbench](https://click.linksynergy.com/deeplink?id=PtFMiHYfEVk&mid=40328&murl=https%3A%2F%2Fwww.coursera.org%2Flearn%2Funix) | JHU | 4 weeks | 4 hours/week | once a month | none ## YouTube Channels, Playlists and Videos ### Channels Channel Name | :-- | [CodeVault](https://www.youtube.com/channel/UC6qj_bPq6tQ6hLwOBpBQ42Q) | [Embedded Systems with ARM Cortex-M Microcontrollers in Assembly Language and C](https://www.youtube.com/channel/UCY0sQ9hpSR6yZobt1qOv6DA) | [humanHardDrive](https://www.youtube.com/channel/UCL1w3L33s0phNYGuvMLS-Eg) | [Paul McWhorter](https://www.youtube.com/channel/UCfYfK0tzHZTpNFrc_NDKfTA) | [Programming Electronics Academy](https://www.youtube.com/channel/UCDGAg1pqcy8IScMqHHTy9Gg) | [SparkFun Electronics](https://www.youtube.com/channel/UCKPLvnWhN1Qo51IDDZsmq1g) | ### Playlists Playlist Title | Channel | Duration | Prerequisites :-- | :--: | :--: | :--: [Arduino Tutorial](https://www.youtube.com/playlist?list=PLGLfVvz_LVvSzj85mDoDm_DTOADEY_5c5) | Derek Banas | 12 videos | none [Arduino Workshop for Beginners](https://www.youtube.com/playlist?list=PLPK2l9Knytg5s2dk8V09thBmNl2g5pRSr) | Core Electronics | 35 videos | none [ARM Microcontroller Programming, Development, and Tutorial](https://www.youtube.com/playlist?list=PL6PplMTH29SHgRPDufZhfMRoFwRAIrzOp) | Patrick Hood-Daniel | 58 videos | none [C Preprocessor Directive](https://www.youtube.com/playlist?list=PL-gW8Fj5TGrqEEmU9ZyndU1Ej82hPElYb) | Sanjay Gupta | 21 videos | none [C Video Tutorial](https://www.youtube.com/playlist?list=PLGLfVvz_LVvSaXCpKS395wbCcmsmgRea7) | Derek Banas | 16 videos | none [C Videos](https://www.youtube.com/playlist?list=PLlcnQQJK8SUg4C8syQ63d6o44dzt_vFls) | Engineer Man | 14 videos | none [Embedded C Programming Basics](https://www.youtube.com/playlist?list=PLzx1ARJOmyed-PYHMduhZDQ4eKXmWJj_T) |Smart Logic Academy | 8 videos | none [Embedded Systems Programming Course - Quantum Leaps LLC](https://www.youtube.com/playlist?list=PLfcIZXsDLA1-QEyrD4R9YcWWKpbCcrGVP) | Niyazi Saral | 15 videos | none [Linked lists](https://www.youtube.com/playlist?list=PLfqABt5AS4FmXeWuuNDS3XGENJO1VYGxl) | CodeVault | 20 videos | none [Microcontrollers and the C Programming Language](https://www.youtube.com/playlist?list=PLcTEZWGmK0W8AnyLA1ukHlM7rhQf5db8p) | udemy jobzz solutions | 51 videos | none [New Arduino Tutorials](https://www.youtube.com/playlist?list=PLGs0VKk2DiYw-L-RibttcvK-WBZm8WLEP) | Paul McWhorter | 40 videos | none [NewbieHack - Microcontroller Tutorial - A Beginners Guide](https://www.youtube.com/playlist?list=PLE72E4CFE73BD1DE1) | Patrick Hood-Daniel | 57 videos | none [Pointers in C](https://www.youtube.com/playlist?list=PLRJhV4hUhIymdWRSwo3cZUlHetbmsSuzS) | Embedded Systems with ARM Cortex-M Microcontrollers in Assembly Language and C | 18 videos | none [The C programming language made simple](https://www.youtube.com/playlist?list=PLfqABt5AS4FmErobw8YyTwXDUE5nPH5lH) | CodeVault | 100 videos | none ### Videos Video Title | Channel | Duration | Prerequisites :-- | :--: | --: | :--: [C Programming Tutorial for Beginners](https://www.youtube.com/watch?v=KJgsSFOSQv0&t=1292s) | FreeCodeCamp | 3:46:12 | none [C Programming - Preprocessor in C - Directives in C - Macros - File Inclusion - Compiler Control](https://www.youtube.com/watch?v=t5JtyDlESns) | EzEd Channel | 21:56 | none [Level Up Your Arduino Code: Registers](https://www.youtube.com/watch?v=6q1yEb_ukw8) | SparkFun | 21:08 | none [Level Up Your Arduino Code: External Interrupts](https://www.youtube.com/watch?v=J61_PKyWjxU) | Sparkfun | 18:54 | none [Level Up Your Arduino Code: Timer Interrupts](https://www.youtube.com/watch?v=2kr5A350H7E) | Sparkfun | 17:21 | none [Macros with parameters in C](https://www.youtube.com/watch?v=JqN4uVgCTWE) | CodeVault | 9:07 | none [Multitask Arduino with State Machines (& Switch Debouncing)](https://www.youtube.com/watch?v=v8KXa5uRavg) | Normal Universe | 30:42 | none [Pre Processor Directives in C](https://www.youtube.com/watch?v=X6HiYbY3Uak) | BestDotNetTraining | 22:40 | none