Professional Documents
Culture Documents
Jean J. Labrosse
www.Micrium.com
My Background
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
1
My Objectives
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Special Notes
Real-Time Kernels
Jean J. Labrosse
2
Tutorial Layout
Part I
– Foreground/Background systems
– Real-Time Kernels
– Task Management
Part II
– Task Scheduling
– Context Switching
– Servicing Interrupts
– Time Delays and Timeouts
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Tutorial Layout
Part III
– Resource sharing and Mutual Exclusion
– Task Synchronization
– Inter-task Communications
Part IV
– Memory Management
– Initialization
– Execution Times
– Recommendations
– Buying a Kernel
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
3
Part I
Foreground/Background Systems
Real-Time Kernels
Task Management
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Foreground #2 ISR #2
Infinite loop
Time
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
4
Foreground/Background
/* Background */ /* Foreground */
void main (void) ISR (void)
{ {
Initialization; Handle asynchronous event;
FOREVER { }
Read analog inputs;
Read discrete inputs;
Perform monitoring functions;
Perform control functions;
Update analog outputs;
Update discrete outputs;
Scan keyboard;
Handle user interface;
Update display;
Handle communication requests;
Other...
}
}
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Foreground/Background
Advantages
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
5
Foreground/Background
Disadvantages
Infinite loop
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Foreground/Background
Disadvantages
Infinite loop
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
6
Foreground/Background
Disadvantages
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Part I
Foreground/Background Systems
Real-Time Kernels
Task Management
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
7
What is a Real-Time Kernel?
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
User Interface
To help manage your firmware:
– GUI (User Interface)
– File System
– Protocol Stack
– Application
– I/Os
RTOS I/Os
Application
Real-Time Kernels
Jean J. Labrosse
8
Why use a Kernel?
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
9
Can you use a Kernel?
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Development Seats
– $75 to $10,000 per seat (may be more)
Some Kernels require royalties
– Per-unit
Some kernels are ‘licensed’
– On a per-project basis
– For a product line
– Company wide
– Per-seat (i.e. per-developer)
– Per-CPU type
Maintenance for upgrades and bug fixes
– Typically 15-20% (of initial cost) per year
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
10
What are the Costs?
Extra ROM
– May mean bigger chip(s)
Extra RAM
– May mean bigger chip(s)
Learning curve
– Couple of days to a few weeks
Need reentrant functions
Need to be careful with shared resources
Adds CPU overhead
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Task Task
Infinite Loop
Low Priority Task Task
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
11
Types of Kernels
(Non-Preemptive)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Types of Kernels
(Preemptive)
HP Task Completes
(Switch back to LP Task)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
12
Part I
Foreground/Background Systems
Real-Time Kernels
Task Management
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
13
What are Tasks?
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Task States
Waiting Create
For Task
Execution
Waiting
For Running ISR
Event Wait
For
Wait for time to expire Event Task
Wait for a message Interrupted
Wait for a signal
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
14
Tasks needs to be ‘Created’
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
‘Creating’ a Task
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
15
‘Task Create’ Pseudo-Code
Address of Address of
Task Top-Of-Stack
ERR_CODE
OSTaskCreate (task, p_arg, ptos, prio)
{
if (a TCB is available)
Initialize the TCB;
else
Priority of your
Return an error code; Task
Initialize the task’s stack;
Increment the number of tasks counter;
Make task ready-to-run;
if (OS is running) {
Call the scheduler;
}
}
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Creating a Task
(80x86 Large Model)
SS SP
TCB
(RAM)
(3) AX
DS
BX
ES
Ready
DI
Priority
(1) CX
DX
SI
BP DS
SP
(2) BX
ES
DX SI
CX DI
AX
Allocate & Initialize TCB
BP
IP
CS CS IP
PSW
PSW
Allocate & Initialize Stack Frame
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
16
Task Control Blocks
(TCBs)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Task
DS
ES
DS
ES
DS
ES
DS
ES
DS
ES
Stacks
DI DI DI DI DI
SI SI SI SI SI
BP BP BP BP BP
SP SP SP SP SP
BX BX BX BX BX
DX DX DX DX DX
CX CX CX CX CX
AX AX AX AX AX
IP IP IP IP IP
CS CS CS CS CS
List NULL
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
17
Stack Checking
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Stack Checking
(Implementation)
INT32U OSTaskStkChk(prio)
#elements = 0;
pbos = Point at bottom of task stack;
ptos = Point at top of task stack;
while (*pbos == 0x00 && pbos != ptos)
#elements++;
pbos++;
return (#elements * sizeof(element));
TOS
Used
Stack
Growth Stack
0x00 Size
0x00 Free
0x00
0x00
BOS
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
18
Deleting a Task
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
19
How to split an application into
Tasks?
Look for ‘parallel’ activities!
A periodic (cyclic) activity requires a task
Split application by functionality:
– Keyboard scanning
– Operator interface
– Display update
– Monitoring/Updating analog and discrete I/O
– Error handling
– Time-of-day clock
– Control
– Communications
– etc.
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Message
Queue
Data Storage Storage
Sensors Logging Manager Media
Task Task
Command
Client Server
Data
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
20
How to split an application into
Tasks?
Reduce coupling between tasks
– A lot of inter-task communication is a sign of a bad
design!
VS
Task
ISR
ABC
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
21
How to set Task Priorities?
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
22
How to set Task Priorities?
(Rate Monotonic Scheduling (RMS))
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Part II
Task Scheduling
Context Switching
Servicing Interrupts
Time delays and Timeouts
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
23
What is Scheduling?
Outcome:
– Context Switch if a more important task has been
made ready-to-run or returns to the caller or the
interrupted task
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
24
The Ready List
Highest Lowest
Priority Priority
Task Task
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
OSRdyGrp
7 6 5 4 3 2 1 0
OSRdyTbl[ ]
[0] 7 6 5 4 3 2 1 0
[1] 15 14 13 12 11 10 9 8
[2] 23 22 21 20 19 18 17 16
[3] 31 30 29 28 27 26 25 24
Y
[4] 39 38 37 36 35 34 33 32
[5] 47 46 45 44 43 42 41 40
[6] 55 54 53 52 51 50 49 48
[7] 63 62 61 60 59 58 57 56
Task Priority #
X
Lowest Priority Task
(Idle Task)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
25
Finding the
Highest Priority Task Ready
OSRdyGrp
0xF6 1 1 1 1 0 1 1 0
OSRdyTbl[ ]
0 0 0 0 0 0 0 0
0 1 1 1 1 0 0 0 0x78
0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 1 0 0 1 0 0
X=3
0 0 1 0 0 0 0 0 Y=1
0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 1
1 0 0 0 0 0 0 0
Task Priority
/************************************************************
* PRIORITY RESOLUTION TABLE
*
* Note(s): 1) Index into table is bit pattern to resolve
* highest priority.
* 2) Indexed value corresponds to highest priority
* bit position (i.e. 0..7)
************************************************************/
INT8U const OSUnMapTbl[] = { (Step #2)
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0x00-0x0F
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0x10-0x1F
X = @ [0x78]
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0x20-0x2F (i.e. 0x78 = OSRdyTbl[1])
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0x30-0x3F
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0x40-0x4F
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0x50-0x5F
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0x60-0x6F
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0x70-0x7F
7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0x80-0x8F
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0x90-0x9F
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0xA0-0xAF (Step #1)
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0xB0-0xBF
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0xC0-0xCF Y = @ [0xF6]
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0xD0-0xDF (i.e. 0xF6 = OSRdyGrp)
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, // 0xE0-0xEF
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 // 0xF0-0xFF
};
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
26
Priority Resolution
Y = OSUnMapTbl[OSRdyGrp];
X = OSUnMapTbl[OSRdyTbl[Y]];
HighestPriority = (Y * 8) + X;
Y (i.e. 1) = OSUnMapTbl[0xF6];
X (i.e. 3) = OSUnMapTbl[0x78];
HighestPriority = (1 * 8) + 3;
HighestPriority = 11
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Scheduling
(Delaying a Task)
0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 1 0 0 1 0 0
0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 1
Kernel clears the Ready bit
1 0 0 0 0 0 0 0
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
27
Scheduling
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Part II
Task Scheduling
Context Switching
Servicing Interrupts
Time delays and Timeouts
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
28
Context Switch
(or Task Switch)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Context Switch
(or Task Switch)
Click on Image
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
29
Context Switch on 80x86
(Actual code for µC/OS-II)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Part II
Task Scheduling
Context Switching
Servicing Interrupts
Time delays and Timeouts
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
30
Interrupts
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Interrupts
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
31
What’s in an ISR?
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
What’s in an ISR?
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
32
Servicing Interrupts
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Servicing Interrupts
(µC/OS-II on 66 MHz Intel 80486)
15 to 17 µS
(1) (2), Interrupts enabled Interrupt Recovery
TASK (5 µS)
(9), RTI
HPT Task
Interrupt Recovery
(9 µS)
19 to 21 µS
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
33
Part II
Task Scheduling
Context Switching
Servicing Interrupts
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
34
Why keep track of Clock Ticks?
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Time Delays
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
35
Use of Time Delays
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Tick
20 mS 20 mS
20 mS
HPT
Tasks
> 20 mS < 20 mS
< 20 mS
LPT
Tasks
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
36
Example #1
(Time Delays)
Click on Image
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
37
Use for Timeouts
ADCTask (void)
{
void *msg;
INT8U err; Timeout of 10 ticks.
for (;;) {
Start ADC;
msg = OSMboxPend(.., .., 10, &err);
if (err == OS_NO_ERR) {
Read ADC and Scale;
} else {
/* Problem with ADC converter! */
}
}
}
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
OS
HPT
Scheduling & OS
Context Switching
(Overhead)
MPT
OS
LPT
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
38
Part III
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Resource Sharing
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
39
Resource Sharing
(Disable and Enable Interrupts)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Resource Sharing
(Lock/Unlock the Scheduler)
Lock();
Code with scheduler disabled;
Unlock;
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
40
Mutual Exclusion
(Semaphores)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Mutual Exclusion
(Semaphores)
Task 1
High
Resource
Semaphore
Variable(s)
Tasks Task 2 Data Structure(s)
Medium I/O Device(s)
Task 3
Low Wait for Semaphore;
Access Resource;
Release Semaphore;
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
41
Semaphores
Semaphores
(Implementation)
SEM *OSSemCreate(value)
sem = Allocate a Semaphore Control Block (SCB);
sem->Value = value;
sem->Waitinglist = no tasks waiting;
Return semaphore ‘handle’ to caller;
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
42
Semaphores
(Implementation)
ERR_CODE OSSemSignal(sem)
if (sem->WaitingList == Task(s) waiting)
Make highest priority task waiting ready;
Run highest priority task ready;
else
sem->Value++;
return ‘no error’ to caller;
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
43
A Counting Semaphore?
(Situation without Counting Semaphore)
Tick ISR
Clock Task
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Counting Semaphore
(Serial Communications (Rx))
‘Rx ISR’:
– Reads and buffers character
– Clears interrupt source
– Signals semaphore (every character)
To reduce overhead, could signal only when a special
character such as CR, LF, end-of-packet delimiter is
received.
‘Rx Task’:
– Wait on semaphore (with timeout)
– Gets character(s) from buffer
Ring Rx
Rx ISR Buffer
Task
3
2
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
44
Semaphores
(Priority Inversion)
Semaphores
(Priority Inheritance)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
45
Mutual Exclusion Semaphores
(Mutex)
– Signal
Value = 1 TCB TCB TCB
Original Task Prio
Ptr to Mutex Owner
Mutex
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Part III
Task Synchronization
Inter-Task Communications
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
46
Event Flags
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Event Flags
ISRs TASKs
Set or Clear
Events
(8, 16 or 32 bits)
Wait
OR TASKs
Wait
AND TASKs
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
47
Event Flags
(Implementation)
NULL
Type (AND or OR) Type (AND or OR) Type (AND or OR)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Event Flags
(Implementation)
EFLAG *OSEFlagCreate(init_value)
eflag = Create event flag group;
eflag->Value = init_value;
eflag->WaitingList = No task waiting;
Return event flag group ‘handle’ to caller;
OSEFlagSet(eflag, mask)
eflag->Value |= mask;
for (ALL tasks waiting on this group)
if (Task conditions are satisfied)
Make task ready-to-run;
if (any task made ready) {
Run highest priority task ready;
OSEFlagClear(eflag, mask)
eflag->Value &= ~mask;
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
48
Event Flags
(Example)
Abort
Abort ISR
RPM == 0
RPM Event
Task Flag
RPM > 3000 Group
Wait Abort
Temp < 200 OR Task
AI
Task
Fuel > 1%
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Synchronization
(Analog-Digital Conversion)
ADC
AI
Analog Inputs MUX
Driver
ISR
Read_Analog_Input_Channel_Cnts(channel#, *adc_counts)
{
Select the desired analog input channel
Wait for MUX output to stabilize
Start the ADC Conversion ADC_ISR(void)
Wait for signal from ADC ISR (with timeout) {
if (timed out) Signal Event
Return error code to caller Clear EOC interrupt
else }
Read ADC counts
Return ADC counts to caller
}
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
49
Part III
Inter-Task Communications
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Message Queues
Message passing
– Message is a pointer
– Pointer can point to a variable or a data structure
FIFO (First-In-First-Out) type queue
– Size of each queue can be specified to the kernel
LIFO (Last-In-First-Out) also possible
Tasks or ISR can ‘send’ messages
Only tasks can ‘receive’ a message
– Highest-priority task waiting on queue will get the
message
Receiving task can timeout if no message
is received within a certain amount of time
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
50
Message Queues
(Implementation)
NULL
#Entries = 4
Queue Size = 6
Queue Start TCB TCB TCB
Out Pointer
In Pointer NULL
Message
Pointers to Data
Queue
Out Pointer
Queue Storage Area
Circular
Pointers to Data
Buffer
In Pointer
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Message Queues
(Implementation)
QUEUE *OSQCreate(size)
q = Allocate a Queue Control Block (QCB);
q->Start = Allocate storage for messages;
q->Entries = 0;
q->OutPointer = beginning of queue;
q->InPointer = beginning of queue;
q->Size = size;
q->WaitingList = No tasks waiting;
Return queue ‘handle’ to caller;
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
51
Message Queues
(Implementation)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Message Queues
(Implementation)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
52
Message Queues &
Buffer Pools
Message
Rx Queue
Interrupt Rx
UART Rx ISR
Task
Free List
Free List NULL
Buffer Pool
RxISR(void) RxTask(void)
{ {
Read character from UART PACKET *pmsg;
if (1st character of message)
Get a buffer from Buffer Manager while (1)
Put character in buffer pmsg = OSQPend(RxQ, timeout)
if (End of Packet character) Process packet received
Send packet to RxTask for processing Return packet buffer to Buffer Manager
} }
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Message Queue
(Error Handling)
Task
Message
Queue
Error
Task
Task
ISR
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
53
Message Mailbox
(RPM Measurement)
Previous
Counts
RPM
Delta
Counts RPM Avg. RPM
ISR Delta Task Under Speed
Counts
Counts=Fin * t Over Speed
16-Bit Max. RPM
Fin Timer RPMTask()
{
while (1)
RPM_ISR() Wait for message from ISR (with timeout);
{ if (timed out)
Read Timer; RPM = 0;
DeltaCounts = Counts else
– PreviousCounts; RPM = 60 * Fin / counts;
PreviousCounts = Counts Compute average RPM;
Post DeltaCounts; Check for overspeed/underspeed;
} Keep track of peak RPM;
etc.
}
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Example #2
(Intertask Communications)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
54
Part IV
Memory Management
Initialization
Execution Times
Recommendations
Buying a Kernel
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Memory Manager
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
55
Memory Manager
(Implementation)
Memory
Partition
Control Block
pmem NULL
NBlocks
BlockSize
BlocksLeft
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Memory Manager
(Implementation)
pblock
Memory
Partition
Control Block
pmem NULL
NBlocks
BlockSize
BlocksLeft
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
56
Memory Manager
(Implementation)
pblock
Memory
Partition
Control Block
pmem NULL
NBlocks
BlockSize
BlocksLeft
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Memory Manager
(Multiple Partitions)
Memory
Partition
Control Block
pmem1 NULL
Block Size
#Blocks
#Free Blocks
pmem2 NULL
Block Size
#Blocks
#Free Blocks
pmem3 NULL
Block Size
#Blocks
#Free Blocks
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
57
Part IV
Memory Management
Initialization
Execution Times
Recommendations
Buying a Kernel
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Initialization
Real-Time Kernels
Jean J. Labrosse
58
Initialization
while (1) {
/* Task body (YOUR code) */
}
}
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Part IV
Memory Management
Initialization
Execution Times
Recommendations
Buying a Kernel
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
59
Execution Times
(µC/OS-II on a 66 MHz 80486)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Example #3
(Stack Checking & Task Execution Times)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
60
Part IV
Memory Management
Initialization
Execution Times
Recommendations
Buying a Kernel
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Recommendations
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
61
Recommendations
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Recommendations
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
62
Recommendations
(Use an Off-The-Shelf Kernel)
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Part IV
Memory Management
Initialization
Execution Times
Recommendations
Buying a Kernel
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
63
Buying a Kernel?
General features:
– Get a Preemptive kernel
– Get a kernel that allows you to specify a different
stack size for each task.
Execution Time:
– Try to get from the kernel vendor:
the maximum interrupt disable time
the context switch time
the execution times of services
Memory requirements:
– How much RAM/ROM?
– Can you scale the kernel to reduce RAM/ROM?
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Buying a Kernel?
Cost:
– Up-front price?
– Any per-unit royalties?
– Maintenance cost?
Is the source code included?
– Is this important to you?
– Good security in case vendor goes out of business
– Allows you to make changes/improvements
No support if you change the code!
Other ports available?
– You may want to port your application or, some of
its modules to other processors
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
64
Buying a Kernel?
Technical Support?
– Training
– Application notes
– Technical assistance
– Consulting services available
– Web site
Miscellaneous
– Kernel is third party certifiable (FAA/FDA )?
Vendor specific:
– Reputation?
– References?
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Buying a Kernel?
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
65
Kernel Awareness Debuggers
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
66
References
“A Practitioner’s Handbook for Real-Time
Analysis: Guide to RMA for Real-Time
Systems”
Mark H. Klein, Kluwer Academic Publishers Chinese Korean
ISBN 0-7923-9361-9
Chinese Korean
“Embedded Systems Building Blocks,
Complete and Ready-to-Use Modules in C”
Jean J. Labrosse, CMP Books
ISBN 0-97930-604-1
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Thank You.
Don’t Forget.
Please Fill in the Evaluation Sheet.
©
© 2006,
2006, Micriµm,
Micriµm, All
All Rights
Rights Reserved
Reserved Real-Time
Real-Time Kernels
Kernels
Real-Time Kernels
Jean J. Labrosse
67