RTXC 3.2 TRAINING COURSE jrg.ppt

...

45 downloads 10011 Views 5MB Size

™ RTXC Real-Time Executive in C Smart Starts Here

SM

COURSE CONTENT   Day 1 •  Unit 1: RTXC Overview •  Unit 2: Application Development Process   Exercises

•  Unit 3: Tasks and Memory Partitions   Exercises

  Day 2 •  Unit 4: Semaphores, Timers and Resources   Exercises

•  Unit 5: Queues, Mailboxes and Messages   Exercises

•  Unit 6: Interrupt Handling Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TRAINING UNIT 1 RTXC Overview

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC V3.2 PRODUCT OVERVIEW                  

Out-of-the-Box use with your compiler and processor Written in ANSI C for portability 600+ page RTXC User's Manual 7 kernel object classes using 72 Kernel Services Event driven, multitasking design with Preemptive scheduling Support for Time-Sliced and Round Robin scheduling Configurable, ROMable and extensible System level debug utility - RTXCbug System generation utility - SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC IS PROCESSOR INDEPENDENT   Common API for all processors   Common RTXC User's Manual   RTXC for a particular processor is called a PORT

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC IS COMPILER SPECIFIC   There are differences between C compilers   RTXC built for a particular C compiler is called a BINDING   Details of binding to a compiler are found in the Binding Manual

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

USER'S MANUAL CONTENT   Theory of Operation (Section 2)   Functional overview - organization and content of RTXC kernel objects (Section 3)

           

Tutorial (Section 4) RTXC Kernel Services reference (Section 5) RTXCgen - system configuration utility (Section 6) Device drivers and interrupt service routines (Section 7) RTXCbug - system level debugging tool (Section 8) Application notes (Section 9)

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC KERNEL OBJECTS              

TASKS for application functions MEMORY PARTITIONS for RAM memory management SEMAPHORES for event synchronization TIMERS for timed operations RESOURCES for exclusive access QUEUES for chronological data passing MAILBOXES and MESSAGES for message transmission

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

MULTITASKING

  Formal structure is provided by policies and rules implemented as Kernel Services

  User’s application is organized into a set of tasks   Application Program Interface (API) provides a standard interface between application tasks and the kernel services

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC POLICIES AND RULES   POLICIES establish the fundamental principles of the kernel design

  RULES implement these policies

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC POLICIES

       

Allocation of system resources Scheduling methods Responsiveness and performance Flexibility

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC BASIC POLICIES   RTXC should contain sufficient numbers and types of services to make the kernel useful to a variety of applications

  RTXC should employ a multitasking design to achieve maximum CPU efficiency

  RTXC primary multitasking method should be event driven   Each task should have a priority indicative of its relative scheduling importance

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC BASIC POLICIES   RAM usage should be kept to a minimum   RTXC should impose a minimum overhead on the application   RTXC performance should be deterministic to the greatest extent possible

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC BASIC RULES   The Current Task is the highest priority task in the system that is not blocked

  The Current Task maintains control of the CPU either until it runs to completion, yields, becomes blocked by resource unavailability or is preempted

  If a task of higher priority than the Current Task becomes ready, it preempts the lower priority task and becomes the Current Task

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC BASIC RULES   The RTXC Kernel is interruptible but not reentrant   Interrupt Service Routines may use only those services expressly intended for ISR usage

  The NULL Task is always the lowest priority task and its priority must never be changed

  The NULL Task must never be blocked

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TASK SCHEDULING

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

PREEMPTIVE SCHEDULING

  Tasks have priorities to indicate their relative importance   Highest priority ready task gets control of processor   Tasks execute in strict priority sequence with preemptive task scheduling

  Current Task runs until it terminates, is preempted, blocked, or yields control

  A task can control its own runtime by terminating, blocking or yielding

  Preemption is handled by the Scheduler

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

PREEMPTIVE SCHEDULING

EVENT

Task A Task B is preempted Task A runs

Task B An event can preempt and force another task to take control

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Task A Blocks Task B continues

PREEMPTIVE SCHEDULING

  Most important ready task at any given time controls the CPU   Synchronized with events through the use of task priorities   A deterministic design is possible because response time to an event is predictable

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

TIME-SLICED SCHEDULING

  No task monopolizes CPU because execution time is limited by a time quantum

  Granularity of time quantum determines system responsiveness

  Process must be predictable so that time quantum can be chosen correctly

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

TIME-SLICED SCHEDULING

Task A Task B Task C Time TQ TQ (Time Quantum)

TQ

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

TQ

TQ

TQ

TIME-SLICED SCHEDULING

EVENT

EVENT Task B handles the event

Task A Task B Time Response Time to first event

Response Time to second event

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

TIME-SLICED SCHEDULING

Task B handles the event

Task A Task B EVENT!

EVENT!

Task A Task B

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Task B only recognises one of the events

TIME-SLICED SCHEDULING

  There is an overhead associated with each task switch   If the time quantum is too small then the overhead may become excessive and lead to undesirable system performance

  If the time quantum is too large then critical events may be missed entirely

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

TIME-SLICED SCHEDULING

  No task monopolizes the CPU 100%   Non-deterministic response to events   Adjustable worse case response time obtained by changing the time quantum

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

ROUND ROBIN SCHEDULING   System functions are organized into modules   Individual task modules execute sequentially, with or without time limit, in one loop

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

ROUND ROBIN SCHEDULING

Task A Task B Task C Time Each task runs until it terminates, thus we have unequal CPU usage

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

ROUND ROBIN SCHEDULING

       

Application has 100% of CPU Modular design Unstable timing between successive passes of loop No consideration is given to relative importance of modules, making event response time non-predictable

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TRAINING UNIT 2 Application Development Process

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

APPLICATION USING RTXC Task 1

Task ...

Task N

RTXC SERVICE CALLS (KS_...)

Inter-Task Communication

Event Management

Task Management

Resource Management

Timer Management

Memory Management

RTXC ISR CALLS (KS_ISR...)

Interrupt Service Routines

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Hardware Device

APPLICATION DESIGN

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

APPLICATION DEVELOPMENT PROCESS Application Design

SYSgen

Application Code

RTXC Source Code

RTXCbug Compiler/Assembler

Compiler/Assembler

Linker

Executable

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC kernel library

APPLICATION DESIGN SUMMARY   Define requirements of the system   Define necessary Kernel Objects   Define tasks and their functionality •  Define priorities and synchronization •  Define communication mechanisms

  Ensure compliance with rules and policies of RTXC for efficient design

  Iterative process - use information from RTXCbug to refine system design

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC SOURCE CODE

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

APPLICATION DEVELOPMENT PROCESS Application Design

SYSgen

Application Code

RTXC Source Code

RTXCbug Compiler/Assembler

Compiler/Assembler

Linker

Executable

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC kernel library

RTXC SOURCE CODE SUMMARY        

Most configuration options are set in rtxcopts.h Some options are set in the make file Should require few changes once configured The source code is compiled and the object files are added to a library - librtxc.lib

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

APPLICATION DEVELOPMENT PROCESS Application Design

SYSgen

Application Code

RTXC Source Code

RTXCbug Compiler/Assembler

Compiler/Assembler

Linker

Executable

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC kernel library

SYSgen INTERACTIVE SYSTEM GENERATION UTILITY            

Predefinition of system configuration Produces C data structures for all kernel objects Uncomplicated and efficient definitions Fast turnaround of configuration changes Error free code of system configuration Self documenting

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen   Creates .rtx, .c, and .h files •  .rtx files used by SYSgen for configuration •  .c files allocate space and instantiate objects •  .h files declare constants for the objects

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen   Kernel Object names integrated with C Header files   Accessible to: •  Application code •  RTXCbug displays and dialog

  Consistent method of editing all Kernel Objects.

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Appended Task

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen MODULE NAMES (xxxx)              

TASK

Task control block definitions

SEMA

Semaphore definitions

RES

Resource definitions

MBOX

Mailbox definitions

QUEUE

Queue definitions

PART

Memory Partition definitions

CLOCK

Clock definitions

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen .h files CTASK.H #define NTASKS 10 #define DNTASKS 6 #define RTXCBUG 1 /* CBUG debugger */ #define CONAIDRV 2 /* Console A Input Task */ #define CONAODRV 3 /* Console A Output Tas */ #define CONBIDRV 4 /* Console B Input Task */ #define CONBODRV 5 /* Console B Output Tas */ #define EXAMPLE1 6 /* Example Task 1 */ #define EXAMPLE2 7 /* Example Task 2 */ #define FPUTASK1 8 /* Floating Point Task */ #define FPUTASK2 9 /* Floating Point Task */ #define TASK1 10 /* Task1 */

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SYSgen SUMMARY   For best results follow this procedure: •  Open- a project file •  Edit- make the changes to the kernel objects •  Save- save the project file information •  Generate- generate the source code. (.c and .h files)

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

APPLICATION DEVELOPMENT PROCESS Application Design

SYSgen

Application Code

RTXC Source Code

RTXCbug Compiler/Assembler

Compiler/Assembler

Linker

Executable

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC kernel library

RTXCbug

         

Symbolic system level inquiry, display and control Invoked manually or via a program Provides coherent snapshots of internal system elements Limited task control capabilities Symbolic element names used for displays and dialog

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug   User defined debug console device via RTXCgen •  System console •  Serial port

  Operates as a task (usually highest priority) •  Uses no system resources until invoked •  Freezes active timers •  Blocks all tasks except the debug console driver •  Allows interrupt servicing

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug

** RTXCbug - RTXC v3.2a xxxx vx.x Date K - RTXC G - Go to Multitasking Mode X - Exit RTXCbug RTXCbug>

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug

T M P Q R S C K Z $ # G U X

-

Tasks Mailboxes Partitions Queues Resources Semaphores Clock/Timers Stack Limits Zero Partition/Queue/Resource Statistics Enter Task Manager Mode Task Registers Go to Multitasking Mode Return to Main Menu Exit RTXCbug

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug

       

Collects “high water mark” statistics Uses no resources until invoked Can be used to launch tasks individually to debug them The information collected may be used to redesign and recode the application

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

APPLICATION CODE

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

APPLICATION DEVELOPMENT PROCESS Application Design

SYSgen

Application Code

RTXC Source Code

RTXCbug Compiler/Assembler

Compiler/Assembler

Linker

Executable

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC kernel library

KERNEL SERVICES

  Names begin with KS_   Name format is KS_verb[noun][suffix](object,   Suffixes: •  example: KS_sendw, KS_sendt, KS_waitm  w - unconditionally waits  t - waits with timeout values  m - waits on multiple

  A task argument of 0 means Current Task   def services define; inq services inquire •  example: KS_defpriority, KS_inqpriority

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

...)

RTXC TIME   All time is measured in units called “ticks”   The duration of 1 tick depends on the frequency of the system interval timer

  Units of ticks are milliseconds   The smallest tick duration supported by RTXCgen is 1 ms   The file cclock.h defines the duration of 1 tick with the constant CLKTICK

  To convert from real time to system time express real time in ms and divide by CLKTICK •  5 sec = 5000 ms = 5000/CLKTICK

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

INACCURACIES WITH SINGLE TICK DURATIONS

Time 0

1

2

1

2

1 TICK

Time 0 1 TICK

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

APPLICATION CODE SUMMARY   Consists of C source files   Can have multiple modules   Will interact with files generated by SYSgen •  Must include those SYSgen (.h) files needed

  Use Kernel Service calls to manipulate Kernel Objects   Links with RTXC library

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TRAINING COURSE

  Exercise #1 •  Familiarization with SYSgen •  Defining a task and a resource •  Getting an application to run •  Observe dynamic task priorities

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TRAINING UNIT 3 Tasks and Memory Partitions

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC KERNEL OBJECTS              

TASKS for application functions MEMORY PARTITIONS for RAM memory management SEMAPHORES for event synchronization TIMERS for timed operations RESOURCES for exclusive access QUEUES for chronological data passing MAILBOXES and MESSAGES for message transmission

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TASKS

  Written as a C function - void return and void arguments   Can be instantiated dynamically or statically   Usually performs a limited function (Spark control, Fuel injection etc.)

       

Each task requires its own stack Task priority defined at System Generation Task priority variable during runtime Task status and context automatically maintained by RTXC Scheduler

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TASKS

void taskname(void) { ...Data declarations ...Task initialization ...Task operations KS_terminate(SELF); }

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TASKS

void taskname(void) { ... Data declarations ...Task initialization for (;;) { ...Task operations } }

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

TASK CONTROL BLOCK Next Previous Status Stack Priority Task ID Time Slice Timer Time Quantum Miscellaneous

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

READY LIST LINKAGE hipritsk

TCB A NULL TCB

TCB A

hipritsk points to the current task

NULL TCB NULL

hipritsk

TCB A

Task Data

Task Data

Task A is the current task Note the use of the NULL task

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

READY LIST LINKAGE hipritsk TCB B

Task B has preempted and is the current task

TCB B TCB A

TCB A NULL TCB

NULL TCB NULL

hipritsk

TCB B

TCB A

Task Data

Task Data

Task Data

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TASKS

Environment Arguments A

Environment Arguments B TCB A

TCB B

Task A Stack

Task B Stack void taskname(void) { ...Task operations }

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

TASK KERNEL SERVICES   KS_execute(task)   Make task READY for execution beginning at its starting address

  KS_terminate(task)   Terminate operation of task

  KS_resume(task)   Resume suspended task, unless otherwise blocked

  KS_suspend(task)   Suspend operation of task

  KS_delay(task,ticks)   Block task for a period of time specified by ticks then unblock

task when delay expires

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

TASK KERNEL SERVICES   KS_defpriority(task, priority)   Change the priority of task to priority

  KS_inqpriority(task)   Get task's priority

  KS_defslice(task, ticks)   Define a task's time-slice time quantum

  KS_inqslice(task)   Get task's time-slice time quantum

  KS_yield(void)   Yield control of the CPU to another task, used with round-robin

scheduling

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

TASK KERNEL SERVICES   KS_alloc_task(void)   Allocate a TCB from the pool of dynamic TCBs

  KS_deftask(task, priority, stack *, stack size, entry)   Define attributes of task

  KS_deftask_arg(task, envarg *)   Define the environment arguments of task

  KS_inqtask_arg(task)   Get address of task's environment arguments

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

TASK KERNEL SERVICES   KS_inqtask(void)   Get task number of Current Task

  KS_block(start, end)   Blocks range of tasks from start to end

  KS_unblock(start,end)   Unblocks range of tasks from start to end

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug TASK INFORMATION ** Task Snapshot ** # Name Priority 1 RTXCBUG 1 2 PRTSC 2 3 CONODRV 9 4 CONIDRV 8 5 HISTASK 12 6 COMODRV 10 7 DINP 11 8 DEMO1 14

State READY -READY READY QueueEmpty CONIQ INACTIVE QueueEmpty COMOQ Semaphore DINTSEMA SDINSEMA Semaphore DEMOSEM0 DEMOQ DEMOSEM2 DEMOMBOX

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug TASK STATE DESCRIPTIONS   The legitimate state descriptions are: INACTIVE Not executing READY Active and ready to run -READY Active but blocked by RTXCbug DELAY Blocked on a time delay SUSPENDED Suspended Semaphore Waiting on one or more events QueueEmpty Waiting on an empty queue QueueFull Waiting on a full queue Mailbox Waiting on an empty mailbox Resource Waiting on a busy resource Partition Waiting on an empty partition

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug STACK SNAPSHOT ** Stack Snapshot ** # Task Size Used

Spare

1 RTXCBUG

768

610

158

2 CLKDRV

512

122

390

3 PRTSC

512

124

388

4 CONODRV

512

250

262

5 DEMO1

256

150

106

6 DINP

256

210

46

256

68

188

RTXC Kernel

Worst case interrupt nesting = 3 Worst case Signal List size =

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

2

RTXC KERNEL OBJECTS              

TASKS for application functions MEMORY PARTITIONS for RAM memory management SEMAPHORES for event synchronization TIMERS for timed operations RESOURCES for exclusive access QUEUES for chronological data passing MAILBOXES and MESSAGES for message transmission

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC MEMORY PARTITIONS

           

Prevents fragmentation of memory Many Memory Partitions may be defined Also known as Memory Array Partitions - MAPs Memory Partitions may be defined statically and/or dynamically Memory Partitions defined globally Any task may allocate memory from any Memory Partition

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC MEMORY PARTITIONS

Partition Header Block Size Next Waiters

Partition Block Block Block Block Block Block

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC MEMORY PARTITIONS

Partition with two blocks of size 1024

Partition with two blocks of size 256

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Partition with two blocks of size 512

RTXC MEMORY PARTITIONS

C malloc: C Free: Fragmented Space: cannot allocate memory of size

KS_alloc: KS_free:

Since blocks are the same size we have a perfect fit

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC MEMORY PARTITIONS

  KS_alloc(map)   Allocate a block of memory from map and return its address, returns NULL if

partition is empty

  KS_allocw(map)   Same as alloc() but, if map is empty, wait until memory available

  KS_alloct(map, ticks)   Same as allocw() but limit duration of wait to a period of ticks

  KS_free(map, address)   Free the memory block at address to specified Memory Partition

  KS_inqmap(map)   Get the memory block size of map

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC MEMORY PARTITIONS

  KS_alloc_part(void)   Allocate a dynamic Memory Partition control block and return its identifier,

returns NULL if none available

  KS_defpart(map, address, size, number)   Define attributes of an existing or dynamically allocated partition, map, with a

memory array located at address and containing number of blocks of size size

  KS_create_part(address, size, number)   Allocate a dynamic Memory Partition at address containing size sized

number of blocks (combination of KS_alloc_part and KS_defpart)

  KS_free_part(map)   Free the dynamically allocated Memory Partition whose identifier is map

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug MEMORY PARTITION SNAPSHOT ** Partition Snapshot ** # Name Avail/Total Worst Count 1 PRTSCMAP

3/

4

1

0

2 AIMAP

0/

20

20

482

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Bytes Waiters 2010 64

AINP

RTXC TRAINING COURSE

  Exercise #2 •  Defining a Second static task •  Using Suspend and Resume to synchronize two tasks

  Exercise #3a •  Simulate a crude traffic light •  Suspend and Resume tasks

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TRAINING UNIT 4 Semaphores Timers and Resources

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC KERNEL OBJECTS              

TASKS for application functions MEMORY PARTITIONS for RAM memory management SEMAPHORES for event synchronization TIMERS for timed operations RESOURCES for exclusive access QUEUES for chronological data passing MAILBOXES and MESSAGES for message transmission

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC SEMAPHORES

         

Associated with process or software generated events Tri-state model: PENDING, WAITING or DONE State automatically maintained by RTXC Only one task can wait on a semaphore Multiple semaphores can be associated with one event

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

PENDING STATE   Event is expected but next occurrence has not yet happened   No task is waiting on the event to occur   All semaphores set to PENDING state by default during system initialization

  Semaphore state = 0xFF (assuming a character sized definition of type SEMA)

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

DONE STATE   Expected event occurred but no task was waiting for it   Transitions from PENDING to DONE as the result of a KS_signal, KS_signalm, KS_ISRsignal, KS_ISRsignalm, or possibly KS_ISRexit

  Semaphore state = 0x00   Transition from DONE to PENDING occurs as result of KS_wait, KS_waitt or KS_waitm •  Task does not wait •  Requesting task retains status as Current Task

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

WAITING STATE   Event is expected but next occurrence has not yet happened   Transition from PENDING to WAITING occurs as result of KS_wait, KS_waitt or KS_waitm •  A task is waiting on the event to occur •  Task is blocked while waiting

  Semaphore state = 0x01 - 0xFE •  Content of semaphore is the handle (ID) of the task waiting for the event

  Transition from WAITING to PENDING occurs a result of KS_signal, KS_signalm, KS_ISRsignal, KS_ISRsignalm, or possibly KS_ISRexit

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SEMAPHORE AND TASK COORDINATION   Events can occur in two ways: •  Before task attempts to synchronize with event using KS_wait or KS_waitm •  After task attempts to synchronize with event using KS_wait or KS_waitm KS_signal

Semaphore State Task State

KS_signal

PENDING DONE PENDING

WAITING PENDING

RUNNING

BLOCKED RUNNING

KS_wait

KS_wait

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SEMAPHORE STATE TRANSITIONS

PENDING KS_signal

KS_wait

KS_signal

KS_signal

DONE

WAITING

KS_wait

KS_wait (ERROR) Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SEMAPHORE STATE TRANSITIONS KS_pend

PENDING KS_signal

KS_wait KS_pend

KS_signal

KS_pend

KS_signal

DONE

WAITING

KS_wait

KS_wait (ERROR) Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

SEMAPHORES AND APPLICATIONS Task 1 North/South Light

KS_wait(SEMA1)

For (;;) { Turn Light Red; Signal SEMA2; Wait For Signal From Task 2; Turn Light Green Wait a while with KS_delay; } KS_signal(SEMA2) SEMA2

KS_wait(SEMA2)

SEMA1

KS_signal(SEMA1)

Task 2 East/ West Light For (;;) { Wait For Signal From Task 1; Turn Light Green Wait a while with KS_delay; Turn Light Red; Signal SEMA1; }

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC SEMAPHORES

  KS_wait(semaphore)   Cause task to wait for occurrence of event associated with semaphore

  KS_waitt(semaphore,ticks)   Same as KS_wait( ) but duration of wait limited to a period defined by ticks

  KS_waitm(semaphore_list)   Cause task to wait for occurrence of an event associated with any

semaphore found in semaphore_list (logical OR condition) and returns the ID of the semaphore associated with the event

  KS_signal(semaphore)   Signal semaphore that associated event has occurred

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC SEMAPHORES

  KS_signalm(semaphore_list)   Signal multiple semaphores as specified in semaphore_list that a

particular event has occurred

  KS_pend(semaphore)   Set semaphore to a PENDING state

  KS_pendm(semaphore_list)   Set multiple semaphores as specified in semaphore_list to a PENDING

state

  KS_inqsema(semaphore)   Get current state of semaphore

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug SEMAPHORE SNAPSHOT ** Semaphore Snapshot ** # Name State Waiter 1 PRNSEMA

PEND

2 PRTSCSEM DONE 3 COMISEMA WAIT COMIDRV 4 DEMOSEM0 WAIT DEMO1 DEMOQ 5 DEMOSEM1 WAIT DEMO1 DEMOMBOX 6 DINTSEMA WAIT DINP 7 SDINSEMA WAIT DINP

Semaphore States: PEND Pending - Semaphore not yet set WAIT Waiting - Tasks waiting for Semaphore DONE Done - Semaphore set but no tasks waiting

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC KERNEL OBJECTS              

TASKS for application functions MEMORY PARTITIONS for RAM memory management SEMAPHORES for event synchronization TIMERS for timed operations RESOURCES for exclusive access QUEUES for chronological data passing MAILBOXES and MESSAGES for message transmission

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TIMERS

       

Used for general purpose timing One-shot and cyclic timers supported More than one timer per task permitted Time resolution dependent on system time base

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

TIMER OPERATION KS_start_timer: TI = Initial period, TR = recycle period, expiration sema TI

TR signal

TR signal

TR signal

SEMAPHORE

KS_wait()

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

TR signal

ELAPSED TIME CALCULATION

T0

EVENT 1

EVENT 2

EVENT 3

T1

T2

T3

KS_elapse(&X)

KS_elapse(&X)

KS_elapse(&X)

X

X

X

X

?

T1

T2

T3

T = don’t care

T = T2 - T1

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

T = T3 - T2

RTXC TIMERS

  KS_alloc_timer(void)   Allocate a timer block and return its address

  KS_start_timer(timer,period,cyclic_period, semaphore)   Start timer giving it an initial period and an optional cyclic_period and

associate semaphore with the expiration of the initial period or cyclic period

  KS_restart_timer(timer,period,cyclic_period)   Reset and restart the active timer with a new initial period and an optional

cyclic_period

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TIMERS

  KS_stop_timer(timer)   Stop the specified active timer and remove it from the active timer list

  KS_free_timer(timer)   Free the timer block

  KS_elapse(counter)   Set current time into counter, then subsequent call calculates elapsed time

  KS_inqtimer(timer)   Get the time remaining on an active timer

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug CLOCK SNAPSHOT ** Clock Snapshot ** Clock rate is Tick timer is Time Remaining 500 7500

100 Hz, Tick interval is 10 ms, Maximum of 16 timers 37046, ET is 126 ticks, RTC time is 370 Cyclic Value 1000 0

Task Name CAL TACH1

Timer Type Timer Delay

Object Name CALSEMA TACH1

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC KERNEL OBJECTS              

TASKS for application functions MEMORY PARTITIONS for RAM memory management SEMAPHORES for event synchronization TIMERS for timed operations RESOURCES for exclusive access QUEUES for chronological data passing MAILBOXES and MESSAGES for message transmission

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC RESOURCES

           

Resource may be any entity: Hardware or Software Resource permits exclusive access to entity by owner One owner at a time Priority inversion optionally handled by RTXC RTXC manages tasks waiting to become resource owner Caution: Nested ownership is allowed, make sure you match KS_locks and KS_unlocks

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC RESOURCES

Task 1

Resource KS_lock

Task 1 Resource Task 2 KS_lock

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC RESOURCES

READY LIST hipritsk Task C Priority 3 Task C gains ownership of Resource with KS_lock[w|t]

Resource

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC RESOURCES

READY LIST hipritsk

Task A Priority 1

Task C Priority 3

Task A preempts Task C and, needing the Resource, attempts to gain ownership with a KS_lock[w|t] kernel service

KS_lock()

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Resource

RTXC RESOURCES

READY LIST hipritsk

Task C Priority 1 Task C continues to own the Resource and has its priority temporarily changed to that of Task A

Task A is blocked on the resource and is waiting even though it has the highest priority

Task A Priority 1

Resource

Resource Waiters List

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC RESOURCES

READY LIST hipritsk

Task C Priority 1

Task B Priority 2

Task C temporarily gets Task A’s Priority

When Task C finishes with the resource it is returned to its old priority so Task A preempts and runs

Task A Priority 1

Resource

Resource Waiters List

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC RESOURCES

  KS_lock(resource)   Acquire exclusive use of resource, returns RC_GOOD if successful,

RC_BUSY if resource locked by another owner

  KS_lockw(resource)   Same as KS_lock() but, if resource is BUSY, wait until resource

available

  KS_lockt(resource,ticks)   Same as KS_lockw() but limit duration of wait to period of ticks

  KS_unlock(resource)   Release exclusive ownership of resource

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC RESOURCES

  KS_defres(resource, resattr)   Enable or disable the priority inversion attribute for the resource

  KS_inqres(resource)   Get the identifier of the owner of a resource

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug RESOURCE SNAPSHOT ** Resource Snapshot ** #

Name

Count Conflicts

1 PRNRES

26742

1

2 DOSRES

1

2

Owner PRTSCRN

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Waiters FILMGR

RTXC TRAINING COURSE

  Exercise #5a •  Using Semaphores to Synchronize Tasks

  Exercise #6a •  Using Cyclic timers with semaphores

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TRAINING UNIT 5 Queues Mailboxes and Messages

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC KERNEL OBJECTS              

TASKS for application functions MEMORY PARTITIONS for RAM memory management SEMAPHORES for event synchronization TIMERS for timed operations RESOURCES for exclusive access QUEUES for chronological data passing MAILBOXES and MESSAGES for message transmission

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC FIFO QUEUES

  Supports multiple producers and multiple consumers   Automatic synchronization possible on EMPTY and FULL conditions when using KS_enqueuew and KS_dequeuew

  Can be used with queue semaphores when trying to synchronize with multiple events using KS_waitm •  Not used when using KS_enqueuew or KS_dequeuew •  Use with multiple queues or with mailboxes or normal events

  Predefined WIDTH and DEPTH •  All entries in a queue have same Width •  Different queues can have different Widths and Depths

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

FIFO QUEUE ORGANIZATION Queue Control Block

Queue Body

Width

Entry

Depth

Entry

Body

Entry

Current Size

Entry

Put Index QE Sema QF Sema QNE Sema

Optional

QNF Sema Waiters

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Width

Depth

PUTTING DATA INTO A QUEUE   Use a variant of KS_enqueue to put data into a queue •  KS_enqueuew or KS_enqueuet

  Move data from a source area to the queue •  Source area should be at least size of queue’s Width •  Give address of source area (&source) as parameter to KS_enqueue[w|t] Queue

Source Area

Width

Width Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

GETTING DATA FROM A QUEUE   Use a variant of KS_dequeue to get data from a queue •  KS_dequeuew or KS_dequeuet

  Move data from queue to a destination area •  Destination area should be at least size of queue’s Width •  Give address of destination area (&dest) as parameter to KS_dequeue[w|t] Queue

Destination Area

Width

Width Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC QUEUE SEMAPHORE USAGE

Before (Queue Empty) Queue Header

Queue Body

After (KS_enqueue) Queue Header

Queue Body

Entry Queue Data

Queue Data

QE Sema

QE Sema

QF Sema

QF Sema

QNE Sema

QNE Sema

QNF Sema

QNF Sema

Waiters

Waiters

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC QUEUE SEMAPHORE USAGE

Before (Queue Not Empty) Queue Header

Queue Body

After (KS_dequeue) Queue Header

Entry Queue Data

Queue Data

QE Sema

QE Sema

QF Sema

QF Sema

QNE Sema

QNE Sema

QNF Sema

QNF Sema

Waiters

Waiters

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Queue Body

RTXC QUEUE SEMAPHORE USAGE

Before (Queue Not Full) Queue Header

Queue Body

After (KS_enqueue) Queue Header

Entry Queue Data

Entry

Queue Body

Entry Queue Data

Entry

Entry Entry

QE Sema

Entry

QE Sema

Entry

QF Sema

Entry

QF Sema

Entry

QNE Sema

Entry

QNE Sema

Entry

QNF Sema

Entry

QNF Sema

Entry

Waiters

Entry

Waiters

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC QUEUE SEMAPHORE USAGE

Before (Queue Full) Queue Header

Queue Body

After (KS_dequeue) Queue Header

Entry Queue Data

Entry

Queue Body

Entry Queue Data

Entry

Entry Entry

QE Sema

Entry

QE Sema

Entry

QF Sema

Entry

QF Sema

Entry

QNE Sema

Entry

QNE Sema

Entry

QNF Sema

Entry

QNF Sema

Entry

Waiters

Entry

Waiters

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC QUEUES

  KS_dequeue(queue,destination)   Get data from queue and store it at destination address

  KS_dequeuew(queue,destination)   Same as KS_dequeue() but, if queue is EMPTY, wait until operation can be

completed

  KS_dequeuet(queue,destination,ticks)   Same as KS_dequeuew() but duration of wait is limited by period defined by

ticks

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC QUEUES

  KS_enqueue(queue,source)   Put data at source address into queue

  KS_enqueuew(queue,source)   Same as KS_enqueue() but, if queue is FULL, wait until there is room in

queue to complete the operation

  KS_enqueuet(queue,source,ticks)   Same as KS_enqueuew() but limit duration of wait to period defined by

ticks

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC QUEUES

  KS_defqsema(queue,semaphore,condition)   Associate semaphore with the given condition on queue

  KS_defqueue(queue,width,depth,body,count)   Define width, depth, queue body address and current size of queue

  KS_inqqueue(queue)   Get the number of entries currently in queue

  KS_purgequeue(queue)   Purge queue of all entries

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug QUEUE SNAPSHOT ** Queue Snapshot ** #

Name

1 CONIQ 2 CONOQ

Current/Depth Worst Count Waiters 0/

16

1

19

108/ 1024

546

3413

3 COMOQ

0/

128

0

4 DEMOQ

0/

64

40

0 COMODRV 420 DEMOSEM0 DEMO1

Queue Semaphore Condition Codes: Empty Full Not Empty Not Full

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC KERNEL OBJECTS              

TASKS for application functions MEMORY PARTITIONS for RAM memory management SEMAPHORES for event synchronization TIMERS for timed operations RESOURCES for exclusive access QUEUES for chronological data passing MAILBOXES and MESSAGES for message transmission

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC MAILBOXES

       

Mailboxes are defined globally Any task can send mail to any mailbox A task may use none, one or many mailboxes Good design usually dictates one consumer

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC MAILBOXES

First Waiters Semaphore

Optional used for a multiple event wait

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

USING SEMAPHORES TO SERVICE MULTIPLE OBJECTS SEMA cause; SEMA semalist[] = { MBOXSEMA1, MBOXSEMA2, MBOXSEMA3, 0 } for (;;) { cause = KS_waitm(semalist); switch(cause) { case MBOXSEMA1: ...; break; case MBOXSEMA2: ...; break; case MBOXSEMA3: ...; break; } }

Task 1

Mailbox 1 First Waiters MBOXSEMA1

Semaphore Mailbox 2 First Waiters

MBOXSEMA2

Semaphore Mailbox 3 First Waiters

MBOXSEMA3 Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Semaphore

RTXC MESSAGES

  Data is sent to a receiver via a mailbox   Messages are inserted according to priority or FIFO if they have the same priority

  Messages are generally processed in the order of their priorities but a task can receive from a specified task if desired

  No data is moved, only pointers   Body of message is defined by user   Message body can contain a response message from receiver

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC MESSAGES

Next Priority Semaphore Sender

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC MESSAGES Type A

Type B

Message Envelope

Message Envelope

RAM

Actual Data

Pointer

Actual Data

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RAM or ROM

RTXC MESSAGES

First Message

Mailbox

Second Message

First Waiters Semaphore

Message Envelope

Message Envelope

Priority=1

Priority=2

Actual Data

Actual Data

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC MESSAGES

Mailbox

First Waiters Semaphore

TCB X

Next TCB Info

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

MESSAGE PASSING

Sender Task

Mailbox KS_sendw (&MSG) KS_receivew

Message Envelope

MSGSEMA

Data KS_ack

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Receiver Task

RTXC MAILBOXES AND MESSAGES

  KS_receive(mailbox,task)   Receive next message from any sender (or from a specific sender defined by

task) in mailbox and return message address, if mailbox is empty return NULL

  KS_receivew(mailbox,task)   Same as KS_receive() but, if mailbox empty, wait until a message is

sent

  KS_receivet(mailbox,task,ticks)   Same as KS_receivew() but period of waiting is limited by duration ticks

  KS_ack(message)   Acknowledge receipt and processing of message

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC MAILBOXES AND MESSAGES

  KS_send(mailbox,message,priority,semaphore)   Send message asynchronously at specified priority to mailbox and

associate semaphore with acknowledgement signal

  KS_sendw(mailbox,message,priority,semaphore)   Send message synchronously, same as KS_send() but wait on semaphore

for acknowledgement

  KS_sendt(mailbox,message,priority,semaphore,ticks)   Same as KS_sendw() but waiting period is limited by duration ticks

  KS_defmboxsema(mailbox,semaphore)   Associate semaphore with the Not_Empty condition of mailbox

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXCbug MAILBOX SNAPSHOT ** Mailbox Snapshot ** #

Name

Current Count Waiters

1 FSRVMBOX

0

2 PRNMBOX

0

3 DEMOMBOX

0

31472 FILESRVR 3720 PRNDRV 450

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC SPECIAL KERNEL SERVICES

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC SPECIAL DIRECTIVES   KS_deftime(systime)   Define the current date and time in elapsed seconds from base

systime (January 1, 1970)

  KS_inqtime(void)   Get the current date and time expressed as elapsed seconds from

base system time (January 1, 1970)

  KS_nop(void)   Test service, no operation

  KS_user(function,argument_list)   User defined function is called by the standard RTXC KS protocol

and argument_list passed to it

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TRAINING COURSE

  Exercise #7 •  Passing information between tasks using Queues

  Exercise #8 •  Use Mailboxes and duplicate the functionality of exercise #7

  Exercise #9 •  Create an application that will wait on multiple events •  Use RTXCbug to view the current state of the application

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC TRAINING UNIT 6 Interrupt Handling

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

INTERRUPT HANDLING ROUTINES

IRQ Prologue (saves context)

Device Handling

Epilogue (restores context)

Return from interrupt

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC INTERRUPT HANDLING

IRQ RTXC Prologue (saves context) provided in assembly code Interrupt Service Routine

Use C calling convention Device Handler KS_ISRexit();

RTXC Epilogue (restores context) provided in assembly code Return from interrupt

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Kernel

RTXC INTERRUPT HANDLING

Interrupt Vector Table

Interrupt Service Routine ISRMACRO

(possible context switch)

Interrupted

Code

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Prologue

Device Handler

Epilogue

RTXC INTERRUPT HANDLING

  RTXC switches stacks from the task stack to the system stack, thus reducing the size of task stacks

  Saves interrupted context   Interrupts are disabled while setting up contexts and processing interrupt nesting

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC INTERRUPT HANDLING

  Written as a C function •  Argument is pointer to the stack frame of the interrupted process

  Processes the interrupt   Can be interrupted by higher level interrupts   Only those kernel services denoted by KS_ISRxxx are allowed in the Device Handler

  Device Handler returns a frame pointer to the highest priority task so that the epilogue can restore that task’s context

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC INTERRUPT HANDLING

  KS_ISRsignal(semaphore)   Signal the given semaphore from an interrupt service routine

  KS_ISRsignalm(semaphore_list)   Signal all semaphores in the semaphore_list from the interrupt service routine

  KS_ISRalloc(map)   Allocate, from an interrupt service routine, a block of memory from map and

return its address, returns NULL if map is empty

  KS_ISRexit(frame,semaphore)   Exit current interrupt service routine and optionally signal the given

semaphore

  KS_ISRtick(void)   Perform RTXC required processing for a clock tick interrupt

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

ISRS.S

Entry Point from vector table

; Clock interrupt service routine _isvcclk: ISRMACRO ENDC

_clkc, CLKILV CLK

Entry point for C handler

Interrupt Level

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

CLKDRV.C

FRAME *clkc (FRAME *frame) { Entry point for KS_ISRtick(); C handler return(KS_ISRexit(frame, (SEMA)0)); }

No semaphore to signal

/* clock driver start hook */ void clkstart(void) { setvect(CLKINT,isvcclk); Set the /* set interrupt level if needed */ interrupt vector }

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

UART C HANDLER FRAME *comc(FRAME *frame) { unsigned char status; status = inp(UART_INT_ID_REG); if (status == RX_DATA_READY) { ichar = inp(UART_RBR); status = inp(UART_INT_ID_REG); if (status == TX_BUFF_EMPTY) KS_ISRsignal(OSEM); outp(PIC_EOI_ADDR, EOI); return(KS_ISRexit(frame, ISEM)); } else {

/* /* /* /*

read hw status */ RX is higher priority w/in USART */ read char, clear USART interrupt */ re-read hw status */

/* signal char output semaphore */ /* clear PIC interrupt */

/* signal char input semaphore */

* A Transmit IRQ */ if (status == TX_BUFF_EMPTY) { status = inp(UART_INT_ID_REG); /* re-read hw status */ if (status == RX_DATA_READY) KS_ISRsignal(ISEM); /* signal char input semaphore */ outp(PIC_EOI_ADDR, EOI); /* clear PIC interrupt */ return(KS_ISRexit(frame, OSEM));/* exit signalling char output sema */ } } outp(PIC_EOI_ADDR, EOI); /* clear interrupt */ return(KS_ISRexit(frame, (SEMA)0));

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

/

SIMPLE DRIVER EXAMPLE SER IN

SER OUT

UART

IRQ

READ

Output ISR

KS_ISRSignal

IRQ

Input ISR

WRITE

KS_ISRSignal

New Character INCHAR

OUTSEMA KS_wait

Character

Output Driver

OUTQUEUE

INSEMA

Input Driver

KS_dequeuew

KS_enqueue

KS_enqueuew

Application Task

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

KS_dequeuew

KS_wait INQUEUE

RTXC INTERRUPT HANDLING

         

The Interrupt Handler is outside the Kernel No Prologue – (can save a short context for increased performance) Can save stack switching logic if interrupts are disabled Service the IRQ (Restore short context) then decide what to do •  Could just return from interrupt (fastest) •  Or, if ISR runs at Kernel Ceiling Level, enter the regular RTXC ISR form starting with a prologue (use this to inform a kernel entity that an action needs to be taken)

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

RTXC INTERRUPT HANDLING

Interrupt

Interrupt Service Routine

Vector Table

(Save Short Context) Service IRQ Process Data Ready to Inform the Kernel? No (Restore Short Context) Return

(possible context switch)

Interrupted

Yes (Restore Short Context) Enter RTXC prologue

RTXC ISR

Code * Kernel Ceiling Level Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

™ RTXC Real-Time Executive in C

Thank you!

Copyright © 2008, Quadros Systems, Inc., All Rights Reserved

Life Enjoy

" Life is not a problem to be solved but a reality to be experienced! "

Get in touch

Social

© Copyright 2013 - 2019 USDOC.SITE - All rights reserved.