CS452 - Real-Time Programming - Spring 2011

Lecture 2 - Introduction

Pubilc Service Annoucements

  1. Due date for assignment 0/1
  2. Combination to trains lab
  3. Ubuntu 10.10
  4. `I can remember amusing myself once as an undergraduate, deleting and creating files till I got the right inode numbers to allow a judicious choice of binary file names to result in a directory that was a valid executable a.out image,' says Digby Tarvin. Anybody interested in trying this for elf?
  5. cs452 e-mail alias: cs452@cgl.uwaterloo.ca
  6. How to compile and run your first program

Practical Details: pdf

What is important for real-time?

  1. Throughput
  2. Response time

In cs452 we take guaranteed response time as the defining quality of real-time computation.

Serial I/O

Uses a device called a UART,

Busy Waiting

This is used to synchronize with an external event, minimizing response time.

#define FOREVER for( ; ; )
   while( !ready( ) ) ;
   do-it( );

or in another form

   if ( ready( ) ) do-it( );

Sometimes you only want to do the thing once, as you do when putting a character on a serial line.

#define UART1_BASE        0x808c0000
#define UART_DATA_OFFSET        0x00    // low 8 bits
#define UART_FLAG_OFFSET        0x18    // low 8 bits
#define TXFF_MASK               0x20    // Transmit buffer full

        flags = (int *)( UART1_BASE + UART_FLAG_OFFSET );
        data = (int *)( UART1_BASE + UART_DATA_OFFSET );
        while( ( *flags & TXFF_MASK ) ) ;
        *data = c;

Worst case response time

From the time that the ready bit sets until the first instruction of do-it is executed

The problem with busy-waiting

What if the CPU has to two things at once?


  1. collect bytes coming in a serial port
  2. maintain a clock

Unless the rate of bytes coming in and rate of clock ticks are identical

Polling Loops

Polling loops allow you to manage more than one condition/activity pair at the same time.

The basic polling loop

  if( c1 ) a1;
  if( c2 ) a2;
  if( cN ) aN;

Worst case response time

Testing more than once

Suppose you want a better response time for a1. Then try the loop

  if( c1 ) a1;
  if( c2 ) a2;
  if( c1 ) a1;
  if( c3 ) a3;
  if( c1 ) a1;
  if( cN ) aN;

Worst case response time for a1

Breaking into pieces

Suppose the response time is still too long, because the execution of one action, say a2, is too long. Then you can break a2 into two parts

  if( c1 ) a1;
  if( c2 ) { a2.1; half-done = TRUE; }
  if( c1 ) a1;
  if( half-done ) { a2.2; half-done = FALSE; }

This is strarting to get a little complicated and we haven't said anything about inter-action communication

Assignment 0: pdf

Overall System

Provided and maintained by CSCF


`COM' ports

Connected to UARTs

Only really two

Ethernet port

Busy wait ethernet code in RedBoot

Reset switch


System on chip


Byte addressable, word size 32 bits

Separate instruction and data caches



GNU tool chain


Partial implementation

Returns when program terminates

Busy-wait IO

COM2 uses monitor; COM1 goes to train

  1. initialization
  2. output
  3. input


Timers normally count down

Timers available in the EP9302.

  1. Two sixteen bit
  2. One thirty-two bit
  3. One forty bit
  4. One watch-dog

Return to: