This module aims to introduce students to operating system internals and the general principles and practices of developing low-level software that interacts directly with hardware.
Aims and Objectives
Learning Outcomes
Syllabus
Programming embedded systems
- Debugging with limited I/O and memory
- Asynchronous & reentrant code
- Real-time programming
Input/Output
- Physical Interfaces
- Interrupts
- Drivers
Event-driven programming
- State machines
- Actors
Timing
- Hardware timer
- Watchdogs
Memory management
- Bootloader
- Stack vs. heap
- RAM vs. Flash
- Multiprogramming
Scheduling
- Pre-emptive multitasking
- Real-time scheduling
- Performance
Serial Communication
- UART, I2C/SPII, USB
File Systems
- Flash file systems
- FAT-FS
Embedded Applications
- Power consumption
- Reliability
Learning and Teaching
Teaching and learning methods
The content of this module is delivered through lectures, the module website, and directed reading.
Students work on their understanding through a combination of independent study and preparation for timetabled activities, along with formative assessments in the form of coursework assignments.
Students work on their practical skills and technical understanding in technical laboratories.
Assessment
Assessment strategy
This module is assessed by a combination of coursework and a final assessment in the form of a written examination.