Embedded Systems Programming in C - Bespoke Certificate for Maxim...
Outline – modules
Selected topics from computer architecture (2..3 hours)
Selected topics from computer architecture – computer operation, data in computer’s memory,
execution of a high-level language program; memory sections. Role of stack. Data types; data in
memory – alignment. Exceptions and their handling at hardware and software level. Procedure
reentrancy. Semiconductor memory technologies. Program in hosted and freestanding environment.
Modern C language features related to embedded programming (3..4
hours)
C language origins and standard development history – K&R, ISO C90, C99, C11, C18, C23. C as
“high-level assembly” language.
Basic C language concepts – old and new simple data types. Declarations and definitions, source
and header files. Type size and alignment.
Enumerations. Aggregate types: vectors/arrays, structures, unions. Size and alignment of aggregate
types, sizeof, alignof and offsetof operators. Portability of structures and unions. Compound literals.
Data declarations and definitions. Functions and their prototypes. External vs. local declarations.
Data and function attributes: const, volatile, restrict. Storage classes.
Using printf and scanf family functions with explicit-size types.
Coding style for writing error-immune programs. Reducing the ranges and scopes. Object naming
conventions. Common errors in C programs. Importance of static and const specifiers.
ARM M-line architecture overview (1 hour)
ARM Cortex-M processors - programming model, exception handling; multilevel interrupt system.
Embedded systems programming (approx. 7 hours)
Microcontroller as C language freestanding environment. Memory sections in microcontroller’s
memory. Microcontroller resources’ visibility in C language.
Approaches to uC firmware design: event loop, event loop with interrupts, fully event-driven
without polling loop, RTOS-based. Software state machines.
Exceptions and their handling in C. Firmware startup
Reducing the memory usage. Volatile specifier. Linking and linker scripts. Weak definitions of
objects.
Register-level vs. library-based peripheral module programming – pros and cons.
GPIO and simple timers. Using timer interrupt in simple applications. GPIO initialization.
Controlling the GPIO outputs. Using mechanical switches – no-nonsense debouncing methods.
Program debugging – single-stepping, breakpoints, examining data and peripheral modules.
Communication interfaces – general info. UART communication. Handling the UART using
polling, interrupts and DMA. Using C standard input/output in a microcontroller.
Decomposition of firmware functions into thread code and interrupts routines – simple and
advanced scenario. Event-driven programming for microcontrollers.
Polling-free, fully asynchronous software concepts. Useful techniques for microcontroller software
design.