Module overview
This module will introduce you to the general principles and practices of developing software that interacts directly with the hardware and its physical environment.
Software has found its way into almost any electronic device with a typical household already possessing well over 100 computers embedded into products. These microcontrollers are complete computers integrated on a single chip, some only costing pennys and taking up no more than 2x2x2mm^3. The relative simplicity of such microcontrollers make it possible to comprehend a complete computer system within the scope of this module. At the same time these systems are state-of-the art technology with applications ranging from mobile devices and the internet-of-things, to sensor networks, distributed control architectures, and robots.
This module is for students with good self-study skills who enjoy to work independently on practical technical challenges. To succeed in this module you need to teach yourself C from on-line resources and you need to be able to install a cross-compilation tool-chain on your own computer. Please note:
- There is no text book for this module, you will use on-line resources and publicly available documentation for libraries and circuits (see the module notes).
- There is no individual feedback for the frequent coursework (see details below).
- You will receive a hardware kit that includes a microcontroller development board and the peripherals needed to develop, download and debug code on the board (see the module notes).
In a typical week during this module you will have:
- Two lectures introducing new material
- One lecture introducing the coursework exercise due in the coming week
- A tutorial in which the model answer for the previous coursework exercise is discussed and you can ask questions you have about your own solution
- Reading assignments for on-line material that complements the lectures
Linked modules
Pre-requisites: (COMP1202 OR ELEC1201) AND COMP1203 AND COMP1206
Aims and Objectives
Learning Outcomes
Knowledge and Understanding
Having successfully completed this module, you will be able to demonstrate knowledge and understanding of:
- Capabilities and peculiarities of embedded systems
- Implementation of simple operating system components
- Key concepts of operating systems
- Hardware requirements implied by software functionality
Subject Specific Practical Skills
Having successfully completed this module you will be able to:
- Build and debug applications running on a microcontroller
- Implement software on an embedded system
- Write system-level code in C
Subject Specific Intellectual and Research Skills
Having successfully completed this module you will be able to:
- Design algorithms for resource-constraint systems
- Assess the reliability of software on devices in harsh environments
- Understand the fundamental concepts of real-time systems
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
- Preemtive 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
Type | Hours |
---|---|
Wider reading or practice | 45 |
Lecture | 36 |
Tutorial | 12 |
Preparation for scheduled sessions | 18 |
Follow-up work | 18 |
Completion of assessment task | 11 |
Revision | 10 |
Total study time | 150 |
Resources & Reading list
General Resources
Online Resource. - ATmega AT90USB1286 Datasheet - Tool-chain Installtion Instructions - C Quick Reference Card - C Wiki Book - AVR Libc Documentation
Equipment. - LaFortuna Board with AT90USB1286 - USB Cable - Micro SD Card
Staff requirements (including teaching assistants and demonstrators). Approx 10h demonstrator support (clinic sessions to help with tool-chain and hardware problems)
Assessment
Assessment strategy
For the weekly coursework excersises you will typically receive skeleton code that you need to modify or you can take as a starting point for your own implementation. You will receive detailed instructions for each exercise. If you submit your solution (attempt) by the deadline you will receive full marks, independent of the quality of your submission. However, the material of the exercises will be a focus of the exam. You will need a computer with two free powered USB ports (required for the electronic kit you will receive) and you will need to install the cross compilation tool chain on the computer (see module notes for instructions).
The "noteworthy contributions to the delivery of the module" are the top 5% of marks that can be achieved in this module and will be awarded for exceptionally useful contributions on the student wiki and particularly helpful patches submitted for the module materials.
Summative
This is how we’ll formally assess what you have learned in this module.
Method | Percentage contribution |
---|---|
Final Assessment | 75% |
Continuous Assessment | 25% |
Referral
This is how we’ll assess you if you don’t meet the criteria to pass this module.
Method | Percentage contribution |
---|---|
Set Task | 100% |
Repeat
An internal repeat is where you take all of your modules again, including any you passed. An external repeat is where you only re-take the modules you failed.
Method | Percentage contribution |
---|---|
Set Task | 100% |
Repeat Information
Repeat type: Internal & External