30
1 Microprocessor Interfacing Tasks and Examples

0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

Embed Size (px)

Citation preview

Page 1: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

1

Microprocessor Interfacing

Tasks and Examples

Page 2: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

2

Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming Conventions Example Code

Page 3: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

3

Task States Diagram Running – When a task

is actually executing it is said to be in the Running state. It is currently utilizing the processor.

Ready – Ready tasks are those that are able to execute (they are not blocked or suspended) but are not currently executing because a different task of equal or higher priority is already in the Running state.

Page 4: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

4

Task States Diagram Blocked – A task is said to be in the

Blocked state if it is currently waiting for either a temporal or external event. For example, if a task calls vTaskDelay() it will block (be placed into the Blocked state) until the delay period has expired - a temporal event. Tasks can also block waiting for queue and semaphore events. Tasks in the Blocked state always have a 'timeout' period, after which the task will be unblocked. Blocked tasks are not available for scheduling.

Suspended – Tasks in the Suspended state are also not available for scheduling. Tasks will only enter or exit the suspended state when explicitly commanded to do so through the vTaskSuspend() and xTaskResume() API calls respectively. A 'timeout' period cannot be specified.

Page 5: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

5

Task Priority Priority Number ranges from 0 to

(configMAX_PRIORITIES - 1) Zero is lowest priority tskIDLE_PRIORITY is zero

Page 6: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

6

Typical Task

void vATaskFunction( void *pvParameters ) {// Initialization code goes here

for( ;; ) { // Task application code here

// in endless loop with preemptive or // cooperative context switching by // scheduler. }

}

Page 7: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

7

Idle Task Created automatically by

scheduler, not the user. Releases heap space when

vTaskDelete() is used on task tskIDLE_PRIORITY = 0 Other tasks may have zero priority Never block idle task

Page 8: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

8

Idle Task Hook Implements co-routine in idle task. Example blink LED every pass

through idle task via vFlashCoRoutine(…)

See FreeRTOS.ORG Web Pages

Page 9: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

9

Co-routine Write co-routine Schedule co-routine by

vCoRoutineSchedule( void ); call Create co-routine within main( ) by

xCoRoutineCreate( vFlashCoRoutine, PRIORITY_0, 0 );

Start scheduler with in main( ) by vTaskStartScheduler();

See FreeRTOS.ORG web pages for details

Page 10: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

10

RTOS Kernel Utilities Queue implementation Semaphore implementation Idle hook function

Page 11: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

11

Trace Utility Configure system to use trace by

configUSE_TRACE_FACILITY Start trace by vTaskStartTrace() Stop trace by ulTaskEndTrace() Automatically closes if buffers overflow. Copy buffer to PC Use tracecon.exe to convert to CSV file Plot using Excel or MatLab

Page 12: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

12

Trace Utility

Page 13: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

13

Naming Conventions Variables

Variables of type char are prefixed c Variables of type short are prefixed s Variables of type long are prefixed l Variables of type float are prefixed f Variables of type double are prefixed d Enumerated variables are prefixed e Other types (e.g. structs) are prefixed x Pointers have an additional prefixed p, for example a

pointer to a short will have prefix ps Unsigned variables have an additional prefixed u, for

example an unsigned short will have prefix us

Page 14: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

14

Naming Conventions Functions

File private functions are prefixed with prv

API functions are prefixed with their return type, as per the convention defined for variables

Function names start with the file in which they are defined. For example vTaskDelete is defined in Task. c

Page 15: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

15

Application ComponentsThe timing requirements of the hypothetical system can be

split into three categories: Strict timing - the plant control

The control function has a very strict timing requirement as it must execute every 10ms.

Flexible timing - the LED While the LED outputs have both maximum and

minimum time constraints, there is a large timing band within which they can function.

Deadline only timing - the human interfaces This includes the keypad, LCD, RS232 and TCP/IP

Ethernet communications. The human interface functions have a different type of timing requirement as only a maximum limit is specified. For example, the keypad must be scanned at least every 10ms, but any rate up to 10ms is acceptable.

Page 16: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

16

Example Code Main.c Dynamic.c BlockQ.c ComTest.C CRFlash.c CRHook.c Death.c

Flash.c Flop.c Integer.c PollQ.c Print.C SemTest.C Embedded TCP/IP

Examples

Page 17: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

17

Main.c Starting/Stopping the kernel Using the trace visualization utility Allocation of priorities

Page 18: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

18

Dynamic.c Passing parameters into a task Dynamically changing priorities Suspending tasks Suspending the scheduler

Page 19: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

19

BlockQ.C Inter-task communications Blocking on queue reads Blocking on queue writes Passing parameters into a task Pre-emption Creating tasks

Page 20: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

20

ComTest.C Serial communications Using queues from an ISR Using semaphores from an ISR Context switching from an ISR Creating tasks

Page 21: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

21

CRFlash.C Creating co-routines Using the index of a co-routine Blocking on a queue from a co-

routine Communication between co-

routines

Page 22: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

22

CRHook.C Creating co-routines Passing data from an ISR to a co-

routine Tick hook function Co-routines blocking on queues

Page 23: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

23

Death.C Dynamic creation of tasks (at run

time) Deleting tasks Passing parameters to tasks

Page 24: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

24

Flash.C Delaying Passing parameters to tasks Creating tasks

Page 25: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

25

Flop.C Floating point math Time slicing Creating tasks

Page 26: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

26

Integer.C Time slicing Creating tasks

Page 27: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

27

PollQ.c Inter-task communications Manually yielding processor time Polling a queue for space to write Polling a queue for space to read Pre-emption Creating tasks

Page 28: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

28

Print.C Queue usage

Page 29: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

29

SemTest.C Binary semaphores Mutual exclusion Creating tasks

Page 30: 0 Microprocessor Interfacing Tasks and Examples. 1 Overview Task State Diagram Task Priority Idle Hook AND Co-Routines Kernel and Trace Utilities Naming

30

ACLU #20 When a task is first

created, in what state does it start?

Running task waits for semaphore. To what state does it transition?

Blocked task receives message in queue. To what state does it transition?