Edocti
Advanced Technical Training for the Software Engineer of Tomorrow
Edocti Training

Advanced C Programming

Advanced
21 h
4.9 (721 reviews)

Scheduled sessions

No sessions are available at the moment.
Advanced C Programming

Advanced techniques: Master essential C features for robust embedded projects, from linker internals to state machines.

Work hands-on with arrays, pointers, object-oriented patterns in C, and advanced embedded concepts with a focus on AVR.

Explore the evolution of C standards (C11/C18) and how modern constructs impact embedded code.

Gain practical experience through extensive labs (~70% of the course) that mirror real-world industry codebases.

How this helps: Build robust, portable, and highly efficient embedded software with absolute confidence.

Who it’s for: Developers with prior C experience aiming to deepen their expertise in embedded systems.

By the end of the course, you’ll be capable of implementing complex systems in C, handling everything from ISRs to low-power design.

Skills You Will Learn

C Linker & Internals Pointers & Memory OOP in C State Machines Modern C (C11/C18) AVR Architecture ISR & RTOS Basics Low-Power Design

Curriculum

Essential C

  • The job of the linker (in detail)
  • Execution context for applications
  • ABI formats
  • Promotion pitfalls, overflow pitfalls
  • Pointers
  • Working with multi-dimensional arrays
  • Pitfalls with arrays and C strings
  • Complex data types
  • Inlining revisited
  • Portability problems and solutions
  • Undefined behaviors

Object Oriented methods in C

  • Constructors and destructors and how the toolchain supports them
  • "Virtual methods" in C and their advantages
  • "Inheritance" and "polymorphism"
  • Performance improvements

State machines done right

  • State representation (enums, function pointers)
  • Transition tables and guards
  • Hierarchical state machines (HSM)
  • Event-driven architecture for embedded systems

Evolution of C

  • Newer language constructs (keywords, trigraphs, digraphs)
  • C11 _Generic and type-generic macros
  • C11/C18 updates relevant to embedded codebases

Handling variable number of arguments

  • The basics of varargs
  • Security considerations (format-string issues, bounds, undefined behavior)

Embedded programming (AVR focus)

  • AVR architecture overview (memory, CPU)
  • Important registers and addressing modes
  • Key AVR instructions
  • Timers
  • I/O ports
  • ADC
  • PWM
  • Interrupt handling
  • AVR interrupts and the interrupt vector
  • Writing ISRs: do's and don'ts, examples
  • Deferrable functions and deferred work
  • Time management with timers
  • Timer operation patterns
  • RTOS essentials
  • Scheduling: threads, context switching, scheduler types
  • Implementing a task scheduler for precise timing
  • Mutexes (types, robust vs. non-robust, policy)
  • MMU basics
  • Hardware I/O: buses and ports
  • Important registers recap (GPIO/ADC/PWM/Watchdog)
  • Power management and system power states

Advanced embedded C (extra topics)

  • C11 atomics vs. volatile; memory order and lock-free patterns (where applicable)
  • Ring buffers for ISR ⇄ main communication (single-producer/single-consumer)
  • DMA basics and zero-copy I/O (where available)
  • Linker scripts and memory sections (.text/.data/.bss/.rodata, custom placement)
  • Startup code and boot sequence (reset vector, crt0, initialization order)
  • Interrupt latency, critical sections, and determinism
  • Tickless scheduling and low-jitter timers
  • Fixed-point arithmetic and saturation arithmetic
  • MISRA C overview and practical deviation handling
  • Testing on embedded targets: Unity/CMock, fakes, and HIL
  • Abstraction strategies: HAL vs. register-level; compile-time configuration
  • Low-power design: sleep modes, clock gating, wake-up sources

Course Day Structure

  • Part 1: 09:00–10:30
  • Break: 10:30–10:45
  • Part 2: 10:45–12:15
  • Lunch break: 12:15–13:15
  • Part 3: 13:15–15:15
  • Break: 15:15–15:30
  • Part 4: 15:30–17:30

Did you attend this course?

Your feedback is invaluable to us. Please share your experience with us and help us improve this course for future participants.

Share your feedback

Want to find out more? We are here to help!

Or email us directly at training@edocti.com.