DSP/BIOS Scheduling Chapter 9 C6000 Integration Workshop Copyright © 2005 Texas Instruments. All...
-
Upload
brittany-little -
Category
Documents
-
view
215 -
download
0
Transcript of DSP/BIOS Scheduling Chapter 9 C6000 Integration Workshop Copyright © 2005 Texas Instruments. All...
DSP/BIOS Scheduling
Chapter 9
C6000 Integration Workshop
Copyright © 2005 Texas Instruments. All rights reserved. Technical Training
Organization
T TO
Goals for Lab 9
CPUEDMA
RCVCHAN gBufRcvADC
DAC
McBSP
Rcv
Xmt
XMTCHAN gBufXmt
COPY
L
R
L
R
+
Technical TrainingOrganization
T TO Add a function to flash the LEDs and add a load Make “load” and “copy” operate simultaneously
Outline
New System Requirements and Possible Solutions
DSP/BIOS Solution Scheduling Periodic Functions Real-time Analysis Tools and I/O Lab 9
Technical TrainingOrganization
T TO
TI DSP
Lab 9 Requirement - Abstract
Previous Requirement DSP pass-through and addSine
New Requirement Add function to flash LEDs and add load LED/Load independent of addSine/copy Issues:
Do we have enough bandwidth (MIPS)? Will one routine conflict with the other?
addSine/copy
LED/load
What are some possible solutions ?Technical Training
Organization
T TO
main{ while(1) {
}}
Possible Solution – while Loop
LED/load
addSine/copy Algos run at different rates:
addSine/copy: 94Hz LED/load: 4Hz
What if one algorithm starves the other for recognition or delays its response?
Put each routine into an endless loop under main
How are these problems typically solved?Technical Training
Organization
T TO
Possible Solution - Use Interrupts (HWI)
running
idle
Time 1 2 3 54 6 70
Period Compute CPU Usage
addSine/copy: 11ms 7 s 6%
main{ while(1);}
Timer1_ISR{
}
Timer2_ISR{
}LED/load
addSine/copy
An interrupt driven system places each function in its own ISR
Interrupt is missed…
LED/load: 250 ms 100 ms 40%
46%
How could we prevent this?Technical TrainingOrganization
T TO
Allow Preemptive Interrupts - HWI
Use DSP/BIOS HWI dispatcher for context save/restore, and allow preemption
Reasonable approach if you have limited number of interrupts/functions
Limitation: Number of HWIs and their priorities are statically determined, only one HWI function for each interrupt
running
idle
Time 1 2 3 54 6 70
Nested interrupts allow hardwareinterrupts to preempt each other.main
{ while(1);}
Timer1_ISR{
}
Timer2_ISR{
}LED/load
addSine/copy
What option is there besides Hardware interrupts?Technical TrainingOrganization
T TO
main{ … // return to O/S;}
DSP/BIOS
Use Software Interrupts - SWI Make each algorithm an independent software
interrupt
SWI scheduling is handled by DSP/BIOS HWI function triggered by hardware SWI function triggered by software
for example, a call to SWI_post()
Why use a SWI? No limitation on number of SWIs, and
priorities for SWIs are user-defined! SWI can be scheduled by hardware or
software event(s) Defer processing from HWI to SWI
LED/load
addSine/copy
How do HWI and SWI work together?Technical Training
Organization
T TO
HWIs signaling SWIsEDMA INT
HWI:urgent code
SWI_post();
SWI
ints disabled rather than all this time
ping or pong? addSine and copyData
HWI Fast response to interrupts Minimal context switching High priority only Can post SWI Could miss an interrupt
while executing ISR
SWI Latency in response time Context switch performed Selectable priority levels Can post another SWI Execution managed by
scheduler
Technical TrainingOrganization
T TO
Another Solution – Tasks (TSK)
main{ …// return to O/S;}
DSP/BIOS
DSPBIOS tasks (TSK) are similar to SWI, but offer additional flexibility
TSK is more like traditional O/S task Tradeoffs:
SWI context switch is faster than TSK TSK module requires more code space TSKs have their own stack
User preference and system needs usually dictates choice, easy to use both!LED/load
addSine/copy
What are the major differences between SWI and TSK?Technical Training
Organization
T TO
SWIs and TSKs
Similar to hardware interrupt, but triggered by SWI_post()
All SWI's share system software stack
SWI SWI_post
start
end
“run to
completion”
SEM_post() triggers execution
Each TSK has its own stack, which allows them to pause (i.e. block)
TSK
start
end
Pause
SEM_post
(blocked state)
SEM_pend
Technical TrainingOrganization
T TO
DSP/BIOS Thread TypesP
rio
rity
HWIHardware Interrupts
Used to implement 'urgent' part of real-time event Triggered by hardware interrupt HWI priorities set by hardware
SWISoftware Interrupts
Use SWI to perform HWI 'follow-up' activity SWI's are 'posted' by software Multiple SWIs at each of 15 priority levels
TSKTasks
Use TSK to run different programs concurrently under separate contexts
TSK's are usually enabled to run by posting a 'semaphore‘ (a task signaling mechanism)
IDLBackground
Multiple IDL functions Runs as an infinite loop, like traditional while loop
Enabling BIOS – Return from main()
main{ …// return to BIOS}
DSP BIOS
LED/load
addSine/copy
The while() loop we used earlier is deleted
main() returns to BIOS IDLE allowing BIOS to schedule events , transfer info to host, etc
A while() loop in main() will not allow BIOS to activate
BIOS provides several capabilities…Technical Training
Organization
T TO
DSP BIOS Consists Of:
Real-time analysis toolsAllows application to rununinterrupted while displayingdebug data
Real-time schedulerPreemptive thread managementkernel
Real-time I/OAllows two-way communicationbetween threads or betweentarget and PC host.
Outline
New System Requirements and Possible Solutions
DSP/BIOS Solution Scheduling Periodic Functions Real-time Analysis Tools and I/O Lab 9
Technical TrainingOrganization
T TO
Priority Based Thread Scheduling
HWI 2
HWI 1
SWI 3
SWI 2
SWI 1
MAIN
IDLE
int1
rtn
post2 rtn
int2
post3 rtn
post1 rtn
rtn
rtn
User sets the priority...BIOS does the scheduling
(highest)
(lowest)
SWI_post(&swi2);
How do you create a SWI and set priorities?Technical Training
Organization
T TO
SWI Properties
_myFunction
Technical TrainingOrganization
T TO
Managing SWI Priority Drag and Drop SWIs to change
priority Equal priority SWIs run in the order
that they are posted
Drag and Drop SWIs to change priority
Equal priority SWIs run in the order that they are posted
How do you pass information to SWIs?Technical Training
Organization
T TO
Pass Value to SWI Using Mailbox
Each SWI has its own mailbox
HWI:…
SWI_or (&SWIname, value);
value
_myFunction
SWI:
temp = SWI_getmbox();
…
Why pass a value? Allows SWI to find out “who posted me” SWI_or() ORs value into SWI’s mailbox and posts SWI to run
Other posts that use SWI mailbox: SWI_inc(), SWI_dec(), SWI_andn()
SWI_getmbox() inside SWI reads status of mailbox
Technical TrainingOrganization
T TO
Task Code TopologyVoid taskFunction(…){
// Prolog…
while (‘condition’){
blocking_fxn()
// Process
}
// Epilog
}
Void taskFunction(…){
// Prolog…
while (‘condition’){
blocking_fxn()
// Process
}
// Epilog
}
Initialization (runs once only)
Processing loop - option: termination condition
Suspend until unblocked
Perform desired DSP work...
Shutdown (runs once - at most)
TSK can encompass three phases of activity (prolog, processing, epilog) TSKs can be blocked by using: SEM_pend, MBX_pend, SIO_reclaim, and
several others (suspend execution until unblocked) TSKs can be unblocked by using: SEM_post, MBX_post, SIO_issue, etc.T TO
Technical Training Organization
Outline
New System Requirements and Possible Solutions
DSP/BIOS Solution Scheduling Periodic Functions Real-time Analysis Tools and I/O Lab 9
Technical TrainingOrganization
T TO
period
LED/load LED/load LED/load
Periodic Functions
Periodic functions run at a specific rate in your system: e.g. LED/load requires 4Hz
Use the CLK Manager to specify the DSP/BIOS CLK rate in microseconds per “tick”
Use the PRD Manager to specify the period (for the function) in ticks
Allows multiple periodic functions with different rates
Can be used to model a system (various functions w/loading)
DSP/BIOSCLK
tick
Let’s use the Config Tool to create a periodic function…Technical TrainingOrganization
T TO
Creating a Periodic Function
period
_func1 _func1 _func1
DSP/BIOSCLK
tick
Technical TrainingOrganization
T TO
Outline
New System Requirements and Possible Solutions
DSP/BIOS Solution Scheduling Periodic Functions Real-time Analysis Tools and I/O Lab 9
Technical TrainingOrganization
T TO
Built-in Real-Time Analysis Tools Gather data on target
(3-10 CPU cycles) Send data during BIOS IDLE
(100s of non-critical cycles) Format data on host
(1000s of host PC cycles) Data gathering does NOT stop target CPU
Analyze time NOT spent in IDLE
CPU Load Graph
Execution Graph Software logic
analyzer Debug event timing
and priority
Technical TrainingOrganization
T TO
Built-in Real-Time Analysis Tools
Statistics View Profile routines w/o
halting the CPU Capture & analyze data
without stopping CPU
LOG_printf (&logTrace, “addSine ENabled”);
Send debug msgs to host Doesn’t halt the DSP Deterministic, low DSP
cycle count More efficient than
traditional printf()
Message LOG
Technical TrainingOrganization
T TO
Outline
New System Requirements and Possible Solutions
DSP/BIOS Solution Scheduling Periodic Functions Real-time Analysis Tools and I/O Lab 9
Technical TrainingOrganization
T TO
Lab 9
CPUEDMA
RCVCHAN gBufRcvADC
DAC
McBSP
Rcv
Xmt
XMTCHAN gBufXmt
COPY
L
R
L
R
+
Technical TrainingOrganization
T TO Add a function to flash the LEDs and add a load Make “load” and “copy” operate simultaneously
ti
Technical TrainingOrganization
Technical TrainingOrganization
T TO