Embedded Software for the Internet of Things

Fall 2020 University of Trento

Instructor: Dr. Kasım Sinan Yıldırım

All students are required to enrol on the course website: Embedded Software for the Internet of Things


The following book will serve as the core text:

The following (supporting) books build up a nice literature on embedded systems.


Contemporary Internet of Things (IoT) systems comprise embedded computing devices that enable perceiving information about anything, at any time and from anywhere. These devices are interconnected, often embedded in the environment, small in size, battery-powered, and constrained in terms of computation and communication resources. These properties pose peculiar system-level challenges to develop IoT applications.

The objective of this course is to expose students to programming languages, hardware platforms, operating systems, and, in general, the necessary software tools and techniques geared towards the development of IoT applications. By the end of this course, the students are expected to acquire the theoretical and practical skills to interface with state-of-the-art embedded computing platforms. They will be equipped with the fundamentals to design and develop IoT applications, including, but not limited to, electrocardiogram sensing and interpretation, image processing with low-resolution cameras, machine learning on the edge, wireless localization, and many more.

Upon successful completion of this module, students should be able to:

  • Characterize the main architectural components of microcontroller-based IoT platforms
  • Use the development environments and toolchains to program and debug microcontrollers
  • Design, implement and test embedded software by following the fundamental methodologies for IoT systems
  • Assess IoT application performance and understand the techniques used for optimizing systems execution
  • Characterize the basics of real-time scheduling and the main components of embedded real-time operating systems


An Introduction to Embedded Computing

  • Embedded Computing and the Internet of Things
  • Microprocessor-based Application Examples
  • Embedded Systems Design Process

Embedded Computing Platforms

  • Computer Architecture Review
  • CPUs and Instruction Sets
  • ARM Processor Architecture
  • Embedded Platform Hardware and Software
  • Development Environments, Debugging I/O, Interrupts, Memory System, Performance, Power Management

Embedded Software Design

  • Basic program elements
  • State machines, basic data structures, circular buffers, queues
  • Code generation
  • Assembly, linking, object code, memory map, symbol table, creating libraries and linking, Makefiles
  • Compiler optimizations, performance analysis, power analysis
  • Validation and testing

Embedded Operating Systems

  • Tasks, processes, scheduling
  • Interprocess communication
  • Real-time operating systems
  • deadlines, priorities, priority inversion

Internet-of-Things Systems

  • Applications, architectures
  • Network protocols
  • Bluetooth and Bluetooth Low Energy, ZigBee, Wi-Fi

In the meantime, some lectures will be dedicated to the following hands-on activities:

Software Tools for Texas Instruments IoT platform

  • Code Composer IDE for code development
  • MSP-EXP432P401R SimpleLink MSP432 LaunchPad
  • BOOSTXL-EDUMKII Educational BoosterPack
  • CC3100 BoosterPack

Bare Metal Programming

  • C programming for Embedded Systems
  • Microcontroller Interfacing
  • Ports and I/O
  • Polling/Interrupt Management
  • Timers and timer services
  • Serial Communication (UART), SPI, I2C
  • Reading sensor data
  • Application examples
  • Sensor data processing
  • Noise, filtering and smoothing, FFT
  • Activity recognition via accelerometers/gyroscopes

Programming using an RTOS

  • Introduction to FreeRTOS API
  • Code and application examples


We will use ARM-based TI MSP432 Launchpad; a state-of-the-art embedded system development kit that features a low-power and high performance micro-controller of modern IoT applications.