Workshop content:
C Basic data types
Integer types
Floating point types
The relationship between arrays and
pointers
Enums
Casting and type conversion
Little and Big endian
Declarations (the basics)
Variables
Storage Classes
Type qualifiers (const and volatile)
Constants and declarations
Object Lifetimes
Static and Automatic Duration
Fixed- and Variable-Length Arrays
Linkage
Memory location (stack, data, bss)
Incomplete types
Void
Struct/union as incomplete type
Mutually-Referential Types
Array as incomplete type
Ellipsis Parameters
Abstract Types
Functions in C
Functions and function prototypes
Passing arrays to functions
External variables and scope rules
Static variables
Calling conventions (examples: MIPS, Intel)
Calling assembly code from C
Calling C from assembly code (+)
Understanding C's call by value mechanism
for passing arguments
Understanding C's return value mechanism
Recursion
Main function
Common errors
Pointers and Arrays
Overview
Pointer Types
Using sizeof
Pointer Arithmetic
Pointers to pointers
Arrays
The relationship of pointers and arrays
How C deals with multi-dimensional arrays
Passing Arrays to Functions
Arrays of pointers - their uses and
initialization
Pointers and constant correctness
Function pointers
Void pointers
Uninitialized Pointers
Null Pointers
Endianess
Input-output
Standard input and standard output
Formatted output - printf
Formatted input - scanf
The dangers of scanf
File access and file I/O
Binary I/O
Strings
String initialization
Strings and string functions
Passing Strings to Functions
String Handling
Standard String Functions
String constant, location in memory
Memory overwrite
Structures - Member Alignment and
Padding
Unions
Multiple-File Programs
Large Programs How to Split a Program
Sharing Declarations
Using and writing Header Files
Writing a Header File
Build process, Libraries
Introduction
Software Building Concepts
Preprocessor
Compiler
Assembler
Linker
Linker scripts
Linker Errors
Building and using libraries
Makefiles, RCS and CVS
A Simple Project
Targets and Prerequisites in Make
Building an Object File with Make
Building an Executable with Make
Rebuilding When Prerequisites Change
Pattern Rule Variables
Implicit Rules
Configuring Implicit Rules
Substitution References
The importance of version control
SVN
An introduction to data structures and
algorithms
Allocating and freeing memory
Circular buffers
Double buffering
Singly linked lists, doubly linked lists and queues
FIFO queues and LIFO queues (stacks)
Finite state machine
Diagnostics assert
Embedded System Oriented Topics
Compiler specific features
o #pragmas
o Non ANSII C extensions
o Accessing and manipulating special function
registers
Defining bit oriented data structures
Poling and interrupts
Startup code
Threads, POSIX Pthreads
Processes and Threads Analogy
Threads (non) shared data
Creating Posix Pthreads
Finishing thread execution, return value
Canceling threads
Threads, POSIX Pthreads
Synchronization
Shared Data Problems
Race Conditions
Critical Sections
Mutexes
Condition Variables
Semaphores
Thread-Safe Functions
RT-RK, LLC Narodnog fronta 23a 21000 Novi Sad, Serbia Phone: +381 (0)21 480 11 00 | Fax: +381 (0)21 450 721 www.rt-rk.com