Upload
myra-stevenson
View
226
Download
0
Embed Size (px)
Citation preview
SOC Consortium Course Material
Real-time OS
Speaker: 沈文中
April. 9, 2003
National Taiwan University
Adopted from National Chiao-Tung University
SOC Course Material
2SOC Consortium Course Material
Real-tim
e OS
Outline
Introduction to RTOS Introduction to μC/OS-II
3SOC Consortium Course Material
Real-tim
e OS
Real Time OS
Real-time OS (RTOS) is an intermediate layer between hardware devices and software programming
“Real-time” means keeping deadlines, not speed
Advantages of RTOS in SoC design
• Shorter development time
• Less porting efforts
• Better reusability
Disadvantages
• More system resources needed
• Future development confined to the chosen RTOS
4SOC Consortium Course Material
Real-tim
e OS
Soft and Hard Real Time
Soft real-time
• Tasks are performed by the system as fast as possible, but tasks don’t have to finish by specific times
• Priority scheduling
• Multimedia streaming
Hard real-time
• Tasks have to be performed correctly and on time
• Deadline scheduling
• Aircraft controller, Nuclear reactor controller
5SOC Consortium Course Material
Real-tim
e OS
Outline
Introduction to RTOS Introduction to μC/OS-II
6SOC Consortium Course Material
Real-tim
e OS
μC/OS-II
Written by Jean J. Labrosse in ANSI C
A portable, ROMable, scalable, preemptive, real-time, multitasking kernel
Used in hundreds of products since its introduction in 1992
Certified by the FAA for use in commercial aircraft
Available in ARM Firmware Suite (AFS)
Over 90 ports for free download
http://www.ucos-ii.com
7SOC Consortium Course Material
Real-tim
e OS
μC/OS-II Features
Portable 8-bit ~ 64 bit
ROMable small memory footprint
Scalable select features at compile time
Multitasking preemptive scheduling, up to 64 tasks
8SOC Consortium Course Material
Real-tim
e OS
C/OS-II vs. HAL
uHAL is shipped in ARM Firmware Suite
uHAL is a basic library that enables simple application to run on a variety of ARM-based development systems
uC/OS-II use uHAL to access ARM-based hardware
uC/OS-II & User application AFS Utilities
C, C++ libraries
uHAL routines
Development board
AFS supportroutines
9SOC Consortium Course Material
Real-tim
e OS
Kernel
Basic jobs of uC/OS-II kernel
• Task management
• Interrupt handling
• Inter-process communication
10SOC Consortium Course Material
Real-tim
e OS
Kernel API
Service routines provided by uC/OS-II Kernel
• Task management APIs
• Time management APIs
• Memory management APIs
• Inter-process communication APIs
• Synchronization APIs
To make a System Call means to call Kernel API
11SOC Consortium Course Material
Real-tim
e OS
Task
Task is an instance of program
Task thinks that it has the CPU all to itself
Task is assigned a unique priority
Task has its own set of stack
Task has its own set of CPU registers (backup in its stack)
Task is the basic unit for scheduling
Task status are stored in Task Control Block (TCB)
12SOC Consortium Course Material
Real-tim
e OS
Task Structure
Task structure:
An infinite loop
An self-delete function
void ExampleTask(void *pdata)
{
for(;;) {
/* User Code */
/* System Call */
/* User Code */
}
}
Task with infinite loop structure
void ExampleTask(void *pdata)
{
/* User Code */
OSTaskDel(PRIO_SELF);
}
Task that delete itself
13SOC Consortium Course Material
Real-tim
e OS
Task States
WaitingWaiting
DormantDormantReadyReady RunningRunning ISRISR
Task Create
Task Delete
Highest Priority Task
Task is Preempted
Task Pending EventsTask Gets Event
Task Delete
Interrupt
Int. Exit
Task Delete
14SOC Consortium Course Material
Real-tim
e OS
Task Priority
Unique priority (also used as task identifiers)
64 priorities max (8 reserved)
Always run the highest priority task that is READY
Allow dynamically change priority
15SOC Consortium Course Material
Real-tim
e OS
Task Control Block
uC/OS-II use TCB to keep record of each task
States
Stack Pointer
Priority
Misc …
Link Pointer
16SOC Consortium Course Material
Real-tim
e OS
Task Control Block(cont.)
17SOC Consortium Course Material
Real-tim
e OS
Exchanging CPU Control
void ExampleTask(void *pdata)
{
for(;;) {
/* User Code */
/*System Call */
/* User Code */
}
}
OSMboxPend();
OSQPend();
OSSemPend();
OSTaskSuspend();
OSTimeDly();
OSTimeDlyHMSM();
More…
uC/OS-II Kernel API
Control returns from task to OS when Kernel API is called
18SOC Consortium Course Material
Real-tim
e OS
Exchanging CPU Control
A B B C A
Interrupt Handler
OS
Task
Time
Scheduling
System Call
Interrupt
Interrupt Exit
Only one of OS, Task, Interrupt Handler gets CPU control at a time
19SOC Consortium Course Material
Real-tim
e OS
Task Scheduling
Time
ISR
Low-priority Task
High-priority Task
ISR makes thehigh-priority task ready
low-priority taskRelinquishes the CPU
Non-preemptive
20SOC Consortium Course Material
Real-tim
e OS
Task Scheduling
Preemptive
uC/OS-II adopts preemptive scheduling
Time
ISR
Low-priority Task
High-priority Task
ISR makes thehigh-priority task ready
high-priority taskRelinquishes the CPU
21SOC Consortium Course Material
Real-tim
e OS
Context Switching
Context SwitchingThe process of swap in/out the context of tasks when scheduler choose a new task to run.
ContextUsually means values in registers used by the task.
Switching Steps1. Save registers of current task to stack(curr)
2. Load new task’s SP into CPU
3. Restore registers of new task from stack(new)
4. Resume execution of new task
22SOC Consortium Course Material
Real-tim
e OS
Context Switching
Time
ISR
Low-priority Task
High-priority Task
ISR makes thehigh-priority task ready
ContextSwitching
ContextSwitching
high-priority taskRelinquishes the CPU
23SOC Consortium Course Material
Real-tim
e OS
Critical Region
Code need to be treated indivisibly
Code have to be executed without interrupt
creating task…etc
Non-reentrant code
accessing shared variable…etc
24SOC Consortium Course Material
Real-tim
e OS
Critical Region
Protecting critical region
• OS_ENTER_CRITICAL( )
temporarily disable interrupt
• OS_EXIT_CRITICAL( )
re-enable interrupt
25SOC Consortium Course Material
Real-tim
e OS
Events
A way for Synchronization and Communication
• Pend (Wait for an event)
• Post (Signal an event)
Events in uC/OS-II
• Semaphore
• Counting Semaphore
• Message Mailbox
• Message Queues
26SOC Consortium Course Material
Real-tim
e OS
Semaphore
Semaphore serves as a key to the resource
A flag represent the status of the resource
Prevent re-entering Critical Region
Can extent to counting Semaphore
Task 1Task 1
Task 2Task 2
RS-232RS-232
Send data via RS232
Send data via RS232
Semaphore
Request/Release
Request/Release
27SOC Consortium Course Material
Real-tim
e OS
Semaphore
Using Semaphore in uC/OS-II
OSSemCreate()
OSSemPend()
OSSemPost()
OSSemQuery()
OSSemAccept()
28SOC Consortium Course Material
Real-tim
e OS
Message Mailbox
Used for Inter-Process Communication (IPC)
A pointer in MailBox points to the transmitted message
TaskTask
ISRISR
TaskTask
“message”
Mail BoxPost
Post
Pend
29SOC Consortium Course Material
Real-tim
e OS
Message Queues
Array of MailBox
FIFO & FILO configuration
TaskTask
ISRISR
TaskTask
“message”
Mail QueuesPost
Post
Pend
30SOC Consortium Course Material
Real-tim
e OS
MailBox & Queues
Using MailBox in uC/OS-II
OSMboxCreate()
OSMboxPend()
OSMboxPost()
OSMboxQuery()
OSMboxAccept()
Using Queue in uC/OS-II
OSQCreate()
OSQPend()
OSQPost()
OSQPostFront()
OSQQuery()
OSQAccept()
OSQFlush()
31SOC Consortium Course Material
Real-tim
e OS
Memory Management
Semi-dynamic memory allocation Allocate statically and dispatch dynamically Explore memory requirements at design time
Task 1Task 1 Task 2Task 2 Task 3Task 3
allocate statically
partition into memory blocks
dispatch dynamically
OS Initializing OS running
32SOC Consortium Course Material
Real-tim
e OS
Memory Management
Using Memory in uC/OS-II
OSMemCreate()
OSMemGet()
OSSemPut()
OSSemQuery()
33SOC Consortium Course Material
Real-tim
e OS
Interrupt
Interrupt ControllerA device that accepts up to 22 interrupt sources from other pheripherals and signals ARM processor
Interrupt HandlerA routine executed whenever an interrupt occurs. It determines the interrupt source and calls corresponding ISR. Usually provided by OS.
Interrupt Service Routine (ISR)Service routines specific to each interrupt source. This is usually provided by hardware manufacturer.
34SOC Consortium Course Material
Real-tim
e OS
Interrupt
Peripheral sends interrupt request to interrupt controller
Interrupt controller sends masked request to ARM
ARM executes interrupt handler to determine int. source
Peripheral BPeripheral B
InterruptController
InterruptController
Peripheral APeripheral A
ARMProcessor
ARMProcessor
bus
35SOC Consortium Course Material
Real-tim
e OS
Interrupt
Default interrupt handler: uHALr_TrapIRQ()
1. Save all registers in APCS-compliant manner
2. Call StartIRQ(), if defined
3. Determine interrupt source, call the corresponding interrupt service routine (ISR)
4. Call FinishIRQ(), if defined
5. Return from interrupt
36SOC Consortium Course Material
Real-tim
e OS
Interrupt
When an interrupt occurs, no further interrupt accepted
To achieve real-time, the period of interrupt disabled should be as short as possible
Do only necessary jobs in ISR, leave other jobs in a deferred Task
37SOC Consortium Course Material
Real-tim
e OS
Starting C/OS-II
Initialize hardware & uC/OS-IIARMTargetInit(), OSInit()
Initialize hardware & uC/OS-IIARMTargetInit(), OSInit()
Allocate resourcesOSMemCreate(), OSMboxCreate(), …etc
Allocate resourcesOSMemCreate(), OSMboxCreate(), …etc
Create at least one taskOSTaskCreate()
Create at least one taskOSTaskCreate()
Start SchedulerOSStart()
Start SchedulerOSStart()
38SOC Consortium Course Material
Real-tim
e OS
Porting Application
Necessary coding changes
variables
• use local variables for preemption
• use semaphore to protect global variables (resources)
data transfer
• arguments => mailbox/queue
memory allocation
• malloc() => OSMemCreate() OSMemGet()
39SOC Consortium Course Material
Real-tim
e OS
Porting Application
assign task priorities
unique priority level in uC/OS-II
• only 56 levels available
• priority can be change dynamically
call OSTimeDly() in infinite loop task
• ensure lower priority task get a chance to run
MUST: if lower priority task is pending data from higher priority task
40SOC Consortium Course Material
Real-tim
e OS
Priority Inversion
Task 1 (H)
Task 2 (M)
Task 3 (L)
Task 3 gets semaphore (2)
Task 1 preempts Task 3 (3)
Task 1 fails to get semaphore (5)
Task 2 preempts task 3 (7)
Task 3 resumes (9)
Task 3 releases the semaphore (11)
(1)
(4)
(6)
(8)
(12)
(10)
Priority Inversion
running
waiting
41SOC Consortium Course Material
Real-tim
e OS
Priority Inversion
A long existing terminology, recently it becomes a buzzword due to “Pathfinder” on Mars (RTOS: VxWorks).
It refers to a lot of situation, may even be used intentionally to prevent starvation.
Unbounded priority inversion : Priority inversion occurs in unpredictable manners – this is what we care about.
42SOC Consortium Course Material
Real-tim
e OS
Priority Inversion (continued)
43SOC Consortium Course Material
Real-tim
e OS
Priority Inversion (continued)
The problem is that τ1 and τ3 share a common data structure, locking a mutex to control access to it. Thus, if τ3 locks the mutex, and τ1 tries to lock it, τ1 must wait. Every now and then, when τ3 has the mutex locked, and τ1 is waiting for it, τ2 runs because it has a higher priority than τ3. Thus, τ1 must wait for both τ3 and τ1 to complete and fails to reset the timer before it expires.
44SOC Consortium Course Material
Real-tim
e OS
Priority Inversion (continued)
Solution : priority inheritance protocol and priority ceiling protocol.
Priority ceiling : raises the priority of any locking thread to the priority ceiling for each lock.
Priority inheritance : raises the priority of a thread only when holding a lock causes it to block a higher priority thread.
45SOC Consortium Course Material
Real-tim
e OS
Driver
What is a Driver• A named entity that support basic I/O of a device
• A handler that manages interrupt from a device
• A description to a device, registered and managed by OS
• An abstraction layer for user application to access device easily
46SOC Consortium Course Material
Real-tim
e OS
Driver
Original configuration of a System –
No additional Hardware
ApplicationApplication
OSOS
HALHAL
Development BoardDevelopment Board
47SOC Consortium Course Material
Real-tim
e OS
Driver
New configuration of a System – additional Hardware added
We must add driver into system to provide easy access of new hardware
ApplicationApplication
OSOS
HALHAL
Development BoardDevelopment BoardNew HardwareNew Hardware
DriverDriver
48SOC Consortium Course Material
Real-tim
e OS
Driver
High-level API• Interactive with OS• Interface to Application
Low-level Command• Direct access to hardware (usually written in assembly)
Data• Private data to driver
ApplicationApplication
OSOS
HALHAL
Development BoardDevelopment BoardNew HardwareNew Hardware
API
CommandData
49SOC Consortium Course Material
Real-tim
e OS
Driver
Command Layer
• A set of functions/macros to manipulate hardware
• Interrupt handler
• Usually written in Assembly to get optimized speed
• Keep essential commands only
Common essential commands
• Read, Write, Init, Enable, Disable
50SOC Consortium Course Material
Real-tim
e OS
Driver
API layer
• Interactive with OS to maintain resources
• Interactive with OS to acknowledge interrupt and task scheduling
• Provides unique interface to application to achieve device abstraction
• Encapsulate driver internal data
• Combine commands to provide various functionality
Data
• Driver Status
• Data Buffer
51SOC Consortium Course Material
Real-tim
e OS
Driver
Why divide driver into two parts• Easy to replace underlying hardware
• Unique interface to applications
• Easy to adopt pre-written assembly code
52SOC Consortium Course Material
Real-tim
e OS
Driver
API Example
Available commands:
• Read_Byte
• Write_Byte
• Init_Device
• Enable_Device
• Disable_Device
Set_serial_baudrate(int baud)
{
OS_Request_Device();
Disable_Device();
Write_Byte(CONF_BASE, baud);
Enable_Device();
OS_Release_Device();
}
53SOC Consortium Course Material
Real-tim
e OS
Driver
Send_serial(char data[], int len)
{
OS_Request_Device();
for(I=0;I<len;I++)
Write_Byte(IO_BASE, data[I]);
OS_Release_Device();
}
Available commands:
• Read_Byte
• Write_Byte
• Init_Device
• Enable_Device
• Disable_Device
API Example
54SOC Consortium Course Material
Real-tim
e OS
Driver Design Flow
startstart
Decide I/O interface(I/O address, I/O method)
Decide I/O interface(I/O address, I/O method)
Write Assembly codeto control hardware
Write Assembly codeto control hardware
Write API base on previouslyDeveloped commands
Write API base on previouslyDeveloped commands
Write interrupt handlerWrite interrupt handler
Pack assembly codeinto commands
Pack assembly codeinto commands
endend
Test assembly codeTest assembly code
Test DriverTest Driver