Advanced C Programming for Embedded Systems — A 5 day course

contact usEnquire about this course


In this course you'll learn advanced programming techniques using dynamic data structures and algorithms.

Finite state machines and statecharts and their uses are covered in depth.

You'll also learn techniques specific to embedded systems, such as structured interrupt handling, implementation of simple schedulers, and how to work with embedded operating systems.

You'll learn the standard inter-process communication mechanisms and their uses. In addition the course overviews various advanced algorithms and discusses research oriented approaches for learning more about these algorithms and their implementation. The course will also show you how to design modules with clean interfaces to achieve disciplined and well structured code.

The course emphasises the implementation of disciplined and well structured code and the design of modules with clean interfaces. Lab exercises are used to consolidate key concepts.

The course uses PIC16, PIC18, and PIC24 / dsPIC processors as a platform for hands-on work. However, the techniques taught can be readily applied to other architectures. Similarly, the course uses uCOSII and CMX as example operating systems, but Inter-Process Communication techniques are covered in a generic way so that they can be applied to other architectures and operating systems.

Each section of the material covered by the tutor is followed by hands-on practical exercises for which worked examples of the solutions are typically provided.


Students completing this course will considerably improve the discipline and rigour with which they design and write embedded systems applications in C.

You'll be able to implement classical data structures such as circular buffers, linked lists, and trees -- and you'll know when it's appropriate to use them.

You'll be exposed to a variety of advanced programming idioms and algorithms with their associated data structures, for tasks such as indexing, data compression and error detection.

You'll learn to write event driven programs, to implement Finite State Machines, and to design hierarchical state machines using statecharts.

You'll learn structured programming techniques for implementing multi-tasking applications, and you'll be able to work with embedded operating systems as well as the standard inter-process communication idioms such as producer-consumer, workcrew and monitors.

Key Topics


An Introduction to C

Intensive overview of essential C concepts and idioms

Arrays and buffers

Linked Lists in depth

Binary trees, their uses and their relations

Error detection

Implementing simple memory management schemes

Implementing simple flash memory file systems

State Machines and Statecharts


Basic operating systems and multi-tasking concepts

Standard Inter-Process Communication Idioms


Attendees should have some experience of embedded systems programming and a sound basic knowledge of the C language.

Course 'Introduction to C Programming for Embedded Systems' provides suitable background.