C Programming for Embedded Systems


COVID-19 Update: View Bicard COVID News Updates
This course is available Live Online: View the Live Online full course description
Limited In-Person schedule available in India from March 2021


Standard Level - 40 hours

C Programming for Embedded Systems teaches the C programming language in the context of embedded systems. As well as giving delegates a full grounding in the C programming language, this course teaches delegates how to program a modern embedded microcontroller using real-time development tools. The syllabus, examples and exercises are tuned to the practical requirements of embedded microcontroller programming.

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

Workshops comprise approximately 50% of class time and are based around carefully designed hands-on exercises to reinforce learning. Bicard is an independent company, enabling delegates to receive the benefit of objective tuition while learning in the context of their chosen tool chain. Public courses are currently taught using the NXP MCUXpresso IDE and the FRDM-KL46Z NXP Freedom Development Board. Each delegate will receive their own development board to take away and keep after the course. Other tool chains and development boards may be available on request for on-site team-based training. Please contact Bicard for further information.

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 microcontrollers 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.

  • The syntax and semantics of the C language for embedded programming
  • The principles of embedded software programming and real-time programming
  • How to program an embedded microcontroller in C
  • A practical introduction to real-time development tools
  • How to debug a C program on a target device
  • How to access memory-mapped peripherals using C
  • How to write interrupt handlers in C
  • An introduction to real-time operating systems and scheduling
  • An introduction to low power software design
  • Best practices for embedded programming

Delegates 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.

Please contact Bicard direct to discuss and assess your specific experience against the pre-requisites.

Bicard training materials are renowned for being the most comprehensive and user friendly available. Their style, content and coverage is unique in the embedded systems training world, and has made them sought after resources in their own right. The materials include:

  • Fully indexed class notes creating a complete reference manual
  • Workbook full of practical examples and solutions to help you apply your knowledge

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 

Functions

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 

Declarations

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

Preprocessor

#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 

We can also present supplemental content to address the specific requirements of your team, including extended discussion of topics such as low-power design, software robustness, and avoiding common pitfalls.

Please contact Bicard to discuss your specific requirements.

Get Course Details

You have reached the limit




Looking for team-based training, or other locations?

Complete an enquiry form and a Bicard representative will get back to you.

Enquiry Form