Real-Time Embedded Systems Lab
School of Computing, Informatics, and Decision Systems Engineering
Ira A. Fulton School of Engineering, Arizona State University
Home Contact us Site Map
Faculty People


CSE 438/598 Embedded Systems Programming -- Fall 2014

The course provides the opportunities for students to learn various fundamental issues as well as practical developments in the area of embedded systems programming. After completing the course, students will be able to

1.      Understand the design issues of embedded software and gain an in-depth knowledge of development and execution environment on target processors.

2.      Understand the functions and the internal structure of device interfaces, drivers, and real-time operating systems.

3.      Acquire the skill to develop multi-threaded embedded software in target environment, including good quality and coding style for embedded programming, and testing and debugging approaches to verify embedded software operations.

4.      Develop feasible task scheduling and carry out system performance and task schedulability analyses.

A proper target development environment will be adopted for teaching and software development. An embedded platform, with rich architectural features, will be used to investigate embedded software characteristics, IO operations and peripherals, and to experience system design and development practices.


Reference material:

Real-time Systems, by Jane Liu, Prentice Hall; ISBN: 0130996513.

Intel® Quark SoC X1000 Core Developer’s Manual.

Intel® Quark SoC X1000 Datasheet.

Intel IA32 Software developer’s manual.

The Linux Kernel Module Programming Guide, Peter Jay Salzman, Michael Burian, and Ori Pomerantz, 2007, ver 2.6.4.

Linux Device Drivers (3rd Edition) Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman, 2005.

Debugging Embedded Linux, Christopher Hallinan, 2007.

Programming PCI-Devices under Linux, Claus Schroeter, Linux-PCI Support.

Prerequisites by Topic

1.      CSE Computer Organization

2.      CSE Embedded Microprocessor Systems

3.      C/C++ Programming

Course Content: (75minutes/lecture)
  • Introduction: characteristics of embedded applications, concurrency and timing constraints, embedded system development environment (1 lecture) [Slide_1]
  •  Linux Modules and Device Drivers: Software structure of a device driver, Linux loadable kernel module, user program and kernel interface (3 lectures) [Slide_2]
  • Intel Quark processor and Galileo board: Current trends of microprocessor, IA32 processor, Memory model, Modes of operation, Protected mode memory management, System memory map, Interrupts and Exceptions, APIC, Interrupt handling, Overview of Architecture: North-bridge and South-bridge, IO controller Hub (3 lectures) [Slide_3]
  • PCI and PCI Express Bus Architecture: Device controllers, programming approaches,  plug and play concept,interconnection architecture and high speed serial buses, PCI express (2 lectures) [Slide_3b]
  • I2C and GPIO drivers in Linux: Software structure of an I2C Linux driver  Accessing I2C devices from user space, 'I2C-dev' module (3 lectures) [Slide_4]
  • Linux threading and synchronization: Threads in Linux and Vxworks, Task state transitions, Syncronization, Producer/Consumer problem (2 lectures) [Slide_5]
  • Quark SPI interface and driver in Linux: SPI driver and Linux spidev (1.5 lecture) [Slide_6]
  • Linux interrupt processing and kernel threads: Preemptive context switching, Interrupt handling,  Bottom halves: Softirqs, Tasklets, Worqueues (2.5 lectures) [Slide_7]
  • Linux input systems: Software structure of Input system, Event handling with an example of PS2-mouse,  Threaded Irqs (2 lectures) [Slide_8]
  • Embedded software programming: Task model and specification, deadlocks and distributed deadlock prevention,  imprecise computation, overrun management, asynchronous transfer of control, setjmp and longjmp, exception handling in C and C++ (3 lectures) [Slide_9]
  • Scheduling algorithms and analysis: cyclic scheduling, rate-monotonic scheduling, EDF, resource sharing, priority inheritance, deadlock analysis, and schedulability analysis (5 lectures) [Slide_10]

Class Video:

Class -- Aug. 28 2nd part of Intro and Linux module Class -- Oct. 9 Thread and synchronization
Class -- Sep. 2 Linkux kernel module and device drivers Class -- Oct. 23 Assignment 3, SPI interface and driver
Class -- Sep. 4 Linux device drivers, Quark processor Class -- Oct. 30 Linux interrupt processing
Class -- Sep. 9 Quark processor and x86 architecture Class -- Nov. 4 Linux input systems and event handling
Class -- Sep. 11 x86 architecture and PCI bus Class -- Nov. 6 Linux event handling, Embedded software
Class -- Sep. 16 PCI bus architecture Class -- Nov. 13 Assignment 4, Embedded software
Class -- Sep. 18 Quark GPIO and I2C, PCI express Class -- Nov. 18 Embedded software
Class -- Sep. 23 GPIO programming and driver Class -- Nov. 20 Assignment 4, Signaling
Class -- Sep. 25 Assignment 2, I2C interface and driver Class -- Nov. 25 Signaling, Scheduling algorithm
Class -- Sep. 30 Linux I2C driver and work queue Class -- Dec. 2 Scheduling algorithms and analysis
Class -- Oct. 2 Thread ans synchronization Class -- Dec. 4 Scheduling algorithms and analysis
Class -- Oct. 7 Thread and synchronization    


All design and development projects will be carried out in the real-time embedded systems laboratory which is located in the 2nd floor of Brickyard Building. The lab consists of PCs with Linux and Windows operating systems, and Eclipse IDE. The target boards are Intel Galileo Gen1 boards.


Galileo Gen 1 Board


Gyro sensor EEPROM chip Breadboard
Ultrasound distance sensor LED Matrix fly_vehicle


·         Assignment 1 --  A Device driver for shared message queues with TSC timestamping

·         Assignment 2 --  Drivers to access EEPROM via I2C bus and GPIO  

·         Assignment 3 --  Animation -- SPI device programming and pulse measurement with distance sensor and LED matrix display

·         Assignment 4 --  IMU tracking -- gyroscope and accelerometer sensing and filter

·         Assignment 5 --  Event handling, signaling, and imprecise computation


Sample Video Presentations :

·          Assignment 2 -- Drivers to access EEPROM via I2C bus       -- Thyagarajan Ramachandran                                

·          Assignment 3 Animation -- Ultrasound distance sensor and LED display       -- Brahmesh Jain                                

                              -- Sanjay Raam Madhavan

-- Jay Patel

-- Ankit Rathi      

·          Assignment 4 -- IMU tracking with gyro sensor       -- Nagarjuna Rao Dustakar

                                                                                          -- Jenil Jain

·          Assignment 5 -- Event handling and signaling         -- Venkat Koppana

                                                                                          -- Kathan Shukla


Our Research
Our Goal
We do research on  Real-time Java, Embedded Software and Systems, Smart homes, and so on...
To build reliable real-time embedded system, contribute computer engineering community and make our future better.

 Copyright [2011] [RTES, School of Computing, Informatics, and Decision Systems Engineering. Arizona State University]. All rights reserved