We may earn an affiliate commission when you visit our partners.
Nerdy Electronics

Want to learn C and/or Embedded C? Look no further. This course is all you need.

[NerdyElectronics - 12 June 2021, update 1] - Based on feedback from learners, the audio issues have been corrected

In this course, we will learn one of the most important skills required for Embedded Systems. The C Programming Language.

We start off with a discussion on what embedded systems are and slowly progress into concepts like pointers and structures.

In this course, we take a "Learn as you Go" approach. We will look into some theory and then see the behavior of those concepts in programs.

Read more

Want to learn C and/or Embedded C? Look no further. This course is all you need.

[NerdyElectronics - 12 June 2021, update 1] - Based on feedback from learners, the audio issues have been corrected

In this course, we will learn one of the most important skills required for Embedded Systems. The C Programming Language.

We start off with a discussion on what embedded systems are and slowly progress into concepts like pointers and structures.

In this course, we take a "Learn as you Go" approach. We will look into some theory and then see the behavior of those concepts in programs.

Every section in the course builds on the previous sections. We look into each topic in a mix of theory and practicals, practicals being the major part, with live coding. For the live coding, we will install an IDE and start coding.

  • What are Embedded Systems

  • What is C

  • Why do we need programming language

  • What is RAM

  • How data is stored in RAM

  • Number Systems (Hex, Decimal and Binary)

  • Variables

  • Data Types

  • Conditional Execution

  • Loops

  • Functions

  • Pointers

  • Arrays (with pointers)

  • Structures (with pointers)

  • Bit Operations

  • Operators

  • Storage Classes

  • Header Files

  • Preprocessors

  • Conditional Compilation

  • Packing and unpacking of data for transmission and storage

Based on the feedback, there will be regular updates and the update information will be added at the top of this description.

Enroll now

What's inside

Learning objectives

  • Embedded c
  • Basics of c - variables, loops, conditional execution
  • Function
  • Pointers
  • Arrays, structures, unions
  • Pointers with arrays, structures, unions
  • Logical operations
  • Bit operations - packaging data, unpacking data, bit manipulations
  • Compilation process of c programs
  • Conditional compilation

Syllabus

Welcome
Welcome to the Course!!
In this section we will look into - what are Embedded Systems, why we need a programming language, why C and the differences as well as similarities between C and Embedded C
Read more

What are Embedded Systems and why do we use the language C?

Why Do we need a Programming Language?
C vs. Embedded C

This quiz will test your understanding on what are Embedded Systems, why we need a programming language, why C and the differences as well as similarities between C and Embedded C

Notes - C vs. Embedded C
In this section we will setup the IDE - CodeBlocks for practicing C
Download and Install Code::Blocks
In this section, we will write our first program and see that C is a sequential language. We will also look into escape sequences and why we use printf statements in this course.
C is a Sequential Language
Escape Sequences
Why printf?
Quiz on escape sequences
Variables and DataTypes
Data Types in C
Variables

Quiz on Variables and data types

Variables in C - Notes
Quiz on Variables and Data Types
How are numbers stored in memory?
How are numbers stored in Memory
Number Systems - Hex, Binary and Decimal
Binary-Decimal conversions
Hex-Decimal-Binary conversions
Common Binary Values

This quiz will test your understanding on Binary to Decimal Conversions

Notes
ASCII
ASCII Theory and Program
In this section, we will see how to make the code skip some sections of the code and execute based on conditions. We shall look into the if, if..else, if..elseif..else and switch..case statements
What is Conditional Execution?
The "if" Statement
Relational Operators
The "if..else" Statements
The "if..elseif..else" statements
Are "elseif" Statements skipped if a true condition is found?
The "switch..case" Statements
Conditional Execution
Conditional Execution Learning
Practice Questions: Conditional Execution - if..else
Practice Questions: Switch..case
Conditional Execution Notes
Loops
What are loops and the various types of loops in C?
The "while" loop
Nesting "while" inside another "while" and multiple conditions
The "for" loop
Nesting "for" loop
The "do..while" loop
Practice Questions: Loops
Quiz on Loops
Notes for Loops in C
Functions in C
Functions Theory
Functions Program
To completely define a variable, not only the ‘type’ of variable, the ‘storage class’ of the variable is also important. In other words, not only do variables have a data type, but also have ‘storage
Storage Classes in C
Pointers
What are Pointers and why do we need them?
Functions - Pass by Reference
Different Types of Pointers
Practice Questions: Pointers and Functions
Arrays in C
What are Arrays?
Arrays in Action
How are arrays arranged in memory?
Arrays Memory Program - 1
Arrays Memory Program - 2
Passing arrays to Functions
Read about 2D, 3D and multiple dimension arrays:
Practice Questions
The Volatile Keyword
What is the volatile keyword?
Structures
What are Structures?
Let's see Structures in a program
Memory Layout of Structures
Passing Structures to Functions and Structure Pointers
Volatile with Structures
Ternary, Logical and Binary operators
Ternary Operators
Logical Operators
Bitwise Operators Theory
Bitwise Operators Program
Packing and Unpacking (masking)
Theory
Program
Packing and unpacking Assignment
What are preprocessors? The various types of preprocessors. In this module we will focus on #define and how to use them. We will also see how they make our lives easier.
What are Preprocessor Directives?
The #define Macro
The #define Macro with arguments
What are the steps involved in converting a C program to the machine code? What are the outputs of each stage?
C Compilation Process - Theory
Lets see the output of each stage with a program
C Compilation Process - Quiz
Conditional Compilation is one of the preprocessors. We will see how we can use conditional compilation in C to enable or disable various features or select between versions.
Conditional Compilation

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Covers bit operations, which are essential for low-level programming and hardware interaction in embedded systems, enabling efficient data manipulation and control
Explores the compilation process of C programs, providing a deeper understanding of how code is translated into executable instructions for embedded devices
Includes practical examples and live coding sessions, which reinforces theoretical concepts and helps learners develop hands-on skills in C programming for embedded systems
Starts with the basics of C, including variables, loops, and conditional execution, which builds a strong foundation for learners with little to no prior programming experience
Discusses packing and unpacking of data, which is crucial for efficient data transmission and storage in resource-constrained embedded environments
Utilizes Code::Blocks as the IDE, which may require learners to adapt to a specific development environment, but it is a widely used and versatile tool

Save this course

Save Master C and Embedded C Programming- Learn as you go to your list so you can find it easily later:
Save

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Master C and Embedded C Programming- Learn as you go with these activities:
Review Number Systems
Reinforce your understanding of number systems, which are fundamental to understanding how data is stored and manipulated in embedded systems.
Show steps
  • Review binary, decimal, and hexadecimal number systems.
  • Practice converting between these number systems.
  • Understand how these systems relate to memory storage.
Read 'C Programming Language' by K&R
Solidify your understanding of the C programming language with this classic reference.
Show steps
  • Obtain a copy of 'The C Programming Language'.
  • Read the chapters relevant to the course topics.
  • Work through the examples and exercises.
Read 'Embedded Systems Architecture' by Tammy Noergaard
Gain a deeper understanding of embedded systems architecture to provide context for the C programming skills learned in the course.
Show steps
  • Obtain a copy of 'Embedded Systems Architecture'.
  • Read the chapters relevant to system architecture and memory management.
  • Take notes on key concepts and architectures.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Create a Cheat Sheet for C Operators
Consolidate your understanding of C operators by creating a cheat sheet that you can reference later.
Show steps
  • List all C operators covered in the course.
  • For each operator, provide a brief description and example.
  • Organize the cheat sheet for easy reference.
Coding Challenges on Bitwise Operators
Sharpen your skills in bitwise operations, which are crucial for embedded C programming, through targeted coding challenges.
Show steps
  • Find online coding platforms with bitwise operator challenges.
  • Solve at least 10 problems involving AND, OR, XOR, and shift operators.
  • Analyze your solutions and optimize for efficiency.
Implement a Simple Data Packing/Unpacking Routine
Apply your knowledge of bitwise operators and structures to create a practical data packing and unpacking routine, commonly used in embedded systems for efficient data storage and transmission.
Show steps
  • Define a structure with multiple data fields of different sizes.
  • Write functions to pack the data into a smaller memory space using bitwise operators.
  • Write functions to unpack the data back into the original structure.
  • Test the routine with various data inputs.
Create a Compilation of Embedded C Resources
Compile a collection of useful resources, tools, and code snippets for embedded C programming to improve retention and create a valuable reference for future projects.
Show steps
  • Gather links to relevant documentation, tutorials, and libraries.
  • Organize the resources into categories.
  • Add your own notes and code snippets.

Career center

Learners who complete Master C and Embedded C Programming- Learn as you go will develop knowledge and skills that may be useful to these careers:
Embedded Software Engineer
An embedded software engineer designs, develops, and tests software for embedded systems. This role involves working with low-level programming languages like C and requires a deep understanding of hardware and software interactions. The course, with its focus on C programming and embedded systems concepts such as pointers, structures, and bit manipulation, provides foundational knowledge crucial for writing efficient and reliable embedded code. Specifically, the course's emphasis on practical, hands-on coding exercises directly applies to the day-to-day responsibilities of an embedded software engineer. Anyone seeking a career in embedded software development will find this course particularly relevant.
Firmware Engineer
A firmware engineer develops low-level software that controls the operations of hardware devices. This role demands proficiency in programming languages such as C and a thorough understanding of embedded systems. This course helps build the knowledge necessary for a firmware engineer to effectively program microcontrollers and other integrated circuits. The course's detailed lesson on bit operations, packing, and unpacking is especially important for this role. Learners who want to become firmware engineers will find the course invaluable; it helps build skills needed to work directly with hardware.
Robotics Software Engineer
A robotics software engineer develops software to control robots, often working with embedded systems and low-level hardware. This role requires understanding of C programming, along with knowledge of how hardware and software interact. The course's coverage of C programming, as well as embedded systems concepts like pointers, arrays, and structures, is directly relevant to the programming done by a robotics software engineer. This course offers practical exercises with live coding, making it useful for those who want to work with robotics hardware. Given the course's approach of practicals, this course is highly recommended for anyone wanting to pursue robotics software engineering.
Automotive Software Engineer
Automotive software engineers design and develop software for automotive electronic systems including those used for engine control, safety systems, and infotainment. This role requires in-depth knowledge of embedded systems and proficiency in C programming. The course's instruction on C programming fundamentals as well as topics like pointers, bit manipulation, and conditional compilation will be essential skills for an automotive software engineer. The focus on live coding in the course offers valuable programming experience, making it a strong starting point for anyone seeking a career in automotive software.
Internet of Things Developer
An Internet of Things developer creates software for connected devices, often working with embedded systems and low-level code. A proficient developer in this field needs a solid understanding of C and how it interacts with hardware. The course's curriculum, which covers core C concepts, bit operations and data handling, directly addresses skills needed for embedded programming. This is the perfect course for those interested in developing for IoT devices, as it helps build a foundation of practical knowledge.
Control Systems Engineer
Control systems engineers design, develop, and test systems that control machines and processes. A significant part of this role involves programming embedded systems and working with languages such as C. This course introduces key concepts in C, including pointers, structures, and bit operations, all of which are relevant to programming embedded controllers. The practical approach of this course, combined with its emphasis on live coding, is particularly useful for control systems engineers. Individuals seeking a career in control systems will find this course helpful.
Avionics Software Engineer
An avionics software engineer develops software for aircraft systems, requiring a deep understanding of embedded software and a solid grasp of C programming. These engineers frequently program low-level systems, so this course's focus on C and embedded systems programming helps build important knowledge. The course goes into detail on practical skills with hands-on coding exercises, which are particularly relevant for avionics software. This course may be useful for someone wishing to work on flight management, navigation, and control systems, as it provides a foundation for those roles.
Hardware Engineer
A hardware engineer designs and develops computer hardware and related systems. Although primarily focused on hardware, this role may involve some low-level programming. An understanding of C and embedded systems helps a hardware engineer better interact with firmware and test hardware designs. The course introduces core C language concepts, including pointers, data structures, and bit operations. This course may be helpful for a hardware engineer, especially those interested in the intersection with embedded systems.
Systems Engineer
A systems engineer works on complex systems, ensuring all components function correctly together. While their responsibilities can vary, they may need to understand embedded software and the concepts of programming in C, especially when interacting with hardware. This course provides an introduction to the fundamentals of C programming, data structures, and low-level concepts relevant to embedded systems. This is a general course, but may be useful for systems engineers who want to understand how embedded systems work.
Technical Consultant
A technical consultant provides expert advice and guidance on technology related projects. They might be engaged on projects that involve embedded systems and related technologies. This course provides an introduction to essential programming concepts in C, which may be helpful in understanding and advising clients on software and embedded systems projects. This is a relatively general role, but this course may be beneficial for technical consultants interested in expanding their understanding of software.
Test Engineer
A test engineer develops and executes tests to ensure the quality of software and hardware products. Knowledge of C and embedded systems can be particularly useful when testing embedded software. The course’s focus on C fundamentals, low-level programming techniques, and hardware interactions makes it a helpful resource for test engineers who want to work with embedded software. It may also be useful to those who create test automation tools or scripts. The insights gained from this course may be useful for a test engineer.
Applications Engineer
An applications engineer provides technical support and expertise to clients using technology products or services. The role often requires the ability to understand software and hardware interactions, making the knowledge of C programming relevant. This course provides a foundation in C, including its applications to embedded systems, which an applications engineer may find helpful. The course's instruction on variables, functions, and data structures may be useful for understanding how software functions within hardware.
Research Scientist
A research scientist conducts experiments and studies in a variety of fields. Some research may involve embedded systems and low-level programming. The course provides an introduction to C programming and embedded systems concepts that may be helpful for those scientists working with instrumentation or customized hardware. The course's coverage of C fundamentals, pointers, and data structures, may be useful for some research projects. This course may be useful, depending on area of research.
Technology Educator
A technology educator teaches technical subjects in educational settings. An understanding of programming, particularly low level programming such as C, is helpful for delivering quality instruction in embedded systems. This course introduces the C language and core concepts in embedded systems. The course's content, which includes both theory and practical application, is relevant for teachers in this field. This course may be useful, based on the particular subject one teaches.
Technical Writer
A technical writer creates documentation for software and hardware products. Having a foundational understanding of C, along with its applications in embedded systems, helps a writer accurately communicate technical concepts. This course provides an introduction to C programming language, data structures and low-level operations. The course's focus on practical coding examples may help a technical writer better understand and explain how software works. This course may be useful for a technical writer working in hardware and software industries.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Master C and Embedded C Programming- Learn as you go.
This is the classic reference book on the C programming language, written by its creators. It provides a concise and authoritative description of the language. It is particularly useful for understanding the fundamentals of C. is commonly used as a textbook at academic institutions and by industry professionals.
Provides a comprehensive overview of embedded systems architecture, covering hardware and software aspects. It is useful for understanding the underlying principles of embedded systems design. While not strictly necessary for the C programming aspects of the course, it provides valuable context and background. This book is commonly used as a reference by embedded systems engineers.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser