The Real-Time Operating
System uCOS-II
Enric Pastor
Dept. Arquitectura de Computadors
µC/OS-II Overview
µC/OS-II
z Task Management
z Rate Monotonic Scheduling
z Memory Management
µC/GUI
µC/FS
1
Books and Resources
MicroC/OS-II The Real-Time Kernel Second Edition
z Jean J. Labrosse
z Copy available in Library
MicroC/OS-II e-book (1st edition)
z Jean J. Labrosse
z Will be on the course website shortly
µC/OS-II
2
µC/OS - II
µC/OS-II is a highly portable, ROMable, very scalable,
preemptive real-time, deterministic, multitasking kernel
It can manage up to 64 tasks (56 user tasks available)
It has connectivity with µC/GUI and µC/FS (GUI and File
Systems for µC/OS-II)
It is ported to more than 100 microprocessors and
microcontrollers
It is simple to use and simple to implement but very
effective compared to the price/performance ratio.
It supports all type of processors from 8-bit to 64-bit
Task Management – Services
Task Feature
Task Creation
Task Stack & Stack Checking
Task Deletion
Change a Task’s Priority
Suspend and Resume a Task
Get Information about a Task
3
Task Feature
µC/OS-II can manage up to 64 tasks.
The four highest priority tasks and the four lowest priority
tasks are reserved for its own use. This leaves us with 56
application tasks.
The lower the value of the priority, the higher the priority of
the task. (Something on the lines of Rate Monotonic
Scheduling)
The task priority number also serves as the task identifier
Rate Monotonic Scheduling
In Rate Monotonic Scheduling tasks with the highest rate
of execution are given the highest priority
Assumptions:
z All tasks are periodic
z Tasks do not synchronize with one another, share
resources, etc.
z Preemptive scheduling is used (always runs the highest
priority task that is ready)
Under these assumptions, let n be the number of tasks, Ei
be the execution time of task i, and Ti be the period of task
i. Then, all deadlines will be met if the following inequality
is satisfied:
∑Ei / Ti ≤ n(21/n – 1)
4
Rate Monotonic Scheduling: Example
Suppose we have 3 tasks. Task 1 runs at 100 Hz and
takes 2 ms. Task 2 runs at 50 Hz and takes 1 ms. Task 3
runs at 66.7 Hz and takes 7 ms. Apply RMS theory…
(2/10) + (1/20) + (7/15) = 0.717 ≤ 3(21/3 – 1) = 0.780
z Thus, all the deadlines will be met
General Solution?
z As n →∞, the right-hand side of the inequality goes to ln(2)=
0.6931. Thus, you should design your system to use less
than 60-70% of the CPU
Process Cycle
5
Task Creation
Two functions for creating a task:
z OSTaskCreate()
z OSTaskCreateExt()
Task Management
WAITING
DORMANT
ISR
READY RUNNING
6
Task Management
After the task is created, the task has to get a stack in
which it will store its data
A stack must consist of contiguous memory locations
It is necessary to determine how much stack space a task
actually uses.
Deleting a task means the task will be returned to its
dormant state and does not mean that the code for the
task will be deleted. The calling task can delete itself.
If another task tries to delete the current task, the
resources are not freed and thus are lost. So the task has
to delete itself after it uses its resources
Task Management (contd..)
Priority of the calling task or another task can be changed
at run time.
A task can suspend itself or another task, a suspended
task can resume itself
A task can obtain information about itself or other tasks.
This information can be used to know what the task is
doing at a particular time.
7
Memory Management
The Memory management includes:
z Initializing the Memory Manager
z Creating a Memory Partition
z Obtaining Status of a Memory Partition
z Obtaining a Memory Block
z Returning a Memory Block
z Waiting for Memory Blocks from a Memory Partition
Memory Management
Each memory partition consists of several fixed-sized
memory blocks
A task obtains memory blocks from the memory partition
z A task must create a memory partition before it can be used
Allocation and de-allocation of these fixed-sized memory
blocks is done in constant time and is deterministic
Multiple memory partitions can exist, so a task can obtain
memory blocks of different sizes
A specific memory block should be returned to its memory
partition from which it came
8
Time Management
Clock Tick: A clock tick is a periodic time source to keep
track of time delays and time outs.
z Tick intervals: 10 ~ 100 ms.
z The faster the tick rate, the higher the overhead imposed on
the system.
When ever a clock tick occurs µC/OS-II increments a 32-
bit counter
z The counter starts at zero, and rolls over to 4,294,967,295
(2^32-1) ticks.
A task can be delayed and a delayed task can also be
resumed
Time Management
Five services:
z OSTimeDLY()
z OSTimeDLYHMSM()
z OSTimeDlyResume()
z OSTimeGet()
z OSTimeSet()
9
Inter-task communication
Inter-task or inter process communication in µC/OS takes
place using
z Semaphores
z Message mailbox
z Message queues
Tasks and Interrupt service routines (ISR) can interact
with each other through an ECB (event control block)
Inter-task communication
Single task waiting
10
Inter-task communication
Multiple tasks waiting and signaling
Inter-task communication
Tasks can wait and signal along with an optional time out
11
Inter-task communication
µC/OS-II semaphores consist of two elements
z 16-bit unsigned integer count
z list of tasks waiting for semaphore
µC/OSII provides
z Create, post, pend accept and query services
Inter-task communication
µC/OS-II message-mailboxes: an µC/OSII object that
allows a task or ISR to send a pointer sized variable
(pointing to a message) to another task.
12
Inter-task communication
µC/OS-II message-queues
Available services: Create, Post (FIFO), PostFront (LIFO),
Pend, Accept, Query, Flush
z N = #of entries in the queue: Queue full if Post or PostFront
called N times before a Pend or Accept
Inter-task communication
µC/OS-II message-queues organized as circular buffers.
13
Writing Applications Under µC/OS-II
Tasks running under a multitasking kernel should be
written in one of two ways:
z A non-returning forever loop. For example:
void Task (void *)
{
DoInitStuff();
while (1)
{
do this;
do that;
do the other thing;
call OS service (); // e.g. OSTimeDelay, OSSemPend, etc.
}
}
Writing Applications Under µC/OS-II
z A task that deletes itself after running. For example:
void Task (void *)
{
do this;
do that;
do the other thing;
call OS service (); // e.g. OSTimeDelay, OSSemPend, etc.
OSTaskDelete(); // Ask the OS to delete the task
}
14
µC/GUI
µC/GUI
15
µCGUI (Contd..)
Memory Devices: Frame buffer, the image of the windows
etc are drawn on this buffer and when the drawing is
completed, this is copied to the touch screen. This helps in
preventing the flickering of the screen.
Window Manager: It manages the windows that are
created in the GUI. It handles all the mouse and keyboard
events (touch screen in this case).
Touch Screen: Touch Screen drivers
LCD Drivers
Anti-aliasing: This smoothens the fonts and other
graphical entities. It gives a pleasant affect to the eye
instead of the rugged look.
µCGUI (contd..)
Widgets and Dialogs: A library to create the widgets
(buttons, textboxes, etc) and dialog boxes. Reduces lot of
effort to build everything using pixels and lines
Font Converter: It converts a general font format (ttf, utf,
etc) to the µCGUI compatible fonts
Bitmap Converter: It converts the 32-bit bitmap images to
the compatible bitmap image that is used on µCGUI
µCGUI supports all the processors from 8-bit to 16-bit
16
µC/FS
µC/FS
µC/FS is a FAT file system which can be used on any
media
Basic hardware access functions has to be provided
MS-DOS/MS-Windows compatible FAT12 and FAT16
support
Multiple device driver support allows to access different
types of hardware with the file system at the same time
Multiple media support. A device driver allows you to
access different medias at the same time
OS support: µC/FS can easily be integrated into any OS
17
µC/FS Device Drivers
µC/FS has been designed to cooperate with any kind of
hardware. To use a specific hardware with µC/FS, a
device driver for that hardware is required.
The device driver consists of basic I/O functions for
accessing the hardware and a global table, which holds
pointers to these functions. Available drivers are:
z RAM disk
z SMC (Smart Card)
z MMC (Multimedia Card)
z SD (Secure Digital)
z CF (Compact Flash)
z Windows (used by the Visual C++ demonstration and
simulation code)
z IDE Hard Disk
18