Embedded Computing

Overview

Knowledge Transferred

Knowledge from “Computer Science and Programming (1+2)” and “Embedded Systems” is picked up and unified.

  • Large scale software development, covering topics like

    • Test Driven Development

    • Object Oriented Design

    • Configuration Management

  • Linux (Operating System Concepts). Bare metal operating systems are intentionally simple - as a result, they are generally less powerful. Linux, being a general purpose OS, has a number of features every developer wants if the software becomes larger,

    • Address space separation through the concept of processes: an abstraction of a crucial piece of hardware, the Memory Management Unit (MMU).

    • A sophisticated yet simple permission system.

    • Natively supports a great variety of file systems and storage media.

    • Natively supports The Internet.

    • Natively supports optional realtime capabilities (on a per-process basis).

    • Depending on the underlying hardware platform, Linux offers support non-PC type hardware which is popular in the embedded world.

  • Python (Programming language alternatives). Embedded applications are historically written in C/C++ which is hard. It is often more appropriate to prototype functionality in a higher level language like Python, or even use that as final production language.

Course Setup

The Raspberry Pi is used as work environment and hardware platform.

  • It comes with a fully functional Linux distribution (based on Debian).

  • It supports hardware that is en vogue in embedded applications, like GPIO, I2C, SPI, serial, and others.

Details

See here for a complete overview of the course structure.

Embedded Computing 1

(Details)

Embedded Computing 2

(Details)

  • Python introduction. Introduce a new language.

  • Rewrite exercises. Based on what was accomplished in C++, in “Embedded Computing 1”, translate those exercises into an equivalent set written in Python (and see how simple this is).

  • Web programming. Using the Flask web framework, write a web application to visualize sensor data.

  • More advanced topics. Use Python libraries, for example

    • Network programming

    • Exchange documents using JSON and/or CSV/Excel

    • Database access

  • Linux Kernel Drivers maybe?