University of Oxford Logo University of OxfordSoftware Engineering - Home
On Facebook
Follow us on twitter
Linked in
Linked in
Google plus
Google plus
Stumble Upon
Stumble Upon

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..

Course dates

5th February 2018Oxford University Department of Computer Science 0 places remaining.
4th February 2019Oxford University Department of Computer Science10 places remaining.


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


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 for power, cost, performance

Design techniques and case-studies:

Real world examples of embedded system design, common pitfalls


Basic competency in C will be assumed.