About Embedded

C Programming for Embedded Systems provides an excellent full scope primer for any of the embedded system courses, or for anyone wishing to learn or use C in the context of embedded programming or hardware-software integration.

Who should attend?

C Programming for Embedded Systems is a hands-on course aimed at software, firmware, and hardware engineers who need to learn the practical skills necessary to program embedded micro controllers in C. It is suitable both for people who do not know C and for people who have used C in other contexts but have had little or no exposure to embedded programming in C.


Should have a working knowledge of programming language concepts and syntax, and should have experience programming in some high-level programming language (or HDL). In particular, delegates should have a working knowledge of functions, variables, data types, operators, and statements. This course is not suitable as a first course in computer programming. Previous experience with C is advantageous but is not essential. Embedded programming experience is not necessary.

Course Content

Introduction to C

Characteristics of Embedded Systems • C Language Overview • Structure of a C Program • Identifiers • Name Spaces and Scope • Compilation & Linking • MCU Boot Process • C Best Practices for Embedded Systems

Variables, Types and Debugging

MCU Architecture • Program Execution • Variables • Representing Numbers • Types • Casting • Debugging Embedded Systems

Operators and Hardware Manipulation

Understanding Register Maps • Operators • Bit Manipulation • Modulus and Shifting • Memory Addressing • Sizeof • Ternary Operator • Precedence Rules • Best Practices for Embedded Systems

Basic Program Flow Control

Software Design Cycle • Software Architecture • UML • Flowcharts • Round Robin Scheduling • Statements • For and While Loops • If and Switch statements • Infinite Loops • Best Practices for Embedded Systems

Advanced Flow Control

Introduction to Real-time Concepts • Interrupt Basics • Interrupt Vector Tables • Nesting and Priorities • Software Interrupts • Volatile keyword • Shared Data Problems and Solutions • RMA Analysis • Interrupts Best Practice

Advanced Types, Constants and Expressions

Enumerations • Derived Types • Literals • Expressions and Evaluation • State Machines • State Charts • Software Architecture Concepts

Arrays and Pointer Basics

Arrays • Multidimensional Arrays • Strings • String Conversion • Pointer Types • Pointers and Arrays • Pointers Operations • Best Practices for Embedded Systems

More Pointers and Strings

Pointers to Pointers • Pointers to Constants • Constant Pointers • String Libraries • Manipulating Memory • Best Practices for Embedded Systems


Syntax • Variable Scope • Recursion • Inline Functions • Software Metrics • Static Code Analysis • Testing Techniques • Best Practices for Embedded Systems

Structures and Unions

Overview of Structures • Unions • Driver Design • Defining APIs • Driver Models • GPIO Driver Example

Scheduling Techniques

Arrays of Pointers to Functions • Function Queue Scheduling • Cooperative Scheduling • Scheduler Design • Energy Profiling • Low Power Software Design


Syntax • Storage Class Specifiers • Global Variables • Type Qualifiers • Linkage Identifiers • Best Practice for Embedded Systems


#define • Macros • Precedence • Conditional Compilation • Warnings • #pragma • Predefined Macros

Real-Time Operating Systems

Software Concurrency • Tasks and States • Task Synchronization • Mutexes Semaphores & Queues • GPOS vs RTOS

Call Now- +91-921-276-0556

Send a Query

Tai Infotech Pvt Ltd, 2017 All Rights Reserved