These are the expected learning outcomes for each of the assignments. They are subject to change for future assignments.
As1: Reaction Game (Hello-World)
- Setup host development environment
- Linux skills to configure host for cross-compile
- Linux skills to access target from host (SSH & serial)
- Linux skills to access host's files from target (NFS)
- Efficiently write, compile, deploy and test a C program
- Target customization
- Create script to easily mount NFS
- Change Linux welcome message for SSH
- Change device hostname
- Run program on log-in
- Programming skills and tools
- Write a C program to coordinate hardware inputs, and hardware outputs
- Write a C program to manage time: track time passing, pause for a duration of time
- Write multi-file C program with separation between application and hardware-specific code
- Use CMake to organize and cross-compile a C application
- Embedded system: Access hardware
- Use LEDs via the Linux interface.
- Use I2C to communicate with ADC chip.
- Interact with ADC chip to read joystick and process readings.
As2: Light Dip (Linux)
- Programming skills and tools
- Create application with modular architecture; provide clear high-level module interfaces which encapsulate implementation details inside cohesive modules
- Write multithreaded application with thread safe memory access
- Dynamically allocate, use, and free memory with pointers
- Use Valgrind to check for memory leaks, invalid memory access, and unfreed memory on exit
- Use network to support receiving commands and replying to commands
- Correct use of static functions for internally linked functions
- Write clean C (or C++/Rust) code: consistent naming, clear formatting, easy to read logic
- Cross-debugging a simple program using GNU Debugger's command-line
- Embedded system: Analysis and design skills
- Design a state machine to handle a rotary encoder
- Analyze real-time data (detect light-dips)
- Analyze timing jitter in different real-time parts of the application
- Understand use of a light detector
- Embedded system: Linux
- Configure I2C devices
- Configure A2D devices
- Configure SPI devices
- Embedded system: Access hardware
- Implement code to write text to the LCD
- Implement and debug a state machine to handle a rotary encoder
- Read A2D sensors (light intensity)
- Control I2C device (14-seg display)
As3: Beat-box
- Programming skills and tools
- Create modular multithreadded application
- Read and access PCM audio data from file
- Generate low-level audio output to ALSA in real-time by manually mixing PCM data
- Respond to real-time events (time, network, and user input) to trigger events (play sound)
- Modify and serve an embedded Node.js web page to report device status and control device functionality via network interface
- Use Valgrind to check for correct memory access
- Cross-compiling an application to use ALSA
- Embedded system: Analysis and design skills
- Mix PCM sound data to build real-time audio output frames
- Respond to real-time inputs
- Debounce noisy inputs
- Read an I2C part's datasheet to understand how to control it
- Embedded system: Linux
- Configure BBG to load audio drivers
- Use ALSA configurations and programs setup and test audio output
- Embedded system: Access hardware
- Audio output
- Read real-time data from I2C device (accelerometer)
As4: R5 + Linux = Find the Dot
- Programming skills and tools
- Create a good abstraction for the app to work with decoupled from accessing the LED strip.
- Design good architecture to track physical state of board along with game state.
- Embedded system: Analysis and design skills.
- Translating accelerometer data into information about which way the board is pointing in multiple dimensions.
- Embedded system: Linux
- Use shared memory between the Linux and R5 applications.
- Correct use of synchronization for sharing access to data structures between Linux and R5 processors.
- Embedded system: Access hardware
- Correct approach to bit-bang the LED strip protocol, based on sample code.
- Understand LED strip colours, brightness, and how to control each LED.
- Accurate and timely reading of the accelerometer.
- Correct integration of LCD output.