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

Advanced C Programming

Advanced
21 h
4.9 (721 reviews)
Advanced C Programming

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

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

Explore the evolution of C standards and how new constructs affect embedded code.

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

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

Who it’s for: designed for individuals with prior C experience who want to deepen their embedded expertise.

By the end you’ll be confident implementing complex systems with C, from ISRs to 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