RTOS Slides
RTOS Slides
Readable Source
Well Suited for MCU Well documented
www.micrium.com
Jean Labrosse
INT
RTOS-Solution
INT 0
ISR1 ISR0 ISR1
Task 1
ISR0
INT 1
Task 1 IDLE
Task 1
Time
3
BackGnd-Tasks
Processing Time
1 us
1 ms
1s
INT
ISR
Timer INT
Semaphore Task 0 T 10
Ticks
INT
Memory Buffers
Message Queue
T61
T63 IDLE
INT ISR
ISR
Tx-FIFO
T60
T30
Mailbox
5
Task
Simple Tasks
Task
Ticks
void myTask (void*pdata){ while (TRUE){ OSTimeDly(ticks); } } void myTask (void*pdata){ while (TRUE){ OS???Pend(ticks); } }
Task
Task
PORTH [3]
while ((PTH & 8)==0){ OSTimeDly(1); } Context switching : Lower tasks can run
7
ISR
interrupt VECTOR_NUM void myISR (void){ OSIntEnter(); OSIntExit(); } INT Task 5 Task 10 ISR
Preemption
ISR
OSTimeTick
Ticks
Semaphore
ISR
Task Task
OS_EVENT* mySem
if(mySem=OSSemCreate(InitialVal) != NULL)
err=OSSemPost(mySem)
tick:
Initial Value = 0
Optional Timeout
10
Initial Value = 1
Mail Box
OS_EVENT* myMbox
if (myMbox=OSMboxCreate(NULL)) != NULL)
RxMessage = OSMboxPend(myMBox, tick,&err)
Task
tick:
void*TxMessage
Optional Timeout
void*RxMessage
11
Message Queue
void*Buffer[N] err = OSQPost(myQ,TxMsg ) OSQPostFront( myQ,TxMsg)
OS_EVENT* myQ
OSQFlush(myQ)
tick: void*RxMsg
Optional Timeout
void*TxMsg
12
Memory Buffer
INT8U buf[N*blksize]
OS_MEM* myMem
OSMemPut(myMem,&err)
Buffer Buffer
NO Timeout
No wait
Task
13
Code Architecture
MAIN.C MAIN XXX.C INIT XXX_EVENTS_INIT ALL_Events_Init StartRTOS.C STAR12_Init APP_Task_CREATE MYTASK_CREATE ALL_INCLUDES.H XXX.H
Task
MYTASK (Hardware Configuration) RTOS_Checking
14
Task
Creating a Task
void myTask (void*pdata); static OS_STK MYTASK_stack[MYTASK_stk_size]; void * ptos = (void*)&MYTASK_stack[MYTASK_stk_size-1]; void * pbos = (void*)&MYTASK_stack[0]; INT8U prio = ; // 0(higher) to 63(idle) INT8U id = 0; // unused INT16U opt = OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR; void*pdata = NULL; //optional data ptr void*pext = NULL; // optional ptr err = OSTaskCreateExt (myTask, pdata, ptos, prio, id, pbos, MYTASK_stk_size, pext, opt);
15
Code Generator
XXX.H XXX.C
XXX_EVENTS_INIT
MYTASK_CREATE
MYTASK
16
Training Course
Lecture
1H30
Labs
3H00
Introduction to RTOS Multitasking, Scheduling Task States Preemptive/Cooperative Task Stacks Introduction to uCOSII Task, Semaphore, Mbox,Q,Mem Starting the OS Code Architecture Code Generator
Getting Start 1H00 Load the demo Add a commented task Debug !
2H00
Writing an Application Use Code Generator Adding the Files to project Adding the task to the App. Debug
ISR
Task 0
17
Starsky
Application Tasks
1 2 3 4 5 6 LineControl MotorControl LineSensor (I2C) USSensor Monitor (RS232) Function
18
Monitoring
5 Monitor Send Sensors & Variables values through RS232 Print To LCD buffer Delay 100 ms 60 RS232 Wait for RS232 Q Constitute Frames Copy msg to TxFIFO Enable SCI Tx ISR
19
Application Starsky
1 LineControl 2
USSensor
Wait for LineCtrlSem ShortCut & Crossing Detection End Detection Line Tracking
MotorControl
Monitor
Wait for MotorCtrlSem Read Speed PI Controller or Open loop Setting PWM Values
Emit variable values via RS232 & LCD Delay 100 ms Function (Main Task)
LineSensor
Select Mode (Stop,demo,normal) Delay (variable) Set Motor Order or post LineCtrlSem
20
PA Overflow
Period = TC - TCH
21
Frequency Measurement
Modulus Down Counter 5 ms MotorCtrlSem Motor Control
Period = TC - TCH
UINT16 ECT_MOTOR_PT1_speed ( void ){ UINT16 Speed, Delta; Delta = (TC1 - TC1H); TotalPa1 += PA1H ; Speed_mm_per_sec = DiffPA1 * 21; return ( (Speed> 100) ? (3272490UL / Delta) : Speed); }
ISR
1/10 50 ms
void ECT_MOTOR_update(void) { Delta_ic1 = (TC1 - TC1H); // Tfer PA -> PAH Delta_ic3 = (TC3 - TC3H); // Tfer PA -> PAH TotalPa1 += PA1H; TotalPa3 += PA3H; DiffPA1 = TotalPa1 - TotalPa1_old; DiffPA3 = TotalPa3 - TotalPa3_old; TotalPa1_old = TotalPa1; TotalPa3_old = TotalPa3; }
22
Starsky Project
Professor
STAR 12 Board design STAR12 Software Lib UCOS-II Port to STAR12 Board UCOS-II/Star12 Service 3 months 2 months 1 month 1 month
20 Students group
Frequency, Motor controller, H-bridge, RS232 Monitor, I2C All together, Line tracking 6 weeks 6 weeks
3 students
Starsky & Hutch design 8 weeks
23