University of Oxford Logo University of OxfordSoftware Engineering - Home
On Facebook
Facebook
Follow us on twitter
Twitter
Linked in
Linked in
Google plus
Google plus
Digg
Digg
Pinterest
Pinterest
Stumble Upon
Stumble Upon
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 2025Oxford University Department of Computer Science - Held in the Department 0 places remaining.
26th January 2026Oxford University Department of Computer Science - Held in the Department17 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.