ESS | Embedded Software and Systems |
Over 99% of processors manufactured end up in embedded systems, ranging from washing machines to traffic lights. Embedded systems are pervasive and are becoming more so through the “internet of things”. The aim of this course is to illustrate how the process of software development for embedded systems is fundamentally different to conventional software, due to the tight coupling between hardware and software. Development on embedded systems is particularly challenging due to the difficulties in debugging real hardware. However, there are many techniques, that with some modification, can be adapted to the embedded world, such as Test Driven Design. This course demonstrates how adoption of mocks, test harnesses and unit-tests can reduce development effort in embedded software design. To make concepts real, each students will test and design code on a hardware platform throughout the work.
Frequency
This course normally runs once a year.
Course dates
24th March 2025 | Oxford University Department of Computer Science - Held in the Department | 0 places remaining. |
26th January 2026 | Oxford University Department of Computer Science - Held in the Department | 17 places remaining. |
Objectives
At the end of the course, students will: - understand the characteristics and properties of an embedded system - apply software engineering principles to the embedded space - be able to make decisions about how to engineer a system given certain constraints on cost, power consumption and performance - run and debug code on a real hardware platform
Contents
Introduction to Embedded Systems:
properties of embedded systems, constraints
Architecture and CPU Instructions:
8-64 bit, single/multicore, RISC/CISC
Software Engineering for Embedded Systems:
Modelling, Design Patterns, Reuse, Guidelines and Standards, HW/SW co-design
Interfacing to the real world:
Peripherals, Communication, Interrupts
Operating systems:
Simple loops, cooperative multitasking, real-time operating systems
Debugging and test techniques:
Test Driven Development (TDD), Native vs hardware-in-the-loop, JTAG
Optimizing:
Optimizing for power, cost, performance
Design techniques and case-studies:
Real world examples of embedded system design, common pitfalls
Requirements
Basic competency in C will be assumed.