Embedded Systems and Software Engineering

Instructors:Ivan A. Ivanov, Larissa V. Panina and Nikolay A. Yudanov

Course Summary

The aim of this specialist course is to develop skills in designing and programming embedded systems (ES). The range of tasks the solution of which requires the use of ES is continuously expanding making this program timely and important. There is a remarkable gross of microprocessor technology and controlling system based on systems on crystal (SoC). The course includes understanding ES on the example of standard software and hardware solutions and representing them as layered structures of software enablement and management (process layer, hardware layer, platform layer, middleware layer and application layer). The emphasis will be made on the usage of Operating System (OS) Linux for ES and on gaining practical skills of the development, debugging and testing software for running ES.

The main objective of the course is a systematic study of ES for applications in physical experiment. Specific objectives include: practical introduction to designing ES based on SoC and supporting devices; programming ES within OS Linux; studding functional peripheral modules and data exchange interfaces UART, SPI, I2C connected through general I/O ports (GPIO); demonstrating the range of options of available programming solutions for ES.

Course Format

Hours of lectureHours of discussionHours of independent studyTotal numbers of hours

Please note that students are expected to study outside of class for three hours for every hour in class.

Course Content

Course Content

The plan is to work through the following topics

Part 1. Introduction to microprocessors for computer systems (CS)

  1. Classification of CS. The main components of CS. Architecture, standard software and hardware solutions used in CS. Current state and development tendencies of CS.
  2. Basic architectures of microprocessors for CS (ARM, MIPS): architecture, instruction set, exceptions and interrupts.
  3. Standard interfaces and protocols of data exchange, I/O ports of general purpose (GPIO). Data exchange interfaces UART, SPI, I2C.

Part 2. Operating systems (OS) and OS Linux

  1. Review and comparison of OS for CS. Running CS without OS. Using OS Linux for CS. Architecture of OS Linux.
  2. Introduction to configuration and administration of OS Linux. Structure of Linux Kernel. Structure of peripherals: input/output, memory controlling, access to file system.
  3. Start-up process. Root-file systems. RAM-disc.
  4. Basic Linux tool-set

Part 3 Software engineering using C-programming language

  1. C-programming language: syntaxes, instructions, functions and variables, structs.

Part 4. Application software for CS

  1. Programming and system methods of software design and debugging. Development of application software for CS. Cross-compilation.
  2. Standard libraries
  3. Programming of external devices connected through exchange interfaces UART, SPI, I2C.


  1. Architecture and tools of OS Linux
  2. Architecture of kernel of OS Linux. Configuration and assembling.
  3. First start-up of Linux at laboratory complex (standard system on crystal). RAM–disc.
  4. Administration of OS Linux.
  5. Integrated development environment. Cross-compillation.
  6. Software development using C-programming language. I/O systems, file systems
  7. Software development using C-programming language, support of data exchange via network.
  8. Software development using C-programming language. Process control.
  9. Working with I/O port GPIO using as an example turning on/off LED.
  10. Programming the external devices connected via UART. Tuning the interface for date transmission to COM port. Console.
  11. Programming the external devices, connecting LCD display.
  12. Programming the external devices, connecting the accelerometer sensor.
  13. Programming the external devices, connecting the sensors of temperature and humidity.
  14. Programming the external devices, connecting two laboratory setups with the help of SPI-interface.
  15. Programming the external devices, connecting 3-axis magnetometer using I2C interface.
  16. Programming the external devices, connecting thermocouple via ADC module.
  17. Programming the external devices, connecting the sensor of pressure.

Reading List

Required reading:

  1. R. Oshana, M. Kraeling, Software engineering for embedded systems: Elsevier Inc., 2013.
  2. N. S. Kumar, M. Saravaan, S. Jeevanathan, Microprocessors and Microcontrollers, Oxford University Press, New York, 2009.
  3. Andrew Sloss, Dominic Symes, Chris Wright, ARM System Developer's Guide: Designing and Optimizing System Software (The Morgan Kaufmann Series in Computer Architecture and Design) 1st Edition, ELSEVIER, 2004.
  4. Evi Nemeth, Garth Snyder, Trent R. Hein, Linux Administration Handbook, Second Edition, Williams, 2007.

Additional textbooks:

  1. M. Johnson, Magnetoelectronics. Elsevier Academic Press, 2004
  2. P. Piprek, Optoelectronic Devices: Advanced simulation and analysis. Springer 2005
  3. P. Gubin. Magnetic nanoparticles. Wiley, New York, 2009.

Homework Assignments

Includes preparation for practicals.


Class participation10%
Homework assignments30%
Midterm course work20%
Final exam40%