Renesas Network Card M3T MR100 User Guide

REJ10J1523-0100  
M3T-MR100/4 V.1.00  
User’s Manual  
Real-time OS for R32C/100 Series  
Rev.1.00  
September 16, 2007  
Download from Www.Somanuals.com. All Manuals Search And Download.  
Preface  
The M3T-MR100/4(abbreviated as MR100) is a real-time operating system1 for the R32C/100 series microcomputers. The  
MR100 conforms to the μITRON Specification.2  
This manual describes the procedures and precautions to observe when you use the MR100 for programming purposes. For  
the detailed information on individual service call procedures, refer to the MR100 Reference Manual.  
Requirements for MR100 Use  
When creating programs based on the MR100, it is necessary to purchase the following product of Renesas.  
C-compiler package for R32C/100 series microcomputers (abbreviated as NC100)  
Document List  
The following sets of documents are supplied with the MR100.  
Release Note  
Presents a software overview and describes the corrections to the Users Manual and Reference Manual.  
Users Manual (PDF file)  
Describes the procedures and precautions to observe when using the MR100 for programming purposes.  
Right of Software Use  
The right of software use conforms to the software license agreement. You can use the MR100 for your product develop-  
ment purposes only, and are not allowed to use it for the other purposes. You should also note that this manual does not  
guarantee or permit the exercise of the right of software use.  
1
Hereinafter abbreviated "real-time OS"  
μITRON4.0 Specification is the open real-time kernel specification upon which the TRON association decided  
2
The specification document of μITRON4.0 specification can come to hand from a TRON association homepage  
(http://www.assoc.tron.org/).  
The copyright of μITRON4.0 specification belongs to the TRON association.  
i
Download from Www.Somanuals.com. All Manuals Search And Download.  
         
Download from Www.Somanuals.com. All Manuals Search And Download.  
Contents  
Requirements for MR100 Use......................................................................................................................................i  
Document List...............................................................................................................................................................i  
Right of Software Use...................................................................................................................................................i  
Contents.............................................................................................................................................................iii  
List of Figures .................................................................................................................................................viii  
List of Tables ..................................................................................................................................................... xi  
1. User’s Manual Organization...................................................................................................................- 1 -  
2. General Information ...............................................................................................................................- 3 -  
2.1  
2.2  
2.3  
Objective of MR100 Development...................................................................................................... - 3 -  
Relationship between TRON Specification and MR100................................................................... - 5 -  
MR100 Features ................................................................................................................................. - 6 -  
3. Introduction to Kernel ............................................................................................................................- 7 -  
3.1 Concept of Real-time OS .................................................................................................................... - 7 -  
3.1.1  
3.1.2  
Why Real-time OS is Necessary.................................................................................................- 7 -  
Operating Principles of Kernel................................................................................................. - 10 -  
Service Call ....................................................................................................................................... - 14 -  
3.2  
3.2.1  
3.2.2  
Service Call Processing ............................................................................................................. - 15 -  
Processing Procedures for Service Calls from Handlers......................................................... - 16 -  
Service Calls from a Handler That Caused an Interrupt during Task Execution............................................. - 17 -  
Service Calls from a Handler That Caused an Interrupt during Service Call Processing................................ - 18 -  
Service Calls from a Handler That Caused an Interrupt during Handler Execution....................................... - 19 -  
Object................................................................................................................................................. - 20 -  
3.3  
3.4  
3.3.1  
The specification method of the object in a service call .......................................................... - 20 -  
Task ................................................................................................................................................... - 21 -  
3.4.1  
3.4.2  
3.4.3  
3.4.4  
Task Status ................................................................................................................................ - 21 -  
Task Priority and Ready Queue ...............................................................................................- 25 -  
Task Priority and Waiting Queue.............................................................................................- 26 -  
Task Control Block(TCB) .......................................................................................................... - 27 -  
3.5  
3.5.1  
3.5.2  
3.5.3  
3.5.4  
System States.................................................................................................................................... - 28 -  
Task Context and Non-task Context........................................................................................- 28 -  
Dispatch Enabled/Disabled States........................................................................................... - 30 -  
CPU Locked/Unlocked States...................................................................................................- 30 -  
Dispatch Disabled and CPU Locked States.............................................................................- 30 -  
3.6  
3.6.1  
3.6.2  
3.6.3  
3.7  
3.7.1  
Regarding Interrupts........................................................................................................................ - 31 -  
Types of Interrupt Handlers..................................................................................................... - 31 -  
The Use of Non-maskable Interrupt ........................................................................................ - 31 -  
Controlling Interrupts............................................................................................................... - 32 -  
Stacks ................................................................................................................................................ - 34 -  
System Stack and User Stack...................................................................................................- 34 -  
4. Kernel ....................................................................................................................................................- 35 -  
4.1.1  
4.1.2  
4.1.3  
4.1.4  
4.1.5  
4.1.6  
4.1.7  
Module Structure....................................................................................................................... - 35 -  
Module Overview....................................................................................................................... - 36 -  
Task Management Function..................................................................................................... - 37 -  
Synchronization functions attached to task ............................................................................- 39 -  
Synchronization and Communication Function (Semaphore)................................................ - 43 -  
Synchronization and Communication Function (Eventflag) .................................................. - 45 -  
Synchronization and Communication Function (Data Queue) .............................................. - 47 -  
iii  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
4.1.8  
4.1.9  
Synchronization and Communication Function (Mailbox)..................................................... - 48 -  
Memory pool Management Function(Fixed-size Memory pool) ............................................. - 50 -  
4.1.10 Variable-size Memory Pool Management Function ................................................................ - 51 -  
4.1.11 Time Management Function..................................................................................................... - 54 -  
4.1.12 Cyclic Handler Function ........................................................................................................... - 56 -  
4.1.13 Alarm Handler Function........................................................................................................... - 57 -  
4.1.14 System Status Management Function..................................................................................... - 58 -  
4.1.15 Interrupt Management Function ............................................................................................. - 59 -  
4.1.16 System Configuration Management Function ........................................................................ - 60 -  
4.1.17 Extended Function (Short Data Queue) .................................................................................. - 60 -  
4.1.18 Extended Function (Reset Function) ....................................................................................... - 61 -  
5. Service call reffernce.............................................................................................................................- 63 -  
5.1  
act_tsk  
Task Management Function ............................................................................................................ - 63 -  
Activate task .......................................................................................................................... - 65 -  
iact_tsk Activate task (handler only).................................................................................................. - 65 -  
can_act Cancel task activation request.............................................................................................. - 67 -  
ican_act Cancel task activation request (handler only)..................................................................... - 67 -  
sta_tsk  
Activate task with a start code .............................................................................................- 69 -  
ista_tsk Activate task with a start code (handler only)..................................................................... - 69 -  
ext_tsk  
ter_tsk  
chg_pri  
Terminate invoking task .......................................................................................................- 71 -  
Terminate task....................................................................................................................... - 73 -  
Change task priority.............................................................................................................. - 75 -  
ichg_pri Change task priority(handler only) ...................................................................................... - 75 -  
get_pri Reference task priority.......................................................................................................... - 77 -  
iget_pri Reference task priority(handler only) .................................................................................. - 77 -  
ref_tsk Reference task status ............................................................................................................ - 79 -  
iref_tsk Reference task status (handler only).................................................................................... - 79 -  
ref_tst  
iref_tst  
Reference task status (simplified version) ........................................................................... - 82 -  
Reference task status (simplified version, handler only).................................................... - 82 -  
5.2  
slp_tsk  
Task Dependent Synchronization Function....................................................................................- 84 -  
Put task to sleep..................................................................................................................... - 85 -  
tslp_tsk Put task to sleep (with timeout)............................................................................................ - 85 -  
wup_tsk Wakeup task........................................................................................................................... - 88 -  
iwup_tsk  
can_wup  
ican_wup  
rel_wai  
Wakeup task (handler only)............................................................................................... - 88 -  
Cancel wakeup request......................................................................................................- 90 -  
Cancel wakeup request (handler only) ............................................................................. - 90 -  
Release task from waiting.....................................................................................................- 92 -  
irel_wai Release task from waiting (handler only) ............................................................................ - 92 -  
sus_tsk Suspend task.......................................................................................................................... - 94 -  
isus_tsk Suspend task (handler only) .................................................................................................- 94 -  
rsm_tsk Resume suspended task ........................................................................................................- 96 -  
irsm_tsk  
frsm_tsk  
ifrsm_tsk  
dly_tsk  
Resume suspended task(handler only)............................................................................. - 96 -  
Forcibly resume suspended task....................................................................................... - 96 -  
Forcibly resume suspended task(handler only) ............................................................... - 96 -  
Delay task............................................................................................................................... - 98 -  
5.3  
Synchronization & Communication Function (Semaphore) ........................................................ - 100 -  
sig_sem Release semaphore resource ............................................................................................... - 101 -  
isig_sem  
wai_sem  
Release semaphore resource (handler only)................................................................... - 101 -  
Acquire semaphore resource............................................................................................- 103 -  
pol_sem Acquire semaphore resource (polling) ................................................................................ - 103 -  
ipol_sem  
twai_sem  
Acquire semaphore resource (polling, handler only) .....................................................- 103 -  
Acquire semaphore resource(with timeout).................................................................... - 103 -  
ref_sem Reference semaphore status ...............................................................................................- 106 -  
iref_sem Reference semaphore status (handler only).......................................................................- 106 -  
5.4  
set_flg  
iset_flg  
Synchronization & Communication Function (Eventflag)........................................................... - 108 -  
Set eventflag......................................................................................................................... - 109 -  
Set eventflag (handler only)................................................................................................- 109 -  
clr_flg Clear eventflag..........................................................................................................................- 111 -  
iclr_flg  
iv  
Download from Www.Somanuals.com. All Manuals Search And Download.  
wai_flg  
pol_flg  
ipol_flg  
Wait for eventflag................................................................................................................. - 113 -  
Wait for eventflag(polling)................................................................................................... - 113 -  
Wait for eventflag(polling, handler only)............................................................................ - 113 -  
twai_flg Wait for eventflag(with timeout)......................................................................................... - 113 -  
ref_flg  
iref_flg  
Reference eventflag status .................................................................................................. - 116 -  
Reference eventflag status (handler only).......................................................................... - 116 -  
5.5  
snd_dtq Send to data queue .............................................................................................................. - 119 -  
psnd_dtq Send to data queue (polling)............................................................................................ - 119 -  
ipsnd_dtq Send to data queue (polling, handler only)..................................................................... - 119 -  
Synchronization & Communication Function (Data Queue)....................................................... - 118 -  
tsnd_dtq  
fsnd_dtq  
ifsnd_dtq  
rcv_dtq  
prcv_dtq  
iprcv_dtq  
Send to data queue (with timeout).................................................................................. - 119 -  
Forced send to data queue............................................................................................... - 119 -  
Forced send to data queue (handler only) ...................................................................... - 119 -  
Receive from data queue .....................................................................................................- 122 -  
Receive from data queue (polling)...................................................................................- 122 -  
Receive from data queue (polling, handler only)............................................................- 122 -  
trcv_dtq Receive from data queue (with timeout) ............................................................................ - 122 -  
ref_dtq Reference data queue status...............................................................................................- 125 -  
iref_dtq Reference data queue status (handler only) ......................................................................- 125 -  
5.6 Synchronization & Communication Function (Mailbox).............................................................. - 127 -  
snd_mbx  
isnd_mbx  
Send to mailbox (handler only) .......................................................................................- 128 -  
rcv_mbx Receive from mailbox...........................................................................................................- 130 -  
prcv_mbx Receive from mailbox (polling) ........................................................................................- 130 -  
iprcv_mbx Receive from mailbox (polling, handler only)................................................................. - 130 -  
trcv_mbx Receive from mailbox (with timeout)..............................................................................- 130 -  
ref_mbx Reference mailbox status ....................................................................................................- 133 -  
iref_mbx Reference mailbox status (handler only) ........................................................................ - 133 -  
5.7 Memory Pool Management Function (Fixed-size Memory Pool)................................................. - 135 -  
get_mpf Aquire fixed-size memory block..........................................................................................- 136 -  
pget_mpf Aquire fixed-size memory block (polling)........................................................................- 136 -  
ipget_mpf Aquire fixed-size memory block (polling, handler only) ................................................ - 136 -  
tget_mpf Aquire fixed-size memory block (with timeout) .............................................................- 136 -  
rel_mpf Release fixed-size memory block.........................................................................................- 139 -  
irel_mpf Release fixed-size memory block (handler only)................................................................- 139 -  
ref_mpf Reference fixed-size memory pool status ...........................................................................- 141 -  
iref_mpf Reference fixed-size memory pool status (handler only)................................................... - 141 -  
5.8  
Memory Pool Management Function (Variable-size Memory Pool) ............................................ - 143 -  
pget_mpl  
Aquire variable-size memory block (polling)..................................................................- 144 -  
rel_mpl Release variable-size memory block................................................................................... - 146 -  
ref_mpl Reference variable-size memory pool status......................................................................- 148 -  
iref_mpl Reference variable-size memory pool status (handler only) ............................................. - 148 -  
5.9  
Time Management Function.......................................................................................................... - 150 -  
set_tim  
Set system time.................................................................................................................... - 151 -  
iset_tim Set system time (handler only) ...........................................................................................- 151 -  
get_tim Reference system time.........................................................................................................- 153 -  
iget_tim Reference system time (handler only) ................................................................................ - 153 -  
isig_tim Supply a time tick................................................................................................................ - 155 -  
5.10 Time Management Function (Cyclic Handler).............................................................................. - 156 -  
sta_cyc  
ista_cyc Start cyclic handler operation (handler only) .................................................................... - 157 -  
stp_cyc Stops cyclic handler operation ............................................................................................- 159 -  
istp_cyc Stops cyclic handler operation (handler only)....................................................................- 159 -  
ref_cyc Reference cyclic handler status...........................................................................................- 160 -  
Start cyclic handler operation.............................................................................................- 157 -  
iref_cyc Reference cyclic handler status (handler only)..................................................................- 160 -  
5.11 Time Management Function (Alarm Handler)............................................................................. - 162 -  
sta_alm Start alarm handler operation............................................................................................- 163 -  
ista_alm  
Start alarm handler operation (handler only)................................................................- 163 -  
stp_alm Stop alarm handler operation.............................................................................................- 165 -  
istp_alm  
Stop alarm handler operation (handler only)................................................................. - 165 -  
v
Download from Www.Somanuals.com. All Manuals Search And Download.  
ref_alm Reference alarm handler status..........................................................................................- 166 -  
iref_alm Reference alarm handler status (handler only).................................................................- 166 -  
5.12 System Status Management Function..........................................................................................- 168 -  
rot_rdq  
irot_rdq Rotate task precedence (handler only) ............................................................................... - 169 -  
get_tid Reference task ID in the RUNNING state.........................................................................- 171 -  
iget_tid Reference task ID in the RUNNING state (handler only)................................................- 171 -  
loc_cpu Lock the CPU ....................................................................................................................... - 172 -  
Rotate task precedence........................................................................................................- 169 -  
iloc_cpu Lock the CPU (handler only)...............................................................................................- 172 -  
unl_cpu Unlock the CPU ................................................................................................................... - 174 -  
iunl_cpu  
dis_dsp  
Unlock the CPU (handler only).......................................................................................- 174 -  
Disable dispatching ............................................................................................................. - 175 -  
ena_dsp Enables dispatching............................................................................................................. - 177 -  
sns_ctx  
sns_loc  
Reference context................................................................................................................. - 178 -  
sns_dsp Reference dispatching state ................................................................................................- 180 -  
sns_dpn Reference dispatching pending state..................................................................................- 181 -  
5.13 Interrupt Management Function................................................................................................... - 182 -  
ret_int  
5.14 System Configuration Management Function..............................................................................- 184 -  
ref_ver Reference version information............................................................................................- 185 -  
Returns from an interrupt handler (when written in assembly language).................. - 183 -  
iref_ver Reference version information (handler only) ...................................................................- 185 -  
5.15 Extended Function (Short Data Queue)........................................................................................- 187 -  
vsnd_dtq  
Send to Short data queue ................................................................................................- 188 -  
vpsnd_dtq Send to Short data queue (polling)..................................................................................- 188 -  
vipsnd_dtq Send to Short data queue (polling, handler only)..........................................................- 188 -  
vtsnd_dtq Send to Short data queue (with timeout) .......................................................................- 188 -  
vfsnd_dtq Forced send to Short data queue.....................................................................................- 188 -  
vifsnd_dtq Forced send to Short data queue (handler only)............................................................ - 188 -  
vrcv_dtq  
Receive from Short data queue .......................................................................................- 191 -  
vprcv_dtq Receive from Short data queue (polling).........................................................................- 191 -  
viprcv_dtq Receive from Short data queue (polling,handler only) .................................................. - 191 -  
vtrcv_dtq  
vref_dtq Reference Short data queue status.....................................................................................- 194 -  
viref_dtq Reference Short data queue status (handler only)......................................................... - 194 -  
Receive from Short data queue (with timeout) ..............................................................- 191 -  
5.16 Extended Function (Reset Function).............................................................................................- 196 -  
vrst_dtq Clear data queue area .........................................................................................................- 197 -  
vrst_vdtq  
vrst_mbx  
vrst_mpf  
vrst_mpl  
Clear Short data queue area ...........................................................................................- 199 -  
Clear mailbox area...........................................................................................................- 201 -  
Clear fixed-size memory pool area..................................................................................- 203 -  
Clear variable-size memory pool area............................................................................. - 204 -  
6. Applications Development Procedure Overview................................................................................- 205 -  
6.1  
6.2  
Overview.......................................................................................................................................... - 205 -  
Development Procedure Example.................................................................................................. - 207 -  
6.2.1  
6.2.2  
6.2.3  
6.2.4  
6.2.5  
Applications Program Coding.................................................................................................- 207 -  
Configuration File Preparation ..............................................................................................- 208 -  
Configurator Execution........................................................................................................... - 209 -  
System generation................................................................................................................... - 209 -  
Writing ROM............................................................................................................................ - 210 -  
7. Detailed Applications.......................................................................................................................... - 211 -  
7.1 Program Coding Procedure in C Language................................................................................... - 211 -  
7.1.1  
7.1.2  
Task Description Procedure.................................................................................................... - 211 -  
Writing a Kernel (OS Dependent) Interrupt Handler .......................................................... - 212 -  
Writing Non-kernel Interrupt Handler..................................................................................- 213 -  
Writing Cyclic Handler/Alarm Handler.................................................................................- 213 -  
7.1.3  
7.1.4  
7.2  
7.2.1  
7.2.2  
Program Coding Procedure in Assembly Language .....................................................................- 215 -  
Writing Task ............................................................................................................................ - 215 -  
Writing Kernel Interrupt Handler .........................................................................................- 216 -  
vi  
Download from Www.Somanuals.com. All Manuals Search And Download.  
7.2.3  
7.2.4  
Writing Non-kernel Interrupt Handler..................................................................................- 216 -  
Writing Cyclic Handler/Alarm Handler.................................................................................- 216 -  
7.3  
7.3.1  
Modifying MR100 Startup Program..............................................................................................- 218 -  
C Language Startup Program (crt0mr.a30)...........................................................................- 219 -  
7.4  
Memory Allocation.......................................................................................................................... - 224 -  
7.4.1  
8. Using Configurator ................................................................................................................................. 227  
8.1 Configuration File Creation Procedure..............................................................................................227  
8.1.1  
Section used by the MR100.....................................................................................................- 225 -  
Operator ...................................................................................................................................................................228  
Direction of computation .........................................................................................................................................228  
8.1.2  
[( System Definition Procedure )]............................................................................................................................229  
[( System Clock Definition Procedure )]..................................................................................................................231  
[( Definition respective maximum numbers of items )]..........................................................................................232  
[( Task definition )]...................................................................................................................................................234  
[( Eventflag definition )] ..........................................................................................................................................236  
[( Semaphore definition )]........................................................................................................................................237  
[(Data queue definition )] ........................................................................................................................................238  
[( Short data queue definition )]..............................................................................................................................239  
[( Mailbox definition )] .............................................................................................................................................240  
[( Fixed-size memory pool definition )]....................................................................................................................241  
[( Variable-size memory pool definition )]...............................................................................................................242  
[( Cyclic handler definition )]...................................................................................................................................244  
[( Alarm handler definition )] ..................................................................................................................................245  
[( Interrupt vector definition )]................................................................................................................................246  
[( Fixed interrupt vector definition )]......................................................................................................................247  
8.1.3  
8.2  
8.2.1  
Configuration File Example.........................................................................................................250  
Configurator Execution Procedures ...................................................................................................254  
Configurator Overview.................................................................................................................254  
Executing the configurator requires the following input files:..............................................................................254  
When the configurator is executed, the files listed below are output. ..................................................................254  
8.2.2  
8.2.3  
8.2.4  
Configurator Start Procedure......................................................................................................256  
8.2.5  
Error messages ........................................................................................................................................................257  
Warning messages ...................................................................................................................................................259  
9. Sample Program Description.................................................................................................................. 260  
9.1  
9.2  
9.3  
Overview of Sample Program .............................................................................................................260  
Program Source Listing.......................................................................................................................261  
Configuration File................................................................................................................................262  
10.  
Stack Size Calculation Method ........................................................................................................... 264  
10.1 Stack Size Calculation Method...........................................................................................................264  
10.1.1 User Stack Calculation Method...................................................................................................266  
10.2 Necessary Stack Size...........................................................................................................................272  
11.  
Note..................................................................................................................................................- 275 -  
11.1 The Use of INT Instruction............................................................................................................ - 275 -  
11.2 The Use of registers of bank .......................................................................................................... - 275 -  
11.3 Regarding Delay Dispatching........................................................................................................ - 276 -  
11.4 Regarding Initially Activated Task................................................................................................ - 277 -  
12.  
Appendix..........................................................................................................................................- 279 -  
12.1 Data Type ........................................................................................................................................ - 279 -  
12.2 Common Constants and Packet Format of Structure ..................................................................- 280 -  
12.3 Assembly Language Interface........................................................................................................ - 282 -  
vii  
Download from Www.Somanuals.com. All Manuals Search And Download.  
List of Figures  
Figure 3.1 Relationship between Program Size and Development Period.....................................- 7 -  
Figure 3.2 Microcomputer-based System Example(Audio Equipment) .........................................- 8 -  
Figure 3.3 Example System Configuration with Real-time OS(Audio Equipment) ......................- 9 -  
Figure 3.5 Task Execution Interruption and Resumption ............................................................- 11 -  
Figure 3.6 Task Switching...............................................................................................................- 11 -  
Figure 3.7 Task Register Area.........................................................................................................- 12 -  
Figure 3.8 Actual Register and Stack Area Management .............................................................- 13 -  
Figure 3.9 Service call......................................................................................................................- 14 -  
Figure 3.11 Processing Procedure for a Service Call a Handler that caused an interrupt during Task  
Execution - 17 -  
Figure 3.12 Processing Procedure for a Service Call from a Handler that caused an interrupt during  
Service Call Processing.............................................................................................................- 18 -  
Figure 3.13 Processing Procedure for a service call from a Multiplex interrupt Handler..........- 19 -  
Figure 3.14 Task Identification.......................................................................................................- 20 -  
Figure 3.15 Task Status...................................................................................................................- 21 -  
Figure 3.18 Waiting queue of the TA_TPRI attribute ...................................................................- 26 -  
Figure 3.19 Waiting queue of the TA_TFIFO attribute.................................................................- 26 -  
Figure 3.20 Task control block ........................................................................................................- 27 -  
Figure 3.21 Cyclic Handler/Alarm Handler Activation .................................................................- 29 -  
Figure 3.22 Interrupt handler IPLs................................................................................................- 31 -  
Figure 3.23 Interrupt control in a Service Call that can be Issued from only a Task .................- 32 -  
Figure 3.24 Interrupt control in a Service Call that can be Issued from a Task-independent ...- 33 -  
Figure 4.1 MR100 Structure............................................................................................................- 35 -  
Figure 4.2 Task Resetting................................................................................................................- 37 -  
Figure 4.3 Alteration of task priority..............................................................................................- 38 -  
Figure 4.5 Wakeup Request Storage...............................................................................................- 39 -  
Figure 4.9 dly_tsk service call.........................................................................................................- 42 -  
Figure 4.11 Semaphore Counter .....................................................................................................- 43 -  
Figure 4.13 Task Execution Control by the Eventflag...................................................................- 46 -  
Figure 4.14 Data queue ...................................................................................................................- 47 -  
Figure 4.15 Mailbox .........................................................................................................................- 48 -  
Figure 4.16 Message queue .............................................................................................................- 49 -  
Figure 4.18 pget_mpl processing.....................................................................................................- 52 -  
Figure 4.19 rel_mpl processing .......................................................................................................- 53 -  
Figure 4.20 Timeout Processing......................................................................................................- 54 -  
Figure 4.21 Cyclic handler operation in cases where the activation phase is saved...................- 56 -  
Figure 4.22 Cyclic handler operation in cases where the activation phase is not saved.............- 56 -  
Figure 4.24 Ready Queue Management by rot_rdq Service Call..................................................- 58 -  
Figure 4.25 Interrupt process flow..................................................................................................- 59 -  
Figure 6.1 MR100 System Generation Detail Flowchart............................................................- 206 -  
Figure 6.2 Program Example ........................................................................................................- 208 -  
viii  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
Figure 6.4 Configurator Execution ...............................................................................................- 209 -  
Figure 6.5 System Generation.......................................................................................................- 210 -  
Figure 7.1 Example Infinite Loop Task Described in C Language.............................................- 211 -  
Figure 7.2 Example Task Terminating with ext_tsk() Described in C Language......................- 212 -  
Figure 7.4 Example of Non-kernel Interrupt Handler ................................................................- 213 -  
Figure 7.5 Example Cyclic Handler Written in C Language ......................................................- 214 -  
Figure 7.6 Example Infinite Loop Task Described in Assembly Language................................- 215 -  
Figure 7.7 Example Task Terminating with ext_tsk Described in Assembly Language...........- 215 -  
Figure 7.8 Example of kernel(OS-depend) interrupt handler.....................................................- 216 -  
Figure 7.9 Example of Non-kernel Interrupt Handler of Specific Level ....................................- 216 -  
Figure 7.10 Example Handler Written in Assembly Language ..................................................- 217 -  
Figure 7.11 C Language Startup Program (crt0mr.a30) .............................................................- 222 -  
Figure 8.1 The operation of the Configurator .................................................................................. 255  
ix  
Download from Www.Somanuals.com. All Manuals Search And Download.  
Download from Www.Somanuals.com. All Manuals Search And Download.  
List of Tables  
Table 3.2 Invocable Service Calls in a CPU Locked State.............................................................- 30 -  
Table 3.3 CPU Locked and Dispatch Disabled State Transitions Relating to dis_dsp and loc_cpu- 30 -  
Table 5.1 Specifications of the Task Management Function.........................................................- 63 -  
Table 5.2 List of Task Management Function Service Call...........................................................- 63 -  
Table 5.3 Specifications of the Task Dependent Synchronization Function ................................- 84 -  
Table 5.4 List of Task Dependent Synchronization Service Call ..................................................- 84 -  
Table 5.9 Specifications of the Data Queue Function..................................................................- 118 -  
Table 5.10 List of Dataqueue Function Service Call....................................................................- 118 -  
Table 5.13 Specifications of the Fixed-size memory pool Function.............................................- 135 -  
Table 5.14 List of Fixed-size memory pool Function Service Call ..............................................- 135 -  
Table 5.15 Specifications of the Variable-size memory Pool Function........................................- 143 -  
Table 5.16 List of Variable -size memory pool Function Service Call.........................................- 143 -  
Table 5.17 Specifications of the Time Management Function ....................................................- 150 -  
Table 5.18 List of Time Management Function Service Call ......................................................- 150 -  
Table 5.19 Specifications of the Cyclic Handler Function.........................................................- 156 -  
Table 5.20 List of Cyclic Handler Function Service Call.............................................................- 156 -  
Table 5.21 Specifications of the Alarm Handler Function...........................................................- 162 -  
Table 5.22 List of Alarm Handler Function Service Call.............................................................- 162 -  
Table 5.23 List of System Status Management Function Service Call ......................................- 168 -  
Table 5.24 List of Interrupt Management Function Service Call...............................................- 182 -  
Table 5.25 List of System Configuration Management Function Service Call..........................- 184 -  
Table 5.26 Specifications of the Short Data Queue Function......................................................- 187 -  
Table 5.27 List of Long Dataqueue Function Service Call ..........................................................- 187 -  
Table 8.1 Numerical Value Entry Examples ....................................................................................227  
Table 8.2 Operators............................................................................................................................ 228  
Table 8.3 List of vector number and vector address ........................................................................ 248  
Table 9.1 Functions in the Sample Program.................................................................................... 260  
Table 10.1 Stack Sizes Used by Service Calls Issued from Tasks (in bytes) .................................. 272  
Table 10.2 Stack Sizes Used by Service Calls Issued from Handlers (in bytes) ............................ 273  
Table 10.3 Stack Sizes Used by Service Calls Issued from Tasks and Handlers (in bytes) .......... 273  
xi  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
xii  
Download from Www.Somanuals.com. All Manuals Search And Download.  
1. User’s Manual Organization  
The MR100 User’s Manual consists of nine chapters and thee appendix.  
Outlines the objective of MR100 development and the function and position of the MR100.  
Explains about the ideas involved in MR100 operations and defines some relevant terms.  
Outlines the applications program development procedure for the MR100.  
Details MR100 service call API  
Details the applications program development procedure for the MR100.  
Presents useful information and precautions concerning applications program development with MR100.  
Describes the method for writing a configuration file and the method for using the configurator in detail.  
Describes the MR100 sample applications program which is included in the product in the form of a source file.  
Describes the calculation method of the task stack size and the system stack size.  
Presents useful information and precautions concerning applications program development with MR100.  
Data type and assembly language interface.  
- 1 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
Download from Www.Somanuals.com. All Manuals Search And Download.  
2. General Information  
2.1 Objective of MR100 Development  
In line with recent rapid technological advances in microcomputers, the functions of microcomputer-based products have  
become complicated. In addition, the microcomputer program size has increased. Further, as product development competi-  
tion has been intensified, manufacturers are compelled to develop their microcomputer-based products within a short period  
of time.  
In other words, engineers engaged in microcomputer software development are now required to develop larger-size pro-  
grams within a shorter period of time. To meet such stringent requirements, it is necessary to take the following considera-  
tions into account.  
1. To enhance software recyclability to decrease the volume of software to be developed.  
One way to provide for software recyclability is to divide software into a number of functional modules wherever  
possible. This may be accomplished by accumulating a number of general-purpose subroutines and other program  
segments and using them for program development. In this method, however, it is difficult to reuse programs that  
are dependent on time or timing. In reality, the greater part of application programs are dependent on time or tim-  
ing. Therefore, the above recycling method is applicable to only a limited number of programs.  
2. To promote team programming so that a number of engineers are engaged in the development  
of one software package  
There are various problems with team programming. One major problem is that debugging can be initiated only  
when all the software program segments created individually by team members are ready for debugging. It is es-  
sential that communication be properly maintained among the team members.  
3. To enhance software production efficiency so as to increase the volume of possible software  
development per engineer.  
One way to achieve this target would be to educate engineers to raise their level of skill. Another way would be to  
make use of a structured descriptive assembler, C-compiler, or the like with a view toward facilitating program-  
ming. It is also possible to enhance debugging efficiency by promoting modular software development.  
However, the conventional methods are not adequate for the purpose of solving the problems. Under these circumstances, it  
is necessary to introduce a new system named real-time OS 3  
To answer the above-mentioned demand, Renesas has developed a real-time operating system, tradenamed MR100, for use  
with the R32C/100 series of 32-bit microcomputers .  
When the MR100 is introduced, the following advantages are offered.  
1. Software recycling is facilitated.  
When the real-time OS is introduced, timing signals are furnished via the real-time OS so that programs depend-  
ent on timing can be reused. Further, as programs are divided into modules called tasks, structured programming  
will be spontaneously provided.  
That is, recyclable programs are automatically prepared.  
2. Ease of team programming is provided.  
When the real-time OS is put to use, programs are divided into functional modules called tasks. Therefore, engi-  
neers can be allocated to individual tasks so that all steps from development to debugging can be conducted inde-  
pendently for each task.  
Further, the introduction of the real-time OS makes it easy to start debugging some already finished tasks even if  
the entire program is not completed yet. Since engineers can be allocated to individual tasks, work assignment is  
easy.  
3. Software independence is enhanced to provide ease of program debugging.  
As the use of the real-time OS makes it possible to divide programs into small independent modules called tasks,  
3
OS:Operating System  
- 3 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
the greater part of program debugging can be initiated simply by observing the small modules.  
4. Timer control is made easier.  
To perform processing at 10 ms intervals, the microcomputer timer function was formerly used to periodically in-  
itiate an interrupt. However, as the number of usable microcomputer timers was limited, timer insufficiency was  
compensated for by, for instance, using one timer for a number of different processing operations.  
When the real-time OS is introduced, however, it is possible to create programs for performing processing at fixed  
time intervals making use of the real-time OS time management function without paying special attention to the  
microcomputer timer function. At the same time, programming can also be done in such a manner as to let the  
programmer take that numerous timers are provided for the microcomputer.  
5. Software maintainability is enhanced  
When the real-time OS is put to use, the developed software consists of small program modules called tasks.  
Therefore, increased software maintainability is provided because developed software maintenance can be carried  
out simply by maintaining small tasks.  
6. Increased software reliability is assured.  
The introduction of the real-time OS makes it possible to carry out program evaluation and testing in the unit of a  
small module called task. This feature facilitates evaluation and testing and increases software reliability.  
7. The microcomputer performance can be optimized to improve the performance of microcom-  
puter-based products.  
With the real-time OS, it is possible to decrease the number of unnecessary microcomputer operations such as I/O  
waiting. It means that the optimum capabilities can be obtained from microcomputers, and this will lead to mi-  
crocomputer-based product performance improvement.  
- 4 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
2.2 Relationship between TRON Specification and MR100  
MR100 is the real-time operating system developed for use with the R32C/10 series of 32-bit microcomputers compliant  
with µITRON 4.0 Specification. µITRON 4.0 Specification stipulates standard profiles as an attempt to ensure software  
portability. Of these standard profiles, MR100 has implemented in it all service calls except for static APIs and task excep-  
tion APIs  
- 5 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
2.3 MR100 Features  
The MR100 offers the following features.  
1. Real-time operating system conforming to the μITORN Specification.  
The MR100 is designed in compliance with the μITRON Specification which incorporates a minimum of the  
ITRON Specification functions so that such functions can be incorporated into a one-chip microcomputer. As the  
μITRON Specification is a subset of the ITRON Specification, most of the knowledge obtained from published  
ITRON textbooks and ITRON seminars can be used as is.  
Further, the application programs developed using the real-time operating systems conforming to the ITRON  
Specification can be transferred to the MR100 with comparative ease.  
2. High-speed processing is achieved.  
MR100 enables high-speed processing by taking full advantage of the microcomputer architecture.  
3. Only necessary modules are automatically selected to constantly build up a system of the  
minimum size.  
MR100 is supplied in the object library format of the R32C/100 series.  
Therefore, the Linkage Editor functions are activated so that only necessary modules are automatically selected  
from numerous MR100 functional modules to generate a system.  
Thanks to this feature, a system of the minimum size is automatically generated at all times.  
4. With the C-compiler NC100, it is possible to develop application programs in C language.  
Application programs of MR100 can be developed in C language by using the C compiler NC100. Furthermore,  
the interface library necessary to call the MR100 functions from C language is included with the software pack-  
age.  
5. An upstream process tool named "Configurator" is provided to simplify development proce-  
dures  
A configurator is furnished so that various items including a ROM write form file can be created by giving simple  
definitions.  
Therefore, there is no particular need to care what libraries must be linked.  
In addition, a GUI version of the configurator is available. It helps the user to create a configuration file without  
the need to learn how to write it.  
- 6 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
3. Introduction to Kernel  
3.1 Concept of Real-time OS  
This section explains the basic concept of real-time OS.  
3.1.1  
Why Real-time OS is Necessary  
In line with the recent advances in semiconductor technologies, the single-chip microcomputer ROM capacity has in-  
creased. ROM capacity of 32K bytes.  
As such large ROM capacity microcomputers are introduced, their program development is not easily carried out by con-  
ventional methods. Figure 3.1 shows the relationship between the program size and required development time (program  
development difficulty).  
This figure is nothing more than a schematic diagram. However, it indicates that the development period increases expo-  
nentially with an increase in program size.  
For example, the development of four 8K byte programs is easier than the development of one 32K byte program.4  
Development Period  
4
16  
8
32  
Kbyte  
Program Size  
Figure 3.1 Relationship between Program Size and Development Period  
Under these circumstances, it is necessary to adopt a method by which large-size programs can be developed within a short  
period of time. One way to achieve this purpose is to use a large number of microcomputers having a small ROM capacity.  
Figure 3.2 presents an example in which a number of microcomputers are used to build up an audio equipment system.  
4
On condition that the ROM program burning step need not be performed.  
- 7 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
         
Key input  
microcomputer  
Remote control  
microcomputer  
LED illumination  
microcomputer  
Arbiter  
microcomputer  
Volume control  
microcomputer  
Monitor  
microcomputer  
Mechanical  
control  
microcomputer  
Figure 3.2 Microcomputer-based System Example(Audio Equipment)  
Using independent microcomputers for various functions as indicated in the above example offers the following advan-  
tages.  
1. Individual programs are small so that program development is easy.  
2. It is very easy to use previously developed software.  
3. Completely independent programs are provided for various functions so that program devel-  
opment can easily be conducted by a number of engineers.  
On the other hand, there are the following disadvantages.  
1. The number of parts used increases, thereby raising the product cost.  
2. Hardware design is complicated.  
3. Product physical size is enlarged.  
Therefore, if you employ the real-time OS in which a number of programs to be operated by a number of microcomputers  
are placed under software control of one microcomputer, making it appear that the programs run on separate microcomput-  
ers, you can obviate all the above disadvantages while retaining the above-mentioned advantages.  
Figure 3.3 shows an example system that will be obtained if the real-time OS is incorporated in the system indicated in  
- 8 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
Key input  
Task  
Remote control  
Task  
LED illumination  
Task  
real-time  
OS  
Volume control  
Task  
Mechanical  
control  
Monitor  
Task  
Task  
Figure 3.3 Example System Configuration with Real-time OS(Audio Equipment)  
In other words, the real-time OS is the software that makes a one-microcomputer system look like operating a number of  
microcomputers.  
In the real-time OS, the individual programs, which correspond to a number of microcomputers used in a conventional sys-  
tem, are called tasks.  
- 9 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
3.1.2  
Operating Principles of Kernel  
A kernel is the core program of real-time OS. The kernel is the software that makes a one-microcomputer system look like  
operating a number of microcomputers. You should be wondering how the kernel makes a one-microcomputer system  
function like a number of microcomputers.  
As shown in Figure 3.4 the kernel runs a number of tasks according to the time-division system. That is, it changes the task  
to execute at fixed time intervals so that a number of tasks appear to be executed simultaneously.  
Key input  
Task  
Remote control  
Task  
LED  
illumination  
Task  
Volume control  
Task  
Monitor  
Task  
Mechanical  
control  
Task  
Time  
Figure 3.4 Time-division Task Operation  
As indicated above, the kernel changes the task to execute at fixed time intervals. This task switching may also be referred  
to as dispatching. The factors causing task switching (dispatching) are as follows.  
Task switching occurs upon request from a task.  
Task switching occurs due to an external factor such as interrupt.  
When a certain task is to be executed again upon task switching, the system resumes its execution at the point of last inter-  
ruption (See Figure 3.5).  
- 10 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
Program execution  
interrupt  
Program execution  
resumed  
Key input  
Task  
During this interval, it  
appears that the key input  
microcomputer is haled.  
Remote control  
Task  
Figure 3.5 Task Execution Interruption and Resumption  
In the state shown in Figure 3.5, it appears to the programmer that the key input task or its microcomputer is halted while  
another task assumes execution control.  
Task execution restarts at the point of last interruption as the register contents prevailing at the time of the last interruption  
are recovered. In other words, task switching refers to the action performed to save the currently executed task register  
contents into the associated task management memory area and recover the register contents for the task to switch to.  
To establish the kernel, therefore, it is only necessary to manage the register for each task and change the register contents  
upon each task switching so that it looks as if a number of microcomputers exist (See Figure 3.6).  
R0  
R1  
Actual  
Register  
PC  
Kernel  
Key input  
Task  
Remote control  
Task  
R0  
R1  
R0  
R1  
PC  
PC  
Register  
Register  
Figure 3.6 Task Switching  
The example presented in Figure 3.7 indicates how the individual task registers are managed. In reality, it is necessary  
to provide not only a register but also a stack area for each task.  
5
It is figure where all the stack areas of the task were arranged in the same section.  
- 11 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
Memory map  
Register  
R0  
Remote control  
Task  
PC  
SP  
R0  
Key input  
Task  
Stack  
section  
PC  
SP  
R0  
LED illumination  
Task  
PC  
SP  
Real-time  
OS  
SFR  
SP  
Figure 3.7 Task Register Area  
- 12 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
Figure 3.8 shows the register and stack area of one task in detail. In the MR100, the register of each task is stored in a stack  
area as shown in Figure 3.8. This figure shows the state prevailing after register storage.  
SP  
PC  
Register not stored  
FLG  
FB  
SB  
A3  
A2  
A1  
Key input task  
stack  
A0  
R7R5  
R6R4  
R3R1  
R2R0  
Key input  
Task  
SP  
Register stored  
SFR  
Figure 3.8 Actual Register and Stack Area Management  
- 13 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
3.2 Service Call  
How does the programmer use the kernel functions in a program?  
First, it is necessary to call up kernel function from the program in some way or other. Calling a kernel function is referred  
to as a service call. Task activation and other processing operations can be initiated by such a service call (See Figure 3.9).  
Remote control  
Kernel  
Key input  
Task  
task  
Service call  
Task switching  
Figure 3.9 Service call  
This service call is realized by a function call when the application program is written in C language, as shown below.  
act_tsk(ID_main,3);  
Furthermore, if the application program is written in assembly language, it is realized by an assembler macro call, as shown  
below.  
act_tsk #ID_main  
- 14 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
3.2.1  
Service Call Processing  
When a service call is issued, processing takes place in the following sequence.6  
1. The current register contents are saved.  
2. The stack pointer is changed from the task type to the real-time OS (system) type.  
3. Processing is performed in compliance with the request made by the service call.  
4. The task to be executed next is selected.  
5. The stack pointer is changed to the task type.  
6. The register contents are recovered to resume task execution.  
The flowchart in Figure 3.10 shows the process between service call generation and task switching.  
Key input Task  
Register Save  
Service call issuance  
<=  
SP  
OS  
Processing  
Task Selection  
Task => SP  
LED illumination Task  
Register Restore  
Figure 3.10 Service Call Processing Flowchart  
6
A different sequence is followed if the issued service call does not evoke task switching.  
- 15 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
3.2.2  
Processing Procedures for Service Calls from Handlers  
When a service call is issued from a handler, task switching does not occur unlike in the case of a service call from a task.  
However, task switching occurs when a return from a handler 7 is made.  
The processing procedures for service calls from handlers are roughly classified into the following three types.  
1. A service call from a handler that caused an interrupt during task execution  
2. A service call from a handler that caused an interrupt during service call processing  
3. A service call from a handler that caused an interrupt (multiplex interrupt) during handler exe-  
cution  
7
The service call can't be issued from non-kernel handler. Therefore, The handler described here does not include the non-kernel interrupt  
handler.  
- 16 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
Service Calls from a Handler That Caused an Interrupt during Task Execution  
Scheduling (task switching) is initiated by the ret_int service call 8(See Figure 3.11).  
TaskA  
Interrupt handler  
OS  
Interrupt  
Save Registers  
iset_flg  
Service call processing  
Restore Registers  
ret_int  
Task selection  
SP <= User  
Scheduler  
TaskB  
Restore Registers  
Figure 3.11 Processing Procedure for a Service Call a Handler that caused an interrupt during Task  
Execution  
8
The ret_int service call is issued automatically when kernel interrupt handler is written in C language (when #pragma INTHANDLER speci-  
fied)  
- 17 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
Service Calls from a Handler That Caused an Interrupt during Service Call Processing  
Scheduling (task switching) is initiated after the system returns to the interrupted service call processing (See Figure 3.12).  
TaskA  
OS  
Interrupt handler  
wup_tsk  
Save Registers  
SP <= System  
Save  
Interrupt  
Service call processing  
iset_flg  
Restore Registers  
ret_int  
Task selection  
SP <= User  
Restore Registers  
TaskB  
Figure 3.12 Processing Procedure for a Service Call from a Handler that caused an interrupt during  
Service Call Processing  
- 18 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
Service Calls from a Handler That Caused an Interrupt during Handler Execution  
Let us think of a situation in which an interrupt occurs during handler execution (this handler is hereinafter referred to as  
handler A for explanation purposes). When task switching is called for as a handler (hereinafter referred to as handler B)  
that caused an interrupt during handler A execution issued a service call, task switching does not take place during the exe-  
cution of the service call (ret_int service call) returned from handler B, but is effected by the ret_int service call from han-  
dler A (See Figure 3.13).  
TaskA  
Interrupt handler A  
Interrupt handler A  
Interrupt  
Save Registers  
OS  
SP <= System  
Save Registers  
iset_flg  
Interrupt  
Service call processing  
Restore Register  
ret_int  
Restore Register  
ret_int  
Task selection  
SP <= User  
Restore Registers  
TaskB  
Figure 3.13 Processing Procedure for a service call from a Multiplex interrupt Handler  
- 19 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
3.3 Object  
The object operated by the service call of a semaphore, a task, etc. is called an "object." An object is identified by the ID  
number  
3.3.1  
The specification method of the object in a service call  
Each task is identified by the ID number internally in MR100.  
For example, the system says, "Start the task having the task ID number 1."  
However, if a task number is directly written in a program, the resultant program would be very low in readability. If, for  
instance, the following is entered in a program, the programmer is constantly required to know what the No. 2 task is.  
act_tsk(2);  
Further, if this program is viewed by another person, he/she does not understand at a glance what the No. 2 task is. To avoid  
such inconvenience, the MR100 provides means of specifying the task by name (function or symbol name).  
The program named "configurator cfg100 ,"which is supplied with the MR100, then automatically converts the task name  
to the task ID number. This task identification system is schematized in Figure 3.14.  
sta_tsk(Task name)  
Starting the task  
having the designated  
ID number  
ID number  
Name  
Configurator  
Program  
Real-time OS  
Figure 3.14 Task Identification  
act_tsk(ID_task);  
This example specifies that a task corresponding to "ID_task" be invoked.  
It should also be noted that task name-to-ID number conversion is effected at the time of program generation. Therefore,  
the processing speed does not decrease due to this conversion feature.  
- 20 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
3.4 Task  
This section describes how tasks are managed by MR100.  
3.4.1  
Task Status  
The real-time OS monitors the task status to determine whether or not to execute the tasks.  
Figure 3.15 shows the relationship between key input task execution control and task status. When there is a key input, the  
key input task must be executed. That is, the key input task is placed in the execution (RUNNING) state. While the system  
waits for key input, task execution is not needed. In that situation, the key input task in the WAITING state.  
Key input  
Key input  
processing  
Waiting for  
key input  
Task  
Key input  
processing  
RUNNIG state  
WAITING state  
RUNNING state  
Figure 3.15 Task Status  
The MR100 controls the following six different states including the RUNNING and WAITING states.  
1. RUNNING state  
2. READY state  
3. WAITING state  
4. SUSPENDED state  
5. WAITING-SUSPENDED state  
6. DORMANT state  
Every task is in one of the above six different states. Figure 3.16 shows task status transition.  
- 21 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
MPU execlusive right acquisition  
READY state  
RUNNING state  
MPU execlusive right relinquishment  
Entering the  
WAITING state  
l
WAITING state  
WAITING state  
Forced  
SUSPENDED state clear  
request from other task  
SUSPEND request  
from other task  
termination  
request  
from other  
task  
WAITING-SUSPENDED  
state  
WAITING state  
clear  
t
SUSPEND request  
from other task  
SUSPENDED  
state  
SUSPENDED state  
clear request  
Forced termination  
request from other task  
DORMANT  
state  
Task activation  
Figure 3.16 MR100 Task Status Transition  
1. RUNNING state  
In this state, the task is being executed. Since only one microcomputer is used, it is natural that only one task is  
being executed.  
The currently executed task changes into a different state when any of the following conditions occurs.  
The task has normally terminated itself by ext_tsk service call.  
The task has placed itself in the WAITING. 9  
Since the service call was issued from the RUNNING state task, the WAITING state of another  
task with a priority higher than the RUNNING state task is cleared.  
Due to interruption or other event occurrence, the interrupt handler has placed a different task  
having a higher priority in the READY state.  
The priority assigned to the task has been changed by chg_pri or ichg_pri service call so that the  
priority of another READY task is rendered higher.  
When the ready queue of the issuing task priority is rotated by the rot_rdq or irot_rdq service call  
and control of execution is thereby abandoned  
When any of the above conditions occurs, rescheduling takes place so that the task having the highest priority  
among those in the RUNNING or READY state is placed in the RUNNING state, and the execution of that task  
starts.  
2. READY state  
The READY state refers to the situation in which the task that meets the task execution conditions is still waiting  
for execution because a different task having a higher priority is currently being executed.  
When any of the following conditions occurs, the READY task that can be executed second according to the  
ready queue is placed in the RUNNING state.  
A currently executed task has normally terminated itself by ext_tsk service call.  
9
By issuing dly_tsk, slp_tsk, tslp_tsk, wai_flg, twai_flg, wai_sem, twai_sem, rcv_mbx, trcv_mbx,snd_dtq,tsnd_dtq,rcv_dtq, trcv_dtq,  
vtsnd_dtq, vsnd_dtq,vtrcv_dtq,vrcv_dtq, get_mpf, and tget_mpf service call.  
- 22 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
A currently executed task has placed itself in the WAITING state.10  
A currently executed task has changed its own priority by chg_pri or ichg_pri service call so that  
the priority of a different READY task is rendered higher.  
Due to interruption or other event occurrence, the priority of a currently executed task has been  
changed so that the priority of a different READY task is rendered higher.  
When the ready queue of the issuing task priority is rotated by the rot_rdq or irot_rdq service call  
and control of execution is thereby abandoned  
3. WAITING state  
When a task in the RUNNING state requests to be placed in the WAITING state, it exits the RUNNING state and  
enters the WAITING state. The WAITING state is usually used as the condition in which the completion of I/O  
device I/O operation or the processing of some other task is awaited.  
The task goes into the WAITING state in one of the following ways.  
The task enters the WAITING state simply when the slp_tsk service call is issued. In this case, the  
task does not go into the READY state until its WAITING state is cleared explicitly by some other  
task.  
The task enters and remains in the WAITING state for a specified time period when the dly_tsk  
service call is issued. In this case, the task goes into the READY state when the specified time has  
elapsed or its WAITING state is cleared explicitly by some other task.  
The task is placed into WAITING state for a wait request by the wai_flg, wai_sem, rcv_mbx,  
snd_dtq, rcv_dtq, vsnd_dtq, vrcv_dtq, or get_mpf service call. In this case, the task goes from  
WAITING state to READY state when the request is met or WAITING state is explicitly canceled  
by another task.  
The tslp_tsk, twai_flg, twai_sem, trcv_mbx, tsnd_dtq, trcv_dtq, vtsnd_dtq, vtrcv_dtq and tget_mpf  
service calls are the timeout-specified versions of the slp_tsk, wai_flg, wai_sem, rcv_mbx, snd_dtq,  
rcv_dtq, vsnd_dtq, vrcv_dtq and get_mpf service calls. The task is placed into WAITING state for a  
wait request by one of these service calls. In this case, the task goes from WAITING state to  
READY state when the request is met or the specified time has elapsed.  
If the task is placed into WAITING state for a wait request by the wai_flg, wai_sem, rcv_mbx,  
snd_dtq, rcv_dtq, vsnd_dtq, vrcv_dtq, get_mpf, twai_flg, twai_sem, trcv_mbx, tsnd_dtq, trcv_dtq,  
vtsnd_dtq, vtrcv_dtq and tget_mpf service call, the task is queued to one of the following waiting  
queues depending on the request.  
z
z
z
z
z
z
z
z
Event flag waiting queue  
Semaphore waiting queue  
Mailbox message reception waiting queue  
Data queue data transmission waiting queue  
Data queue data reception waiting queue  
Short data queue data transmission waiting queue  
Short data queue data reception waiting queue  
Fixed-size memory pool acquisition waiting queue  
4. SUSPENDED state  
When the sus_tsk service call is issued from a task in the RUNNING state or the isus_tsk service call is issued  
from a handler, the READY task designated by the service call or the currently executed task enters the SUS-  
PENDED state. If a task in the WAITING state is placed in this situation, it goes into the WAIT-  
ING-SUSPENDED state.  
The SUSPENDED state is the condition in which a READY task or currently executed task11 is excluded from  
scheduling to halt processing due to I/O or other error occurrence. That is, when the suspend request is made to a  
READY task, that task is excluded from the execution queue.  
Note that no queue is formed for the suspend request. Therefore, the suspend request can only be made to the  
10  
Depends on the dly_tsk, slp_tsk, tslp_tsk, wai_flg, twai_flg, wai_sem, twai_sem, rcv_mbx, trcv_mbx,snd_dtq,tsnd_dtq,rcv_dtq, trcv_dtq,  
vtsnd_dtq, vsnd_dtq,vtrcv_dtq,tget_mpf, get_mpf and vrcv_dtq service call.  
11  
If the task under execution is placed into a forcible wait state by the isus_tsk service call from the handler, the task goes from an execut-  
ing state directly to a forcible wait state. Please note that in only this case exceptionally, it is possible that a task will go from an executing  
state directly to a forcible wait state.  
- 23 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
tasks in the RUNNING, READY, or WAITING state.12 If the suspend request is made to a task in the SUS-  
PENDED state, an error code is returned.  
5. WAITING-SUSPENDED  
If a suspend request is issued to a task currently in a WAITING state, the task goes to a WAITING-SUSPENDED  
state. If a suspend request is issued to a task that has been placed into a WAITING state for a wait request by the  
slp_tsk, wai_flg, wai_sem, rcv_mbx, snd_dtq, rcv_dtq, vsnd_dtq, vrcv_dtq, get_mpf, tslp_tsk, twai_flg, twai_sem,  
trcv_mbx, tsnd_dtq, trcv_dtq, vtsnd_dtq, vtrcv_dtq or tget_mpf service call, the task goes to a WAIT-  
ING-SUSPENDED state.  
When the wait condition for a task in the WAITING-SUSPENDED state is cleared, that task goes into the SUS-  
PENDED state. It is conceivable that the wait condition may be cleared, when any of the following conditions  
occurs.  
The task wakes up upon wup_tsk, or iwup_tsk service call issuance.  
The task placed in the WAITING state by the dly_tsk or tslp_tsk service call wakes up after the  
specified time elapse.  
The request of the task placed in the WAITING state by the wai_flg , wai_sem, rcv_mbx, snd_dtq,  
rcv_dtq, vsnd_dtq, vrcv_dtq, get_mpf, tslp_tsk, twai_flg, twai_sem, trcv_mbx, tsnd_dtq, trcv_dtq,  
vtsnd_dtq, vtrcv_dtq or tget_mpf service call is fulfilled.  
The WAITING state is forcibly cleared by the rel_wai or irel_wai service call  
When the SUSPENDED state clear request by rsm_tsk or irsm_tsk is made to a task in the WAIT-  
ING-SUSPENDED state, that task goes into the WAITING state. Since a task in the SUSPENDED state cannot  
request to be placed in the WAITING state, status change from SUSPENDED to WAITING-SUSPENDED does  
not possibly occur.  
6. DORMANT  
This state refers to the condition in which a task is registered in the MR100 system but not activated. This task  
state prevails when either of the following two conditions occurs.  
The task is waiting to be activated.  
The task is normally terminated by ext_tsk service call or forcibly terminated by ter_tsk service  
call.  
12  
If a forcible wait request is issued to a task currently in a wait state, the task goes to a WAITING-SUSPENDED state.  
- 24 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
3.4.2  
Task Priority and Ready Queue  
In the kernel, several tasks may simultaneously request to be executed. In such a case, it is necessary to determine which  
task the system should execute first. To properly handle this kind of situation, the system organizes the tasks into proper  
execution priority and starts execution with a task having the highest priority. To complete task execution quickly, tasks  
related to processing operations that need to be performed immediately should be given higher priorities.  
The MR100 permits giving the same priority to several tasks. To provide proper control over the READY task execution  
order, the kernel generates a task execution queue called "ready queue." The ready queue structure is shown in Figure  
3.1713 The ready queue is provided and controlled for each priority level. The first task in the ready queue having the  
highest priority is placed in the RUNNING state.14  
Priority  
1
TCB  
2
3
TCB  
TCB  
TCB  
TCB  
TCB  
n
Figure 3.17 Ready Queue (Execution Queue)  
13  
14  
The TCB(task control block is described in the next chapter.)  
The task in the RUNNING state remains in the ready queue.  
- 25 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
3.4.3  
Task Priority and Waiting Queue  
In The standard profiles in µITRON 4.0 Specification support two waiting methods for each object. In one method, tasks  
are placed in a waiting queue in order of priority (TA_TPRI attribute); in another, tasks are placed in a waiting queue in  
order of FIFO (TA_TFIFO).  
Figure 3.18 and Figure 3.19 depict the manner in which tasks are placed in a waiting queue in order of "taskD," "taskC,"  
"taskA," and "taskB."  
ID No.  
1
2
taskA  
taskB  
taskC  
taskD  
Priority 1  
Priority 5  
Priority 6  
Priority 9  
n
Figure 3.18 Waiting queue of the TA_TPRI attribute  
ID No.  
1
2
n
taskD  
taskC  
taskA  
taskB  
Priority 9  
Priority 6  
Priority 1  
Priority 5  
Figure 3.19 Waiting queue of the TA_TFIFO attribute  
- 26 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
3.4.4  
Task Control Block(TCB)  
The task control block (TCB) refers to the data block that the real-time OS uses for individual task status, priority, and oth-  
er control purposes.  
The MR100 manages the following task information as the task control block  
Task connection pointer  
Task connection pointer used for ready queue formation or other purposes.  
Task status  
Task priority  
Task register information and other data15 storage stack area pointer(current SP value)  
Wake-up counter  
Task wake-up request storage area.  
Flag wait mode  
This is a wait mode during eventflag wait.  
Flag wait pattern  
This area stores the flag wait pattern when using the eventflag wait service call (wai_flg, twai_flg). No flag wait  
pattern area is allocated when the eventflag is not used.  
Startup request counter  
This is the area in which task startup requests are accumulated.  
The task control block is schematized in Figure 3.20.  
TCB  
TCB  
TCB  
Task Connection pointer  
Status  
Priority  
SP  
Wake-up counter  
Flag wait mode  
Activation counter  
This area is allocated only when  
the timeout function is used.  
Flag wait pattern  
Figure 3.20 Task control block  
15  
Called the task context  
- 27 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
3.5 System States  
3.5.1  
Task Context and Non-task Context  
The system runs in either context state, "task context" or "non-task context." The differences between the task content and  
non-task context are shown in Table 3-1. Task Context and Non-task Context.  
Table 3.1 Task Context and Non-task Context  
Task context  
Non-task context  
Invocable service call  
Task scheduling  
Those that can be invoked from  
task context  
Those that can be invoked from  
non-task context  
Occurs when the queue state has  
changed to other than dispatch dis-  
abled and CPU locked states.  
It does not occur.  
Stack  
User stack  
System stack  
The processes executed in non-task context include the following.  
1. Interrupt Handler  
A program that starts upon hardware interruption is called the interrupt handler. The MR100 is not concerned in interrupt  
handler activation. Therefore, the interrupt handler entry address is to be directly written into the interrupt vector table.  
There are two interrupt handlers: Non-kernel interrupts (OS independent interrupts) and kernel interrupts (OS dependent  
interrupts). For details about each type of interrupt, refer to Section 3.6.  
The system clock interrupt handler (isig_tim) is one of these interrupt handlers.  
2. Cyclic Handler  
The cyclic handler is a program that is started cyclically every preset time. The set cyclic handler may be started or stopped  
by the sta_cyc(ista_cyc) or stp_cyc(istp_cyc) service call.  
The cyclic handler startup time of day is unaffected by a change in the time of day by set_tim(iset_tim).  
3. Alarm Handler  
The alarm handler is a handler that is started after the lapse of a specified relative time of day. The alarm handler startup  
time of day is determined by a time of day relative to the time of day set by sta_alm(ista_alm), and is unaffected by a  
change in the time of day by set_tim(iset_tim).  
The cyclic and alarm handlers are invoked by a subroutine call from the system clock interrupt (timer interrupt) handler.  
Therefore, cyclic and alarm handlers operate as part of the system clock interrupt handler. Note that when the cyclic or  
alarm handler is invoked, it is executed in the interrupt priority level of the system clock interrupt.  
- 28 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
Task  
System clock  
interrupt handler  
Cyclic handler  
Alarm handler  
Subroutine call  
Timer interrupt  
RTS  
Figure 3.21 Cyclic Handler/Alarm Handler Activation  
- 29 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
3.5.2  
Dispatch Enabled/Disabled States  
The system assumes either a dispatch enabled state or a dispatch disabled state. In a dispatch disabled state, no task sched-  
uling is performed. Nor can service calls be invoked that may cause the service call issuing task to enter a wait state.16  
The system can be placed into a dispatch disabled state or a dispatch enabled state by the dis_dsp or ena_dsp service call,  
respectively. Whether the system is in a dispatch disabled state can be known by the sns_dsp service call.  
3.5.3  
CPU Locked/Unlocked States  
The system assumes either a CPU locked state or a CPU unlocked state. In a CPU locked state, all external interrupts are  
disabled against acceptance, and task scheduling is not performed either.  
The system can be placed into a CPU locked state or a CPU unlocked state by the loc_cpu(iloc_cpu) or unl_cpu(iunl_cpu)  
service call, respectively. Whether the system is in a CPU locked state can be known by the sns_loc service call.  
The service calls that can be issued from a CPU locked state are limited to those that are listed in Table 3-2.17  
Table 3.2 Invocable Service Calls in a CPU Locked State  
loc_cpu  
ext_tsk  
sns_loc  
iloc_cpu  
exd_tsk  
sns_dsp  
unl_cpu  
sns_tex  
sns_dpn  
iunl_cpu  
sns_ctx  
3.5.4  
Dispatch Disabled and CPU Locked States  
In µITRON 4.0 Specification, the dispatch disabled and the CPU locked states are clearly discriminated. Therefore, if the  
unl_cpu service call is issued in a dispatch disabled state, the dispatch disabled state remains intact and no task scheduling  
is performed. State transitions are summarized in Table 3.3.  
Table 3.3 CPU Locked and Dispatch Disabled State Transitions Relating to dis_dsp and loc_cpu  
State  
Content of state  
dis_dsp  
ena_dsp  
loc_cpu  
unl_cpu  
number  
executed executed executed executed  
CPU locked  
state  
Dispatch disabled  
state  
1
2
3
4
O
O
X
X
X
O
X
O
X
X
=> 4  
=> 4  
X
X
=> 3  
=> 3  
=> 1  
=> 2  
=> 1  
=> 2  
=> 3  
=> 4  
=> 3  
=> 4  
16  
17  
If a service call not issuable is issued when dispatch disabled, MR100 doesn't return the error and doesn't guarantee the operation.  
MR100 does not return an error even when an uninvocable service call is issued from a CPU locked state, in which case, however, its  
operation cannot be guaranteed.  
- 30 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
             
3.6 Regarding Interrupts  
3.6.1  
Types of Interrupt Handlers  
MR100's interrupt handlers consist of kernel interrupt handlers and non-kernel interrupt handlers.  
The following shows the definition of each type of interrupt handler.  
Kernel interrupt handler  
An interrupt handler whose interrupt priority level is lower than a kernel interruption mask level is called kernel  
interrupt handler. That is, interruption priority level is from 1 to system_IPL.  
A service call can be issued within a kernel interrupt handler. However, interrupt is delayed until it becomes re-  
ceivable the kernel interrupt handler generated during service call processing.  
Non-kernel interrupt handler  
An interrupt handler whose interrupt priority level is higher than a kernel interrupt mask level is called non-kernel  
interrupt handler. That is, interruption priority level is from system_IPL+1 to 7.  
A service call cannot be issued within non-kernel interrupt handler. However, the non-kernel interrupt handler is  
able to be recieved during service call processing, even if it is the section where it is not able to receive a kernel  
interrupt handler:  
Figure 3.22 shows the relationship between the non-kernel interrupt handlers and kernel interrupt handlers where the kernel  
mask level is set to 3.  
Kernel mask level  
Low  
High  
0
1
2
3
4
5
6
7
Kernel  
Interrupt handler  
Non-kernel  
Interrupt handler  
Figure 3.22 Interrupt handler IPLs  
3.6.2  
The Use of Non-maskable Interrupt  
Non-maskable interrupt ( ex. NMI interrupt ,Watchdog Timer interrupt) are treated as a non-kernel interrupt handler.  
- 31 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
3.6.3  
Controlling Interrupts  
Interrupt enable/disable control in a service call is accomplished by IPL manipulation. The IPL value in a service call is set  
to the kernel mask level(OS interrupt disable level = system.IPL) in order to disable interrupts for the kernel interrupt han-  
dler. In sections where all interrupts can be enabled, it is returned to the initial IPL value when the service call was invoked.  
For service calls that can be issued from only task context.  
When the I flag before issuing a service call is 1.  
Service call processing  
Task  
Service call issued  
I flag  
IPL  
1
0
0
1
1
0
system.IPL  
0
system.IPL  
When the I flag before issuing a service call is 0.  
Task Service call issued  
Service call processing  
I flag  
IPL  
0
0
0
1
0
0
system.IPL  
0
system.IPL  
Figure 3.23 Interrupt control in a Service Call that can be Issued from only a Task  
- 32 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
For service calls that can be issued from only non-task context or from both task context and non-task  
context.  
When the I flag before issuing a service call is 1  
Task or  
Task or  
service call processing  
Service call issued  
Handler  
Handler  
I flag  
IPL  
1
4
0
1
1
4
system.IPL  
4
system.IPL  
When the I flag before issuing a service call is 0  
Task or  
Task or  
service call processing  
Service call issued  
Handler  
Handler  
I flag  
IPL  
0
0
0
4
4
system.IPL  
system.IPL  
4
Figure 3.24 Interrupt control in a Service Call that can be Issued from a Task-independent  
As shown in Figure 3.23 and Figure 3.24, the interrupt enable flag and IPL change in a service call. For this reason, if you  
want to disable interrupts in a user application, Renesas does not recommend using the method for manipulating the inter-  
rupt disable flag and IPL to disable the interrupts.  
The following two methods for interrupt control are recommended:  
1. Modify the interrupt control register (SFR) for the interrupt you want to be disabled.  
2. Use service calls loc_cpu(iloc_cpu) and unl_cpu(iunl_cpu).  
The interrupts that can be controlled by the loc_cpu service call are only the kernel interrupt. Use method 1 to control the  
non-kernel interrupts.  
- 33 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
3.7 Stacks  
3.7.1  
System Stack and User Stack  
The MR100 provides two types of stacks: system stack and user stack.  
User Stack  
One user stack is provided for each task. Therefore, when writing applications with the MR100, it is necessary to  
furnish the stack area for each task.  
System Stack  
This stack is used within the MR100 (during service call processing). When a service call is issued from a task,  
the MR100 switches the stack from the user stack to the system stack (See Figure 3.25).  
The system stack use the interrupt stack(ISP).  
Task  
MR100 service call processing  
User Stack  
System Stack  
User Stack  
Save Registers  
Stack switching  
XXX_XXX( )  
Service call  
processing  
Task sel ection  
Stack switching  
Restore Registers  
Figure 3.25 System Stack and User Stack  
Switchover from user stack to system stack occurs when an interrupt of vector numbers 0 to 127 is generated. Consequently,  
all stacks used by the interrupt handler are the system stack.  
- 34 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
4. Kernel  
4.1.1  
Module Structure  
The MR100 kernel consists of the modules shown in Figure 4.1. Each of these modules is composed of functions that exer-  
cise individual module features.  
The MR100 kernel is supplied in the form of a library, and only necessary features are linked at the time of system genera-  
tion. More specifically, only the functions used are chosen from those which comprise these modules and linked by means  
of the Linkage Editor. However, the scheduler module, part of the task management module, and part of the time manage-  
ment module are linked at all times because they are essential feature functions.  
The applications program is a program created by the user. It consists of tasks, interrupt handler, alarm handler, and cyclic  
handler.18  
User Module  
Application Program  
Task  
Ma na geme nt  
Time  
Management  
Mailbox  
Semaphore  
Task-dependent  
synchronization  
Memorypool  
Management  
MR100 kernel  
Hardware  
System stae  
Manage ment  
Eventflag  
System configuration  
Management  
Interrupt  
Management  
short  
Data queue  
Data queue  
Scheduler  
Alarm/Cyclic handler  
R32C/100 Microcomputer  
Figure 4.1 MR100 Structure  
18  
For details, See 4.1.11.  
- 35 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
4.1.2  
Module Overview  
The MR100 kernel modules are outlined below.  
Scheduler  
Forms a task processing queue based on task priority and controls operation so that the high-priority task at the  
beginning in that queue (task with small priority value) is executed.  
Task Management Module  
Exercises the management of various task states such as the RUNNING, READY, WAITING, and SUSPENDED  
state.  
Task Synchronization Module  
Accomplishes inter-task synchronization by changing the task status from a different task.  
Interrupt Management Module  
Makes a return from the interrupt handler.  
Time Management Module  
Sets up the system timer used by the MR100 kernel and starts the user-created alarm handler19 and cyclic han-  
dler.20.  
System Status Management Module  
Gets the system status of MR100.  
System Configuration Management Module  
Reports the MR100 kernel version number or other information.  
Synchronization and Communication Module  
This is the function for synchronization and communication among the tasks. The following four functional mod-  
ules are offered.  
Eventflag  
Checks whether the flag controlled within the MR100 is set up and then determines whether or not to initi-  
ate task execution. This results in accomplishing synchronization between tasks.  
Semaphore  
Reads the semaphore counter value controlled within the MR100 and then determines whether or not to ini-  
tiate task execution. This also results in accomplishing synchronization between tasks.  
Mailbox  
Provides inter-task data communication by delivering the first data address.  
Data queue  
Performs 32-bit data communication between tasks.  
Memory pool Management Module  
Provides dynamic allocation or release of a memory area used by a task or a handler.  
Extended Function Module  
Outside the scope of µITRON 4.0 Specification , this function performs reset processing on objects and short data  
queue function.  
19  
20  
This handler actuates once only at preselected times.  
This handler periodically actuates.  
- 36 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
4.1.3  
Task Management Function  
The task management function is used to perform task operations such as task start/stop and task priority updating. The  
MR100 kernel offers the following task management function service calls.  
Activate Task (act_tsk, iact_tsk)  
Activates the task, changing its status from DORMANT to either READY or RUNNING. In this service call, un-  
like in sta_tsk(ista_tsk), startup requests are accumulated, but startup code cannot be specified.  
Activate Task (sta_tsk, ista_tsk)  
Activates the task, changing its status from DORMANT to either READY or RUNNING. In this service call, un-  
like in act_tsk(iact_tsk), startup requests are not accumulated, but startup code can be specified.  
Terminate Invoking Task (ext_tsk)  
When the issuing task is terminated, its state changes to DORMANT state. The task is therefore not executed until  
it is restarted. If startup requests are accumulated, task startup processing is performed again. In that case, the is-  
suing task behaves as if it were reset.  
If written in C language, this service call is automatically invoked at return from the task regardless of whether it  
is explicitly written when terminated.  
Terminate Task (ter_tsk)  
Other tasks in other than DORMANT state are forcibly terminated and placed into DORMANT state. If startup  
requests are accumulated, task startup processing is performed again. In that case, the task behaves as if it was re-  
set. (See Figure 4.2).  
Startup request count > 0  
TaskA  
TaskB  
ter_tsk(B)  
Terminated  
Task B reset  
Figure 4.2 Task Resetting  
Change Task Priority (chg_pri, ichg_pri)  
If the priority of a task is changed while the task is in READY or RUNNING state, the ready queue also is up-  
dated. (See Figure 4.3).  
Furthermore, if the target task is placed in a waiting queue of objects with TA_TPRI attribute, the waiting queue  
also is updated. (See Figure 4.4).  
- 37 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
Priority  
1
Task A  
Task C  
Task E  
Task B  
Task B  
Task F  
2
3
Task D  
n
When the priority of task B has been changed from 3 to 1  
Figure 4.3 Alteration of task priority  
ID Number  
taskB  
taskA  
taskC  
taskB  
Priority 1  
Priority 2  
Priority 3  
Priority 4  
When the priority of Task B is changed into 4  
Figure 4.4 Task rearrangement in a waiting queue  
Reference task priority (get_pri, iget_pri)  
Gets the priority of a task.  
Reference task status (simple version) (ref_tst, iref_tst)  
Refers to the state of the target task.  
Reference task status (ref_tsk, iref_tsk)  
Refers to the state of the target task and its priority, etc.  
- 38 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
4.1.4  
Synchronization functions attached to task  
The task-dependent synchronization functions attached to task is used to accomplish synchronization between tasks by  
placing a task in the WAIT, SUSPENDED, or WAIT-SUSPENDED state or waking up a WAIT state task.  
The MR100 offers the following task incorporated synchronization service calls.  
Put Task to sleep (slp_tsk,tslp_tsk)  
Wakeup task (wup_tsk, iwup_tsk)  
Wakeups a task that has been placed in a WAIT state by the slp_tsk or tslp_tsk service call.  
No task can be waked up unless they have been placed in a WAITING state by.21  
If a wakeup request is issued to a task that has been kept waiting for conditions other than the slp_tsk or tslp_tsk  
service call or a task in other than DORMANT state by the wup_tsk or iwup_tsk service call, that wakeup re-  
quest only will be accumulated.  
Therefore, if a wakeup request is issued to a task RUNNING state, for example, this wakeup request is temporar-  
ily stored in memory. Then, when the task in RUNNING state is going to be placed into WAITING state by the  
slp_tsk or tslp_tsk service call, the accumulated wakeup request becomes effective, so that the task continues ex-  
ecuting again without going to WAITING state. (See Figure 4.5).  
Cancel Task Wakeup Requests (can_wup)  
Clears the stored wakeup request.(See Figure 4.6).  
wup_tsk wup_tsk wup_tsk  
slp_tsk  
0
slp_tsk  
1
Task  
Wakeup request count  
0
1
2
Figure 4.5 Wakeup Request Storage  
wup_tsk wup_tsk can_wup  
slp_tsk  
0
slp_tsk  
0
Task  
Wakeup request count  
0
1
0
Figure 4.6 Wakeup Request Cancellation  
21  
Note that tasks in WAITING state, but kept waiting for the following conditions are not awaken.  
Eventflag wait state, semaphore wait state, data transmission wait state, data reception wait state, timeout wait state, fixed length  
memory pool acquisition wait, short data transmission wait, or short data reception wait  
- 39 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
Suspend task (sus_tsk, isus_tsk)  
Resume suspended task (rsm_tsk, irsm_tsk)  
These service calls forcibly keep a task suspended for execution or resume execution of a task. If a suspend re-  
quest is issued to a task in READY state, the task is placed into SUSPENDED state; if issued to a task in WAIT  
ING state, the task is placed into WAITING-SUSPENDED state. Since MR100 allows only one forcible wait re-  
quest to be nested, if sus_tsk is issued to a task in a forcible wait state, the error E_QOVR is returned. (See  
E_QOVR  
sus_tsk  
sus_tsk  
rsm_tsk  
Task  
READY state  
RUNNING  
state  
SUSPENDED  
state  
WAITING-  
SUSPENDED  
state  
WAITING state  
WAITING state  
0
Number of  
suspension  
request  
0
1
1
Figure 4.7 Forcible wait of a task and resume  
- 40 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
Forcibly resume suspended task (frsm_tsk, ifrsm_tsk)  
Clears the number of suspension requests nested to 0 and forcibly resumes execution of a task. Since MR100 al-  
lows only one suspension request to be nested, this service call behaves the same way as rsm_tsk and  
irsm_tsk..(See Figure 4.8).  
sus_tsk  
frsm_tsk  
Task  
READY state  
READYstate  
SUSPENDED  
state  
WAITING  
state  
WAITING –  
SUSPENDED  
state  
WAITING state  
Number of  
suspension  
requests  
0
1
0
Figure 4.8 Forcible wait of a task and forcible resume  
Release task from waiting (rel_wai, irel_wai)  
Forcibly frees a task from WAITING state. A task is freed from WAITING state by this service call when it is in  
one of the following wait states.  
Timeout wait state  
Wait state entered by slp_tsk service call (+ timeout included)  
Event flag (+ timeout included) wait state  
Semaphore (+ timeout included) wait state  
Message (+ timeout included) wait state  
Data transmission (+ timeout included) wait state  
Data reception (+ timeout included) wait state  
Fixed–size memory block (+ timeout included) acquisition wait state  
Short data transmission (+ timeout included) wait state  
Short data reception (+ timeout included) wait state  
- 41 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
Delay task (dly_tsk)  
Keeps a task waiting for a finite length of time. Figure 4.9 shows an example in which execution of a task is kept  
waiting for 10 ms by the dly_tsk service call. The timeout value should be specified in ms units, and not in time  
tick units.  
dly_tsk(10)  
Task  
10msec  
Figure 4.9 dly_tsk service call  
- 42 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
4.1.5  
Synchronization and Communication Function (Semaphore)  
The semaphore is a function executed to coordinate the use of devices and other resources to be shared by several tasks in  
cases where the tasks simultaneously require the use of them. When, for instance, four tasks simultaneously try to acquire a  
total of only three communication lines as shown in Figure 4.10, communication line-to-task connections can be made  
without incurring contention.  
Task  
Communication  
Line  
Communication  
Task  
Line  
Communication  
Line  
Task  
Semaphore  
Task  
Figure 4.10 Exclusive Control by Semaphore  
The semaphore has an internal semaphore counter. In accordance with this counter, the semaphore is acquired or released to  
prevent competition for use of the same resource.(See Figure 4.11).  
Acquired  
Task  
Returned after use  
Figure 4.11 Semaphore Counter  
The MR100 kernel offers the following semaphore synchronization service calls.  
Release Semaphore Resource(sig_sem, isig_sem)  
Releases one resource to the semaphore. This service call wakes up a task that is waiting for the semaphores ser-  
vice, or increments the semaphore counter by 1 if no task is waiting for the semaphores service.  
Acquire Semaphore Resource(wai_sem, twai_sem)  
Waits for the semaphores service. If the semaphore counter value is 0 (zero), the semaphore cannot be acquired.  
Therefore, the WAITING state prevails.  
Acquire Semaphore Resource(pol_sem, ipol_sem)  
Acquires the semaphore resource. If there is no semaphore resource to acquire, an error code is returned and the  
WAITING state does not prevail.  
- 43 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
Reference Semaphore Status (ref_sem, iref_sem)  
Refers the status of the target semaphore. Checks the count value and existence of the wait task for the target se-  
maphore.  
Figure 4.12 shows example task execution control provided by the wai_sem and sig_sem service calls.  
wai_sem  
sig_sem  
Task  
Task  
Task  
Task  
wai_sem  
wai_sem  
wai_sem  
WAIT state  
Semaphore  
Counter  
3
2
1
0
x
0
Figure 4.12 Task Execution Control by Semaphore  
- 44 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
4.1.6  
Synchronization and Communication Function (Eventflag)  
The eventflag is an internal facility of MR100 that is used to synchronize the execution of multiple tasks. The eventflag  
uses a flag wait pattern and a 32-bit pattern to control task execution. A task is kept waiting until the flag wait conditions  
set are met.  
It is possible to determine whether multiple waiting tasks can be enqueued in one eventflag waiting queue by specifying the  
eventflag attribute TA_WSGL or TA_WMUL.  
Furthermore, it is possible to clear the eventflag bit pattern to 0 when the eventflag meets wait conditions by specifying  
TA_CLR for the eventflag attribute.  
There are following eventflag service calls that are provided by the MR100 kernel.  
Set Eventflag (set_flg, iset_flg)  
Sets the eventflag so that a task waiting the eventflag is released from the WAITING state.  
Clear Eventflag (clr_flg, iclr_flg)  
Clears the Eventflag.  
Wait for Eventflag (wai_flg, twai_flg)  
Waits until the eventflag is set to a certain pattern. There are two modes as listed below in which the eventflag is  
waited for.  
AND wait  
Waits until all specified bits are set.  
OR wait  
Waits until any one of the specified bits is set  
Wait for Eventflag (polling)(pol_flg, ipol_flg)  
Examines whether the eventflag is in a certain pattern. In this service call, tasks are not placed in WAITING state.  
Reference Eventflag Status (ref_flg, iref_flg)  
Checks the existence of the bit pattern and wait task for the target eventflag.  
- 45 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
Figure 4.13 shows an example of task execution control by the eventflag using the wai_flg and set_flg service calls.  
The eventflag has a feature that it can wake up multiple tasks collectively at a time.  
In Figure 4.13, there are six tasks linked one to another, task A to task F. When the flag pattern is set to 0xF by the set_flg  
service call, the tasks that meet the wait conditions are removed sequentially from the top of the queue. In this diagram, the  
tasks that meet the wait conditions are task A, task C, and task E. Out of these tasks, task A, task C, and task E are removed  
from the queue.  
If this event flag has a TA_CLR attribute, when the waiting of Task A is canceled, the bit pattern of the event flag will be  
set to 0, and Task C and Task E will not be removed from queue.  
TaskD  
Flag queue  
TaskA  
TaskB  
TaskC  
TaskF  
TaskE  
Flag pattern  
0
Wait pattern  
Wait mode  
0x0F  
OR  
0xFF  
AND  
0x0F  
AND  
0xFF  
AND  
0xFF  
OR  
0x10  
OR  
set_flg  
TaskB  
TaskD  
TaskF  
Flag pattern  
0x0F  
Figure 4.13 Task Execution Control by the Eventflag  
- 46 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
4.1.7  
Synchronization and Communication Function (Data Queue)  
The data queue is a mechanism to perform data communication between tasks. In Figure 4.14, for example, task A can  
transmit data to the data queue and task B can receive the transmitted data from the data queue.  
Data  
Data  
Task B  
Task A  
Figure 4.14 Data queue  
Data in width of 32 bits can be transmitted to this data queue.  
The data queue has the function to accumulate data. The accumulated data is retrieved in order of FIFO22. However, the  
number of data that can be accumulated in the data queue is limited. If data is transmitted to the data queue that is full of  
data, the service call issuing task goes to a data transmission wait state.  
There are following data queue service calls that are provided by the MR100 kernel.  
Send to Data Queue(snd_dtq, tsnd_dtq)  
The data is transmitted to the data queue. If the data queue is full of data, the task goes to a data transmission wait  
state.  
Send to Data Queue (psnd_dtq, ipsnd_dtq)  
The data is transmitted to the data queue. If the data queue is full of data, the task returns error code without going  
to a data transmission wait state.  
Forced Send to Data Queue (fsnd_dtq, ifsnd_dtq)  
The data is transmitted to the data queue. If the data queue is full of data, the data at the top of the data queue or  
the oldest data is removed, and the transmitted data is stored at the tail of the data queue.  
Receive from Data Queue (rcv_dtq, trcv_dtq)  
The data is retrieved from the data queue. If the data queue has no data in it, the task is kept waiting until data is  
transmitted to the data queue.  
Receive from Data Queue (prcv_dtq,iprcv_dtq)  
The data is received from the data queue. If the data queue has no data in it, the task returns error code without  
going to a data reception wait state.  
Reference Data Queue Status (ref_dtq,iref_dtq)  
Checks to see if there are any tasks waiting for data to be entered in the target data queue and refers to the number  
of the data in the data queue.  
22  
First In First Out  
- 47 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
4.1.8  
Synchronization and Communication Function (Mailbox)  
The mailbox is a mechanism to perform data communication between tasks. In Figure 4.15, for example, task A can drop a  
message into the mailbox and task B can retrieve the message from the mailbox. Since mailbox-based communication is  
achieved by transferring the start address of a message from a task to another, this mode of communication is performed at  
high speed independently of the message size.  
The kernel manages the message queue by means of a link list. The application should prepare a header area that is to be  
used for a link list. This is called the message header. The message header and the area actually used by the application to  
store a message are called the message packet. The kernel rewrites the content of the message header as it manages the  
message queue. The message header cannot be rewritten from the application. The structure of the message queue is shown  
in Figure 4.16. The message header has its data types defined as shown below.  
T_MSG:  
Mailbox message header  
T_MSG_PRI:  
Mailbox message header with priority included  
Messages in any size can be enqueued in the message queue because the header area is reserved on the application side. In  
no event will tasks be kept waiting for transmission.  
Messages can be assigned priority, so that messages will be received in order of priority beginning with the highest. In this  
case, TA_MPRI should be added to the mailbox attribute. If messages need to be received in order of FIFO, add  
TA_MFIFO to the mailbox attribute.23 Furthermore, if tasks in a message wait state are to receive a message, the tasks can  
be prioritized in which order they can receive a message, beginning with one that has the highest priority. In this case, add  
TA_TPRI to the mailbox attribute. If tasks are to receive a message in order of FIFO, add TA_TFIFO to the mailbox attrib-  
ute.24  
Message  
TaskA  
Message  
TaskB  
Figure 4.15 Mailbox  
23  
24  
It is in the mailbox definition "message_queue" of the configuration file that the TA_MPRI or TA_MFIFO attribute should be added.  
It is in the mailbox definition "wait_queue" of the configuration file that the TA_TPRI or TA_TFIFO attribute should be added.  
- 48 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
Message  
queue  
T_MSG  
header  
T_MSG  
header  
T_MSG  
header  
Message A  
Message B  
Message C  
Figure 4.16 Message queue  
There are following data queue service calls that are provided by the MR100 kernel.  
Send to Mailbox (snd_mbx, isnd_mbx)  
Transmits a message. Namely, a message is dropped into the mailbox.  
Receive from Mailbox (rcv_mbx, trcv_mbx)  
Receives a message. Namely, a message is retrieved from the mailbox. At this time, if the mailbox has no mes-  
sages in it, the task is kept waiting until a message is sent to the mailbox.  
Receive from Mailbox (polling) (prcv_mbx, iprcv_mbx)  
Receives a message. The difference from the rcv_mbx service call is that if the mailbox has no messages in it, the  
task returns error code without going to a wait state.  
Reference Mailbox Status (ref_mbx, iref_mbx)  
Checks to see if there are any tasks waiting for a message to be put into the target mailbox and refers to the mes-  
sage present at the top of the mailbox.  
- 49 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
4.1.9  
Memory pool Management Function(Fixed-size Memory pool)  
A fixed-size memory pool is the memory of a certain decided size. The memory block size is specified at the time of a con-  
figuration. Figure 4.17 is a figure about the example of a fixed-size memory pool of operation.  
Acquire Fixed-size Memory Block (get_mpf, tget_mpf)  
Acquires a memory block from the fixed-size memory pool that has the specified ID. If there are no blank mem-  
ory blocks in the specified fixed-size memory pool, the task that issued this service call goes to WAITING state  
and is enqueued in a waiting queue.  
Acquire Fixed-size Memory Block (polling) (pget_mpf, ipget_mpf)  
Acquires a memory block from the fixed-size memory pool that has the specified ID. The difference from the  
get_mpf and tget_mpf service calls is that if there are no blank memory blocks in the memory pool, the task re-  
turns error code without going to WAITING state.  
Memory Block 1:  
Memory Block 2:  
Memory Block 3:  
Used by TaskA  
Used by TaskB  
Memory block acquisition  
request  
TaskC  
TaskD  
Memory block acquisition  
Memory block acquisition  
request  
No blank memory  
blocks available  
Fixed Length Memorypool  
Goes to a  
wait state  
Figure 4.17 Memory Pool Management  
Release Fixed-size Memory Block (rel_mpf, irel_mpf)  
Frees the acquired memory block. If there are any tasks in a wait state for the specified fixed-size memory pool,  
the task enqueued at the top of the waiting queue is assigned the freed memory block. In this case, the task  
changes its state from WAITING state to READY state. If there are no tasks in a wait state, the memory block is  
returned to the memory pool.  
Reference Fixed-size Memory Pool Status (ref_mpf, iref_mpf)  
Checks the number and the size of blank blocks available in the target memory pool.  
- 50 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
4.1.10  
Variable-size Memory Pool Management Function  
A variable-size memory pool refers to the one in which a memory block of any desired size can be acquired from the mem-  
ory pool. The MR100 permits one of the following two memory pool management methods to be selected before the mem-  
ory pool is used.  
1. Normal block method  
2. Small block method  
Each of these methods are explained below.  
[[Normal Block Method]]  
The technique that allows you to arbitrary define the size of memory block acquirable from the memory pool is termed Va-  
riable-size scheme. The MR100 manages memory in terms of four fixed-size memory block sizes.  
The MR100 calculates the size of individual blocks based on the maximum memory block size to be acquired. You specify  
the maximum memory block size using the configuration file.  
Equation for calculating four kinds of block sizes  
a = (((max_memsize+(X-1))/ X × 8)+1) × 8  
b = a × 2  
c = a × 4  
d = a × 8  
max_memsize: the value specified in the configuration file  
X: data size for block control (8 byte)  
Example of a configuration file  
variable_memorypool[]{  
max_memsize  
heap_size  
= 400; <---- Maximum size  
= 5000;  
};  
If a variable-size memory pool is defined as shown above, the four kinds of fixed length block sizes are obtained from the  
define value of max_memsize as 56, 112, 224 and 448, respectively. Furthermore, the MR100 calculates the memory re-  
quested by the user based on a specified size to select the appropriate size from the four kinds of fixed length block sizes as  
it allocates the requested memory. In no event will a memory block other than these four kinds of size be allocated.  
[[Small block method]]  
Unlike the normal block method where memory is managed in four kinds of fixed length block sizes, the small block me-  
thod manages memory in 12 kinds of fixed length block sizes. Since the block sizes in this method are prefixed as shown  
below, there is no need to specify a maximum size during configuration as in the normal block method.  
The block sizes managed by the small block method are the following 12, beginning with the smallest:  
24 bytes, 56 bytes, 120 bytes, 248 bytes, 504 bytes, 1,016 bytes, 2,040 bytes, 4,088 bytes, 8,184 byte, 16,376 bytes, 32,760  
bytes and 65,528 bytes.  
- 51 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
[[Comparison of Two Management Methods]]  
Processing speed  
Generally speaking, the normal block method is faster in memory allocation/deallocation processing than the  
small block method.  
Memory usage efficiency  
If the difference between the maximum and minimum sizes of memory to be acquired is 8 times or more, the  
small block method is higher in memory usage efficiency than the other method.  
Ease of configuration  
For the normal block method, it is necessary that the maximum memory size to be acquired be known to the  
MR100. However, this is unnecessary for the small block method..  
The variable-length memory pool management service calls provided by the MR100 include the following.  
Get a memory block (pget_mpl)  
The block size specified by the user is acquired by first rounding it to the optimum block size among the four  
kinds of block sizes and then acquiring a memory block of the rounded size from the memory pool  
For example, if the user requests 200 bytes of memory, the requested size is rounded to 224 bytes, so that 224  
bytes of memory is acquired. If a requested block of memory is successfully acquired, the start address of the ac-  
quired memory block and error code E_OK are returned. If memory acquisition fails, error code E_TMOUT is  
returned.  
200 bytes  
TaskA  
Memorypool  
Rounding  
pget_mpl  
200 bytes  
224 bytes  
.
Figure 4.18 pget_mpl processing  
Release Acquire Variable-size Memory Block (rel_mpl)25  
Releases a acquired memory block by pget_mpl service call.  
25  
The validity of the address of the memory block to which MR100 is passed as an argument and to release is not judged. Therefore, op-  
eration at the time of releasing the memory block which is already released or releasing the memory block which has not been gained is not  
guaranteed.  
- 52 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
TaskA  
Memorypool  
Memorypool  
rel_mpl  
top of  
address  
Figure 4.19 rel_mpl processing  
Reference Acquire Variable-size Memory Pool Status (ref_mpl, iref_mpl)  
Checks the total free area of the memory pool, and the size of the maximum free area that can immediately be  
acquired.  
- 53 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
4.1.11  
Time Management Function  
The time management function provides system time management, time reading26, time setup27, and the functions of the  
alarm handler, which actuates at preselected times, and the cyclic handler, which actuates at preselected time intervals.  
The MR100 kernel requires one timer for use as the system clock. There are following time management service calls that  
are provided by the MR100 kernel. Note, however, that the system clock is not an essential function of MR100. Therefore,  
if the service calls described below and the time management function of the MR100 are unused, a timer does not need to  
be occupied for use by MR100.  
Place a task in a finite time wait state by specifying a timeout value  
A timeout can be specified in a service call that places the issuing task into WAITING state.28 This service call  
includes tslp_tsk, twai_flg, twai_sem, tsnd_dtq, trcv_dtq, trcv_mbx, tget_mpf, vtsnd_dtq, and vtrcv_dtq. If the  
wait cancel condition is not met before the specified timeout time elapses, the error code E_TMOUT is returned,  
and the task is freed from the waiting state. If the wait cancel condition is met, the error code E_OK is returned.  
The timeout time should be specified in ms units.  
tslp_tsk(50)  
E_TMOUT  
READY state  
WAITING state  
50  
Timeout value  
tslp_tsk(50)  
E_OK  
RUNNING state  
WAITING state  
iwup_tsk  
Figure 4.20 Timeout Processing  
MR100 guarantees that as stipulated in µITRON specification, timeout processing is not performed until a time  
equal to or greater than the specified timeout value elapses. More specifically, timeout processing is performed  
with the following timing.  
1. If the timeout value is 0 (for only dly_tsk)29  
The task times out at the first time tick after the service call is issued.30  
2. If the timeout value is a multiple of time tick interval  
The timer times out at the (timeout value / time tick interval) + first time tick. For example, if the time  
tick interval is 10 ms and the specified timeout value is 40 ms, then the timer times out at the fifth oc-  
currence of the time tick. Similarly, if the time tick interval is 5 ms and the specified timeout value is 15  
ms, then the timer times out at the fourth occurrence of the time tick.  
26  
get_tim service call  
set_tim service call  
27  
28  
SUSPENDED state is not included.  
Strictly, in a dly_tsk service call, the "timeout value" is not correct. "delay time" is correct.  
Strictly, in a dly_tsk service call, a timeout is not carried out, but the waiting for delay is canceled and the service call carries out the nor-  
29  
30  
mal end.  
- 54 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
             
3. If the timeout value is not a multiple of time tick interval  
The timer times out at the (timeout value / time tick interval) + second time tick. For example, if the time  
tick interval is 10 ms and the specified timeout value is 35 ms, then the timer times out at the fifth oc-  
currence of the time tick.  
Set System Time (set_tim)  
Reference System Time (get_tim)  
The system time indicates an elapsed time from when the system was reset by using 48-bit data. The time is ex-  
pressed in ms units.  
- 55 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
4.1.12  
Cyclic Handler Function  
The cyclic handler is a time event handler that is started every startup cycle after a specified startup phase has elapsed.  
The cyclic handler may be started with or without saving the startup phase. In the former case, the cyclic handler is started  
relative to the point in time at which it was generated. In the latter case, the cyclic handler is started relative to the point in  
time at which it started operating. Figure 4.21 and Figure 4.22 show typical operations of the cyclic handler.  
If the startup cycle is shorter than the time tick interval, the cyclic handler is started only once every time tick supplied  
(processing equivalent to isig_tim). For example, if the time tick interval is 10 ms and the startup cycle is 3 ms and the cy-  
clic handler has started operating when a time tick is supplied, then the cyclic handler is started every time tick.  
Start operating  
Stop operating  
Cyclic handler  
created  
Activation  
phase  
Activation  
cycle  
Activation  
cycle  
Activation  
cycle  
Activation  
cycle  
Handler starts  
Handler starts  
Handler does  
not start  
Handler does  
not start  
Handler does  
not start  
Figure 4.21 Cyclic handler operation in cases where the activation phase is saved  
Start operating  
Stop operating  
Cyclic handler  
created  
Activation  
phase  
Activation  
cycle  
Activation  
cycle  
Activation  
cycle  
Activation  
cycle  
Handler starts  
Handler starts  
Handler does  
not start  
Handler does  
not start  
Handler does  
not start  
Figure 4.22 Cyclic handler operation in cases where the activation phase is not saved  
Start Cyclic Handler Operation (sta_cyc, ista_cyc)  
Causes the cyclic handler with the specified ID to operational state.  
Stop Cyclic Handler Operation (stp_cyc, istp_cyc)  
Causes the cyclic handler with the specified ID to non-operational state.  
Reference Cyclic Handler Status (ref_cyc, iref_cyc)  
Refers to the status of the cyclic handler. The operating status of the target cyclic handler and the remaining time  
before it starts next time are inspected.  
- 56 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
4.1.13  
Alarm Handler Function  
The alarm handler is a time event handler that is started only once at a specified time.  
Use of the alarm handler makes it possible to perform time-dependent processing. The time of day is specified by a relative  
time. Figure 4.23 shows a typical operation of the alarm handler.  
Start  
Start  
Stop  
Alarm handler  
created  
operating  
operating  
operating  
Activation  
time  
Activation  
time  
Handler starts  
Handler does  
not start  
Figure 4.23 Typical operation of the alarm handler  
Start Alarm Handler Operation (sta_alm, ista_alm)  
Causes the alarm handler with the specified ID to operational state.  
Stop alarm Handler Operation (stp_alm, istp_alm)  
Causes the alarm handler with the specified ID to non-operational state.  
Reference Alarm Handler Status (ref_alm, iref_alm)  
Refers to the status of the alarm handler. The operating status of the target alarm handler and the remaining time  
before it starts are inspected.  
- 57 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
4.1.14  
System Status Management Function  
Rotate Task Precedence (rot_rdq, irot_rdq)  
This service call establishes the TSS (time-sharing system). That is, if the ready queue is rotated at regular inter-  
vals, round robin scheduling required for the TSS is accomplished (See Figure 4.24)  
Priority  
taskA  
taskB  
taskD  
taskC  
taskE  
taskF  
Move the end of the queue  
Figure 4.24 Ready Queue Management by rot_rdq Service Call  
Reference task ID in the RUNNING state(get_tid, iget_tid)  
References the ID number of the task in the RUNNING state. If issued from the handler, TSK_NONE(=0) is ob-  
tained instead of the ID number.  
Lock the CPU (loc_cpu, iloc_cpu)  
Places the system into a CPU locked state.  
Unlock the CPU (unl_cpu, iunl_cpu)  
Frees the system from a CPU locked state.  
Disable dispatching (dis_dsp)  
Places the system into a dispatching disabled state.  
Enable dispatching (ena_dsp)  
Frees the system from a dispatching disabled state.  
Reference context (sns_ctx)  
Gets the context status of the system.  
Reference CPU state (sns_loc)  
Gets the CPU lock status of the system.  
Reference dispatching state (sns_dsp)  
Gets the dispatching disable status of the system.  
Reference dispatching pending state (sns_dpn)  
Gets the dispatching pending status of the system.  
- 58 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
4.1.15  
Interrupt Management Function  
The interrupt management function provides a function to process requested external interrupts in real time.  
The interrupt management service calls provided by the MR100 kernel include the following:  
Returns from interrupt handler (ret_int)  
The ret_int service call activates the scheduler to switch over tasks as necessary when returning from the interrupt  
handler.  
When using the C language,31, this function is automatically called at completion of the handler function. In this  
case, therefore, there is no need to invoke this service call.  
Figure 4.25 shows an interrupt processing flow. Processing a series of operations from task selection to register restoration  
is called a "scheduler.".  
TaskA  
Interrupt  
Save Registers  
Handler Processing  
#pragma INTHANDLER Declare  
(C language)  
iwup_tsk  
ret_int  
Task Selection  
TaskB  
Restore Registers  
Figure 4.25 Interrupt process flow  
31  
In the case that the interruput handler is specified by "#pragma INTHANDLER".  
- 59 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
4.1.16  
System Configuration Management Function  
This function inspects the version information of MR100.  
References Version Information(ref_ver, iref_ver)  
The ref_ver service call permits the user to get the version information of MR100. This version information can  
be obtained in the standardized format of µITRON specification.  
4.1.17  
Extended Function (Short Data Queue)  
The short data queue is a function outside the scope of µITRON 4.0 Specification. The data queue function handles data as  
consisting of 32 bits, whereas the short data queue handles data as consisting of 16 bits. Both behave the same way except  
only that the data sizes they handle are different.  
Send to Short Data Queue (vsnd_dtq, vtsnd_dtq)  
The data is transmitted to the short data queue. If the short data queue is full of data, the task goes to a data trans-  
mission wait state.  
Send to Short Data Queue (vpsnd_dtq, vipsnd_dtq)  
The data is transmitted to the short data queue. If the short data queue is full of data, the task returns error code  
without going to a data transmission wait state.  
Forced Send to Short Data Queue (vfsnd_dtq, vifsnd_dtq)  
The data is transmitted to the short data queue. If the short data queue is full of data, the data at the top of the  
short data queue or the oldest data is removed, and the transmitted data is stored at the tail of the short data queue.  
Receive from Short Data Queue(vrcv_dtq, vtrcv_dtq)  
The data is retrieved from the short data queue. If the short data queue has no data in it, the task is kept waiting  
until data is transmitted to the short data queue.  
Receive from Short Data Queue (vprcv_dtq, viprcv_dtq)  
The data is received from the short data queue. If the short data queue has no data in it, the task returns error code  
without going to a data reception wait state.  
Reference Short Data Queue Status (vref_dtq, viref_dtq)  
Checks to see if there are any tasks waiting for data to be entered in the target short data queue and refers to the  
number of the data in the short data queue.  
- 60 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
4.1.18  
Extended Function (Reset Function)  
The reset function is a function outside the scope of µITRON 4.0 Specification. It initializes the mailbox, data queue, and  
memory pool, etc.  
Clear Data Queue Area (vrst_dtq)  
Initializes the data queue. If there are any tasks waiting for transmission, they are freed from WAITING state and  
the error code EV_RST is returned.  
Clear Mailbox Area (vrst_mbx)  
Initializes the mailbox.  
Clear Fixed-size Memory Pool Area (vrst_mpf)  
Initializes the fixed-size memory pool. If there are any tasks in WAITING state, they are freed from the WAIT-  
ING state and the error code EV_RST is returned.  
Clear Variable-size Memory Pool Area (vrst_mpl)  
Initializes the variable length memory pool.  
Clear Short Data Queue Area (vrst_vdtq)  
Initializes the short data queue. If there are any tasks waiting for transmission, they are freed from WAITING  
state and the error code EV_RST is returned.  
- 61 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
Download from Www.Somanuals.com. All Manuals Search And Download.  
5. Service call reffernce  
5.1 Task Management Function  
Specifications of the task management function of MR100 are listed in Table 5.1 below. The task description languages in  
item No. 4 are those specified in the GUI configurator. They are not output to a configuration file, nor are the MR100 ker-  
nel concerned with them.  
The task stack permits a section name to be specified for each task individually.  
Table 5.1 Specifications of the Task Management Function  
No.  
1
Item  
Content  
Task ID  
1-255  
1-255  
2
Task priority  
3
Maximum number of activation request count 255  
TA_HLNG : Tasks written in high-level language  
4
5
Task attribute  
TA_ASM :  
Tasks written in assem-bly language  
Startup attribute  
TA_ACT:  
Task stack  
Section specifiable  
Table 5.2 List of Task Management Function Service Call  
Service Call Function System State  
No.  
T
N
E
D
U
L
1
2
3
4
5
6
7
8
9
act_tsk  
iact_tsk  
can_act  
ican_act  
sta_tsk  
ista_tsk  
ext_tsk  
ter_tsk  
[S]  
[S]  
[S]  
Activates task  
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
Cancels task activation request  
[B]  
Starts task and specifies start code  
[S][B]  
[S][B]  
[S][B]  
Exits current task  
Forcibly terminates a task  
Changes task priority  
O
O
O
O
chg_pri  
ichg_pri  
get_pri  
10  
11  
O
[S]  
Refers to task priority  
O
12  
13  
14  
15  
16  
iget_pri  
ref_tsk  
iref_tsk  
ref_tst  
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
Refers to task state  
O
O
Refers to task state (simple ver-  
sion)  
iref_tst  
- 63 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 64 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
act_tsk  
iact_tsk  
Activate task  
Activate task (handler only)  
[[ C Language API ]]  
ER ercd = act_tsk( ID tskid );  
ER ercd = iact_tsk( ID tskid );  
z Parameters  
ID  
ID number of the task to be started  
skid  
z Return parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
act_tsk TSKID  
iact_tsk TSKID  
z Parameters  
TSKID  
ID number of the task to be started  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
Task ID  
[[ Error Code ]]  
E_QOVR  
Queuing overflow  
- 65 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Functional description ]]  
This service call starts the task indicated by tskid. The started task goes from DORMANT state to READY state or RUN-  
NING state.  
The following lists the processing performed on startup.  
1. Initializes the current priority of the task.  
2. Clears the number of queued wakeup requests.  
3. Clears the number of suspension requests.  
Specifying tskid=TSK_SELF(0) specifies the issuing task itself. The task has passed to it as parameter the extended infor-  
mation of it that was specified when the task was created. If TSK_SELF is specified for tskid in non-task context, operation  
of this service call cannot be guaranteed.  
If the target task is not in DORMANT state, a task activation request by this service call is enqueued. In other words, the  
activation request count is incremented by 1. The maximum value of the task activation request is 255. If this limit is ex-  
ceeded, the error code E_QOVR is returned.  
If TSK_SELF is specified for tskid, the issuing task itself is made the target task.  
If this service call is to be issued from task context, use act_tsk; if issued from non-task context, use iact_tsk.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task1( VP_INT stacd )  
{
ER ercd;  
:
ercd = act_tsk( ID_task2 );  
:
}
void task2( VP_INT stacd )  
{
:
ext_tsk();  
}
<<Example statement in assembly language>>  
.INCLUDE  
.GLB  
mr100.inc  
task  
task:  
:
PUSH.W  
act_tsk  
R2  
#ID_TASK3  
:
- 66 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
can_act  
ican_act  
Cancel task activation request  
Cancel task activation request (handler only)  
[[ C Language API ]]  
ER_UINT actcnt = can_act( ID tskid );  
ER_UINT actcnt = ican_act( ID tskid );  
z Parameters  
ID  
tskid  
ID number of the task to cancel  
z Return Parameters  
ER_UINT  
actcnt > 0  
actcnt < 0  
Canceled activation request count  
Error code  
[[ Assembly language API ]]  
.include mr100.inc  
can_act TSKID  
ican_act TSKID  
z Parameters  
TSKID  
ID number of the task to cancel  
z Register contents after service call is issued  
Register  
name  
Content after service call is issued  
R2R0  
Canceled startup request count or error code  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call finds the number of task activation requests enqueued for the task indicated by tskid, returns the result as a  
return parameter, and at the same time invalidates all of the task’s activation requests.  
Specifying tskid=TSK_SELF(0) specifies the issuing task itself. If TSK_SELF is specified for tskid in non-task context,  
operation of this service call cannot be guaranteed.  
This service call can be invoked for a task in DORMANT state as the target task. In that case, the return parameter is 0.  
If this service call is to be issued from task context, use can_act; if issued from non-task context, use ican_act.  
- 67 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task1()  
{
ER_UINT actcnt;  
:
actcnt = can_act( ID_task2 );  
:
}
void task2()  
{
:
ext_tsk();  
}
<<Example statement in assembly language>>  
.INCLUDE  
.GLB  
mr100.inc  
task  
task:  
:
can_act  
#ID_TASK2  
:
- 68 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
sta_tsk  
ista_tsk  
Activate task with a start code  
Activate task with a start code (handler only)  
[[ C Language API ]]  
ER ercd = sta_tsk( ID tskid,VP_INT stacd );  
ER ercd = ista_tsk ( ID tskid,VP_INT stacd );  
z Parameters  
ID  
tskid  
ID number of the target task  
Task start code  
VP_INT  
stacd  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
sta_tsk TSKID,STACD  
ista_tsk TSKID,STACD  
z Parameters  
TSKID  
ID number of the target task  
STATCD  
Task start code  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
Error code  
R3R1  
R2  
Task start code  
ID number of the target task  
[[ Error code ]]  
E_OBJ  
Object status invalid (task indicated by tskid is not DOMANT state)  
- 69 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Functional description ]]  
This service call starts the task indicated by tskid. In other words, it places the specified task from DORMANT state into  
READY state or RUNNING state. This service call does not enqueue task activation requests. Therefore, if a task activa-  
tion request is issued while the target task is not DORMANT state, the error code E_OBJ is returned to the service call is-  
suing task. This service call is effective only when the specified task is in DORMANT state. The task start code stacd is 32  
bits long. This task start code is passed as parameter to the activated task.  
If a task is restarted that was once terminated by ter_tsk or ext_tsk, the task performs the following as it starts up.  
1. Initializes the current priority of the task.  
2. Clears the number of queued wakeup requests.  
3. Clears the number of nested forcible wait requests.  
If this service call is to be issued from task context, use sta_tsk; if issued from non-task context, use ista_tsk.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
ER ercd;  
VP_INT stacd = 0;  
ercd = sta_tsk( ID_task2, stacd );  
:
}
void task2(VP_INT msg)  
{
if(msg == 0)  
:
}
<<Example statement in assembly language>>  
.INCLUDE  
.GLB  
mr100.inc  
task  
task:  
:
PUSHM  
PUSH.W  
sta_tsk  
R3R1  
R2  
#ID_TASK4,#100  
:
- 70 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
ext_tsk  
Terminate invoking task  
[[ C Language API ]]  
ER ercd = ext_tsk();  
z Parameters  
None  
z Return Parameters  
Not return from this service call  
[[ Assembly language API ]]  
.include mr100.inc  
ext_tsk  
z Parameters  
None  
z Register contents after service call is issued  
Not return from this service call  
[[ Error code ]]  
Not return from this service call  
[[ Functional description ]]  
This service call terminates the invoking task. In other words, it places the issuing task from RUNNING state into DOR-  
MANT state. However, if the activation request count for the issuing task is 1 or more, the activation request count is  
decremented by 1, and processing similar to that of act_tsk or iact_tsk is performed. In that case, the task is placed from  
DORMANT state into READY state. The task has its extended information passed to it as parameter when the task starts  
up.  
This service call is designed to be issued automatically at return from a task.  
In the invocation of this service call, the resources the issuing task had acquired previously (e.g., semaphore) are not re-  
leased.  
This service call can only be used in task context. This service call can be used even in a CPU locked state, but cannot be  
used in non-task context.  
- 71 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task(void)  
{
:
ext_tsk();  
}
<<Example statement in assembly language>>  
.INCLUDE  
.GLB  
mr100.inc  
task  
task:  
:
ext_tsk  
- 72 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
ter_tsk  
Terminate task  
[[ C Language API ]]  
ER ercd = ter_tsk( ID tskid );  
z Parameters  
ID  
tskid  
ID number of the forcibly terminated task  
Terminated normally (E_OK) or error code  
z Return Parameters  
ER  
ercd  
[[ Assembly language API ]]  
.include mr100.inc  
ter_tsk TSKID  
z Parameters  
TSKID  
ID number of the forcibly terminated task  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
ID number of the target task  
[[ Error code ]]  
E_OBJ  
Object status invalid(task indicated by tskid is an inactive state)  
E_ILUSE  
Service call improperly used task indicated by tskid is the issuing task itself)  
[[ Functional description ]]  
This service call terminates the task indicated by tskid. If the activation request count of the target task is equal to or greater  
than 1, the activation request count is decremented by 1, and processing similar to that of act_tsk or iact_tsk is performed.  
In that case, the task is placed from DORMANT state into READY state. The task has its extended information passed to it  
as parameter when the task starts up.  
If a task specifies its own task ID or TSK_SELF, an E_ILUSE error is returned.  
If the specified task was placed into WAITING state and has been enqueued in some waiting queue, the task is dequeued  
from it by execution of this service call. However, the semaphore and other resources the specified task had acquired pre-  
viously are not released.  
If the task indicated by tskid is in DORMANT state, it returns the error code E_OBJ as a return value for the service call.  
This service call can only be used in task context, and cannot be used in non-task context.  
- 73 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
ter_tsk( ID_main );  
:
}
<<Example statement in assembly language>>  
.INCLUDE  
.GLB  
mr100.inc  
task  
task:  
:
PUSH.W  
ter_tsk  
R2  
#ID_TASK3  
:
- 74 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
chg_pri  
ichg_pri  
Change task priority  
Change task priority(handler only)  
[[ C Language API ]]  
ER ercd = chg_pri( ID tskid, PRI tskpri );  
ER ercd = ichg_pri( ID tskid, PRI tskpri );  
z Parameters  
ID  
tskid  
ID number of the target task  
Priority of the target task  
PRI  
tskpri  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
chg_pri TSKID,TSKPRI  
ichg_pri TSKID,TSKPRI  
z Parameters  
TSKID  
ID number of the target task  
TSKPRI  
Priority of the target task  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R3  
R2  
Error code  
Priority of the target task  
ID number of the target task  
[[ Error code ]]  
E_OBJ  
Object status invalid(task indicated by tskid is an inactive state)  
- 75 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Functional description ]]  
The priority (base priority) of the task specified by tskid is changed to the value indicated by tskpri, and tasks are resched-  
uled based on the result of change.  
If this service call is executed on a task queued in a ready queue (including a task under execution) or a task in a wait queue  
in which tasks are queued in order of priority, the object task is moved to the tail end of the tasks of relevant priority in the  
queue. When the same priority as before is specified, the object task is moved to the tail end of that queue also.  
The smaller the number, the higher the task priority, with numeral 1 assigned the highest priority. The minimum numeric  
value specifiable as priority is 1. Furthermore, the maximum value of priority is the one specified in a configuration file,  
and the specifiable range of priority is 1 to 255. For example, if the following statement is written in a configuration file,  
system{  
stack_size  
priority  
= 0x100;  
= 13;  
};  
then the specifiable range of priority is 1 to 13.  
If TSK_SELF is specified, the priority (base priority) of the issuing task is changed. If TSK_SELF is specified for tskid in a  
non-task context, the program operation cannot be guaranteed. If TPRI_INI is specified, the priority of a task is changed to  
its startup priority specified when it is generated. The changed task priority (base priority) remains effective until the task  
terminates or this service call is reexecuted.  
If the task indicated by tskid is in an inactive (DORMANT) state, error code E_OBJ is returned as the service call's return  
value.  
To use these service calls from task contexts, be sure to use chg_pri; to use them from non-task contexts, be sure to use  
ichg_pri.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
chg_pri( ID_task2, 2 );  
:
}
<<Example statement in assembly language>>  
.INCLUDE  
.GLB  
mr100.inc  
task  
task:  
:
PUSH.W  
PUSH.W  
chg_pri  
R2  
R3  
#ID_TASK3,#1  
:
- 76 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
get_pri  
iget_pri  
Reference task priority  
Reference task priority(handler only)  
[[ C Language API ]]  
ER ercd = get_pri( ID tskid, PRI *p_tskpri );  
ER ercd = iget_pri( ID tskid, PRI *p_tskpri );  
z Parameters  
ID  
tskid  
ID number of the target task  
PRI  
*p_tskpri  
Pointer to the area to which task priority is returned  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
get_pri TSKID  
iget_pri TSKID  
z Parameters  
TSKID  
ID number of the target task  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
Acquired task priority  
[[ Error code ]]  
E_OBJ  
Object status invalid(task indicated by tskid is an inactive state)  
[[ Functional description ]]  
This service call returns the priority of the task indicated by tskid to the area indicated by p_tskpri. If TSK_SELF is speci-  
fied, the priority of the issuing task itself is acquired. If TSK_SELF is specified for tskid in non-task context, operation of  
the service call cannot be guaranteed.  
If the task indicated by tskid is in DORMANT state, it returns the error code E_OBJ as a return value for the service call.  
If this service call is to be issued from task context, use get_pri; if issued from non-task context, use iget_pri.  
- 77 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
PRI p_tskpri;  
ER ercd;  
:
ercd = get_pri( ID_task2, &p_tskpri );  
:
}
<<Example statement in assembly language>>  
.INCLUDE  
.GLB  
mr100.inc  
task  
task:  
:
get_pri  
#ID_TASK2  
:
- 78 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
ref_tsk  
iref_tsk  
Reference task status  
Reference task status (handler only)  
[[ C Language API ]]  
ER ercd = ref_tsk( ID tskid, T_RTSK *pk_rtsk );  
ER ercd = iref_tsk( ID tskid, T_RTSK *pk_rtsk );  
z Parameters  
ID  
tskid  
ID number of the target task  
T_RTSK  
*pk_rtsk  
Pointer to the packet to which task status is returned  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
Contents of pk_rtsk  
typedef struct  
STAT tskstat  
t_rtsk{  
+0  
2
2
2
2
2
4
4
4
4
Task status  
Current priority of task  
Base priority of task  
Cause of wait  
PRI  
PRI  
STAT  
ID  
tskpri  
+2  
+4  
+6  
+8  
+10  
+14  
+18  
+22  
tskbpri  
tskwait  
wobjid  
lefttmo  
actcnt  
Waiting object ID  
TMO  
Left time before timeout  
Number of queued activation request counts  
Number of queued wakeup request counts  
Number of nested suspension request counts  
UINT  
UINT  
UINT  
} T_RTSK;  
wupcnt  
suscnt  
[[ Assembly language API ]]  
.include mr100.inc  
ref_tsk TSKID, PK_RTSK  
iref_tsk TSKID, PK_RTSK  
z Parameters  
TSKID  
ID number of the target task  
PK_RTSK  
Pointer to the packet to which task status is returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
ID number of the target task  
Pointer to the packet to which task status is returned  
[[ Error code ]]  
None  
- 79 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Functional description ]]  
This service call inspects the status of the task indicated by tskid and returns the current information on that task to the area  
pointed to by pk_rtsk as a return parameter. If TSK_SELF is specified, the status of the issuing task itself is inspected. If  
TSK_SELF is specified for tskid in non-task context, operation of the service call cannot be guaranteed.  
tskstat (task status)  
tskstat has one of the following values returned to it depending on the status of the specified task.  
TTS_RUN(0x0001)  
TTS_RDY(0x0002)  
TTS_WAI(0x0004)  
TTS_SUS(0x0008)  
TTS_WAS(0x000C)  
TTS_DMT(0x0010)  
RUNNING state  
READY state  
WAITING state  
SUSPENDED state  
WAITING-SUSPENDED state  
DORMANT state  
tskpri (current priority of task)  
tskpri has the current priority of the specified task returned to it. If the task is in DOMANT state, tskpri is  
indeterminate.  
tskbpri (base priority of task)  
tskbpri has the base priority of the specified task returned to it. If the task is in DOMANT state, tskbpri  
is indeterminate.  
tskwait (cause of wait)  
If the target task is in a wait state, one of the following causes of wait is returned. The values of the re-  
spective causes of wait are listed below. If the task status is other than a wait state (TTS_WAI or  
TTS_WAS), tskwait is indeterminate.  
TTW_SLP (0x0001)  
TTW_DLY (0x0002)  
TTW_SEM (0x0004)  
TTW_FLG (0x0008)  
TTW_SDTQ(0x0010)  
TTW_RDTQ(0x0020)  
TTW_MBX (0x0040)  
TTW_MPF (0x2000)  
Kept waiting by slp_tsk or tslp_tsk  
Kept waiting by dly_tsk  
Kept waiting by wai_sem or twai_sem  
Kept waiting by wai_flg or twai_flg  
Kept waiting by snd_dtq or tsnd_dtq  
Kept waiting by rcv_dtq or trcv_dtq  
Kept waiting by rcv_mbx or trcv_mbx  
Kept waiting by get_mpf or tget_mpf  
TTW_VSDTQ (0x4000) Kept waiting by vsnd_dtq or vtsnd_dtq32  
TTW_VRDTQ(0x8000) Kept waiting by vrcv_dtq or vtrcv_dtq  
wobjid (waiting object ID)  
If the target task is in a wait state (TTS_WAI or TTS_WAS), the ID of the waiting target object is re-  
turned. Otherwise, wobjid is indeterminate.  
lefttmo(left time before timeout)  
If the target task has been placed in WAITING state (TTS_WAI or TTS_WAS) by other than dly_tsk,  
the left time before it times out is returned. If the task is kept waiting perpetually, TMO_FEVR is re-  
turned. Otherwise, lefttmo is indeterminate.  
actcnt(task activation request)  
The number of currently queued task activation request is returned.  
wupcnt (wakeup request count)  
The number of currently queued wakeup requests is returned. If the task is in DORMANT state, wupcnt  
is indeterminate.  
suscnt (suspension request count)  
The number of currently nested suspension requests is returned. If the task is in DORMANT state,  
suscnt is indeterminate.  
If this service call is to be issued from task context, use ref_tsk; if issued from non-task context, use iref_tsk.  
32  
TTW_VSDTQ and TTW_VRDTQ are the causes of wait outside the scope of µITRON 4.0 Specification.  
- 80 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
T_RTSK rtsk;  
ER ercd;  
:
ercd = ref_tsk( ID_main, &rtsk );  
:
}
<<Example statement in assembly language>>  
_refdata:  
.blkb 26  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
PUSH.L  
ref_tsk  
:
R2  
A1  
#TSK_SELF,#_refdata  
- 81 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
ref_tst  
iref_tst  
Reference task status (simplified version)  
Reference task status (simplified version, handler  
only)  
[[ C Language API ]]  
ER ercd = ref_tst( ID tskid, T_RTST *pk_rtst );  
ER ercd = iref_tst( ID tskid, T_RTST *pk_rtst );  
z Parameters  
ID  
tskid  
ID number of the target task  
T_RTST  
*pk_rtst  
Pointer to the packet to which task status is returned  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
Contents of pk_rtsk  
typedef struct  
STAT tskstat  
tskwait  
t_rtst{  
+0  
+2  
2
2
Task status  
Cause of wait  
STAT  
} T_RTST;  
[[ Assembly language API ]]  
.include mr100.inc  
ref_tst TSKID, PK_RTST  
iref_tst TSKID, PK_RTST  
z Parameters  
TSKID  
ID number of the target task  
PK_RTST  
Pointer to the packet to which task status is returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
A0  
A1  
Error code  
ID number of the target task  
Pointer to the packet to which task status is returned  
[[ Error code ]]  
None  
- 82 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Functional description ]]  
This service call inspects the status of the task indicated by tskid and returns the current information on that task to the area  
pointed to by pk_rtst as a return value. If TSK_SELF is specified, the status of the issuing task itself is inspected. If  
TSK_SELF is specified for tskid in non-task context, operation of the service call cannot be guaranteed.  
tskstat (task status)  
tskstat has one of the following values returned to it depending on the status of the specified task.  
TTS_RUN(0x0001)  
TTS_RDY(0x0002)  
TTS_WAI(0x0004)  
TTS_SUS(0x0008)  
TTS_WAS(0x000C)  
TTS_DMT(0x0010)  
RUNNING state  
READY state  
WAITING state  
SUSPENDED state  
WAITING-SUSPENDED state  
DORMANT state  
tskwait (cause of wait)  
If the target task is in a wait state, one of the following causes of wait is returned. The values of the respective  
causes of wait are listed below. If the task status is other than a wait state (TTS_WAI or TTS_WAS), tskwait is  
indeterminate.  
TTW_SLP (0x0001)  
TTW_DLY (0x0002)  
TTW_SEM (0x0004)  
TTW_FLG (0x0008)  
TTW_SDTQ(0x0010)  
TTW_RDTQ(0x0020)  
TTW_MBX (0x0040)  
TTW_MPF (0x2000)  
Kept waiting by slp_tsk or tslp_tsk  
Kept waiting by dly_tsk  
Kept waiting by wai_sem or twai_sem  
Kept waiting by wai_flg or twai_flg  
Kept waiting by snd_dtq or tsnd_dtq  
Kept waiting by rcv_dtq or trcv_dtq  
Kept waiting by rcv_mbx or trcv_mbx  
Kept waiting by get_mpf or tget_mpf  
TTW_VSDTQ (0x4000) Kept waiting by vsnd_dtq or vtsnd_dtq33  
TTW_VRDTQ(0x8000) Kept waiting by vrcv_dtq or vtrcv_dtq  
If this service call is to be issued from task context, use ref_tst; if issued from non-task context, use iref_tst.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
T_RTST rtst;  
ER ercd;  
:
ercd = ref_tst( ID_main, &rtst );  
:
}
<<Example statement in assembly language>>  
_refdata:  
.blkb 4  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
PUSH.L  
ref_tst  
:
R2  
A1  
#ID_TASK2,#_refdata  
33  
TTW_VSDTQ and TTW_VRDTQ are the causes of wait outside the scope of µITRON 4.0 Specification.  
- 83 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
5.2 Task Dependent Synchronization Function  
Specifications of the task-dependent synchronization function are listed in below.  
Table 5.3 Specifications of the Task Dependent Synchronization Function  
No.  
1
2
Item  
Content  
255  
1
Maximum value of task wakeup request count  
Maximum number of nested forcible task wait requests count  
Table 5.4 List of Task Dependent Synchronization Service Call  
No.  
Service Call  
Function  
System State  
T
O
O
O
N
E
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
D
U
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
L
1
2
3
4
5
6
7
8
9
10  
11  
12  
13  
14  
15  
slp_tsk  
[S][B]  
[S]  
[S][B]  
[S][B]  
[B]  
Puts task to sleep  
Puts task to sleep (with timeout)  
tslp_tsk  
wup_tsk  
iwup_tsk  
can_wup  
ican_wup  
rel_wai  
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
[S][B]  
[S][B]  
[S][B]  
Releases task from waiting  
Suspends task  
irel_wai  
sus_tsk  
isus_tsk  
rsm_tsk  
irsm_tsk  
frsm_tsk  
ifrsm_tsk  
dly_tsk  
[S][B]  
[S]  
Wakes up task  
Cancels wakeup request  
Delays task  
[S][B]  
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 84 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
slp_tsk  
tslp_tsk  
Put task to sleep  
Put task to sleep (with timeout)  
[[ C Language API ]]  
ER ercd = slp_tsk();  
ER ercd = tslp_tsk( TMO tmout );  
z Parameters  
z slp_tsk  
None  
z tslp_tsk  
TMO  
tmout  
Timeout value  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
slp_tsk  
tslp_tsk TMO  
z Parameters  
TMO  
Timeout value  
z Register contents after service call is issued  
tslp_tsk  
Register name  
Content after service call is issued  
Error code  
R0  
R6R4  
Timeout value  
slp_tsk  
Register name  
Content after service call is issued  
Error code  
R0  
[[ Error code ]]  
E_TMOUT  
E_RLWAI  
Timeout  
Forced release from waiting  
- 85 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Functional description ]]  
This service call places the issuing task itself from RUNNING state into sleeping wait state. The task placed into WAIT-  
ING state by execution of this service call is released from the wait state in the following cases:  
When a task wakeup service call is issued from another task or an interrupt  
The error code returned in this case is E_OK.  
When a forcible awaking service call is issued from another task or an interrupt  
The error code returned in this case is E_RLWAI.  
When the first time tick occurred after tmout elapsed (for tslp_tsk)  
The error code returned in this case is E_TMOUT.  
If the task receives sus_tsk issued from another task while it has been placed into WAITING state by this service call, it  
goes to WAITING-SUSPENDED state. In this case, even when the task is released from WAITING state by a task wakeup  
service call, it still remains in SUSPENDED state, and its execution cannot be resumed until rsm_tsk is issued.  
The service call tslp_tsk may be used to place the issuing task into sleeping state for a given length of time by specifying  
tmout in a parameter to it. The parameter tmout is expressed in ms units. For example, if this service call is written as  
tslp_tsk(10);, then the issuing task is placed from RUNNING state into WAITING state for a period of 10 ms. If specified  
as tmout =TMO_FEVR(–1), the task will be kept waiting perpetually, with the service call operating the same way as  
slp_tsk.  
The values specified for tmout must be within (0x7FFFFFFF-time tick value). If any value exceeding this limit is specified,  
operation of the service call cannot be guaranteed.  
This service call can only be issued from task context, and cannot be issued from non-task context.  
- 86 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
if( slp_tsk() != E_OK )  
error(“Forced wakeup\n”);  
:
if( tslp_tsk( 10 ) == E_TMOUT )  
error(“time out\n”);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
slp_tsk  
:
PUSHM  
tslp_tsk  
:
R6R4  
#TMO_FEVR  
PUSHM  
tslp_tsk  
:
R6R4  
#100  
- 87 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
wup_tsk  
iwup_tsk  
Wakeup task  
Wakeup task (handler only)  
[[ C Language API ]]  
ER ercd = wup_tsk( ID tskid );  
ER ercd = iwup_tsk( ID tskid );  
z Parameters  
ID  
tskid  
ID number of the target task  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
wup_tsk TSKID  
iwup_tsk TSKID  
z Parameters  
TSKID  
ID number of the target task  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
ID number of the target task  
[[ Error code ]]  
E_OBJ  
Object status invalid(task indicated by tskid is an inactive state)  
Queuing overflow  
E_QOVR  
[[ Functional description ]]  
If the task specified by tskid has been placed into WAITING state by slp_tsk or tslp_tsk, this service call wakes up the task  
from WAITING state to place it into READY or RUNNING state. Or if the task specified by tskid is in WAIT-  
ING-SUSPENDED state, this service call awakes the task from only the sleeping state so that the task goes to SUS-  
PENDED state.  
If a wakeup request is issued while the target task remains in DORMANT state, the error code E_OBJ is returned to the  
service call issuing task. If TSK_SELF is specified for tskid, it means specifying the issuing task itself. If TSK_SELF is  
specified for tskid in non-task context, operation of the service call cannot be guaranteed.  
If this service call is issued to a task that has not been placed in WAITING state or in WAITING-SUSPENDED state by  
execution of slp_tsk or tslp_tsk, the wakeup request is accumulated. More specifically, the wakeup request count for the  
target task to be awakened is incremented by 1, in which way wakeup requests are accumulated.  
The maximum value of the wakeup request count is 255. If while the wakeup request count = 255 a new wakeup request is  
generated exceeding this limit, the error code E_QOVR is returned to the task that issued the service call, with the wakeup  
request count left intact.  
If this service call is to be issued from task context, use wup_tsk; if issued from non-task context, use iwup_tsk.  
- 88 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
if( wup_tsk( ID_main ) != E_OK )  
printf(“Can’t wakeup main()\n”);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
wup_tsk  
:
R2  
#ID_TASK1  
- 89 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
can_wup  
ican_wup  
Cancel wakeup request  
Cancel wakeup request (handler only)  
[[ C Language API ]]  
ER_UINT wupcnt = can_wup( ID tskid );  
ER_UINT wupcnt = ica_wup( ID tskid );  
z Parameters  
ID  
tskid  
ID number of the target task  
z Return Parameters  
ER_UINT  
wupcnt > 0  
wupcnt <0  
Canceled wakeup request count  
Error code  
[[ Assembly language API ]]  
.include mr100.inc  
can_wup TSKID  
ican_wup TSKID  
z Parameters  
TSKID  
ID number of the target task  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R2R0  
Error code,Canceled wakeup request count  
[[ Error code ]]  
E_OBJ  
Object status invalid(task indicated by tskid is an inactive state)  
[[ Functional description ]]  
This service call clears the wakeup request count of the target task indicated by tskid to 0. This means that because the tar-  
get task was in either WAITING state nor WAITING-SUSPENDED state when an attempt was made to wake it up by  
wup_tsk or iwup_tsk before this service call was issued, the attempt resulted in only accumulating wakeup requests and this  
service call clears all of those accumulated wakeup requests.  
Furthermore, the wakeup request count before being cleared to 0 by this service call, i.e., the number of wakeup requests  
that were issued in vain (wupcnt) is returned to the issuing task. If a wakeup request is issued while the target task is in  
DORMANT state, the error code E_OBJ is returned. If TSK_SELF is specified for tskid, it means specifying the issuing  
task itself. If TSK_SELF is specified for tskid in non-task context, operation of this service call cannot be guaranteed.  
If this service call is to be issued from task context, use can_wup; if issued from non-task context, use ican_wup.  
- 90 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
ER_UINT wupcnt;  
:
wupcnt = can_wup(ID_main);  
if( wup_cnt > 0 )  
printf(“wupcnt = %d\n”,wupcnt);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
can_wup  
:
#ID_TASK3  
- 91 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
rel_wai  
irel_wai  
Release task from waiting  
Release task from waiting (handler only)  
[[ C Language API ]]  
ER ercd = rel_wai( ID tskid );  
ER ercd = irel_wai( ID tskid );  
z Parameters  
ID  
tskid  
ID number of the target task  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
rel_wai TSKID  
irel_wai TSKID  
z Parameters  
TSKID  
ID number of the target task  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
ID number of the target task  
[[ Error code ]]  
E_OBJ  
Object status invalid(task indicated by tskid is not an wait state)  
[[ Functional description ]]  
This service call forcibly release the task indicated by tskid from waiting (except SUSPENDED state) to place it into  
READY or RUNNING state. The forcibly released task returns the error code E_RLWAI. If the target task has been en-  
queued in some waiting queue, the task is dequeued from it by execution of this service call.  
If this service call is issued to a task in WAITING-SUSPENDED state, the target task is released from WAITING state and  
goes to SUSPENDED state.34  
If the target task is not in WAITING state, the error code E_OBJ is returned. This service call forbids specifying the issuing  
task itself for tskid.  
If this service call is to be issued from task context, use rel_wai; if issued from non-task context, use irel_wai.  
34  
This means that tasks cannot be resumed from SUSPENDED state by this service call. Only the rsm_tsk, irsm_tsk, frsm_tsk, and  
ifrsm_tsk service calls can release them from SUSPENDED state.  
- 92 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
if( rel_wai( ID_main ) != E_OK )  
error(“Can’t rel_wai main()\n”);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
rel_wai  
:
R2  
#ID_TASK2  
- 93 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
sus_tsk  
isus_tsk  
Suspend task  
Suspend task (handler only)  
[[ C Language API ]]  
ER ercd = sus_tsk( ID tskid );  
ER ercd = isus_tsk( ID tskid );  
z Parameters  
ID  
tskid  
ID number of the target task  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
sus_tsk TSKID  
isus_tsk TSKID  
z Parameters  
TSKID  
ID number of the target task  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
ID number of the target task  
[[ Error code ]]  
E_OBJ  
Object status invalid(task indicated by tskid is an inactive state)  
Queuing overflow  
E_QOVR  
[[ Functional description ]]  
This service call aborts execution of the task indicated by tskid and places it into SUSPENDED state. Tasks are resumed  
from this SUSPENDED state by the rsm_tsk, irsm_tsk, frsm_tsk, or ifrsm_tsk service call. If the task indicated by tskid is  
in DORMANT state, it returns the error code E_OBJ as a return value for the service call.  
The maximum number of suspension requests by this service call that can be nested is 1. If this service call is issued to a  
task which is already in SUSPENDED state, the error code E_QOVR is returned.  
This service call forbids specifying the issuing task itself for tskid.  
If this service call is to be issued from task context, use sus_tsk; if issued from non-task context, use isus_tsk.  
- 94 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
if( sus_tsk( ID_main ) != E_OK )  
printf(“Can’t suspend task main()\n”);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
sus_tsk  
:
R2  
#ID_TASK2  
- 95 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
rsm_tsk  
irsm_tsk  
frsm_tsk  
ifrsm_tsk  
Resume suspended task  
Resume suspended task(handler only)  
Forcibly resume suspended task  
Forcibly resume suspended task(handler only)  
[[ C Language API ]]  
ER ercd = rsm_tsk( ID tskid );  
ER ercd = irsm_tsk( ID tskid );  
ER ercd = frsm_tsk( ID tskid );  
ER ercd = ifrsm_tsk( ID tskid );  
z Parameters  
ID  
tskid  
ID number of the target task  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
rsm_tsk TSKID  
irsm_tsk TSKID  
frsm_tsk TSKID  
ifrsm_tsk TSKID  
z Parameters  
TSKID  
ID number of the target task  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
ID number of the target task  
[[ Error code ]]  
E_OBJ  
Object status invalid(task indicated by tskid is not a forcible wait state)  
[[ Functional description ]]  
If the task indicated by tskid has been aborted by sus_tsk, this service call resumes the target task from SUSPENDED state.  
In this case, the target task is linked to behind the tail of the ready queue. In the case of frsm_tsk and ifrsm_tsk, the task is  
forcibly resumed from SUSPENDED state.  
If a request is issued while the target task is not in SUSPENDED state (including DORMANT state), the error code E_OBJ  
is returned to the service call issuing task.  
The rsm_tsk, irsm_tsk, frsm_tsk, and ifrsm_tsk service calls each operate the same way, because the maximum number of  
forcible wait requests that can be nested is 1.  
If this service call is to be issued from task context, use rsm_tsk/frsm_tsk; if issued from non-task context, use  
irsm_tsk/ifrsm_tsk.  
- 96 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task1()  
{
:
if( rsm_tsk( ID_main ) != E_OK )  
printf(“Can’t resume main()\n”);  
:
:
if(frsm_tsk( ID_task2 ) != E_OK )  
printf(“Can’t forced resume task2()\n”);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
rsm_tsk  
R2  
#ID_TASK2  
:
PUSH.W  
frsm_tsk  
:
R2  
#ID_TASK1  
- 97 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
dly_tsk  
Delay task  
[[ C Language API ]]  
ER ercd = dly_tsk(RELTIM dlytim);  
z Parameters  
RELTIM  
dlytim  
Delay time  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
dly_tsk RELTIM  
z Parameters  
RELTIM  
Delay time  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
Error code  
R6R4  
Delay time  
[[ Error code ]]  
E_RLWAI  
Forced release from waiting  
[[ Functional description ]]  
This service call temporarily stops execution of the issuing task itself for a duration of time specified by dlytim to place the  
task from RUNNING state into WAITING state. In this case, the task is released from the WAITING state at the first time  
tick after the time specified by dlytim has elapsed. Therefore, if specified dlytim = 0, the task is placed into WAITING state  
briefly and then released from the WAITING state at the first time tick.  
The task placed into WAITING state by invocation of this service call is released from the WAITING state in the following  
cases. Note that when released from WAITING state, the task that issued the service call is removed from the timeout  
waiting queue and linked to a ready queue.  
When the first time tick occurred after dlytim elapsed  
The error code returned in this case is E_OK.  
When the rel_wai or irel_wai service call is issued before dlytim elapses  
The error code returned in this case is E_RLWAI.  
Note that even when the wup_tsk or iwup_tsk service call is issued during the delay time, the task is not released from  
WAITING state.  
The delay time dlytim is expressed in ms units. Therefore, if specified as dly_tsk(50);, the issuing task is placed from  
RUNNING state into a delayed wait state for a period of 50 ms.  
The values specified for dlytim must be within (0x7FFFFFFF- time tick value). If any value exceeding this limit is speci-  
fied, the service call may not operate correctly.  
This service call can be issued only from task context. It cannot be issued from non-task context.  
- 98 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
if( dly_tsk() != E_OK )  
error(“Forced wakeup\n”);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSHM  
dly_tsk  
:
R6R4  
#500  
- 99 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
5.3 Synchronization & Communication Function (Semaphore)  
Specifications of the semaphore function of MR100 are listed in Table 5.5.  
Table 5.5 Specifications of the Semaphore Function  
No.  
1
Item  
Content  
Semaphore ID  
1-255  
2
Maximum number of resources  
1-65535  
TA_FIFO:  
TA_TPRI:  
Tasks enqueued in order of FIFO  
Tasks enqueued in order of priority  
3
Semaphore attribute  
Table 5.6 List of Semaphore Function Service Call  
Function  
No.  
Service Call  
System State  
T
O
N
O
E
O
O
O
O
O
O
O
O
D
O
O
U
O
O
O
O
O
O
O
O
L
1
2
3
4
5
6
7
8
sig_sem [S][B]  
isig_sem [S][B]  
wai_sem [S][B]  
pol_sem [S][B]  
ipol_sem  
twai_sem [S]  
ref_sem  
iref_sem  
Releases semaphore resource  
Acquires semaphore resource  
Acquires semaphore resource(polling)  
O
O
O
O
O
O
Acquires semaphore resource(with timeout)  
References semaphore status  
O
O
O
O
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 100 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
sig_sem  
isig_sem  
Release semaphore resource  
Release semaphore resource (handler only)  
[[ C Language API ]]  
ER ercd = sig_sem( ID semid );  
ER ercd = isig_sem( ID semid );  
z Parameters  
ID  
semid  
Semaphore ID number to which returned  
Terminated normally (E_OK) or error code  
z Return Parameters  
ER  
ercd  
[[ Assembly language API ]]  
.include mr100.inc  
sig_sem SEMID  
isig_sem SEMID  
z Parameters  
SEMID  
Semaphore ID number to which returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
Semaphore ID number to which returned  
[[ Error code ]]  
E_QOVR  
Queuing overflow  
[[ Functional description ]]  
This service call releases one resource to the semaphore indicated by semid.  
If tasks are enqueued in a waiting queue for the target semaphore, the task at the top of the queue is placed into READY  
state. Conversely, if no tasks are enqueued in that waiting queue, the semaphore resource count is incremented by 1. If an  
attempt is made to return resources (sig_sem or isig_sem service call) causing the semaphore resource count value to ex-  
ceed the maximum value specified in a configuration file (maxsem), the error code E_QOVR is returned to the service call  
issuing task, with the semaphore count value left intact.  
If this service call is to be issued from task context, use sig_sem; if issued from non-task context, use isig_sem.  
- 101 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
if( sig_sem( ID_sem ) == E_QOVR )  
error(“Overflow\n”);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
sig_sem  
:
R2  
#ID_SEM2  
- 102 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
wai_sem  
pol_sem  
ipol_sem  
twai_sem  
Acquire semaphore resource  
Acquire semaphore resource (polling)  
Acquire semaphore resource (polling, handler only)  
Acquire semaphore resource(with timeout)  
[[ C Language API ]]  
ER ercd = wai_sem( ID semid );  
ER ercd = pol_sem( ID semid );  
ER ercd = ipol_sem( ID semid );  
ER ercd = twai_sem( ID semid, TMO tmout );  
z Parameters  
ID  
semid  
Semaphore ID number to be acquired  
Timeout value (for twai_sem)  
TMO  
tmout  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
wai_sem SEMID  
pol_sem SEMID  
ipol_sem SEMID  
twai_sem SEMID,TMO  
z Parameters  
SEMID  
Semaphore ID number to be acquired  
TMO  
Timeout value(twai_sem)  
z Register contents after service call is issued  
wai_sem,pol_sem,ipol_sem  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
Semaphore ID number to be acquired  
twai_sem  
Register  
name  
Content after service call is issued  
R0  
Error code  
R2  
Semaphore ID number to be acquired  
Timeout value  
R6R4  
[[ Error code ]]  
E_RLWAI  
Forced release from waiting  
Polling failure or timeout  
E_TMOUT  
- 103 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
[[ Functional description ]]  
This service call acquires one semaphore resource from the semaphore indicated by semid.  
If the semaphore resource count is equal to or greater than 1, the semaphore resource count is decremented by 1, and the  
service call issuing task continues execution. On the other hand, if the semaphore count value is 0, the wai_sem or  
twai_sem service call invoking task is enqueued in a waiting queue for that semaphore. If the attribute of the semaphore  
semid is TA_TFIFO, the task is enqueued in order of FIFO; if TA_TPRI, the task is enqueued in order of priority. For the  
pol_sem and ipol_sem service calls, the task returns immediately and responds to the call with the error code E_TMOUT.  
For the twai_sem service call, specify a wait time for tmout in ms units. The values specified for tmout must be within  
(0x7FFFFFFF-time tick value). If any value exceeding this limit is specified, operation of the service call cannot be guar-  
anteed. If TMO_POL=0 is specified for tmout, it means specifying 0 as a timeout value, in which case the service call op-  
erates the same way as pol_sem. Furthermore, if specified as tmout=TMO_FEVR(–1), it means specifying an infinite wait,  
in which case the service call operates the same way as wai_sem.  
The task placed into WAITING state by execution of the wai_sem or twai_sem service call is released from the WAITING  
state in the following cases:  
When the sig_sem or isig_sem service call is issued before the tmout time elapses, with  
task-awaking conditions thereby satisfied  
The error code returned in this case is E_OK.  
When the first time tick occurred after tmout elapsed while task-awaking conditions remain un-  
satisfied  
The error code returned in this case is E_TMOUT.  
When the task is forcibly released from WAITING state by the rel_wai or irel_wai service call is-  
sued from another task or a handler  
The error code returned in this case is E_RLWAI.  
If this service call is to be issued from task context, use wai_sem, twai_sem, or pol_sem; ; if issued from non-task context,  
use ipol_sem.  
- 104 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
if( wai_sem( ID_sem ) != E_OK )  
printf(“Forced wakeup\n”);  
:
if( pol_sem( ID_sem ) != E_OK )  
printf(“Timeout\n”);  
:
if( twai_sem( ID_sem, 10 ) != E_OK )  
printf(“Forced wakeup or Timeout”n”);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
pol_sem  
:
R2  
#ID_SEM1  
PUSH.W  
wai_sem  
:
PUSH.W  
PUSH.L  
twai_sem  
:
R2  
#ID_SEM2  
R2  
R6R4  
#ID_SEM3,300  
- 105 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
ref_sem  
iref_sem  
Reference semaphore status  
Reference semaphore status (handler only)  
[[ C Language API ]]  
ER ercd = ref_sem( ID semid, T_RSEM *pk_rsem );  
ER ercd = iref_sem( ID semid, T_RSEM *pk_rsem );  
z Parameters  
ID  
semid  
ID number of the target semaphore  
T_RSEM  
*pk_rsem  
Pointer to the packet to which semaphore status is returned  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
T_RSEM  
*pk_rsem  
Pointer to the packet to which semaphore status is returned  
Contents of pk_rsem  
typedef struct  
ID wtskid  
semcnt  
t_rsem{  
+0  
+2  
2
4
ID number of the task at the head of the semaphore’s wait queue  
Current semaphore resource count  
UINT  
} T_RSEM;  
[[ Assembly language API ]]  
.include mr100.inc  
ref_sem SEMID, PK_RSEM  
iref_sem SEMID, PK_RSEM  
z Parameters  
SEMID  
ID number of the target semaphore  
PK_RSEM  
Pointer to the packet to which semaphore status is returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
ID number of the target semaphore  
Pointer to the packet to which semaphore status is returned  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call returns various statuses of the semaphore indicated by semid.  
wtskid  
Returned to wtskid is the ID number of the task at the head of the semaphore’s wait queue (the next task to be  
dequeued). If no tasks are kept waiting, TSK_NONE is returned.  
semcnt  
Returned to semcnt is the current semaphore resource count.  
If this service call is to be issued from task context, use ref_sem; if issued from non-task context, use iref_sem.  
- 106 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
T_RSEM rsem;  
ER ercd;  
:
ercd = ref_sem( ID_sem1, &rsem );  
:
}
<<Example statement in assembly language>>  
_ refsem:  
.blkb 6  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W R2  
PUSH.L A1  
ref_sem #ID_SEM1,#_refsem  
:
- 107 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
5.4 Synchronization & Communication Function (Eventflag)  
Specifications of the eventflag function of MR100 are listed in Table 5.7.  
Table 5.7 Specifications of the Eventflag Function  
No.  
1
Item  
Content  
Event0flag ID  
1-255  
2
Number of bits comprising eventflag  
Eventflag attribute  
32 bits  
3
TA_TFIFO:  
TA_TPRI:  
TA_WSGL:  
TA_WMUL:  
TA_CLR:  
Waiting tasks enqueued in order of FIFO  
Waiting tasks enqueued in order of priority  
Multiple tasks cannot be kept waiting  
Multiple tasks can be kept waiting  
Bit pattern cleared when waiting task is released  
Table 5.8 List of Eventflag Function Service Call  
No.  
Service Call  
Function  
System State  
T
O
N
O
O
E
O
O
O
O
O
O
O
O
O
O
D
O
O
O
O
U
O
O
O
O
O
O
O
O
O
O
L
1
2
3
set_flg  
iset_flg  
clr_flg  
[S][B]  
[S][B]  
[S][B]  
Sets eventflag  
Clears eventflag  
O
4
5
6
7
8
9
iclr_flg  
wai_flg  
pol_flg  
ipol_flg  
twai_flg  
ref_flg  
[S][B]  
[S][B]  
[S]  
Waits for eventflag  
Waits for eventflag (polling)  
O
O
O
O
O
O
[S]  
Waits for eventflag (with timeout)  
References eventflag status  
O
O
O
O
10  
iref_flg  
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 108 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
set_flg  
iset_flg  
Set eventflag  
Set eventflag (handler only)  
[[ C Language API ]]  
ER ercd = set_flg( ID flgid, FLGPTN setptn );  
ER ercd = iset_flg( ID flgid, FLGPTN setptn );  
z Parameters  
ID  
flgid  
ID number of the eventflag to be set  
Bit pattern to be set  
FLGPTN  
setptn  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
[[ Assembly language API ]]  
.include mr100.inc  
set_flg FLGID,SETPTN  
iset_flg FLGID,SETPTN  
z Parameters  
FLGID  
ID number of the eventflag to be set  
SETPTN  
Bit pattern to be set  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
Eventflag ID number  
Bit pattern to be set  
[[ Error code ]]  
None  
[[ Functional description ]]  
Of the 32-bit eventflag indicated by flgid, this service call sets the bits indicated by setptn. In other words, the value of the  
eventflag indicated by flgid is OR’d with setptn. If the alteration of the eventflag value results in task-awaking conditions  
for a task that has been kept waiting for the eventflag by the wai_flg or twai_flg service call becoming satisfied, the task is  
released from WAITING state and placed into READY or RUNNING state.  
Task-awaking conditions are evaluated sequentially beginning with the top of the waiting queue. If TA_WMUL is specified  
as an eventflag attribute, multiple tasks kept waiting for the eventflag can be released from WAITING state at the same  
time by one set_flg or iset_flg service call issued. Furthermore, if TA_CLR is specified for the attribute of the target event-  
flag, all bit patterns of the eventflag are cleared, with which processing of the service call is terminated.  
If all bits specified in setptn are 0, no operation will be performed for the target eventflag, in which case no errors are as-  
sumed, however.  
If this service call is to be issued from task context, use set_flg; if issued from non-task context, use iset_flg.  
- 109 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task(void)  
{
:
set_flg( ID_flg,(FLGPTN)0xff000000 );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
PUSH.L  
set_flg  
:
R2  
A1  
#ID_FLG3,#0ff000000H  
- 110 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
clr_flg  
iclr_flg  
Clear eventflag  
Clear eventflag (handler only)  
[[ C Language API ]]  
ER ercd = clr_flg( ID flgid, FLGPTN clrptn );  
ER ercd = iclr_flg( ID flgid, FLGPTN clrptn );  
z Parameters  
ID  
flgid  
ID number of the eventflag to be cleared  
Bit pattern to be cleared  
FLGPTN  
clrptn  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
[[ Assembly language API ]]  
.include mr100.inc  
clr_flg FLGID,CLRPTN  
iclr_flg FLGID,CLRPTN  
z Parameters  
FLGID  
ID number of the eventflag to be cleared  
CLRPTN  
Bit pattern to be cleared  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
ID number of the eventflag to be cleared  
Bit pattern to be cleared  
[[ Error code ]]  
None  
[[ Functional description ]]  
Of the 32-bit eventflag indicated by flgid, this service call clears the bits whose corresponding values in clrptn are 0. In  
other words, the eventflag bit pattern indicated by flgid is updated by AND’ing it with clrptn. If all bits specified in clrptn  
are 1, no operation will be performed for the target eventflag, in which case no errors are assumed, however.  
If this service call is to be issued from task context, use clr_flg; if issued from non-task context, use iclr_flg.35  
35  
When iclr_flg is issued from interruption generated during set_flg or iset_flg service call execution, the indivisibility of a service call is not  
guaranteed. That is, if there are two or more tasks which are waiting by the same bit pattern in the waiting queue, some tasks are released  
and some tasks are not released by the timing of interruption generating.  
- 111 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task(void)  
{
:
clr_flg( ID_flg,(FLGPTN) 0xf0f0f0f0);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
PUSH.L  
clr_flg  
:
R2  
A1  
#ID_FLG1,#0f0f0f0f0H  
- 112 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
wai_flg  
pol_flg  
ipol_flg  
twai_flg  
Wait for eventflag  
Wait for eventflag(polling)  
Wait for eventflag(polling, handler only)  
Wait for eventflag(with timeout)  
[[ C Language API ]]  
ER ercd = wai_flg( ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn );  
ER ercd = pol_flg( ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn );  
ER ercd = ipol_flg( ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn );  
ER ercd = twai_flg( ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn,  
TMO tmout );  
z Parameters  
ID  
flgid  
ID number of the eventflag waited for  
FLGPTN  
MODE  
FLGPTN  
TMO  
waiptn  
wfmode  
*p_flgptn  
tmout  
Wait bit pattern  
Wait mode  
Pointer to the area to which bit pattern is returned when released from wait  
Timeout value (for twai_flg)  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
FLGPTN  
*p_flgptn  
Pointer to the area to which bit pattern is returned when released from wait  
[[ Assembly language API ]]  
.include mr100.inc  
wai_flg FLGID, WAIPTN, WFMODE  
pol_flg FLGID, WAIPTN, WFMODE  
ipol_flg FLGID, WAIPTN, WFMODE  
twai_flg FLGID, WAIPTN, WFMODE, TMO  
z Parameters  
FLGID  
ID number of the eventflag waited for  
WAIPTN  
WFMODE  
TMO  
Wait bit pattern  
Wait mode  
Timeout value (for twai_flg)  
z Register contents after service call is issued  
wai_sem,pol_sem,ipol_sem  
Register name  
Content after service call is issued  
R0  
Error code  
R3R1  
R2  
bit pattern is returned when released from wait  
ID number of the eventflag waited for  
Wait bit pattern  
A1  
twai_sem  
Register name  
Content after service call is issued  
Error code  
R0  
R3R1  
R2  
bit pattern is returned when released from wait  
ID number of the eventflag waited for  
Timeout value  
R6R4  
A1  
Wait bit pattern  
- 113 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
[[ Error code ]]  
E_RLWAI  
Forced release from waiting  
E_TMOUT  
Polling failure or timeout or timed out  
E_ILUSE  
Service call improperly used (Tasks present waiting for TA_WSGL attribute eventflag)  
[[ Functional description ]]  
This service call waits until the eventflag indicated by flgid has its bits specified by waiptn set according to  
task-awaking conditions indicated by wfmode. Returned to the area pointed to by p_flgptn is the eventflag bit pat-  
tern at the time the task is released from WAITING state.  
If the target eventflag has the TA_WSGL attribute and there are already other tasks waiting for the eventflag, the  
error code E_ILUSE is returned.  
If task-awaking conditions have already been met when this service call is invoked, the task returns immediately and  
responds to the call with E_OK. If task-awaking conditions are not met and the invoked service call is wai_flg or  
twai_flg, the task is enqueued in an eventflag waiting queue. In that case, if the attribute of the specified eventflag is  
TA_TFIFO, the task is enqueued in order of FIFO; if TA_TPRI, the task is enqueued in order of priority. For the  
pol_flg and ipol_flg service calls, the task returns immediately and responds to the call with the error code  
E_TMOUT.  
For the twai_flg service call, specify a wait time for tmout in ms units. The values specified for tmout must be with-  
in (0x7FFFFFFF-time tick value). If any value exceeding this limit is specified, the service call may not operate  
correctly. If TMO_POL=0 is specified for tmout, it means specifying 0 as a timeout value, in which case the service  
call operates the same way as pol_flg. Furthermore, if specified as tmout=TMO_FEVR(–1), it means specifying an  
infinite wait, in which case the service call operates the same way as wai_flg.  
The task placed into a wait state by execution of the wai_flg or twai_flg service call is released from WAITING  
state in the following cases:  
When task-awaking conditions are met before the tmout time elapses  
The error code returned in this case is E_OK.  
When the first time tick occurred after tmout elapsed while task-awaking conditions remain  
unsatisfied  
The error code returned in this case is E_TMOUT.  
When the task is forcibly released from WAITING state by the rel_wai or irel_wai service call  
issued from another task or a handler  
The error code returned in this case is E_RLWAI.  
The following shows how wfmode is specified and the meaning of each mode.  
wfmdoe (wait mode)  
Meaning  
TWF_ANDW  
TWF_ORW  
Wait until all bits specified by waiptn are set (wait for the bits AND’ed)  
Wait until one of the bits specified by waiptn is set (wait for the bits OR’ed)  
If this service call is to be issued from task context, use wai_flg,twai_flg,pol_flg; if issued from non-task context,  
use ipol_flg.  
- 114 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
UINT flgptn;  
:
if(wai_flg(ID_flg2, (FLGPTN)0x00000ff0, TWF_ANDW, &flgptn)!=E_OK)  
error(“Wait Released\n”);  
:
:
if(pol_flg(ID_flg2, (FLGPTN)0x00000ff0, TWF_ORW, &flgptn)!=E_OK)  
printf(“Not set EventFlag\n”);  
:
:
if( twai_flg(ID_flg2, (FLGPTN)0x00000ff0, TWF_ANDW, &flgptn, 5) != E_OK )  
error(“Wait Released\n”);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
PUSH.L  
wai_flg  
:
R2  
A1  
#ID_FLG1,#00000003H,#TWF_ANDW  
PUSH.W  
PUSH.L  
pol_flg  
:
PUSH.W  
PUSH.L  
PUSHM  
wai_flg  
:
R2  
A1  
#ID_FLG2,#00000008H,#TWF_ORW  
R2  
A1  
R6R4  
#ID_FLG3,#00000003H,#TWF_ANDW,20  
- 115 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
ref_flg  
iref_flg  
Reference eventflag status  
Reference eventflag status (handler only)  
[[ C Language API ]]  
ER ercd = ref_flg( ID flgid, T_RFLG *pk_rflg );  
ER ercd = iref_flg( ID flgid, T_RFLG *pk_rflg );  
z Parameters  
ID  
flgid  
ID number of the target eventflag  
T_RFLG  
*pk_rflg  
Pointer to the packet to which eventflag status is returned  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
T_RFLG  
*pk_rflg  
Pointer to the packet to which eventflag status is returned  
Contents of pk_rflg  
typedef struct  
ID wtskid  
FLGPTN flgptn  
} T_RFLG;  
t_rflg{  
+0  
+2  
2
4
Reception waiting task ID  
Current eventflag bit pattern  
[[ Assembly language API ]]  
.include mr100.inc  
ref_flg FLGID, PK_RFLG  
iref_flg FLGID, PK_RFLG  
z Parameters  
FLGID  
ID number of the target eventflag  
PK_RFLG  
Pointer to the packet to which eventflag status is returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
ID number of the target eventflag  
Pointer to the packet to which eventflag status is returned  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call returns various statuses of the eventflag indicated by flgid.  
wtskid  
Returned to wtskid is the ID number of the task at the top of a waiting queue (the next task to be dequeued). If no  
tasks are kept waiting, TSK_NONE is returned.  
flgptn  
Returned to flgptn is the current eventflag bit pattern.  
If this service call is to be issued from task context, use ref_flg; if issued from non-task context, use iref_flg.  
- 116 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
T_RFLG rflg;  
ER ercd;  
:
ercd = ref_flg( ID_FLG1, &rflg );  
:
}
<<Example statement in assembly language>>  
_ refflg:  
.blkb 6  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W R2  
PUSH.L A1  
ref_flg #ID_FLG1,#_refflg  
:
- 117 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
5.5 Synchronization & Communication Function (Data Queue)  
Specifications of the data queue function of MR100 are listed in Table 5.9.  
Table 5.9 Specifications of the Data Queue Function  
No.  
1
Item  
Content  
Data queue ID  
1-255  
2
Capacity (data bytes) in data queue area  
Data size  
0-8191  
3
32 bits  
4
Data queue attribute  
TA_TFIFO:  
Waiting tasks enqueued in order of FIFO  
Waiting tasks enqueued in order of priority  
TA_TPRI:  
Table 5.10 List of Dataqueue Function Service Call  
No.  
Service Call  
Function  
System State  
T
O
N
O
O
E
O
O
O
O
O
O
O
O
O
O
O
O
D
U
O
O
O
O
O
O
O
O
O
O
O
O
L
1
2
snd_dtq  
psnd_dtq  
[S]  
[S]  
Sends to data queue  
Sends to data queue (polling)  
O
O
3
ipsnd_dtq [S]  
O
4
5
tsnd_dtq  
fsnd_dtq  
[S]  
[S]  
Sends to data queue (with timeout)  
Forced sends to data queue  
O
O
O
O
6
ifsnd_dtq [S]  
7
8
9
10  
11  
12  
rcv_dtq  
prcv_dtq  
iprcv_dtq  
trcv_dtq  
ref_dtq  
[S]  
[S]  
Receives from data queue  
Receives from data queue (polling)  
O
O
O
O
O
[S]  
Receives from data queue (with timeout)  
References data queue status  
O
O
O
O
O
iref_dtq  
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 118 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
snd_dtq  
Send to data queue  
psnd_dtq  
ipsnd_dtq  
tsnd_dtq  
fsnd_dtq  
ifsnd_dtq  
Send to data queue (polling)  
Send to data queue (polling, handler only)  
Send to data queue (with timeout)  
Forced send to data queue  
Forced send to data queue (handler only)  
[[ C Language API ]]  
ER ercd = snd_dtq( ID dtqid, VP_INT data );  
ER ercd = psnd_dtq( ID dtqid, VP_INT data );  
ER ercd = ipsnd_dtq( ID dtqid, VP_INT data );  
ER ercd = tsnd_dtq( ID dtqid, VP_INT data, TMO tmout );  
ER ercd = fsnd_dtq( ID dtqid, VP_INT data );  
ER ercd = ifsnd_dtq( ID dtqid, VP_INT data );  
z Parameters  
ID  
dtqid  
tmout  
data  
ID number of the data queue to which transmitted  
Timeout value(tsnd_dtq)  
TMO  
VP_INT  
Data to be transmitted  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
snd_dtq DTQID, DTQDATA  
isnd_dtq DTQID, DTQDATA  
psnd_dtq DTQID, DTQDATA  
ipsnd_dtq DTQID, DTQDATA  
tsnd_dtq DTQID, DTQDATA,TMO  
fsnd_dtq DTQID, DTQDATA  
ifsnd_dtq DTQID, DTQDATA  
z Parameters  
DTQID  
ID number of the data queue to which transmitted  
DTQDATA Data to be transmitted  
TMO  
Timeout value (tsnd_dtq)  
z Register contents after service call is issued  
snd_dtq,psnd_dtq,ipsnd_dtq,fsnd_dtq,ifsnd_dtq  
Register name  
Content after service call is issued  
R0  
Error code  
R3R1  
R2  
Data to be transmitted  
ID number of the data queue to which transmitted  
tsnd_dtq  
Register name  
Content after service call is issued  
Error code  
R0  
R3R1  
R2  
Data to be transmitted  
ID number of the data queue to which transmitted  
Timeout value  
R6R4  
- 119 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
           
[[ Error code ]]  
E_RLWAI  
Forced release from waiting  
E_TMOUT  
E_ILUSE  
Polling failure or timeout or timed out  
Service call improperly used  
(fsnd_dtq or ifsnd_dtq is issued for a data queue whose dtqcnt = 0)  
Released from WAITING state by clearing of the data queue area  
EV_RST  
[[ Functional description ]]  
This service call sends the 4-byte data indicated by data to the data queue indicated by dtqid. If any task is kept waiting for  
reception in the target data queue, the data is not stored in the data queue and instead sent to the task at the top of the recep-  
tion waiting queue, with which the task is released from the reception wait state.  
On the other hand, if snd_dtq or tsnd_dtq is issued for a data queue that is full of data, the task that issued the service call  
goes from RUNNING state to a data transmission wait state, and is enqueued in transmission waiting queue, kept waiting  
for the data queue to become available. In that case, if the attribute of the specified data queue is TA_TFIFO, the task is  
enqueued in order of FIFO; if TA_TPRI, the task is enqueued in order of priority. For psnd_dtq and ipsnd_dtq, the task re-  
turns immediately and responds to the call with the error code E_TMOUT.  
For the tsnd_dtq service call, specify a wait time for tmout in ms units. The values specified for tmout must be within  
(0x7FFFFFFF-time tick value). If any value exceeding this limit is specified, the service call may not operate correctly. If  
TMO_POL=0 is specified for tmout, it means specifying 0 as a timeout value, in which case the service call operates the  
same way as psnd_dtq. Furthermore, if specified as tmout=TMO_FEVR(–1), it means specifying an infinite wait, in which  
case the service call operates the same way as snd_dtq.  
If there are no tasks waiting for reception, nor is the data queue area filled, the transmitted data is stored in the data queue.  
The task placed into WAITING state by execution of the snd_dtq or tsnd_dtq service call is released from WAITING state  
in the following cases:  
When the rcv_dtq, trcv_dtq, prcv_dtq, or iprcv_dtq service call is issued before the tmout time  
elapses, with task-awaking conditions thereby satisfied  
The error code returned in this case is E_OK.  
When the first time tick occurred after tmout elapsed while task-awaking conditions remain un-  
satisfied  
The error code returned in this case is E_TMOUT.  
When the task is forcibly released from WAITING state by the rel_wai or irel_wai service call is-  
sued from another task or a handler  
The error code returned in this case is E_RLWAI.  
When the target data queue being waited for is initialized by the vrst_dtq service call issued  
from another task  
The error code returned in this case is EV_RST.  
For fsnd_dtq and ifsnd_dtq, the data at the top of the data queue or the oldest data is removed, and the transmitted data is  
stored at the tail of the data queue. If the data queue area is not filled with data, fsnd_dtq and ifsnd_dtq operate the same  
way as snd_dtq. If dtqcnt = 0 ,there is no task in the wait queue and fsnd_dtq or ifsnd_dtq service call is issued, error code  
E_ILUSE will be returned.  
If this service call is to be issued from task context, use snd_dtq,tsnd_dtq,psnd_dtq,fsnd_dtq; if issued from non-task con-  
text, use ipsnd_dtq,ifsnd_dtq.  
- 120 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
VP_INT data[10];  
void task(void)  
{
:
if( snd_dtq( ID_dtq, data[0]) == E_RLWAI ){  
error(“Forced released\n”);  
}
:
if( psnd_dtq( ID_dtq, data[1])== E_TMOUT ){  
error(“Timeout\n”);  
}
:
if( tsnd_dtq( ID_dtq, data[2], 10 ) != E_ TMOUT ){  
error(“Timeout \n”);  
}
:
if( fsnd_dtq( ID_dtq, data[3]) != E_OK ){  
error(“error\n”);  
}
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task  
_g_dtq: .LWORD 12345678H  
task:  
:
PUSH.W  
PUSHM  
tsnd_dtq  
:
R2  
R6R4,R3R1  
#ID_DTQ1,_g_dtq,#100  
PUSH.W  
PUSHM  
psnd_dtq  
:
PUSH.W  
PUSHM  
fsnd_dtq  
:
R2  
R3R1  
#ID_DTQ2,#0FFFFFFFFH  
R2  
R3R1  
#ID_DTQ3,#0ABCDH  
- 121 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
rcv_dtq  
Receive from data queue  
prcv_dtq  
iprcv_dtq  
trcv_dtq  
Receive from data queue (polling)  
Receive from data queue (polling, handler only)  
Receive from data queue (with timeout)  
[[ C Language API ]]  
ER ercd = rcv_dtq( ID dtqid, VP_INT *p_data );  
ER ercd = prcv_dtq( ID dtqid, VP_INT *p_data );  
ER ercd = iprcv_dtq( ID dtqid, VP_INT *p_data );  
ER ercd = trcv_dtq( ID dtqid, VP_INT *p_data, TMO tmout );  
z Parameters  
ID  
dtqid  
ID number of the data queue from which to receive  
Timeout value (trcv_dtq)  
TMO  
VP_INT  
tmout  
*p_data  
Pointer to the start of the area in which received data is stored  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
VP_INT  
*p_data  
Pointer to the start of the area in which received data is stored  
[[ Assembly language API ]]  
.include mr100.inc  
rcv_dtq DTQID  
prcv_dtq DTQID  
iprcv_dtq DTQID  
trcv_dtq DTQID,TMO  
z Parameters  
DTQID  
ID number of the data queue from which to receive  
TMO  
Timeout value (trcv_dtq)  
z Register contents after service call is issued  
rcv_dtq,prcv_dtq,iprcv_dtq  
Register name  
Content after service call is issued  
R0  
Error code  
R3R1  
R2  
Received data  
Data queue ID number  
trcv_dtq  
Register name  
Content after service call is issued  
Error code  
R0  
R3R1  
R2  
Received data  
ID number of the data queue from which to receive  
Timeout value  
R6R4  
[[ Error code ]]  
E_RLWAI  
Forced release from waiting  
E_TMOUT  
Polling failure or timeout or timed out  
- 122 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
[[ Functional description ]]  
This service call receives data from the data queue indicated by dtqid and stores the received data in the area pointed to by  
p_data. If data is present in the target data queue, the data at the top of the queue or the oldest data is received. This results  
in creating a free space in the data queue area, so that a task enqueued in a transmission waiting queue is released from  
WAITING state, and starts sending data to the data queue area.  
If no data exist in the data queue and there is any task waiting to send data (i.e., data bytes in the data queue area = 0), data  
for the task at the top of the data transmission waiting queue is received. As a result, the task kept waiting to send that data  
is released from WAITING state.  
On the other hand, if rcv_dtq or trcv_dtq is issued for the data queue which has no data stored in it, the task that issued the  
service call goes from RUNNING state to a data reception wait state, and is enqueued in a data reception waiting queue. At  
this time, the task is enqueued in order of FIFO. For the prcv_dtq and iprcv_dtq service calls, the task returns immediately  
and responds to the call with the error code E_TMOUT.  
For the trcv_dtq service call, specify a wait time for tmout in ms units. The values specified for tmout must be within  
(0x7FFFFFFF-time tick value). If any value exceeding this limit is specified, the service call may not operate correctly. If  
TMO_POL=0 is specified for tmout, it means specifying 0 as a timeout value, in which case the service call operates the  
same way as prcv_dtq. Furthermore, if specified as tmout=TMO_FEVR(–1), it means specifying an infinite wait, in which  
case the service call operates the same way as rcv_dtq.  
The task placed into a wait state by execution of the rcv_dtq or trcv_dtq service call is released from the wait state in the  
following cases:  
When the rcv_dtq, trcv_dtq, prcv_dtq, or iprcv_dtq service call is issued before the tmout time  
elapses, with task-awaking conditions thereby satisfied  
The error code returned in this case is E_OK.  
When the first time tick occurred after tmout elapsed while task-awaking conditions remain un-  
satisfied  
The error code returned in this case is E_TMOUT.  
When the task is forcibly released from WAITING state by the rel_wai or irel_wai service call is-  
sued from another task or a handler  
The error code returned in this case is E_RLWAI.  
If this service call is to be issued from task context, use rcv_dtq,trcv_dtq,prcv_dtq; if issued from non-task context, use  
iprcv_dtq.  
- 123 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
VP_INT data;  
:
if( rcv_dtq( ID_dtq, &data ) != E_RLWAI )  
error(“forced wakeup\n”);  
:
if( prcv_dtq( ID_dtq, &data ) != E_TMOUT )  
error(“Timeout\n”);  
:
if( trcv_dtq( ID_dtq, &data, 10 ) != E_TMOUT )  
error(“Timeout \n”);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
PUSHM  
trcv_dtq  
R2  
R6R4  
#ID_DTQ1,#TMO_POL  
:
PUSH.W  
prcv_dtq  
:
R2  
#ID_DTQ2  
PUSH.W  
rcv_dtq  
:
R2  
#ID_DTQ2  
- 124 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
ref_dtq  
iref_dtq  
Reference data queue status  
Reference data queue status (handler only)  
[[ C Language API ]]  
ER ercd = ref_dtq( ID dtqid, T_RDTQ *pk_rdtq );  
ER ercd = iref_dtq( ID dtqid, T_RDTQ *pk_rdtq );  
z Parameters  
ID  
dtqid  
ID number of the target data queue  
T_RDTQ  
*pk_rdtq  
Pointer to the packet to which data queue status is returned  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
T_RDTQ  
*pk_rdtq  
Pointer to the packet to which data queue status is returned  
Contents of pk_rdtq  
typedef struct  
ID stskid  
wtskid  
sdtqcnt  
t_rdtq{  
+0  
+2  
+4  
2
2
4
Transmission waiting task ID  
Reception waiting task ID  
Data bytes contained in data queue  
ID  
UINT  
} T_RDTQ;  
[[ Assembly language API ]]  
.include mr100.inc  
ref_dtq DTQID, PK_RDTQ  
iref_dtq DTQID, PK_RDTQ  
z Parameters  
DTQID  
ID number of the target data queue  
PK_RDTQ  
Pointer to the packet to which data queue status is returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
ID number of the target data queue  
Pointer to the packet to which data queue status is returned  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call returns various statuses of the data queue indicated by dtqid.  
stskid  
Returned to stskid is the ID number of the task at the top of a transmission waiting queue (the next task to be de-  
queued). If no tasks are kept waiting, TSK_NONE is returned.  
wtskid  
Returned to wtskid is the ID number of the task at the top of a reception waiting queue (the next task to be de-  
queued). If no tasks are kept waiting, TSK_NONE is returned.  
sdtqcnt  
Returned to sdtqcnt is the number of data bytes stored in the data queue area.  
If this service call is to be issued from task context, use ref_dtq; if issued from non-task context, use iref_dtq.  
- 125 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
T_RDTQ rdtq;  
ER ercd;  
:
ercd = ref_dtq( ID_DTQ1, &rdtq );  
:
}
<<Example statement in assembly language>>  
_ refdtq:  
.blkb 8  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W R2  
PUSH.L A1  
ref_dtq #ID_DTQ1,#_refdtq  
:
- 126 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
5.6 Synchronization & Communication Function (Mailbox)  
Specifications of the mailbox function of MR100 are listed in Table 5.11.  
Table 5.11 Specifications of the Mailbox Function  
No.  
1
Item  
Content  
Mailbox ID  
1-255  
1-255  
2
Mailbox priority  
Mailbox attribute  
TA_TFIFO:  
TA_TPRI:  
Waiting tasks enqueued in order of FIFO  
Waiting tasks enqueued in order of priority  
Messages enqueued in order of FIFO  
Messages enqueued in order of priority  
3
TA_MFIFO:  
TA_MPRI:  
Table 5.12 List of Mailbox Function Service Call  
No  
.
Service Call  
Function  
System State  
T
O
N
O
E
O
O
O
O
O
O
O
O
D
O
O
U
O
O
O
O
O
O
O
O
L
1
2
3
4
5
6
7
8
snd_mbx  
[S][B]  
Send to mailbox  
isnd_mbx  
rcv_mbx  
prcv_mbx  
iprcv_mbx  
trcv_mbx  
ref_mbx  
[S][B]  
[S][B]  
Receive from mailbox  
Receive from mailbox(polling)  
O
O
O
O
O
O
[S]  
Receive from mailbox(with timeout)  
Reference mailbox status  
O
O
O
O
iref_mbx  
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 127 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
snd_mbx  
isnd_mbx  
Send to mailbox  
Send to mailbox (handler only)  
[[ C Language API ]]  
ER ercd = snd_mbx( ID mbxid, T_MSG *pk_msg );  
ER ercd = isnd_mbx( ID mbxid, T_MSG *pk_msg );  
z Parameters  
ID  
mbxid  
ID number of the mailbox to which transmitted  
Message to be transmitted  
T_MSG  
*pk_msg  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
[[ Assembly language API ]]  
.include mr100.inc  
snd_mbx MBXID,PK_MBX  
isnd_mbx MBXID,PK_MBX  
z Parameters  
MBXID  
ID number of the mailbox to which transmitted  
PK_MBX  
Message to be transmitted (address)  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
ID number of the mailbox to which transmitted  
Message to be transmitted (address)  
[[ Structure of the message packet ]]  
<<Mailbox message header>>  
typedef  
VP  
} T_MSG;  
<<Mailbox message header with priority included>>  
typedef struct t_msg{  
T_MSG msgque  
struct  
t_msg{  
msghead  
+0  
4
Kernel managed area  
+0  
+2  
4
2
Message header  
Message priority  
PRI  
msgpri  
} T_MSG;  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call sends the message indicated by pk_msg to the mailbox indicated by mbxid. T_MSG* should be specified  
with a 32-bit address. If there is any task waiting to receive a message in the target mailbox, the transmitted message is  
passed to the task at the top of the waiting queue, and the task is released from WAITING state.  
To send a message to a mailbox whose attribute is TA_MFIFO, add a T_MSG structure at the beginning of the message  
when creating it, as shown in the example below.  
To send a message to a mailbox whose attribute is TA_MPRI, add a T_MSG_PRI structure at the beginning of the message  
when creating it, as shown in the example below.  
Messages should always be created in a RAM area regardless of whether its attribute is TA_MFIFO or TA_MPRI.  
The T_MSG area is used by the kernel, so that it cannot be rewritten after a message has been sent. If this area is rewritten  
before the message is received after it was sent, operation of the service call cannot be guaranteed.  
If this service call is to be issued from task context, use snd_mbx; if issued from non-task context, use isnd_mbx.  
- 128 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
<<Example format of a message>>  
typedef struct user_msg{  
T_MSG t_msg;  
/* T_MSG structure */  
/* User message data */  
B
data[16];  
} USER_MSG;  
<<Example format of a message with priority included>>  
typedef struct user_msg{  
T_MSG_PRI  
B
t_msg;  
data[16];  
/* T_MSG_PRI structure */  
/* User message data */  
} USER_MSG;  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
typedef struct pri_message  
{
T_MSG_PRI  
msgheader;  
char  
body[12];  
} PRI_MSG;  
void task(void)  
{
PRI_MSG  
msg;  
:
msg.msgpri = 5;  
snd_mbx( ID_msg,(T_MSG *)&msg);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
_g_userMsg:  
task  
.blkb 6  
.blkb 12  
; Header  
; Body  
task:  
:
PUSH.W  
PUSH.L  
snd_mbx  
:
R2  
A1  
#ID_MBX1,#_g_userMsg  
- 129 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
rcv_mbx  
Receive from mailbox  
prcv_mbx  
iprcv_mbx  
trcv_mbx  
Receive from mailbox (polling)  
Receive from mailbox (polling, handler only)  
Receive from mailbox (with timeout)  
[[ C Language API ]]  
ER ercd = rcv_mbx( ID mbxid, T_MSG **ppk_msg );  
ER ercd = prcv_mbx( ID mbxid, T_MSG **ppk_msg );  
ER ercd = iprcv_mbx( ID mbxid, T_MSG **ppk_msg );  
ER ercd = trcv_mbx( ID mbxid, T_MSG **ppk_msg, TMO tmout );  
z Parameters  
ID  
mbxid  
ID number of the mailbox from which to receive  
Timeout value (for trcv_mbx)  
TMO  
T_MSG  
tmout  
**ppk_msg  
Pointer to the start of the area in which received message is  
stored  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
Pointer to the start of the area in which received message is  
stored  
T_MSG  
**ppk_msg  
[[ Assembly language API ]]  
.include mr100.inc  
rcv_mbx MBXID  
prcv_mbx MBXID  
iprcv_mbx MBXID  
trcv_mbx MBXID, TMO  
z Parameters  
MBXID  
ID number of the mailbox from which to receive  
TMO  
Timeout value (for trcv_mbx)  
z Register contents after service call is issued  
rcv_mbx,prcv_mbx,iprcv_mbx  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
ID number of the mailbox from which to receive  
Received message  
trcv_mbx  
Register name  
Content after service call is issued  
Error code  
R0  
R2  
ID number of the mailbox from which to receive  
Timeout value  
R6R4  
A1  
Received message  
[[ Error code ]]  
E_RLWAI  
Forced release from waiting  
E_TMOUT  
Polling failure or timeout or timed out  
- 130 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
[[ Functional description ]]  
This service call receives a message from the mailbox indicated by mbxid and stores the start address of the received mes-  
sage in the area pointed to by ppk_msg. T_MSG** should be specified with a 32-bit address. If data is present in the tar-  
get mailbox, the data at the top of the mailbox is received.  
On the other hand, if rcv_mbx or trcv_mbx is issued for a mailbox that has no messages in it, the task that issued the ser-  
vice call goes from RUNNING state to a message reception wait state, and is enqueued in a message reception waiting  
queue. In that case, if the attribute of the specified mailbox is TA_TFIFO, the task is enqueued in order of FIFO; if  
TA_TPRI, the task is enqueued in order of priority. For prcv_mbx and iprcv_mbx, the task returns immediately and re-  
sponds to the call with the error code E_TMOUT.  
For the trcv_mbx service call, specify a wait time for tmout in ms units. The values specified for tmout must be within  
0x7FFFFFFF. If any value exceeding this limit is specified, the service call may not operate correctly. If TMO_POL=0 is  
specified for tmout, it means specifying 0 as a timeout value, in which case the service call operates the same way as  
prcv_mbx. Furthermore, if specified as tmout=TMO_FEVR(–1), it means specifying an infinite wait, in which case the  
service call operates the same way as rcv_mbx.  
The task placed into WAITING state by execution of the rcv_mbx or trcv_mbx service call is released from WAITING state  
in the following cases:  
When the rcv_mbx, trcv_mbx, prcv_mbx, or iprcv_mbx service call is issued before the tmout  
time elapses, with task-awaking conditions thereby satisfied  
The error code returned in this case is E_OK.  
When the first time tick occurred after tmout elapsed while task-awaking conditions remain un-  
satisfied  
The error code returned in this case is E_TMOUT.  
When the task is forcibly released from WAITING state by the rel_wai or irel_wai service call is-  
sued from another task or a handler  
The error code returned in this case is E_RLWAI.  
If this service call is to be issued from task context, use rcv_mbx,trcv_mbx,prcv_mbx; if issued from non-task context, use  
iprcv_mbx.  
- 131 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
typedef struct fifo_message  
{
T_MSG head;  
char  
} FIFO_MSG;  
void task()  
{
body[12];  
FIFO_MSG *msg;  
:
if( rcv_mbx((T_MSG **)&msg, ID_mbx) == E_RLWAI )  
error(“forced wakeup\n”);  
:
:
if( prcv_mbx((T_MSG **)&msg, ID_mbx) != E_TMOUT )  
error(“Timeout\n”);  
:
:
if( trcv_mbx((T_MSG **)&msg, ID_mbx,10) != E_TMOUT )  
error(“Timeout\n”);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
PUSHM  
trcv_mbx  
:
R2  
R6R4  
#ID_MBX1,#100  
PUSH.W  
rcv_mbx  
:
PUSH.W  
prcv_mbx  
:
R2  
#ID_MBX1  
R2  
#ID_MBX1  
- 132 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
ref_mbx  
iref_mbx  
Reference mailbox status  
Reference mailbox status (handler only)  
[[ C Language API ]]  
ER ercd = ref_mbx( ID mbxid, T_RMBX *pk_rmbx );  
ER ercd = iref_mbx( ID mbxid, T_RMBX *pk_rmbx );  
z Parameters  
ID  
mbxid  
ID number of the target mailbox  
T_RMBX  
*pk_rmbx  
Pointer to the packet to which mailbox status is returned  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
T_RMBX  
*pk_rmbx  
Pointer to the packet to which mailbox status is returned  
Contents of pk_rmbx  
typedef struct  
ID wtskid  
T_MSG *pk_msg  
} T_RMBX;  
t_rmbx{  
+0  
+4  
2
4
Reception waiting task ID  
Next message packet to be received  
[[ Assembly language API ]]  
.include mr100.inc  
ref_mbx MBXID, PK_RMBX  
iref_mbx MBXID, PK_RMBX  
z Parameters  
MBXID  
ID number of the target mailbox  
PK_RMBX Pointer to the packet to which mailbox status is returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
ID number of the target mailbox  
Pointer to the packet to which mailbox status is returned  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call returns various statuses of the mailbox indicated by mbxid.  
wtskid  
Returned to wtskid is the ID number of the task at the top of a reception waiting queue (the next task to be de-  
queued). If no tasks are kept waiting, TSK_NONE is returned.  
*pk_msg  
Returned to *pk_msg is the start address of the next message to be received. If there are no messages to be re-  
ceived next, NULL is returned. T_MSG* should be specified with a 32-bit address.  
If this service call is to be issued from task context, use ref_mbx; if issued from non-task context, use iref_mbx.  
- 133 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
T_RMBX rmbx;  
ER ercd;  
:
ercd = ref_mbx( ID_MBX1, &rmbx );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
_ refmbx:  
task:  
task  
.blkb 6  
:
PUSH.W R2  
PUSH.L A1  
ref_mbx #ID_MBX1,#_refmbx  
:
- 134 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
5.7 Memory Pool Management Function (Fixed-size Memory Pool)  
Specifications of the fixed-size memory pool function of MR100 are listed in Table 5.13.  
The memory pool area to be acquired can be specified by a section name for each memory pool during configuration.  
Table 5.13 Specifications of the Fixed-size memory pool Function  
No.  
1
Item  
Content  
Fixed-size memory pool ID  
Number of fixed-size memory block  
Size of fixed-size memory block  
Supported attributes  
1-255  
2
1-65535  
3
-65535  
TA_TFIFO:  
4
Waiting tasks enqueued in order of FIFO  
Waiting tasks enqueued in order of priority  
TA_TPRI:  
5
Specification of memory pool area  
Area to be acquired specifiable by a section  
Table 5.14 List of Fixed-size memory pool Function Service Call  
No.  
Service Call  
Function  
System State  
T
O
N
O
E
D
U
O
O
O
O
L
1
2
3
4
get_mpf  
pget_mpf [S][B]  
ipget_mpf  
tget_mpf  
[S][B]  
Aquires fixed-size memory block  
Aquires fixed-size memory block  
(polling)  
Aquires fixed-size memory block  
(with timeout)  
O
O
O
O
O
O
O
O
O
O
[S]  
5
6
7
8
rel_mpf  
irel_mpf  
ref_mpf  
iref_mpf  
[S][B]  
Releases fixed-size memory block  
O
O
O
O
O
O
O
O
O
O
O
O
O
O
References fixed-size memory pool status  
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 135 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
get_mpf  
pget_mpf  
ipget_mpf  
Aquire fixed-size memory block  
Aquire fixed-size memory block (polling)  
Aquire fixed-size memory block (polling, handler  
only)  
tget_mpf  
Aquire fixed-size memory block (with timeout)  
[[ C Language API ]]  
ER ercd = get_mpf( ID mpfid, VP *p_blk );  
ER ercd = pget_mpf( ID mpfid, VP *p_blk );  
ER ercd = ipget_mpf( ID mpfid, VP *p_blk );  
ER ercd = tget_mpf( ID mpfid, VP *p_blk,TMO tmout );  
z Parameters  
ID  
mpfid  
*p_blk  
tmout  
ID number of the target fixed-size memory pool to be acquired  
Pointer to the start address of the acquired memory block  
Timeout value(tget_mpf)  
VP  
TMO  
z Return Parameters  
ER  
VP  
ercd  
Terminated normally (E_OK) or error code  
Pointer to the start address of the acquired memory block  
*p_blk  
[[ Assembly language API ]]  
.include mr100.inc  
get_mpf MPFID  
pget_mpf MPFID  
ipget_mpfMPFID  
tget_mpf MPFID,TMO  
z Parameters  
MPFID  
ID number of the target fixed-size memory pool to be acquired  
TMO  
Timeout value(tget_mpf)  
- 136 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
z Register contents after service call is issued  
get_mpf,pget_mpf,ipget_mpf  
Register name  
Content after service call is issued  
R0  
Error code  
R3R1  
R2  
Start address of the acquired memory block  
ID number of the target fixed-size memory pool to be acquired  
tget_mpf  
Register name  
Content after service call is issued  
Error code  
R0  
R3R1  
R2  
Start address of the acquired memory block  
ID number of the target fixed-size memory pool to be acquired  
Timeout value  
R6R4  
[[ Error code ]]  
E_RLWAI  
Forced release from waiting  
E_TMOUT  
EV_RST  
Polling failure or timeout or timed out  
Released from WAITING state by clearing of the memory pool area  
[[ Functional description ]]  
This service call acquires a memory block from the fixed-size memory pool indicated by mpfid and stores the start address  
of the acquired memory block in the variable p_blk. The content of the acquired memory block is indeterminate.  
If the fixed-size memory pool indicated by mpfid has no memory blocks in it and the used service call is tget_mpf or  
get_mpf, the task that issued it goes to a memory block wait state and is enqueued in a memory block waiting queue. In that  
case, if the attribute of the specified fixed-size memory pool is TA_TFIFO, the task is enqueued in order of FIFO; if  
TA_TPRI, the task is enqueued in order of priority. If the issued service call was pget_mpf or ipget_mpf, the task returns  
immediately and responds to the call with the error code E_TMOUT.  
For the tget_mpf service call, specify a wait time for tmout in ms units. The values specified for tmout must be within  
(0x7FFFFFFF – time tick value). If any value exceeding this limit is specified, the service call may not operate correctly. If  
TMO_POL=0 is specified for tmout, it means specifying 0 as a timeout value, in which case the service call operates the  
same way as pget_mpf. Furthermore, if specified as tmout=TMO_FEVR(–1), it means specifying an infinite wait, in which  
case the service call operates the same way as get_mpf.  
The task placed into WAITING state by execution of the get_mpf or tget_mpf service call is released from WAITING state  
in the following cases:  
When the rel_mpf or irel_mpf service call is issued before the tmout time elapses, with  
task-awaking conditions thereby satisfied  
The error code returned in this case is E_OK.  
When the first time tick occurred after tmout elapsed while task-awaking conditions remain un-  
satisfied  
The error code returned in this case is E_TMOUT.  
When the task is forcibly released from WAITING state by the rel_wai or irel_wai service call is-  
sued from another task or a handler  
The error code returned in this case is E_RLWAI.  
When the target memory pool being waited for is initialized by the vrst_mpf service call issued  
from another task  
The error code returned in this case is EV_RST.  
If this service call is to be issued from task context, use get_mpf,pget_mpf,tget_mpf; if issued from non-task context, use  
ipget_mpf.  
- 137 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
VP  
p_blk;  
void task()  
{
if( get_mpf(ID_mpf ,&p_blk) != E_OK ){  
error(“Not enough memory\n”);  
}
:
if( pget_mpf(ID_mpf ,&p_blk) != E_OK ){  
error(“Not enough memory\n”);  
}
:
if( tget_mpf(ID_mpf ,&p_blk, 10) != E_OK ){  
error(“Not enough memory\n”);  
}
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
get_mpf  
:
R2  
#ID_MPF1  
PUSH.W  
pget_mpf  
:
PUSH.W  
PUSHM  
tget_mpf  
:
R2  
#ID_MPF1  
R2  
R6R4  
#ID_MPF1,#200  
- 138 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
rel_mpf  
irel_mpf  
Release fixed-size memory block  
Release fixed-size memory block (handler only)  
[[ C Language API ]]  
ER ercd = rel_mpf( ID mpfid, VP blk );  
ER ercd = irel_mpf( ID mpfid, VP blk);  
z Parameters  
ID  
mpfid  
ID number of the fixed-size memory pool to be released  
Start address of the memory block to be returned  
VP  
blk  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
[[ Assembly language API ]]  
.include mr100.inc  
rel_mpf MPFID,BLK  
irel_mpf MPFID,BLK  
z Parameters  
MPFID  
ID number of the fixed-size memory pool to be released  
BLK  
Start address of the memory block to be returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
Error code  
R3R1  
R2  
Start address of the memory block to be returned  
ID number of the fixed-size memory pool to be released  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call releases a memory block whose start address is indicated by blk. The start address of the memory block to  
be released that is specified here should always be that of the memory block acquired by get_mpf, tget_mpf, pget_mpf, or  
ipget_mpf.  
If tasks are enqueued in a waiting queue for the target memory pool, the task at the top of the waiting queue is dequeued  
and linked to a ready queue, and is assigned a memory block. At this time, the task changes state from a memory block wait  
state to RUNNING or READY state. This service call does not check the content of blk, so that if the address stored in blk  
is incorrect, the service call may not operate correctly.  
If this service call is to be issued from task context, use rel_mpf; if issued from non-task context, use irel_mpf.  
- 139 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
VP p_blf;  
if( get_mpf(ID_mpf1,&p_blf) != E_OK )  
error(“Not enough memory \n”);  
:
rel_mpf(ID_mpf1,p_blf);  
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task  
_g_blk: .blkb 4  
task:  
:
PUSH.W  
get_mpf  
:
R2  
#ID_MPF1  
MOV.L  
PUSH.W  
rel_mpf  
:
R3R1,_g_blk  
R2  
#ID_MPF1,_g_blk  
- 140 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
ref_mpf  
iref_mpf  
Reference fixed-size memory pool status  
Reference fixed-size memory pool status  
(handler only)  
[[ C Language API ]]  
ER ercd = ref_mpf( ID mpfid, T_RMPF *pk_rmpf );  
ER ercd = iref_mpf( ID mpfid, T_RMPF *pk_rmpf );  
z Parameters  
ID  
mpfid  
Task ID waiting for memory block to be acquired  
T_RMPF  
*pk_rmpf  
Pointer to the packet to which fixed-size memory pool status is returned  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
T_RMPF  
*pk_rmpf  
Pointer to the packet to which fixed-size memory pool status is returned  
Contents of pk_rmpf  
typedef struct  
ID wtskid  
fblkcnt  
t_rmpf{  
+0  
+2  
2
4
Task ID waiting for memory block to be acquired  
Number of free memory blocks  
UINT  
} T_RMPF;  
[[ Assembly language API ]]  
.include mr100.inc  
ref_mpf MPFID,PK_RMPF  
iref_mpf MPFID,PK_RMPF  
z Parameters  
MPFID  
Task ID waiting for memory block to be acquired  
PK_RMPF  
Pointer to the packet to which fixed-size memory pool status is returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
Task ID waiting for memory block to be acquired  
Pointer to the packet to which fixed-size memory pool status is returned  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call returns various statuses of the message buffer indicated by mpfid.  
wtskid  
Returned to wtskid is the ID number of the task at the top of a memory block waiting queue (the first queued  
task). If no tasks are kept waiting, TSK_NONE is returned.  
fblkcnt  
The number of free memory blocks in the specified memory pool is returned.  
If this service call is to be issued from task context, use rel_mpf; if issued from non-task context, use irel_mpf.  
- 141 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
T_RMPF rmpf;  
ER ercd;  
:
ercd = ref_mpf( ID_MPF1, &rmpf );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
_ refmpf:  
task:  
task  
.blkb 6  
:
PUSH.W R2  
PUSH.L A1  
ref_mpf #ID_MPF1,#_refmpf  
:
- 142 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
5.8 Memory Pool Management Function (Variable-size Memory Pool)  
Specifications of the Variable-size Memory pool function of MR100 are listed in Table 5.15.  
The memory pool area to be acquired can be specified by a section name for each memory pool during configuration.  
Table 5.15 Specifications of the Variable-size memory Pool Function  
No.  
1
Item  
Content  
Variable-size memory pool ID  
Size of Variable-size Memory pool  
1-255  
2
32-67108864  
4-65504  
3
Maximum number of memory blocks to  
be acquired  
4
5
Supported attributes  
When memory is insufficient, task-waiting APIs are not sup-  
ported.  
Specification of memory pool area  
Area to be acquired specifiable by a section  
Table 5.16 List of Variable -size memory pool Function Service Call  
No.  
Service Call  
Function  
System State  
T
O
O
O
N
O
E
O
O
O
O
D
O
O
O
O
U
O
O
O
O
L
1
2
3
4
pget_mpl  
rel_mpl  
ref_mpl  
iref_mpl  
Aquires variable-size memory block (polling)  
Releases variable-size memory block  
References variable-size memory pool status  
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 143 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
pget_mpl  
Aquire variable-size memory block (polling)  
[[ C Language API ]]  
ER ercd = pget_mpl( ID mplid, UINT blksz, VP *p_blk );  
z Parameters  
ID  
mplid  
ID number of the target Variable-size Memory pool to be acquired  
Memory size to be acquired (in bytes)  
UINT  
VP  
blksz  
*p_blk  
Pointer to the start address of the acquired variable memory  
z Return Parameters  
ER  
VP  
ercd  
Terminated normally (E_OK) or error code  
Pointer to the start address of the acquired variable memory  
*p_blk  
[[ Assembly language API ]]  
.include mr100.inc  
pget_mpl MPLID,BLKSZ  
z Parameters  
MPLID  
ID number of the target Variable-size Memory pool to be acquired  
BLKSZ  
Memory size to be acquired (in bytes)  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
Error code  
R3R1  
R2  
Memory size to be acquired  
ID number of the target Variable-size Memory pool to be acquired  
[[ Error code ]]  
E_TMOUT  
No memory block  
- 144 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
[[ Functional description ]]  
This service call acquires a memory block from the variable-size memory pool indicated by mplid and stores the  
start address of the acquired memory block in the variable p_blk. The content of the acquired memory block is in-  
determinate.  
If the specified variable-size memory pool has no memory blocks in it, the task returns immediately and responds to  
the call with the error code E_TMOUT.  
This service call can be issued only from task context. It cannot be issued from non-task context.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
VP  
p_blk;  
void task()  
{
if( pget_mpl(ID_mpl , 200, &p_blk) != E_OK ){  
error(“Not enough memory\n”);  
}
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
pget_mpl  
:
R2  
#ID_MPL1,#200  
- 145 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
rel_mpl  
Release variable-size memory block  
[[ C Language API ]]  
ER ercd = rel_mpl( ID mplid, VP blk );  
z Parameters  
ID  
mplid  
ID number of Variable-size Memory pool of the memory block to be released  
Start address of the memory block to be returned  
VP  
Blk  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
rel_mpl MPLID,BLK  
z Parameters  
MPLID  
ID number of Variable-size Memory pool of the memory block to be released  
BLK  
Start address of the memory block to be returned  
z Register contents after service call is issued  
Register name Content after service call is issued  
R0  
Error code  
R3R1  
R2  
Start address of the memory block to be returned  
ID number of Variable-size Memory pool of the memory block to be released  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call releases a memory block whose start address is indicated by blk. The start address of the memory  
block to be released that is specified here should always be that of the memory block acquired by pget_mpl.  
This service call does not check the content of blk, so that if the address stored in blk is incorrect, the service call  
may not operate correctly.  
- 146 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
VP p_blk;  
if( get_mpl(ID_mpl1, 200, &p_blk) != E_OK )  
error(“Not enough memory \n”);  
:
rel_mpl(ID_mp1,p_blk);  
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task  
_g_blk: .blkb 4  
task:  
:
PUSH.W  
pget_mpl  
:
R2  
#ID_MPL1,#200  
MOV.L  
PUSH.W  
rel_mpl  
:
R3R1,_g_blk  
R2  
#ID_MPL1,_g_blk  
- 147 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
ref_mpl  
iref_mpl  
Reference variable-size memory pool status  
Reference variable-size memory pool status  
(handler only)  
[[ C Language API ]]  
ER ercd = ref_mpl( ID mplid, T_RMPL *pk_rmpl );  
ER ercd = iref_mpl( ID mplid, T_RMPL *pk_rmpl );  
z Parameters  
ID  
mplid  
ID number of the target variable-size memory pool  
T_RMPL  
*pk_rmpl  
Pointer to the packet to which variable-size memory pool status is returned  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
T_RMPL  
*pk_rmpl  
Pointer to the packet to which variable-size memory pool status is returned  
Contents of pk_rmpl  
typedef struct  
ID wtskid  
t_rmpl{  
+0  
2
4
4
Task ID waiting for memory block to be acquired (unused)  
Free memory size (in bytes)  
Maximum size of memory that can be acquired immediately (in  
bytes)  
SIZE  
fmplsz  
fblksz  
+4  
+8  
UINT  
} T_RMPL;  
[[ Assembly language API ]]  
.include mr100.inc  
ref_mpl MPLID,PK_RMPL  
iref_mpl MPLID,PK_RMPL  
z Parameters  
MPLID  
ID number of the target variable-size memory pool  
PK_RMPL  
Pointer to the packet to which variable-size memory pool status is returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
ID number of the target variable-size memory pool  
Pointer to the packet to which variable-size memory pool status is returned  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call returns various statuses of the message buffer indicated by mplid.  
wtskid  
Unused.  
fmplsz  
A free memory size is returned.  
fblksz  
The maximum size of memory that can be acquired immediately is returned.  
If this service call is to be issued from task context, use ref_mpl; if issued from non-task context, use iref_mpl.  
- 148 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
T_RMPL rmpl;  
ER ercd;  
:
ercd = ref_mpl( ID_MPL1, &rmpl );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
_ refmpl:  
task:  
task  
.blkb 10  
:
PUSH.W R2  
PUSH.L A1  
ref_mpl #ID_MPL1,_refmpl  
:
- 149 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
5.9 Time Management Function  
Specifications of the time management function of MR100 are listed in Table 5.17.  
Table 5.17 Specifications of the Time Management Function  
No.  
1
Item  
Content  
System time value  
Unsigned 48 bits  
1[ms]  
2
Unit of system time value  
3
System time updating cycle  
User-specified time tick updating time [ms]  
000000000000H  
4
Initial value of system time (at initial startup)  
Table 5.18 List of Time Management Function Service Call  
No.  
Service Call  
Function  
System State  
T
N
E
D
U
L
1
2
3
4
5
get_tim  
[S]  
[S]  
[S]  
Reference system time  
iget_tim  
set_tim  
iset_tim  
isig_tim  
Set system time  
Supply a time tick  
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 150 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
set_tim  
iset_tim  
Set system time  
Set system time (handler only)  
[[ C Language API ]]  
ER ercd = set_tim( SYSTIM *p_systim );  
ER ercd = iset_tim( SYSTIM *p_systim );  
z Parameters  
SYSTIM  
*p_systim  
Pointer to the packet that indicates the system time to be set  
Contents of p_systim  
typedef struct t_systim {  
UH  
utime  
ltime  
0
+4  
2
4
(16 high-order bits)  
(32 low-order bits)  
UW  
} SYSTIM;  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
[[ Assembly language API ]]  
.include mr100.inc  
set_tim PK_TIM  
iset_tim PK_TIM  
z Parameters  
PK_TIM  
Pointer to the packet that indicates the system time to be set  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
A1  
Error code  
Pointer to the packet that indicates the system time to be set  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call updates the current value of the system time to the value indicated by p_systim. The time specified in  
p_systim is expressed in ms units, and not by the number of time ticks.  
The values specified for p_systim must be within 0x7FFF: FFFFFFFF. If any value exceeding this limit is specified, the  
service call may not operate correctly.  
If this service call is to be issued from task context, use set_tim; if issued from non-task context, use iset_tim.  
- 151 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
SYSTIME time;  
/* Time data storing variable */  
time.utime = 0;  
time.ltime = 0;  
set_tim( &time );  
/* Sets upper time data */  
/* Sets lower time data */  
/* Sets the system time */  
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task  
_g_systim:  
.WORD 1111H  
.LWORD 22223333H  
task:  
:
PUSHM A1  
set_tim #_g_systim  
:
- 152 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
get_tim  
iget_tim  
Reference system time  
Reference system time (handler only)  
[[ C Language API ]]  
ER ercd = get_tim( SYSTIM *p_systim );  
ER ercd = iget_tim( SYSTIM *p_systim );  
z Parameters  
SYSTIM  
*p_systim  
Pointer to the packet to which current system time is returned  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
SYSTIM  
*p_systim  
Pointer to the packet to which current system time is returned  
Contents of p_systim  
typedef struct t_systim {  
UH  
utime  
0
2
(16 high-order bits)  
UW  
ltime  
+4  
4
(32 low-order bits)  
} SYSTIM;  
[[ Assembly language API ]]  
.include mr100.inc  
get_tim PK_TIM  
iget_tim PK_TIM  
z Parameters  
PK_TIM  
Pointer to the packet to which current system time is returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
A1  
Error code  
Pointer to the packet to which current system time is returned  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call stores the current value of the system time in p_systim.  
If this service call is to be issued from task context, use get_tim; if issued from non-task context, use iget_tim.  
- 153 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
SYSTIME time;  
get_tim( &time );  
/* Time data storing variable */  
/* Refers to the system time */  
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
_g_systim:  
task:  
task  
.blkb 6  
:
PUSHM A1  
get_tim #_g_systim  
:
- 154 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
isig_tim  
Supply a time tick  
[[ Functional description ]]  
This service call updates the system time.  
The isig_tim is automatically started every tick_time interval(ms) if the system clock is defined by the configuration file.  
The application cannot call this function because it is not implementing as service call.  
When a time tick is supplied, the kernel is processed as follows:  
(1) Updates the system time  
(2) Starts an alarm handler  
(3) Starts a cyclic handler  
(4) Processes the timeout processing of the task put on WAITING state by service call with timeout such  
as tslp_tsk.  
- 155 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
5.10Time Management Function (Cyclic Handler)  
Specifications of the cyclic handler function of MR100 are listed in Table 5.19. The cyclic handler description languages in  
item No. 4 are those specified in the GUI configurator. They are not output to a configuration file, nor are the MR100 ker-  
nel concerned with them.  
Table 5.19 Specifications of the Cyclic Handler Function  
No.  
1
Item  
Content  
Cyclic handler ID  
Activation cycle  
Activation phase  
Extended information  
Cyclic handler attribute  
1-255  
2
0-7fffffff[ms]  
0-7fffffff[ms]  
32 bits  
3
4
5
TA_HLNG:  
TA_ASM:  
TA_STA:  
TA_PHS:  
Handlers written in high-level language  
Handlers written in assembly language  
Starts operation of cyclic handler  
Saves activation phase  
Table 5.20 List of Cyclic Handler Function Service Call  
No.  
Service Call  
Function  
System State  
T
O
N
O
O
O
E
O
O
O
O
O
O
D
O
O
O
O
O
O
U
O
O
O
O
O
O
L
1
2
3
4
5
6
sta_cyc  
ista_cyc  
stp_cyc  
istp_cyc  
ref_cyc  
iref_cyc  
[S][B]  
[S][B]  
Starts cyclic handler operation  
Stops cyclic handler operation  
Reference cyclic handler status  
O
O
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 156 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
sta_cyc  
ista_cyc  
Start cyclic handler operation  
Start cyclic handler operation (handler only)  
[[ C Language API ]]  
ER ercd = sta_cyc( ID cycid );  
ER ercd = ista_cyc( ID cycid );  
z Parameters  
ID  
cycid  
ID number of the cyclic handler to be operated  
Terminated normally (E_OK)  
z Return Parameters  
ER  
ercd  
[[ Assembly language API ]]  
.include mr100.inc  
sta_cyc CYCNO  
ista_cyc CYCNO  
z Parameters  
CYCNO  
ID number of the cyclic handler to be operated  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
ID number of the cyclic handler to be operated  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call places the cyclic handler indicated by cycid into an operational state. If the cyclic handler attribute of  
TA_PHS is not specified, the cyclic handler is started every time the activate cycle elapses, start with the time at which this  
service call was invoked.  
If while TA_PHS is not specified this service call is issued to a cyclic handler already in an operational state, it sets the time  
at which the cyclic handler is to start next.  
If while TA_PHS is specified this service call is issued to a cyclic handler already in an operational state, it does not set the  
startup time.  
If this service call is to be issued from task context, use sta_cyc; if issued from non-task context, use ista_cyc.  
- 157 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
sta_cyc ( ID_cyc1 );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W R2  
sta_cyc #ID_CYC1  
:
- 158 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
stp_cyc  
istp_cyc  
Stops cyclic handler operation  
Stops cyclic handler operation (handler only)  
[[ C Language API ]]  
ER ercd = stp_cyc( ID cycid );  
ER ercd = istp_cyc( ID cycid );  
z Parameters  
ID  
cycid  
ID number of the cyclic handler to be stopped  
Terminated normally (E_OK)  
z Return Parameters  
ER  
ercd  
[[ Assembly language API ]]  
.include mr100.inc  
stp_cyc CYCNO  
istp_cyc CYCNO  
z Parameters  
CYCNO  
ID number of the cyclic handler to be stopped  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
ID number of the cyclic handler to be stopped  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call places the cyclic handler indicated by cycid into a non-operational state.  
If this service call is to be issued from task context, use stp_cyc; if issued from non-task context, use istp_cyc.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
stp_cyc ( ID_cyc1 );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W R2  
stp_cyc #ID_CYC1  
:
- 159 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
ref_cyc  
iref_cyc  
Reference cyclic handler status  
Reference cyclic handler status (handler only)  
[[ C Language API ]]  
ER ercd = ref_cyc( ID cycid, T_RCYC *pk_rcyc );  
ER ercd = iref_cyc( ID cycid, T_RCYC *pk_rcyc );  
z Parameters  
ID  
cycid  
ID number of the target cyclic handler  
T_RCYC  
*pk_rcyc  
Pointer to the packet to which cyclic handler status is returned  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
T_RCYC  
*pk_rcyc  
Pointer to the packet to which cyclic handler status is returned  
Contents of pk_rcyc  
typedef struct  
STAT cycstat  
RELTIM lefttim  
} T_RCYC;  
t_rcyc{  
+0  
+2  
2
4
Operating status of cyclic handler  
Left time before cyclic handler starts up  
[[ Assembly language API ]]  
.include mr100.inc  
ref_cyc ID,PK_RCYC  
iref_cyc ID,PK_RCYC  
z Parameters  
CYCNO  
ID number of the target cyclic handler  
PK_RCYC  
Pointer to the packet to which cyclic handler status is returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
ID number of the target cyclic handler  
Pointer to the packet to which cyclic handler status is returned  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call returns various statuses of the cyclic handler indicated by cycid.  
cycstat  
The status of the target cyclic handler is returned.  
*TCYC_STA  
*TCYC_STP  
Cyclic handler is an operational state.  
Cyclic handler is a non-operational state.  
lefttim  
The remaining time before the target cyclic handler will start next is returned. This time is expressed in ms units.  
If the target cyclic handler is non-operational state, the returned value is indeterminate.  
If this service call is to be issued from task context, use ref_cyc; if issued from non-task context, use iref_cyc.  
- 160 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
T_RCYC rcyc;  
ER ercd;  
:
ercd = ref_cyc( ID_CYC1, &rcyc );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
_ refcyc:  
task:  
task  
.blkb 6  
:
PUSH.W R2  
PUSH.L A1  
ref_cyc #ID_CYC1,#_refcyc  
:
- 161 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
5.11Time Management Function (Alarm Handler)  
Specifications of the alarm handler function of MR100 are listed in Table 5.21. The alarm handler description languages in  
item No. 4 are those specified in the GUI configurator. They are not output to a configuration file, nor are the MR100 ker-  
nel concerned with them.  
Table 5.21 Specifications of the Alarm Handler Function  
No.  
1
Item  
Content  
Alarm handler ID  
Activation time  
1-255  
2
0-7fffffff [ms]  
16 bits  
3
Extended information  
Alarm handler attribute  
4
TA_HLNG:  
TA_ASM:  
Handlers written in high-level language  
Handlers written in assembly language  
Table 5.22 List of Alarm Handler Function Service Call  
No.  
Service Call  
Function  
System State  
T
N
E
D
U
L
1
2
3
4
5
6
sta_alm  
ista_alm  
stp_alm  
istp_alm  
ref_alm  
iref_alm  
Starts alarm handler operation  
Stops alarm handler operation  
References alarm handler status  
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 162 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
sta_alm  
ista_alm  
Start alarm handler operation  
Start alarm handler operation (handler only)  
[[ C Language API ]]  
ER ercd = sta_alm( ID almid, RELTIM almtim );  
ER ercd = ista_alm( ID almid, RELTIM almtim );  
z Parameters  
ID  
almid  
ID number of the alarm handler to be operated  
Alarm handler startup time (relative time)  
RELTIM  
almtim  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
[[ Assembly language API ]]  
.include mr100.inc  
sta_alm ALMID,ALMTIM  
ista_alm ALMID,ALMTIM  
z Parameters  
ALMID  
ID number of the alarm handler to be operated  
ALMTIM  
Alarm handler startup time (relative time)  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
Error code  
R2  
ID number of the alarm handler to be operated  
Alarm handler startup time (relative time)  
R6R4  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call sets the activation time of the alarm handler indicated by almid as a relative time of day after the lapse of  
the time specified by almtim from the time at which it is invoked, and places the alarm handler into an operational state.  
If an already operating alarm handler is specified, the previously set activation time is cleared and updated to a new activa-  
tion time. If almtim = 0 is specified, the alarm handler starts at the next time tick. The values specified for almtim must be  
within (0x7FFFFFFF – time tick value). If any value exceeding this limit is specified, the service call may not operate cor-  
rectly. If 0 is specified for almtim , the alarm handler is started at the next time tick.  
If this service call is to be issued from task context, use sta_alm; if issued from non-task context, use ista_alm.  
- 163 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
sta_alm ( ID_alm1,100 );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W R2  
PUSHM R6R4  
sta_alm #ID_ALM1,#100  
:
- 164 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
stp_alm  
istp_alm  
Stop alarm handler operation  
Stop alarm handler operation (handler only)  
[[ C Language API ]]  
ER ercd = stp_alm( ID almid );  
ER ercd = istp_alm( ID almid );  
z Parameters  
ID  
almid  
ID number of the alarm handler to be stopped  
Terminated normally (E_OK)  
z Return Parameters  
ER  
ercd  
[[ Assembly language API ]]  
.include mr100.inc  
stp_alm ALMID  
istp_alm ALMID  
z Parameters  
ALMID  
ID number of the alarm handler to be stopped  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
ID number of the alarm handler to be stopped  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call places the alarm handler indicated by almid into a non-operational state.  
If this service call is to be issued from task context, use stp_alm; if issued from non-task context, use istp_alm.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
stp_alm ( ID_alm1 );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W R2  
stp_alm #ID_ALM1  
:
- 165 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
ref_alm  
iref_alm  
Reference alarm handler status  
Reference alarm handler status (handler only)  
[[ C Language API ]]  
ER ercd = ref_alm( ID almid, T_RALM *pk_ralm );  
ER ercd = iref_alm( ID almid, T_RALM *pk_ralm );  
z Parameters  
ID  
almid  
ID number of the target alarm handler  
T_RALM  
*pk_ralm  
Pointer to the packet to which alarm handler status is returned  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
T_RALM  
*pk_ralm  
Pointer to the packet to which alarm handler status is returned  
Contents of pk_ralm  
typedef  
STAT  
RELTIM lefttim  
struct  
t_ralm{  
almstat  
+0  
+2  
2
4
Operating status of alarm handler  
This service call returns various statuses of the alarm handler  
indicat  
} T_RALM;  
[[ Assembly language API ]]  
.include mr100.inc  
ref_alm ALMID,PK_RALM  
iref_alm ALMID,PK_RALM  
z Parameters  
ALMID  
ID number of the target alarm handler  
PK_RALM  
Pointer to the packet to which alarm handler status is returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
ID number of the target alarm handler  
Pointer to the packet to which alarm handler status is returned  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call returns various statuses of the alarm handler indicated by almid.  
almstat  
The status of the target alarm handler is returned.  
*TALM_STA  
*TALM_STP  
Alarm handler is an operational state.  
Alarm handler is a non-operational state.  
lefttim  
The remaining time before the target alarm handler will start next is returned. This time is expressed in ms units.  
If the target alarm handler is a non-operational state, the returned value is indeterminate.  
If this service call is to be issued from task context, use ref_alm; if issued from non-task context, use iref_alm.  
- 166 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
T_RALM ralm;  
ER ercd;  
:
ercd = ref_alm( ID_ALM1, &ralm );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
_ refalm:  
task:  
task  
.blkb 6  
:
PUSH.W R2  
PUSH.L A1  
ref_alm #ID_ALM1,#_refalm  
:
- 167 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
5.12System Status Management Function  
Table 5.23 List of System Status Management Function Service Call  
Service Call Function System State  
Rotates task precedence  
No.  
T
O
N
O
O
O
O
E
O
O
O
O
O
O
O
O
O
O
O
O
O
O
D
O
O
O
O
O
O
O
O
O
O
O
O
O
O
U
O
O
O
O
O
O
O
O
O
O
O
O
O
O
L
1
2
3
4
5
6
7
8
9
rot_rdq  
[S][B]  
[S][B]  
[S][B]  
[S]  
irot_rdq  
get_tid  
References task ID in the RUNNING state  
Locks the CPU  
O
O
O
iget_tid  
loc_cpu  
iloc_cpu  
unl_cpu  
iunl_cpu  
dis_dsp  
ena_dsp  
sns_ctx  
sns_loc  
sns_dsp  
sns_dpn  
[S][B]  
[S]  
[S][B]  
[S]  
O
O
O
O
Unlocks the CPU  
[S][B]  
[S][B]  
[S]  
[S]  
[S]  
Disables dispatching  
Enables dispatching  
References context  
References CPU state  
References dispatching state  
References dispatching pending state  
O
O
O
O
O
O
10  
11  
12  
13  
14  
O
O
O
O
[S]  
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 168 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
rot_rdq  
irot_rdq  
Rotate task precedence  
Rotate task precedence (handler only)  
[[ C Language API ]]  
ER ercd = rot_rdq( PRI tskpri );  
ER ercd = irot_rdq( PRI tskpri );  
z Parameters  
PRI  
tskpri  
Task priority to be rotated  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
[[ Assembly language API ]]  
.include mr100.inc  
rot_rdq TSKPRI  
irot_rdq TSKPRI  
z Parameters  
TSKPRI  
Task priority to be rotated  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R3  
Error code  
Task priority to be rotated  
[[ Error code ]]  
None  
- 169 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Functional description ]]  
This service call rotates the ready queue whose priority is indicated by tskpri. In other words, it relocates the task enqueued  
at the top of the ready queue of the specified priority by linking it to behind the tail of the ready queue, thereby switching  
over the executed tasks that have the same priority. Figure 5-1 depicts the manner of how this is performed.  
Proprity 1  
Priority 2  
TCB  
TCB  
TCB  
TCB  
Priority n  
TCB  
TCB  
Moved to behind the tail of the queue  
Figure 5-1. Manipulation of the ready queue by the rot_rdq service call  
By issuing this service call at given intervals, it is possible to perform round robin scheduling. If tskpri=TPRI_SELF is  
specified when using the rot_rdq service call, the ready queue whose priority is that of the issuing task is rotated.  
TPRI_SELF cannot be specified in the irot_rdq service call. TPRI_SELF cannot be specified by irot_rdq service call.  
However, an error is not returned even if it is specified.  
If the priority of the issuing task itself is specified in this service call, the issuing task is relocated to behind the tail of the  
ready queue in which it is enqueued. Note that if the ready queue of the specified priority has no tasks in it, no operation is  
performed.  
If this service call is to be issued from task context, use rot_rdq; if issued from non-task context, use irot_rdq.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
rot_rdq( 2 );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W R3  
rot_rdq #2  
:
- 170 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
get_tid  
iget_tid  
Reference task ID in the RUNNING state  
Reference task ID in the RUNNING state  
(handler only)  
[[ C Language API ]]  
ER ercd = get_tid( ID *p_tskid );  
ER ercd = iget_tid( ID *p_tskid );  
z Parameters  
ID  
*p_tskid  
Pointer to task ID  
z Return Parameters  
ER  
ID  
ercd  
Terminated normally (E_OK)  
Pointer to task ID  
*p_tskid  
[[ Assembly language API ]]  
.include mr100.inc  
get_tid  
iget_tid  
z Parameters  
None  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
Acquired task ID  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call returns the task ID currently in RUNNING state to the area pointed to by p_tskid. If this service call is  
issued from a task, the ID number of the issuing task is returned. If this service call is issued from non-task context, the task  
ID being executed at that point in time is returned. If there are no tasks currently in an executing state, TSK_NONE is re-  
turned.  
If this service call is to be issued from task context, use get_tid; if issued from non-task context, use iget_tid.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
ID tskid;  
:
get_tid(&tskid);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
get_tid  
:
- 171 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
loc_cpu  
iloc_cpu  
Lock the CPU  
Lock the CPU (handler only)  
[[ C Language API ]]  
ER ercd = loc_cpu();  
ER ercd = iloc_cpu();  
z Parameters  
None  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
[[ Assembly language API ]]  
.include mr100.inc  
loc_cpu  
iloc_cpu  
z Parameters  
None  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
Error code  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call places the system into a CPU locked state, thereby disabling interrupts and task dispatches. The features of  
a CPU locked state are outlined below.  
(1) No task scheduling is performed during a CPU locked state.  
(2) No external interrupts are accepted unless their priority levels are higher than the kernel interrupt  
mask level defined in the configurator.  
(3) Only the following service calls can be invoked from a CPU locked state. If any other service calls  
are invoked, operation of the service call cannot be guaranteed.  
* ext_tsk  
* loc_cpu, iloc_cpu  
* unl_cpu, iunl_cpu  
* sns_ctx  
* sns_loc  
* sns_dsp  
* sns_dpn  
The system is freed from a CPU locked state by one of the following operations.  
(a) Invocation of the unl_cpu or iunl_cpu service call  
(b) Invocation of the ext_tsk service call  
Transitions between CPU locked and CPU unlocked states occur only when the loc_cpu, iloc_cpu, unl_cpu, iunl_cpu, or  
ext_tsk service call is invoked. The system must always be in a CPU unlocked state when the interrupt handler or the time  
event handler is terminated. If either handler terminates while the system is in a CPU locked state, handler operation cannot  
be guaranteed. Note that the system is always in a CPU unlocked state when these handlers start.  
Invoking this service call again while the system is already in a CPU locked state does not cause an error, in which case  
task queuing is not performed, however.  
If this service call is to be issued from task context, use loc_cpu; if issued from non-task context, use iloc_cpu.  
- 172 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
loc_cpu();  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
loc_cpu  
:
- 173 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
unl_cpu  
iunl_cpu  
Unlock the CPU  
Unlock the CPU (handler only)  
[[ C Language API ]]  
ER ercd = unl_cpu();  
ER ercd = iunl_cpu();  
z Parameters  
None  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
[[ Assembly language API ]]  
.include mr100.inc  
unl_cpu  
iunl_cpu  
z Parameters  
None  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
Error code  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call frees the system from a CPU locked state that was set by the loc_cpu or iloc_cpu service call. If the  
unl_cpu service call is issued from a dispatching enabled state, task scheduling is performed. If the system was put into a  
CPU locked state by invoking iloc_cpu within an interrupt handler, the system must always be placed out of a CPU locked  
state by invoking iunl_cpu before it returns from the interrupt handler.  
The CPU locked state and the dispatching disabled state are managed independently of each other. Therefore, the system  
cannot be freed from a dispatching disabled state by the unl_cpu or iunl_cpu service call unless the ena_dsp service call is  
used.  
If this service call is to be issued from task context, use unl_cpu; if issued from non-task context, use iunl_cpu.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
unl_cpu();  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
unl_cpu  
:
- 174 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
dis_dsp  
Disable dispatching  
[[ C Language API ]]  
ER ercd = dis_dsp();  
z Parameters  
None  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
[[ Assembly language API ]]  
.include mr100.inc  
dis_dsp  
z Parameters  
None  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
Error code  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call places the system into a dispatching disabled state. The features of a dispatching disabled state are outlined  
below.  
(1) Since task scheduling is not performed anymore, no tasks other than the issuing task itself will be  
placed into RUNNING state.  
(2) Interrupts are accepted.  
(3) No service calls can be invoked that will place tasks into WAITING state.  
If one of the following operations is performed during a dispatching disabled state, the system status returns to a task exe-  
cution state.  
(a) Invocation of the ena_dsp service call  
(b) Invocation of the ext_tsk service call  
Transitions between dispatching disabled and dispatching enabled states occur only when the dis_dsp, ena_dsp, or ext_tsk  
service call is invoked.  
Invoking this service call again while the system is already in a dispatching disabled state does not cause an error, in which  
case task queuing is not performed, however.  
This service call can be issued only from task context. It cannot be issued from non-task context.  
- 175 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
dis_dsp();  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
dis_dsp  
:
- 176 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
ena_dsp  
Enables dispatching  
[[ C Language API ]]  
ER ercd = ena_dsp();  
z Parameters  
None  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
[[ Assembly language API ]]  
.include mr100.inc  
ena_dsp  
z Parameters  
None  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
Error code  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call frees the system from a dispatching disabled state that was set by the dis_dsp service call. As a result, task  
scheduling is resumed when the system has entered a task execution state.  
Invoking this service call from a task execution state does not cause an error, in which case task queuing is not performed,  
however.  
This service call can be issued only from task context. It cannot be issued from non-task context.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
:
ena_dsp();  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
ena_dsp  
:
- 177 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
sns_ctx  
Reference context  
[[ C Language API ]]  
BOOL state = sns_ctx();  
z Parameters  
None  
z Return Parameters  
BOOL  
state  
TRUE: Non-task context  
FALSE: Task context  
[[ Assembly language API ]]  
.include mr100.inc  
sns_ctx  
z Parameters  
None  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
TRUE:Non-Task context  
FALSE: Task context  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call returns TRUE when it is invoked from non-task context, or returns FALSE when invoked from task con-  
text. This service call can also be invoked from a CPU locked state.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
BOOL stat;  
:
stat = sns_ctx();  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
sns_ctx  
:
- 178 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
sns_loc  
Reference CPU state  
[[ C Language API ]]  
BOOL state = sns_loc();  
z Parameters  
None  
z Return Parameters  
BOOL  
state  
TRUE: CPU locked state  
FALSE: CPU unlocked state  
[[ Assembly language API ]]  
.include mr100.inc  
sns_loc  
z Parameters  
None  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
TRUE: CPU locked state  
FALSE:CPUCPU unlocked state  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call returns TRUE when the system is in a CPU locked state, or returns FALSE when the system is in a CPU  
unlocked state. This service call can also be invoked from a CPU locked state.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
BOOL stat;  
:
stat = sns_loc();  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
sns_loc  
:
- 179 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
sns_dsp  
Reference dispatching state  
[[ C Language API ]]  
BOOL state = sns_dsp();  
z Parameters  
None  
z Return Parameters  
BOOL  
state  
TRUE: Dispatching disabled state  
FALSE: Dispatching enabled state  
[[ Assembly language API ]]  
.include mr100.inc  
sns_dsp  
z Parameters  
None  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
TRUE: Dispatching disabled state  
FALSE: Dispatching enabled state  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call returns TRUE when the system is in a dispatching disabled state, or returns FALSE when the system is in  
a dispatching enabled state. This service call can also be invoked from a CPU locked state.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
BOOL stat;  
:
stat = sns_dsp();  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
sns_dsp  
:
- 180 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
sns_dpn  
Reference dispatching pending state  
[[ C Language API ]]  
BOOL state = sns_dpn();  
z Parameters  
None  
z Return Parameters  
BOOL  
state  
TRUE: Dispatching pending state  
FALSE: Not dispatching pending state  
[[ Assembly language API ]]  
.include mr100.inc  
sns_dpn  
z Parameters  
None  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
TRUE: Dispatching pending state  
FALSE: Not dispatching pending state  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call returns TRUE when the system is in a dispatching pending state, or returns FALSE when the system is not  
in a dispatching pending state. More specifically, FALSE is returned when all of the following conditions are met; other-  
wise, TRUE is returned.  
(1) The system is not in a dispatching pending state.  
(2) The system is not in a CPU locked state.  
(3) The object made pending is a task.  
This service call can also be invoked from a CPU locked state. It returns TRUE when the system is in a dispatching dis-  
abled state, or returns FALSE when the system is in a dispatching enabled state.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
BOOL stat;  
:
stat = sns_dpn();  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
sns_dpn  
:
- 181 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
5.13Interrupt Management Function  
Table 5.24 List of Interrupt Management Function Service Call  
No.  
1
Service Call  
ret_int  
Function  
System State  
T
N
O
E
D
U
O
L
Returns from an interrupt handler  
O
O
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 182 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
ret_int  
Returns from an interrupt handler  
(when written in assembly language)  
[[ C Language API ]]  
This service call cannot be written in C language.36  
[[ Assembly language API ]]  
.include mr100.inc  
ret_int  
z Parameters  
None  
[[ Error code ]]  
Not return to the interrupt handler that issued this service call.  
[[ Functional description ]]  
This service call performs the processing necessary to return from an interrupt handler. Depending on return processing, it  
activates the scheduler to switch tasks from one to another.  
If this service call is executed in an interrupt handler, task switching does not occur, and task switching is postponed until  
the interrupt handler terminates.  
However, if the ret_int service call is issued from an interrupt handler that was invoked from an interrupt that occurred  
within another interrupt, the scheduler is not activated. The scheduler is activated for interrupts from a task only.  
When writing this service call in assembly language, be aware that the service call cannot be issued from a subroutine that  
is invoked from an interrupt handler entry routine. Always make sure this service call is executed in the entry routine or  
entry function of an interrupt handler. For example, a program like the one shown below may not operate normally.  
.include mr100.inc  
/* NG */  
.GLB intr  
intr:  
jsr.b func  
:
func:  
ret_int  
Therefore, write the program as shown below.  
.include mr100.inc  
/* OK */  
.GLB intr  
intr:  
jsr.b func  
ret_int  
func:  
:
rts  
Make sure this service call is issued from only an interrupt handler. If issued from a cyclic handler, alarm handler, or a task,  
this service call may not operate normally.  
36  
If the starting function of an interrupt handler is declared by #pragma INTHANDLER, the ret_int service call is automatically issued at the  
exit of the function.  
- 183 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
5.14System Configuration Management Function  
Table 5.25 List of System Configuration Management Function Service Call  
No.  
Service Call  
Function  
System State  
T
O
N
O
E
O
O
D
O
O
U
O
O
L
1
2
ref_ver  
iref_ver  
[S]  
References version information  
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 184 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
ref_ver  
iref_ver  
Reference version information  
Reference version information (handler only)  
[[ C Language API ]]  
ER ercd = ref_ver( T_RVER *pk_rver );  
ER ercd = iref_ver( T_RVER *pk_rver );  
z Parameters  
T_RVER  
*pk_rver  
Pointer to the packet to which version information is returned  
Contents of pk_rver  
typedef struct t_rver {  
UH  
maker  
prid  
0
2
2
2
2
2
Kernel manufacturer code  
UH  
UH  
+2  
+4  
+6  
+8  
Kernel identification number  
ITRON specification version number  
Kernel version number  
spver  
prver  
prno[4]  
UH  
UH  
Kernel product management information  
} T_RVER;  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
[[ Assembly language API ]]  
.include mr100.inc  
ref_ver PK_VER  
iref_ver PK_VER  
z Parameters  
PK_VER  
Pointer to the packet to which version information is returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
A1  
Error code  
Pointer to the packet to which version information is returned  
[[ Error code ]]  
None  
- 185 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Functional description ]]  
This service call reads out information about the version of the currently executing kernel and returns the result to the area  
pointed to by pk_rver.  
The following information is returned to the packet pointed to by pk_rver.  
maker  
The code H’0115 denoting Renesas Technology Corporation is returned.  
prid  
The internal identification code IDH’0014 of the M3T-MR100 is returned.  
spver  
The code H’5403 denoting that the kernel is compliant with µITRON Specification Ver 4.03.00 is returned.  
prver  
The code H’0100 denoting the version of the M3T-MR100/4 is returned.  
prno  
prno[0]  
Reserved for future extension.  
prno[1]  
Reserved for future extension.  
prno[2]  
Reserved for future extension.  
prno[3]  
Reserved for future extension.  
If this service call is to be issued from task context, use ref_ver; if issued from non-task context, use iref_ver.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
T_RVER  
pk_rver;  
ref_ver( &pk_rver );  
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
_ refver:  
task:  
task  
.blkb 16  
:
PUSHM A1  
ref_ver #_refver  
:
- 186 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
5.15Extended Function (Short Data Queue)  
Specifications of the Short data queue function of MR100 are listed in Table 5.26. This function is outside the scope of  
µITRON 4.0 Specification.  
Table 5.26 Specifications of the Short Data Queue Function  
No.  
1
Item  
Content  
Data queue ID  
1-255  
2
Capacity (data bytes) in data queue area  
Data size  
0-16383  
16 bits  
3
4
Data queue attribute  
TA_TFIFO:  
Waiting tasks enqueued in order of FIFO  
Waiting tasks enqueued in order of priority  
TA_TPRI:  
Table 5.27 List of Long Dataqueue Function Service Call  
No.  
Service Call  
Function  
System State  
T
O
N
O
O
E
D
U
O
O
O
O
O
O
O
O
O
O
O
O
L
1
2
3
4
5
6
7
vsnd_dtq  
vpsnd_dtq  
vipsnd_dtq  
vtsnd_dtq  
vfsnd_dtq  
vifsnd_dtq  
vrcv_dtq  
Sends to short data queue  
Sends to short data queue (polling)  
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
Sends to short data queue (with timeout)  
Forced sends to short data queue  
O
O
O
O
Receives from short data queue  
O
8
9
10  
11  
12  
vprcv_dtq  
viprcv_dtq  
vtrcv_dtq  
vref_dtq  
Receives from short data queue (polling)  
O
O
O
O
Receives from short data queue (with timeout)  
References short data queue status  
O
O
O
O
O
viref_dtq  
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 187 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
vsnd_dtq  
Send to Short data queue  
vpsnd_dtq  
vipsnd_dtq  
vtsnd_dtq  
vfsnd_dtq  
vifsnd_dtq  
Send to Short data queue (polling)  
Send to Short data queue (polling, handler only)  
Send to Short data queue (with timeout)  
Forced send to Short data queue  
Forced send to Short data queue (handler only)  
[[ C Language API ]]  
ER ercd = vsnd_dtq( ID vdtqid, H data );  
ER ercd = vpsnd_dtq( ID vdtqid, H data );  
ER ercd = vipsnd_dtq( ID vdtqid, H data );  
ER ercd = vtsnd_dtq( ID vdtqid, H data, TMO tmout );  
ER ercd = vfsnd_dtq( ID vdtqid, H data );  
ER ercd = vifsnd_dtq( ID vdtqid, H data );  
z Parameters  
ID  
vdtqid  
tmout  
data  
ID number of the Short data queue to which transmitted  
Timeout value(tsnd_dtq)  
TMO  
H
Data to be transmitted  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
[[ Assembly language API ]]  
.include mr100.inc  
vsnd_dtq  
VDTQID, DTQDATA  
VDTQID, DTQDATA  
visnd_dtq  
vpsnd_dtq  
vipsnd_dtq  
vtsnd_dtq  
vfsnd_dtq  
vifsnd_dtq  
VDTQID, DTQDATA  
VDTQID, DTQDATA  
VDTQID, DTQDATA,TMO  
VDTQID, DTQDATA  
VDTQID, DTQDATA  
z Parameters  
VDTQID  
ID number of the Short data queue to which transmitted  
DTQDATA Data to be transmitted  
TMO Timeout value(tsnd_dtq)  
z Register contents after service call is issued  
vsnd_dtq,vpsnd_dtq,vipsnd_dtq,vfsnd_dtq,vifsnd_dtq  
Register name  
Content after service call is issued  
R0  
R1  
R2  
Error code  
Data to be transmitted  
ID number of the Short data queue to which transmitted  
vtsnd_dtq  
Register name  
Content after service call is issued  
Error code  
R0  
R1  
Data to be transmitted  
R2  
ID number of the Short data queue to which transmitted  
Timeout value  
R6R4  
- 188 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
           
[[ Error code ]]  
E_RLWAI  
Forced release from waiting  
E_TMOUT  
Polling failure or timeout or timed out  
E_ILUSE  
Service call improperly used (vfsnd_dtq or vifsnd_dtq is issued for a Short data  
queue whose dtqcnt = 0)  
EV_RST  
Released from a wait state by clearing of the Short data queue area  
[[ Functional description ]]  
This service call sends the signed 2-byte data indicated by data to the Short data queue indicated by vdtqid. If any task is  
kept waiting for reception in the target Short data queue, the data is not stored in the Short data queue and instead sent to  
the task at the top of the reception waiting queue, with which the task is released from the reception wait state.  
On the other hand, if vsnd_dtq or vtsnd_dtq is issued for a Short data queue that is full of data, the task that issued the ser-  
vice call goes from RUNNING state to a data transmission wait state, and is enqueued in a transmission waiting queue,  
kept waiting for the Short data queue to become available. In that case, if the attribute of the specified Short data queue is  
TA_TFIFO, the task is enqueued in order of FIFO; if TA_TPRI, the task is enqueued in order of priority. For vpsnd_dtq and  
vipsnd_dtq, the task returns immediately and responds to the call with the error code E_TMOUT.  
For the vtsnd_dtq service call, specify a wait time for tmout in ms units. The values specified for tmout must be within  
(0x7FFFFFFF-time tick value). If any value exceeding this limit is specified, the service call may not operate correctly. If  
TMO_POL=0 is specified for tmout, it means specifying 0 as a timeout value, in which case the service call operates the  
same way as vpsnd_dtq. Furthermore, if specified as tmout=TMO_FEVR(–1), it means specifying an infinite wait, in  
which case the service call operates the same way as vsnd_dtq.  
If there are no tasks waiting for reception, nor is the Short data queue area filled, the transmitted data is stored in the Short  
data queue.  
The task placed into a wait state by execution of the vsnd_dtq or vtsnd_dtq service call is released from WAITING state in  
the following cases:  
When the vrcv_dtq, vtrcv_dtq, vprcv_dtq, or viprcv_dtq service call is issued before the tmout  
time elapses, with task-awaking conditions thereby satisfied  
The error code returned in this case is E_OK.  
When the first time tick occurred after tmout elapsed while task-awaking conditions remain un-  
satisfied  
The error code returned in this case is E_TMOUT.  
When the task is forcibly released from WAITING state by the rel_wai or irel_wai service call is-  
sued from another task or a handler  
The error code returned in this case is E_RLWAI.  
When the target Short data queue being waited for is initialized by the vrst_vdtq service call is-  
sued from another task  
The error code returned in this case is EV_RST.  
For vfsnd_dtq and vifsnd_dtq, the data at the top of the Short data queue or the oldest data is removed, and the transmitted  
data is stored at the tail of the Short data queue. If the Short data queue area is not filled with data, vfsnd_dtq and  
vifsnd_dtq operate the same way as vsnd_dtq. If dtqcnt = 0 ,there is no task in the wait queue and vfsnd_dtq or vifsnd_dtq  
service call is issued, error code E_ILUSE will be returned.  
If this service call is to be issued from task context, use vsnd_dtq,vtsnd_dtq,vpsnd_dtq,vfsnd_dtq; if issued from non-task  
context, use vipsnd_dtq,vifsnd_dtq.  
- 189 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
H data[10];  
void task(void)  
{
:
if( vsnd_dtq( ID_dtq, data[0]) == E_RLWAI ){  
error(“Forced released\n”);  
}
:
if( vpsnd_dtq( ID_dtq, data[1])== E_TMOUT ){  
error(“Timeout\n”);  
}
:
if( vtsnd_dtq( ID_dtq, data[2], 10 ) != E_ TMOUT ){  
error(“Timeout \n”);  
}
:
if( vfsnd_dtq( ID_dtq, data[3]) != E_OK ){  
error(“error\n”);  
}
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task  
_g_dtq: .WORD 1234H  
task:  
:
PUSH.W  
PUSH.W  
PUSHM  
R1  
R2  
R6R4  
vtsnd_dtq #ID_DTQ1,_g_dtq,#100  
:
PUSH.W  
PUSH.W  
R1  
R2  
vpsnd_dtq #ID_DTQ2,#0FFFFH  
:
PUSH.W  
PUSH.W  
R1  
R2  
vfsnd_dtq #ID_DTQ3,#0ABCDH  
:
- 190 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
vrcv_dtq  
Receive from Short data queue  
vprcv_dtq  
viprcv_dtq  
vtrcv_dtq  
Receive from Short data queue (polling)  
Receive from Short data queue (polling,handler only)  
Receive from Short data queue (with timeout)  
[[ C Language API ]]  
ER ercd = vrcv_dtq( ID dtqid, H *p_data );  
ER ercd = vprcv_dtq( ID dtqid, H *p_data );  
ER ercd = viprcv_dtq( ID dtqid, H *p_data );  
ER ercd = vtrcv_dtq( ID dtqid, H *p_data, TMO tmout );  
z Parameters  
ID  
vdtqid  
ID number of the Short data queue from which to receive  
Timeout value(vtrcv_dtq)  
TMO  
H
tmout  
*p_data  
Pointer to the start of the area in which received data is stored  
z Return Parameters  
ER  
H
ercd  
Terminated normally (E_OK) or error code  
Pointer to the start of the area in which received data is stored  
*p_data  
[[ Assembly language API ]]  
.include mr100.inc  
vrcv_dtq  
VDTQID  
VDTQID  
VDTQID  
vprcv_dtq  
viprcv_dtq  
vtrcv_dtq  
VDTQID,TMO  
z Parameters  
VDTQID  
ID number of the Short data queue from which to receive  
TMO  
Timeout value(trcv_dtq)  
z Register contents after service call is issued  
vrcv_dtq,vprcv_dtq,viprcv_dtq  
Register name  
Content after service call is issued  
R0  
R1  
R2  
Error code  
Received data  
ID number of the Short data queue from which to receive  
vtrcv_dtq  
Register name  
Content after service call is issued  
R0  
Error code  
R1  
Received data  
R2  
ID number of the Short data queue from which to receive  
Timeout value  
R6R4  
[[ Error code ]]  
E_RLWAI  
Forced release from waiting  
E_TMOUT  
Polling failure or timeout or timed out  
- 191 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
[[ Functional description ]]  
This service call receives data from the Short data queue indicated by vdtqid and stores the received data in the area pointed  
to by p_data. If data is present in the target Short data queue, the data at the top of the queue or the oldest data is received.  
This results in creating a free space in the Short data queue area, so that a task enqueued in a transmission waiting queue is  
released from WAITING state, and starts sending data to the Short data queue area.  
If no data exist in the Short data queue and there is any task waiting to send data (i.e., data bytes in the Short data queue  
area = 0), data for the task at the top of the data transmission waiting queue is received. As a result, the task kept waiting to  
send that data is released from WAITING state.  
On the other hand, if vrcv_dtq or vtrcv_dtq is issued for the Short data queue which has no data stored in it, the task that  
issued the service call goes from RUNNING state to a data reception wait state, and is enqueued in a data reception waiting  
queue. At this time, the task is enqueued in order of FIFO. For the vprcv_dtq and viprcv_dtq service calls, the task returns  
immediately and responds to the call with the error code E_TMOUT.  
For the vtrcv_dtq service call, specify a wait time for tmout in ms units. The values specified for tmout must be within  
0x7FFFFFFF. If any value exceeding this limit is specified, the service call may not operate correctly. If TMO_POL=0 is  
specified for tmout, it means specifying 0 as a timeout value, in which case the service call operates the same way as  
vprcv_dtq. Furthermore, if specified as tmout=TMO_FEVR(–1), it means specifying an infinite wait, in which case the  
service call operates the same way as vrcv_dtq.  
The task placed into a wait state by execution of the vrcv_dtq or vtrcv_dtq service call is released from the wait state in the  
following cases:  
When the vrcv_dtq, vtrcv_dtq, vprcv_dtq, or viprcv_dtq service call is issued before the tmout  
time elapses, with task-awaking conditions thereby satisfied  
The error code returned in this case is E_OK.  
When the first time tick occurred after tmout elapsed while task-awaking conditions remain un-  
satisfied  
The error code returned in this case is E_TMOUT.  
When the task is forcibly released from WAITING state by the rel_wai or irel_wai service call is-  
sued from another task or a handler  
The error code returned in this case is E_RLWAI.  
If this service call is to be issued from task context, use vrcv_dtq,vtrcv_dtq,vprcv_dtq; if issued from non-task context, use  
viprcv_dtq.  
- 192 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
H data;  
:
if( vrcv_dtq( ID_dtq, &data ) != E_RLWAI )  
error(“forced wakeup\n”);  
:
if( vprcv_dtq( ID_dtq, &data ) != E_TMOUT )  
error(“Timeout\n”);  
:
if( vtrcv_dtq( ID_dtq, &data, 10 ) != E_TMOUT )  
error(“Timeout\n”);  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
PUSHM  
R2  
R6R4  
vtrcv_dtq #ID_DTQ1,#TMO_POL  
:
PUSH.W  
R2  
vprcv_dtq #ID_DTQ2  
:
PUSH.W  
vrcv_dtq  
:
R2  
#ID_DTQ2  
- 193 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
vref_dtq  
viref_dtq  
Reference Short data queue status  
Reference Short data queue status (handler only)  
[[ C Language API ]]  
ER ercd = vref_dtq( ID vdtqid, T_RDTQ *pk_rdtq );  
ER ercd = viref_dtq( ID vdtqid, T_RDTQ *pk_rdtq );  
z Parameters  
ID  
vdtqid  
ID number of the target Short data queue  
T_RDTQ  
*pk_rdtq  
Pointer to the packet to which Short data queue status is returned  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK) or error code  
T_RDTQ  
*pk_rdtq  
Pointer to the packet to which Short data queue status is returned  
Contents of pk_rdtq  
typedef struct  
ID stskid  
wtskid  
sdtqcnt  
t_rdtq{  
+0  
+2  
+4  
2
2
4
Transmission waiting task ID  
Reception waiting task ID  
Data bytes contained in Short data queue  
ID  
UINT  
} T_RDTQ;  
[[ Assembly language API ]]  
.include mr100.inc  
vref_dtq VDTQID, PK_RDTQ  
viref_dtqVDTQID, PK_RDTQ  
z Parameters  
VDTQID  
ID number of the target Short data queue  
PK_RDTQ  
Pointer to the packet to which Short data queue status is returned  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
A1  
Error code  
ID number of the target Short data queue  
Pointer to the packet to which Short data queue status is returned  
[[ Error code ]]  
None  
- 194 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
[[ Functional description ]]  
This service call returns various statuses of the Short data queue indicated by vdtqid.  
stskid  
Returned to stskid is the ID number of the task at the top of a transmission waiting queue (the next task to be de-  
queued). If no tasks are kept waiting, TSK_NONE is returned.  
wtskid  
Returned to wtskid is the ID number of the task at the top of a reception waiting queue (the next task to be de-  
queued). If no tasks are kept waiting, TSK_NONE is returned.  
sdtqcnt  
Returned to sdtqcnt is the number of data bytes stored in the Short data queue area.  
If this service call is to be issued from task context, use ref_dtq; if issued from non-task context, use iref_dtq.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task()  
{
T_RDTQ rdtq;  
ER ercd;  
:
ercd = vref_dtq( ID_DTQ1, &rdtq );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
_ refdtq:  
.GLB  
.blkb 8  
task  
task:  
:
PUSH.W R2  
PUSH.L A1  
vref_dtq  
:
#ID_DTQ1,#_refdtq  
- 195 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
5.16Extended Function (Reset Function)  
This function initializes the content of an object. This function is outside the scope of µITRON 4.0 Specification.  
Table 5.28 List of Reset Function Service Call  
No.  
Service Call  
Function  
System State  
T
O
O
O
O
O
N
E
O
O
O
O
O
D
O
O
O
O
O
U
O
O
O
O
O
L
1
2
3
4
5
vrst_dtq  
vrst_vdtq  
vrst_mbx  
vrst_mpf  
vrst_mpl  
Clear data queue area  
Clear Short data queue area  
Clear mailbox area  
Clear fixed-size memory pool area  
Clear variable-size memory pool area  
Notes:  
[S]: Standard profile service calls  
[B]: Basic profile service calls  
Each sign within " System State " is a following meaning.  
T: Can be called from task context  
N: Can be called from non-task context  
E: Can be called from dispatch-enabled state  
D: Can be called from dispatch-disabled state  
U: Can be called from CPU-unlocked state  
L: Can be called from CPU-locked state  
- 196 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
vrst_dtq  
Clear data queue area  
[[ C Language API ]]  
ER ercd = vrst_dtq( ID dtqid );  
z Parameters  
ID  
dtqid  
Data queue ID to be cleared  
Terminated normally (E_OK)  
z Return Parameters  
ER  
ercd  
[[ Assembly language API ]]  
.include mr100.inc  
vrst_dtq DTQID  
z Parameters  
DTQID  
Data queue ID to be cleared  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
Data queue ID to be cleared  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call clears the data stored in the data queue indicated by dtqid. If the data queue area has no more areas to be  
added and tasks are enqueued in a data transmission waiting queue, all of the tasks enqueued in the data transmission wait-  
ing queue are released from WAITING state. Furthermore, the error code EV_RST is returned to the tasks that have been  
released from WAITING state.  
Even when the number of data queues defined is 0, all of the tasks enqueued in a data transmission waiting queue are re-  
leased from WAITING state.  
This service call can be issued only from task context. It cannot be issued from non-task context.  
- 197 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task1(void)  
{
:
vrst_dtq( ID_dtq1 );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
vrst_dtq  
:
R2  
#ID_DTQ1  
- 198 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
vrst_vdtq  
Clear Short data queue area  
[[ C Language API ]]  
ER ercd = vrst_vdtq( ID vdtqid );  
z Parameters  
ID  
vdtqid  
Short data queue ID to be cleared  
Terminated normally (E_OK)  
z Return Parameters  
ER  
ercd  
[[ Assembly language API ]]  
.include mr100.inc  
vrst_vdtqVDTQID  
z Parameters  
VDTQID  
Short data queue ID to be cleared  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
Short data queue ID to be cleared  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call clears the data stored in the Short data queue indicated by vdtqid. If the Short data queue area has no more  
areas to be added and tasks are enqueued in a data transmission waiting queue, all of the tasks enqueued in the data trans-  
mission waiting queue are released from WAITING state. Furthermore, the error code EV_RST is returned to the tasks that  
have been released from WAITING state.  
Even when the number of Short data queues defined is 0, all of the tasks enqueued in a data transmission waiting queue are  
released from WAITING state.  
This service call can be issued only from task context. It cannot be issued from non-task context.  
- 199 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task1(void)  
{
:
vrst_vdtq( ID_vdtq1 );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
R2  
vrst_vdtq #ID_VDTQ1  
:
- 200 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
vrst_mbx  
Clear mailbox area  
[[ C Language API ]]  
ER ercd = vrst_mbx( ID mbxid );  
z Parameters  
ID  
mbxid  
Mailbox ID to be cleared  
z Return Parameters  
ER  
ercd  
Terminated normally (E_OK)  
[[ Assembly language API ]]  
.include mr100.inc  
vrst_mbx MBXID  
z Parameters  
MBXID  
Mailbox ID to be cleared  
z Register contents after service call is issued  
Register name Content after service call is issued  
R0  
R2  
Error code  
Mailbox ID to be cleared  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call clears the messages stored in the mailbox indicated by mbxid.  
This service call can be issued only from task context. It cannot be issued from non-task context.  
- 201 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task1(void)  
{
:
vrst_mbx( ID_mbx1 );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
vrst_mbx  
:
R2  
#ID_MBX1  
- 202 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
vrst_mpf  
Clear fixed-size memory pool area  
[[ C Language API ]]  
ER ercd = vrst_mpf( ID mpfid );  
z Parameters  
ID  
mpfid  
Fixed-size memory pool ID to be cleared  
Terminated normally (E_OK)  
z Return Parameters  
ER  
ercd  
[[ Assembly language API ]]  
.include mr100.inc  
vrst_mpf MPFID  
z Parameters  
MPFID  
Fixed-size memory pool ID to be cleared  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
Fixed-size memory pool ID to be cleared  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call initializes the fixed-size memory pool indicated by mpfid. If tasks are enqueued in a memory block wait-  
ing queue, all of the tasks enqueued in the memory block waiting queue are released from WAITING state. Furthermore,  
the error code EV_RST is returned to the tasks that have been released from WAITING state.  
This service call can be issued only from task context. It cannot be issued from non-task context.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task1(void)  
{
:
vrst_mpf( ID_mpf1 );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
vrst_mpf  
:
R2  
#ID_MPF1  
- 203 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
vrst_mpl  
Clear variable-size memory pool area  
[[ C Language API ]]  
ER ercd = vrst_mpl( ID mplid );  
z Parameters  
ID  
mplid  
Variable-size memory pool ID to be cleared  
Terminated normally (E_OK)  
z Return Parameters  
ER  
ercd  
[[ Assembly language API ]]  
.include mr100.inc  
vrst_mpl MPLID  
z Parameters  
MPLID  
Variable-size memory pool ID to be cleared  
z Register contents after service call is issued  
Register name  
Content after service call is issued  
R0  
R2  
Error code  
Variable-size memory pool ID to be cleared  
[[ Error code ]]  
None  
[[ Functional description ]]  
This service call initializes the variable-size memory pool indicated by mplid.  
This service call can be issued only from task context. It cannot be issued from non-task context.  
[[ Example program statement ]]  
<<Example statement in C language>>  
#include <itron.h>  
#include <kernel.h>  
#include “kernel_id.h”  
void task1(void)  
{
:
vrst_mpl( ID_mpl1 );  
:
}
<<Example statement in assembly language>>  
.include mr100.inc  
.GLB  
task:  
task  
:
PUSH.W  
vrst_mpl  
:
R2  
#ID_MPL1  
- 204 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
6. Applications Development Procedure  
Overview  
6.1 Overview  
Application programs for MR100 should generally be developed following the procedure described below.  
1. Generating a project  
When using HEW37, create a new project using MR100 on HEW.  
2. Coding the application program  
Write the application program in code form using C or assembly language. If necessary, correct the sample star-  
tup program (crt0mr.a30) and section definition file (c_sec.inc or asm_sec.inc).  
3. Creating a configuration file  
Create a configuration file which has defined in it the task entry address, stack size, etc. by using an editor.  
The GUI configurator available for MR100 may be used to create a configuration file.  
4. Executing the configurator  
From the configuration file, create system data definition files (sys_rom.inc, sys_ram.inc), include files  
(mr100.inc, kernel_id.h).  
5. System generation  
Execute the make38 command or execute build on HEW to generate a system.  
6. Writing to ROM  
Using the ROM programming format file created, write the finished program file into the ROM. Or load it into  
the debugger to debug.  
Figure 6.1 shows a detailed flow of system generation.  
37  
It is abbreviation of High-performance Embedded Workshop.  
The make command comes the UNIX standard and UNIX compatible.  
38  
- 205 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
HEW  
Configuration file  
C standard  
header file  
MR100 include file  
kernel.h  
Configurator  
cfg100  
Include file  
kernel_id.h  
Include file  
mr100.inc  
Application  
include file  
System data definition file  
sys_ram.inc, sys_rom.inc  
Application  
C source  
Application  
Assembler source  
Startup program  
start.a30, crt0mr.a30  
C compiler  
nc100  
Jamp table file  
mrtable.a30  
Relocatable Assembler  
as100  
Create Jamp table utility  
mr100tbl  
Systemcall  
file ( .mrc )  
MR100/4  
Application  
object  
C standard  
Library  
Library  
Linkage Editor  
ln100  
Absolute  
module  
Load module converter  
lmc100  
ROM write format  
Figure 6.1 MR100 System Generation Detail Flowchart  
- 206 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
6.2 Development Procedure Example  
This chapter outlines the development procedures on the basis of a typical MR100 application example.  
6.2.1  
Applications Program Coding  
Figure 6.2 shows a program that simulates laser beam printer operations. Let us assume that the file describing the laser  
beam printer simulation program is named lbp.c. This program consists of the following three tasks and one interrupt han-  
dler.  
Main Task  
Image expansion task  
Printer engine task  
Centronics interface interrupt handler  
This program uses the following MR100 library functions.  
sta_tsk()  
Starts a task. Give the appropriate ID number as the argument to select the task to be activated. When the ker-  
nel_id.h file, which is generated by the configurator, is included, it is possible to specify the task by name (char-  
acter string).39  
wai_flg()  
Waits until the eventflag is set up. In the example, this function is used to wait until one page of data is entered into the  
buffer via the Centronics interface.  
wup_tsk()  
Wakes up a specified task from the WAITING state. This function is used to start the printer engine task.  
slp_tsk()  
Causes a task in the RUNNING state to enter the WAITING state. In the example, this function is used to make  
the printer engine task wait for image expansion.  
iset_flg()  
Sets the eventflag. In the example, this function is used to notify the image expansion task of the completion of  
one-page data input.  
39  
The configurator converts the ID number to the associated name(character string) in accordance with the information entered int the con-  
figuration file.  
- 207 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
#include <itron.h>  
#include <kernel.h>  
#include "kernel_id.h"  
void main() /* main task */  
{
printf("LBP start simulation \n");  
sta_tsk(ID_idle,1);  
sta_tsk(ID_image,1);  
/* activate idle task */  
/* activate image expansion task */  
sta_tsk(ID_printer,1); /* activate printer engine task */  
}
void image() /* activate image expansion task */  
{
while(1){  
wai_flg(ID_pagein,waiptn,TWF_ANDW, &flgptn);/* wait for 1-page input */  
printf(" bit map expansion processing \n");  
wup_tsk(ID_printer); /* wake up printer engine task */  
}
}
void printer() /* printer engine task */  
{
while(1){  
slp_tsk();  
printf(" printer engine operation \n");  
}
}
void sent_in() /* Centronics interface handler */  
{
/* Process input from Centronics interface */  
if ( /* 1-page input completed */ )  
iset_flg(ID_pagein,setptn);  
}
Figure 6.2 Program Example  
6.2.2  
Configuration File Preparation  
Create a configuration file which has defined in it the task entry address, stack size, etc. Use of the GUI configurator avail-  
able for MR100 helps to create a configuration file easily without having to learn how to write it.  
shows an example configuration file for a laser beam printer simulation program (filename "lbp.cfg").  
- 208 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
// System Definition  
system{  
stack_size  
priority  
system_IPL  
tick_nume  
};  
= 1024;  
= 5;  
= 4;  
= 10;  
//System Clock Definition  
clock{  
mpu_clock  
timer  
= 20MHz;  
= A0;  
IPL  
= 4;  
};  
//Task Definition  
task[1]{  
name  
entry_address  
stack_size  
priority  
initial_start  
};  
= ID_main;  
= main();  
= 512;  
= 1;  
= ON;  
task[2]{  
name  
entry_address  
stack_size  
priority  
};  
= ID_image;  
= image();  
= 512;  
= 2;  
task[3]{  
name  
entry_address  
stack_size  
priority  
};  
= ID_printer;  
= printer();  
= 512;  
= 4;  
task[4]{  
name  
entry_address  
stack_size  
priority  
};  
= ID_idle;  
= idle();  
= 256;  
= 5;  
//Eventflag Definition  
flag[1]{  
name  
= pagein;  
};  
//Interrupt Vector Definition  
interrupt_vector[0x23]{  
os_int  
entry_address  
= YES;  
= sent_in();  
};  
Figure 6.3 Configuration File Example  
6.2.3  
Configurator Execution  
When using HEW, select "Build all," which enables the user to execute the procedures described in 6.2.3, "Executing the  
Configurator," and 6.2.4, "System Generation."  
Execute the configurator cfg100 to generate system data definition files (sys_rom.inc, sys_ram.inc), include files  
(mr100.inc, kernel_id.h), and a system generation procedure description file (makefile) from the configuration file.  
A> cfg100 -v lbp.cfg  
MR100 system configurator V.1.00.18  
Copyright 2003,2005 RENESAS TECHNOLOGY CORPORATION  
AND RENESAS SOLUTIONS CORPORATION ALL RIGHTS RESERVED.  
MR100 version ==> V.1.01 Release 01  
A>  
Figure 6.4 Configurator Execution  
6.2.4  
System generation  
Execute the make command to generate the system.  
- 209 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
A> make -f makefile  
as100 -F -Dtest=1 crt0mr.a30  
nc100 -c task.c  
ln100 @ln100.sub  
A>  
Figure 6.5 System Generation  
6.2.5  
Writing ROM  
Using the lmc30 load module converter, convert the absolute module file into a ROM writable format and then write it into  
ROM. Or read the file into the debugger and debug it.  
- 210 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
7. Detailed Applications  
7.1 Program Coding Procedure in C Language  
7.1.1  
Task Description Procedure  
1. Describe the task as a function.  
To register the task for the MR100, enter its function name in the configuration file. When, for instance, the  
function name "task()" is to be registered as the task ID number 3, proceed as follows.  
task[3]{  
name  
= ID_task;  
entry_address = task();  
stack_size  
priority  
= 100;  
= 3;  
};  
2. At the beginning of file, be sure to include "itron.h",”kernel.h” which is in system directory  
as well as "kernel_id.h" which is in the current directory. That is, be sure to enter the fol-  
lowing two lines at the beginning of file.  
#include <itron.h>  
#include <kernel.h>  
#include "kernel_id.h"  
3. No return value is provided for the task start function. Therefore, declare the task start  
function as a void function.  
4. A function that is declared to be static cannot be registered as a task.  
5. It isn't necessary to describe ext_tsk() at the exit of task start function.40If you exit the task  
from the subroutine in task start function, please describe ext_tsk() in the subroutine.  
6. It is also possible to describe the task startup function, using the infinite loop.  
#include <itron.h>  
#include <kernel.h>  
#include "kernel_id.h"  
void task(void)  
{
/* process */  
}
Figure 7.1 Example Infinite Loop Task Described in C Language  
40  
The task is ended by ext_tsk() automatically if #pramga TASK is declared in the MR100. Similarly, it is ended by ext_tsk when returned  
halfway of the function by return sentence.  
- 211 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
         
#include <itron.h>  
#include <kernel.h>  
#include "kernel_id.h"  
void task(void)  
{
for(;;){  
/* process */  
}
}
Figure 7.2 Example Task Terminating with ext_tsk() Described in C Language  
7. To specify a task, use the string written in the task definition item “name” of the configura-  
tion file.41  
wup_tsk(ID_main);  
8. To specify an event flag, semaphore, or mailbox, use the respective strings defined in the  
configuration file.  
For example, if an event flag is defined in the configuration file as shown below,  
flag[1]{  
name  
= ID_abc;  
};  
To designate this eventflag, proceed as follows.  
set_flg(ID_abc,&setptn);  
9. To specify a cyclic or alarm handler, use the string written in the cyclic or alarm handler  
definition item “name” of the configuration file.  
sta_cyc(ID_cyc);  
10. When a task is reactivated by the sta_tsk() service call after it has been terminated by the  
ter_tsk() service call, the task itself starts from its initial state.42 However, the external va-  
riable and static variable are not automatically initialized when the task is started. The ex-  
ternal and static variables are initialized only by the startup program (crt0mr.a30), which  
actuates before MR100 startup.  
11. The task executed when the MR100 system starts up is setup.  
12. The variable storage classification is described below.  
The MR100 treats the C language variables as indicated in Table 7.1 C Language Variable Treatment.  
Table 7.1 C Language Variable Treatment  
Variable storage class  
Global Variable  
Treatment  
Variable shared by all tasks  
Non-function static variable  
Auto Variable  
Variable shared by the tasks in the same file  
Register Variable  
Variable for specific task  
Static variable in function  
7.1.2  
Writing a Kernel (OS Dependent) Interrupt Handler  
When describing the kernel interrupt handler in C language, observe the following precautions.  
41  
The configurator generates the file “kernel_id.h” that is used to convert the ID number of a task into the string to be specified. This means  
that the #define declaration necessary to convert the string specified in the task definition item “name” into the ID number of the task is  
made in “kernel_id.h.” The same applies to the cyclic and alarm handlers.  
42  
The task starts from its start function with the initial priority in a wakeup counter cleared state.  
- 212 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
         
1. Describe the kernel interrupt handler as a function 43  
2. Be sure to use the void type to declare the interrupt handler start function return value and  
argument.  
3. At the beginning of file, be sure to include "itron.h",”kernel.h” which is in the system di-  
rectory as well as "kernel_id.h" which is in the current directory.  
4. Do not use the ret_int service call in the interrupt handler.44  
5. The static declared functions can not be registered as an interrupt handler.  
#include <itron.h>  
#include <kernel.h>  
#include "kernel_id.h"  
void inthand(void)  
{
/* process */  
iwup_tsk(ID_main);  
}
Figure 7.3 Example of Kernel Interrupt Handler  
7.1.3  
Writing Non-kernel Interrupt Handler  
When describing the non-kernel interrupt handler in C language, observe the following precautions.  
1. Be sure to declare the return value and argument of the interrupt handler start function as  
a void type.  
2. No service call can be issued from a non-kernel interrupt handler.  
NOTE: If this restriction is not observed, the software may malfunction.  
3. A function that is declared to be static cannot be registered as an interrupt handler.  
4. If you want multiple interrupts to be enabled in a non-kernel interrupt handler, always make  
sure that the non-kernel interrupt handler is assigned a priority level higher than other  
kernel interrupt handlers.45  
#include <itron.h>  
#include <kernel.h>  
#include "kernel_id.h"  
void inthand(void)  
{
/* process */  
}
Figure 7.4 Example of Non-kernel Interrupt Handler  
7.1.4  
Writing Cyclic Handler/Alarm Handler  
When describing the cyclic or alarm handler in C language, observe the following precautions.  
43  
A configuration file is used to define the relationship between handlers and functions.  
When an kernel interrupt handler is declared with #pragma INTHANDLER ,code for the ret_int service call is automatically generated.  
If you want the non-kernel interrupt handler to be assigned a priority level lower than kernel interrupt handlers, change the description of  
44  
45  
the non-kernel interrupt handler to that of the kernel interrupt handler.  
- 213 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
             
1. Describe the cyclic or alarm handler as a function.46  
2. Be sure to declare the return value and argument of the interrupt handler start function as  
a void type.  
3. At the beginning of file, be sure to include "itron.h",”kernel.h” which is in the system di-  
rectory as well as "kernel_id.h" which is in the current directory.  
4. The static declared functions cannot be registered as a cyclic handler or alarm handler.  
5. The cyclic handler and alarm handler are invoked by a subroutine call from a system clock  
interrupt handler.  
#include <itron.h>  
#include <kernel.h>  
#include "kernel_id.h"  
void cychand(void)  
{
/*process */  
}
Figure 7.5 Example Cyclic Handler Written in C Language  
46  
The handler-to-function name correlation is determined by the configuration file.  
- 214 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
7.2 Program Coding Procedure in Assembly Language  
This section describes how to write an application using the assembly language.  
7.2.1  
Writing Task  
This section describes how to write an application using the assembly language.  
1. Be sure to include "mr100.inc" at the beginning of file.  
2. For the symbol indicating the task start address, make the external declaration.47  
3. Be sure that an infinite loop is formed for the task or the task is terminated by the ext_tsk  
service call.  
.INCLUDE mr100.inc ----- (1)  
.GLB  
task  
----- (2)  
task:  
; process  
jmp task  
----- (3)  
Figure 7.6 Example Infinite Loop Task Described in Assembly Language  
.INCLUDE mr100.inc  
.GLB  
task  
task:  
; process  
ext_tsk  
Figure 7.7 Example Task Terminating with ext_tsk Described in Assembly Language  
4. The initial register values at task startup are indeterminate except the PC, SB, R0 and FLG  
registers.  
5. To specify a task, use the string written in the task definition item “name” of the configura-  
tion file.  
wup_tsk #ID_task  
6. To specify an event flag, semaphore, or mailbox, use the respective strings defined in the  
configuration file.  
For example, if a semaphore is defined in the configuration file as shown below,:  
semaphore[1]{  
name  
= abc;  
};  
To specify this semaphore, write your specification as follows:  
sig_sem #ID_abc  
7. To specify a cyclic or alarm handler, use the string written in the cyclic or alarm handler  
definition item “name” of the configuration file  
For example, if you want to specify a cyclic handler "cyc," write your specification as follows:  
sta_cyc #ID_cyc  
47  
Use the .GLB pseudo-directive  
- 215 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
         
8. Set a task that is activated at MR100 system startup in the configuration file 48  
7.2.2  
Writing Kernel Interrupt Handler  
When describing the kernel interrupt handler in assembly language, observe the following precautions  
1. At the beginning of file, be sure to include "mr100.inc" which is in the system directory.  
2. For the symbol indicating the interrupt handler start address, make the external declara-  
tion(Global declaration).49  
3. Make sure that the registers used in a handler are saved at the entry and are restored after  
use.  
4. Return to the task by ret_int service call.  
.INCLUDE mr100.inc  
.GLB inth  
------(1)  
------(2)  
inth:  
; Registers used are saved to a stack ------(3)  
iwup_tsk #ID_task1  
:
process  
:
; Registers used are restored ------(3)  
ret_int  
------(4)  
Figure 7.8 Example of kernel(OS-depend) interrupt handler  
7.2.3  
Writing Non-kernel Interrupt Handler  
1. For the symbol indicating the interrupt handler start address, make the external declaration  
(public declaration).  
2. Make sure that the registers used in a handler are saved at the entry and are restored after  
use.  
3. Be sure to end the handler by REIT instruction.  
4. No service calls can be issued from a non-kernel interrupt handler.  
NOTE: If this restriction is not observed, the software may malfunction.  
5. If you want multiple interrupts to be enabled in a non-kernel interrupt handler, always make  
sure that the non-kernel interrupt handler is assigned a priority level higher than other  
non-kernel interrupt handlers.50  
.GLB  
inthand  
----- (1)  
inthand:  
; Registers used are saved to a stack  
; interrupt process  
----- (2)  
; Registers used are restored  
REIT  
----- (2)  
----- (3)  
Figure 7.9 Example of Non-kernel Interrupt Handler of Specific Level  
7.2.4  
Writing Cyclic Handler/Alarm Handler  
When describing the cyclic or alarm handler in Assembly Language, observe the following precautions.  
48  
The relationship between task ID numbers and tasks(program) is defined in the configuration file.  
Use the .GLB peudo-directive.  
If you want the non-kernel interrupt handler to be assigned a priority level lower than kernel interrupt handlers, change the description of  
49  
50  
the non-kernel interrupt handler to that of the kernel interrupt handler.  
- 216 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
               
1. At the beginning of file, be sure to include "mr100.inc" which is in the system directory.  
2. For the symbol indicating the handler start address, make the external declaration.51  
3. Always use the RTS instruction (subroutine return instruction) to return from cyclic han-  
dlers and alarm handlers.  
For examples:  
.INCLUDE  
.GLB  
mr100.inc  
cychand  
----- (1)  
----- (2)  
cychand:  
:
; handler process  
:
rts  
----- (3)  
Figure 7.10 Example Handler Written in Assembly Language  
51  
Use the .GLB pseudo-directive.  
- 217 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
7.3 Modifying MR100 Startup Program  
MR100 comes with two types of startup programs as described below.  
start.a30  
This startup program is used when you created a program using the assembly language.  
crt0mr.a30  
This startup program is used when you created a program using the C language.  
This program is derived from "start.a30" by adding an initialization routine in C language.  
The startup programs perform the following:  
Initialize the processor after a reset.  
Initialize C language variables (crt0mr.a30 only).  
Set the system timer.  
Initialize MR100's data area.  
Copy these startup programs from the directory indicated by environment variable "LIB100" to the current directory.  
If necessary, correct or add the sections below:  
Setting processor mode register  
Set a processor mode matched to your system to the processor mode register. (58-60th line in crt0mr.a30)  
Adding user-required initialization program  
When there is an initialization program that is required for your application, add it to the 140th line in the C  
language startup program (crt0mr.a30).  
Enable the 138th – 139th line in the C language startup program (crt0mr.a30) if standard I/O function is  
used.  
- 218 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
7.3.1  
C Language Startup Program (crt0mr.a30)  
Figure 7.11 shows the C language startup program(crt0mr.a30).  
1 ; ****************************************************************  
2 ;  
3 ;  
4 ;  
5 ;  
6 ;  
7 ;  
MR100 start up program for C language  
COPYRIGHT(C) 2003,2006,2007 RENESAS TECHNOLOGY CORPORATION  
AND RENESAS SOLUTIONS CORPORATION ALL RIGHTS RESERVED  
MR100  
8 ; ****************************************************************  
9 ; "$Id: crt0mr.a30 512 2007-07-09 10:11:36Z inui $"  
10 ;*A1* 2005-02-28 for ES  
11 ;*G0* 2006-06-15 for MR100/4  
12 ;  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
.LIST OFF  
.INCLUDE  
.INCLUDE  
.INCLUDE  
.INCLUDE  
.LIST ON  
c_sec.inc  
mr100.inc  
sys_rom.inc  
sys_ram.inc  
.GLB  
.GLB  
.GLB  
__SYS_INITIAL  
__END_INIT  
__init_sys,__init_tsk  
24 regoffset  
25  
.EQU  
0
26 ;-----------------------------------------------------------------  
27 ; SBDATA area definition  
28 ;-----------------------------------------------------------------  
29  
30  
31  
.GLB  
.SB  
__SB__  
__SB__  
32 ;=================================================================  
33 ; Initialize Macro declaration  
34 ;-----------------------------------------------------------------  
35 BZERO  
.macro  
TOP_,SECT_  
36  
37  
38  
39  
40  
XOR.B  
R0L,R0L  
mov.l  
mov.l  
sstr.b  
.endm  
#TOP_,A1  
#sizeof SECT_,R7R5  
41 BCOPY  
.macro  
FROM_,TO_,SECT_  
#FROM_,A0  
42  
43  
44  
45  
46  
mov.l  
mov.l  
mov.l  
smovf.b  
.endm  
#TO_,A1  
#sizeof SECT_,R7R5  
47 ;=================================================================  
48 ; Interrupt section start  
49 ;-----------------------------------------------------------------  
50  
51  
.SECTION  
MR_KERNEL,CODE,ALIGN  
52 ;-----------------------------------------------------------------  
53 ; after reset,this program will start  
54 ;-----------------------------------------------------------------  
55 __SYS_INITIAL:  
56  
LDC  
#__Sys_Sp,ISP ; set initial ISP  
57  
58 ;  
59 ;  
60 ;  
61  
62  
63  
MOV.B #2,0AH  
MOV.B #00,PMOD  
MOV.B #0,0AH  
; Set Processor Mode Register  
;
LDC  
LDC  
LDC  
LDC  
LDC  
#00000010H,FLG  
#__SB__,SB  
#00000000H,FLG  
#__Sys_Sp,FB  
#__SB__,SB  
64  
65  
66  
67 ;=================================================================  
68 ; MR_RAM zero clear  
69 ;--------------------------------------------------------  
70  
71  
BZERO MR_RAM_top,MR_RAM  
72 ;=================================================================  
73 ; NEAR area initialize.  
74 ; FAR area initialize.  
- 219 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
75 ;--------------------------------------------------------  
76 ; bss zero clear  
77 ;--------------------------------------------------------  
78  
79  
80  
81  
82 ;  
83  
84  
85  
86  
87  
88  
89  
90  
;-------------------------------------------------------;  
; zero clear BSS  
;-------------------------------------------------------;  
;
BZERO  
BZERO  
BZERO  
BZERO  
BZERO  
BZERO  
BZERO  
BZERO  
BZERO  
bss_SB8_top, bss_SB8  
bss_SB16_top, bss_SB16  
bss_NEAR_top, bss_NEAR  
bss_FAR_top, bss_FAR  
bss_EXT_top, bss_EXT  
bss_MON1_top, bss_MON1  
bss_MON2_top, bss_MON2  
bss_MON3_top, bss_MON3  
bss_MON4_top, bss_MON4  
91 ;--------------------------------------------------------  
92 ; initialize data section  
93 ;--------------------------------------------------------  
94  
95  
96  
;-------------------------------------------------------;  
; initialize DATA  
;-------------------------------------------------------;  
;
97  
98 ;  
99  
BCOPY  
BCOPY  
BCOPY  
BCOPY  
BCOPY  
BCOPY  
BCOPY  
BCOPY  
BCOPY  
data_SB8_INIT_top, data_SB8_top, data_SB8  
data_SB16_INIT_top, data_SB16_top, data_SB16  
data_NEAR_INIT_top, data_NEAR_top, data_NEAR  
data_FAR_INIT_top, data_FAR_top, data_FAR  
data_EXT_INIT_top, data_EXT_top, data_EXT  
data_MON1_INIT_top, data_MON1_top, data_MON1  
data_MON2_INIT_top, data_MON2_top, data_MON2  
data_MON3_INIT_top, data_MON3_top, data_MON3  
data_MON4_INIT_top, data_MON4_top, data_MON4  
100  
101  
102  
103  
104  
105  
106  
107  
108 ;-----------------------------------------------------------------  
109 ; Set System IPL and Set Interrupt Vector  
110 ;-----------------------------------------------------------------  
111  
112  
113  
__INI_IPL  
LDC #__INT_VECTOR,INTB  
;*G0*  
114 ; +-----------------------------------------------------+  
115 ; | System timer interrupt setting  
116 ; +-----------------------------------------------------+  
|
117  
118  
119  
120  
121  
122  
123  
.IF  
USE_TIMER  
MOV.B #stmr_mod_val,stmr_mod_reg+regoffset  
MOV.W #stmr_cnt,stmr_ctr_reg+regoffset  
MOV.B #stmr_int_IPL,stmr_int_reg  
OR.B  
.ENDIF  
; set timer mode  
; set interval count  
; set timer IPL  
#stmr_bit+1,stmr_start+regoffset  
; system timer start  
124 ; +-----------------------------------------------------+  
125 ; | System timer initialize  
126 ; +-----------------------------------------------------+  
|
127  
128  
129  
130  
131  
132  
133  
.IF  
USE_SYSTEM_TIME  
MOV.W #__D_Sys_TIME_L,__Sys_time+4  
MOV.W #__D_Sys_TIME_M,__Sys_time+2  
MOV.W #__D_Sys_TIME_H,__Sys_time  
.ENDIF  
MOV.L #0,__HEAP_TMR  
134 ; +-----------------------------------------------------+  
135 ; | User Initial Routine ( if there are )  
|
136 ; +-----------------------------------------------------+  
137 ; Initialize standard I/O  
138 ;  
139 ;  
140  
.GLB  
JSR.A __init  
__init  
141 ; +-----------------------------------------------------+  
142 ; | Initalization of System Data Area  
143 ; +-----------------------------------------------------+  
|
144  
145  
146  
147  
148  
149  
150  
151  
152  
153  
154  
.GLB  
__init_heap  
JSR.W __init_sys  
JSR.W __init_tsk  
JSR.W __init_heap  
.IF  
.GLB  
JSR.W __init_flg  
.ENDIF  
__NUM_FLG  
__init_flg  
.IF  
.GLB  
__NUM_SEM  
__init_sem  
- 220 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
155  
156  
157  
158  
159  
160  
161  
162  
163  
164  
165  
166  
167  
168  
169  
170  
171  
172  
173  
174  
175  
176  
177  
178  
179  
180  
181  
182  
183  
184  
185  
186  
187  
188  
189  
190  
191  
192  
193  
194  
195  
196  
197  
198  
JSR.W __init_sem  
.ENDIF  
.IF  
.GLB  
__NUM_DTQ  
__init_dtq  
JSR.W __init_dtq  
.ENDIF  
.IF  
.GLB  
__NUM_VDTQ  
__init_vdtq  
;*A1*  
JSR.W __init_vdtq  
.ENDIF  
.IF  
.GLB  
__NUM_MBX  
__init_mbx  
JSR.W __init_mbx  
.ENDIF  
.IF  
.GLB  
ALARM_HANDLER  
__init_alh  
JSR.W __init_alh  
.ENDIF  
.IF  
.GLB  
CYCLIC_HANDLER  
__init_cyh  
JSR.W __init_cyh  
.ENDIF  
.IF  
; Fixed Memory Pool  
.GLB __init_mpf  
__NUM_MPF  
;*A1*  
;*A1*  
JSR.W __init_mpf  
.ENDIF  
.IF  
; Variable Memory Pool  
.GLB __init_mpl  
__NUM_MPL  
JSR.W __init_mpl  
.ENDIF  
; For PD100  
__LAST_INITIAL  
199 __END_INIT:  
200  
201 ; +-----------------------------------------------------+  
202 ; | Start initial active task  
203 ; +-----------------------------------------------------+  
|
204  
205  
206  
207  
208  
__START_TASK  
.GLB  
__rdyq_search  
JMP.W __rdyq_search  
209 ; +---------------------------------------------+  
210 ; | Define Dummy  
211 ; +---------------------------------------------+  
212 .GLB __SYS_DMY_INH  
213 __SYS_DMY_INH:  
|
214  
215  
REIT  
216 .IF CUSTOM_SYS_END  
217 ; +---------------------------------------------+  
218 ; | Syscall exit rouitne to customize  
219 ; +---------------------------------------------+  
220  
.GLB  
__sys_end  
221 __sys_end:  
222  
223  
; Customize here.  
REIT  
224 .ENDIF  
225  
226 ; +---------------------------------------------+  
227 ; |  
exit() function  
|
228 ; +---------------------------------------------+  
229  
.GLB  
_exit,$exit  
230 _exit:  
231 $exit:  
232  
JMP  
_exit  
233  
234 .IF USE_TIMER  
- 221 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
235 ; +---------------------------------------------+  
236 ; | System clock interrupt handler  
237 ; +---------------------------------------------+  
|
238  
239  
.GLB  
.ALIGN  
__SYS_STMR_INH  
240 __SYS_STMR_INH:  
241  
242  
243  
244  
245  
246  
247  
248  
; process issue system call  
; For PD100  
__ISSUE_SYSCALL  
; System timer interrupt handler  
_STMR_hdr  
ret_int  
249 .ENDIF  
250  
251  
.END  
252  
253 ; ****************************************************************  
254 ;  
255 ;  
COPYRIGHT(C) 2003,2007 RENESAS TECHNOLOGY CORPORATION  
AND RENESAS SOLUTIONS CORPORATION ALL RIGHTS RESERVED  
; ****************************************************************  
Figure 7.11 C Language Startup Program (crt0mr.a30)  
- 222 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
The following explains the content of the C language startup program (crt0mr.a30).  
4. Incorporate a section definition file [14 in Figure 7.11]  
5. Incorporate an include file for MR100 [15 in Figure 7.11]  
6. Incorporate a system ROM area definition file [16 in Figure 7.11]  
7. Incorporate a system RAM area definition file [17 in Figure 7.11]  
8. This is the initialization program __SYS_INITIAL that is activated immediately after a reset.  
[55 - 207 in Figure 7.11]  
Setting the System Stack pointer [56 in Figure 7.11]  
Setting the SB,FB register [61 - 65 in Figure 7.11]  
Initial set the C language. [72 - 105 in Figure 7.11]  
Setting kernel interrupt mask level [111 in Figure 7.11]  
Setting the address of interrupt vector table [112 in Figure 7.11]  
Set MR100's system clock interrupt [114-122 in Figure 7.11]  
Initial set MR100's system timer [124-132 in Figure 7.11]  
9. Initial set parameters inherent in the application [140 in Figure 7.11]  
10. Initialize the RAM data used by MR100 [141- 197 in Figure 7.11]  
11. Activate the initial startup task. [201-207 in Figure 7.11]  
12. This is a system clock interrupt handler [235-248 in Figure 7.11]  
- 223 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
7.4 Memory Allocation  
This section describes how memory is allocated for the application program data.  
Use the section file provided by MR100 to set memory allocation.  
MR100 comes with the following two types of section files:  
asm_sec.inc  
This file is used when you developed your applications with the assembly language.  
c_sec.inc  
This file is used when you developed your applications with the C language.  
c_sec.inc is derived from "asm_sec.inc" by adding sections generated by C compiler NC100.  
Modify the section allocation and start address settings in this file to suit your system.  
The following shows how to modify the section file.  
e.g.  
If you want to change the rom_FAR section start address from FFE00000H to FFF00000H  
;-----------------------------------------------------------------------;  
; FAR ROM SECTIONS  
;
;-----------------------------------------------------------------------;  
.section  
.org  
rom_FAR, romdata  
0FFE00000H  
rom_FAR_top:  
.section  
.org  
rom_FAR, romdata  
0FFF00000H  
rom_FAR_top:  
- 224 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
7.4.1  
Section used by the MR100  
The sample section file for the C language is "asm_sec.inc". The sample section file for the assembly language is  
"asm_sec.inc". Edit these files if section reallocation is required.  
The following explains each section that is used by the MR100.  
MR_RAM section  
This section is where the RAM data, MR100's system management data, is stored that is referenced in absolute  
addressing.  
stack section  
This section is provided for each task's user stack and system stack.  
MR_HEAP section  
This section stores the variable-size memorypool.  
MR_KERNEL section  
This section is where the MR100 kernel program is stored.  
MR_CIF section  
This section stores the MR100 C language interface library.  
MR_ROM section  
This section stores data such as task start addresses that area referenced by the MR100 kernel.  
program section  
This section stores user programs.  
This section is not used by the MR100 kernel at all. Therefore, you can use this section as desired.  
INTERRUPT_VECTOR section  
FIX_INTERRUPT_VECTOR section  
This section stores interrupt vectors. The start address of this section varies with the type of microcomputer used.  
.
- 225 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
Download from Www.Somanuals.com. All Manuals Search And Download.  
8. Using Configurator  
8.1 Configuration File Creation Procedure  
When applications program coding and startup program modification are completed, it is then necessary to register the ap-  
plications program in the MR100 system.  
This registration is accomplished by the configuration file.  
8.1.1  
Configuration File Data Entry Format  
This chapter describes how the definition data are entered in the configuration file.  
Comment Statement  
A statement from '//' to the end of a line is assumed to be a comment and not operated on.  
End of statement  
Statements are terminated by ';'.  
Numerical Value  
Numerical values can be entered in the following format.  
Hexadecimal Number  
Add "0x" or "0X" to the beginning of a numerical value, or "h" or "H" to the end. If the value begins with an al-  
phabetical letter between A and F with "h" or "H" attached to the end, be sure to add "0" to the beginning. Note  
that the system does not distinguish between the upper- and lower-case alphabetical characters (A-F) used as  
numerical values.52  
Decimal Number  
Use an integer only as in '23'. However, it must not begin with '0'.  
Octal Numbers  
Add '0' to the beginning of a numerical value of 'O' or 'o' to end.  
Binary Numbers  
Add 'B' or 'b' to the end of a numerical value. It must not begin with '0'.  
Table 8.1 Numerical Value Entry Examples  
0xf12  
0Xf12  
0a12h  
Hexadecimal  
0a12H  
12h  
12H  
Decimal  
Octal  
32  
017  
17o  
17O  
Binary  
101110b  
101010B  
52  
The system distinguishes between the upper- and lower-case letters except for the numbers A-F and a-f.  
227  
Download from Www.Somanuals.com. All Manuals Search And Download.  
         
It is also possible to enter operators in numerical values. Table 8.2 Operators lists the operators available.  
Table 8.2 Operators  
Operator  
Priority  
High  
Direction of computation  
From left to right  
()  
From right to left  
- (Unary_minus)  
/ %  
+ - (Binary_minus)  
From left to right  
Low  
From loft to right  
13.  
Numerical value examples are presented below.  
123  
123 + 0x23  
(23/4 + 3) 2  
100B + 0aH  
Symbol  
The symbols are indicated by a character string that consists of numerals, upper- and lower-case alphabetical let-  
ters, _(underscore), and ?, and begins with a non-numeric character.  
Example symbols are presented below.  
_TASK1  
IDLE3  
Function Name  
The function names are indicated by a character string that consists of numerals, upper and lower-case alpha-  
betical letters,'$'(dollar) and '_'(underscore), begins with a non-numeric character, and ends with '()'.  
The following shows an example of a function name written in the C language.  
main()  
func()  
When written in the assembly language, the start label of a module is assumed to be a function name.  
Frequency  
The frequency is indicated by a character string that consist of numerals and . (period), and ends with MHz. The  
numerical values are significant up to six decimal places. Also note that the frequency can be entered using de-  
cimal numbers only.  
Frequency entry examples are presented below.  
16MHz  
8.1234MHz  
It is also well to remember that the frequency must not begin with . (period).  
Time  
The time is indicated by a character string that consists of numerals and . (period), and ends with ms. The time  
values are effective up to three decimal places when the character string is terminated with ms. Also note that the  
228  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
time can be entered using decimal numbers only.  
10ms  
10.5ms  
It is also well to remember that the time must not begin with . (period).  
8.1.2  
Configuration File Definition Items  
The following definitions 53 are to be formulated in the configuration file  
System definition  
System clock definition  
Respective maximum number of items  
Task definition  
Eventflag definition  
Semaphore definition  
Mailbox definition  
Data queue definition  
Short data queue definition  
Fixed-size Memory Pool definition  
Variable-size Memory Pool definition  
Cyclic handler definition  
Alarm handler definition  
Interrupt vector definition  
[( System Definition Procedure )]  
<< Format >>  
// System Definition  
system{  
stack_size  
=
;
System stack size  
priority  
= Ma  
;
ximum value of priority  
system_IPL  
tic_deno  
tic_nume  
=
=
=
=
;
Kernel mask level  
Time tick denominator  
;
;
Time tick numerator  
Maximum message priority value  
message_pri  
;
};  
53  
All items except task definition can omitted. If omitted, definitions in the default configuration file are referenced.  
229  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
<< Content >>  
1. System stack size  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
6 or more  
400H  
Define the total stack size used in service call and interrupt processing.  
2. Maximum value of priority (value of lowest priority)  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 255  
32  
Define the maximum value of priority used in MR100's application programs. This must be the value of the  
highest priority used.  
3. Kernel mask level  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 7  
7
Set the IPL value in service calls, that is, the OS interrupt disable level.  
4. Time tick denominator  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
Fixed to 1  
1
Set the denominator of the time tick.  
5. Time tick numerator  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 65,535  
1
Set the numerator of the time tick. The system clock interrupt interval is determined by the time tick denomina-  
tor and numerator that are set here. The interval is the time tick numerator divided by time tick denominator [ms].  
That is, the time tick numerator [ms].  
6. Maximum message priority value  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 255  
None  
Define the maximum value of message priority.  
230  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[( System Clock Definition Procedure )]  
<< Format >>  
// System Clock Definition  
clock{  
timer_clock  
timer  
IPL  
=
=
=
;
MPU clock  
Timers used for system clock  
;
;
System clock interrupt priority level  
};  
<< Content >>  
1. MPU clock  
[( Definition format)]  
[( Definition range )]  
[( Default value )]  
Frequency(in MHz)  
None  
15MHz  
Define the MPU operating clock frequency of the microcomputer in MHz units.  
2. Timers used for system clock  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
A0, A1, A2, A3, A4, A5,A6,A7,B0, B1, B2, B3, B4, B5, OTHER, NOTIMER  
NOTIMER  
The frequency of the circumference functional clock supplied to a system timer is defined per MHz. With this  
product, f1 or f8 is chosen as count sauce, and a value is set as a timer Ai register and a timer Bi register. There-  
fore, overflow may occur depending on the value of timer_clock, and the value of tick_nume of a system defini-  
tion. In this case, OTHER must be set as the timer used for a system clock, and a system timer must be initial-  
ized by the user side.  
If you do not use a system clock, define "NOTIMER."  
3. System clock interrupt priority level  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to Kernel mask level in system definition  
4
Define the priority level of the system clock timer interrupt. The value set here must be smaller than the kernel  
interrupt mask level.  
Interrupts whose priority levels are below the interrupt level defined here are not accepted during system clock  
interrupt handler processing.  
231  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
[( Definition respective maximum numbers of items )]  
Here, define respective maximum numbers of items to be used in two or more applications.  
<< Format >>  
// Max Definition  
maxdefine{  
max_task =  
;
the maximum number of tasks defined  
max_flag =  
;
;
the maximum number of eventflags defined  
the maximum number of data queues defined  
max_dtq  
max_mbx  
max_sem  
max_mpf  
=
=
=
=
;
;
the maximum number of mailboxes defined  
the maximum number of semaphores defined  
the maximum number of fixed-size  
;
memory pools defined  
max_mpl  
max_cyh  
max_alh  
=
=
=
the maximum number of variable-size  
;
memory pools defined  
the maximum number of cyclic handlers  
;
defined  
the maximum number of alarm handlers  
;
defined  
the maximum number of short data queues defined  
max_vdtq =  
;
};  
<< Contents >>  
1. The maximum number of tasks defined  
[( Definition format )]  
Numeric value  
1 to 255  
[( Definition range )]  
[( Default value )]  
None  
Define the maximum number of tasks defined.  
2. The maximum number of eventflags defined  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 255  
None  
3. The maximum number of data queues defined.  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 255  
None  
Define the maximum number of data queues defined.  
4. The maximum number of mailboxes defined  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 255  
None  
Define the maximum number of mailboxes defined.  
232  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
5. The maximum number of semaphores defined  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 255  
None  
Define the maximum number of semaphores defined.  
6. The maximum number of fixed-size memory pools defined  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 255  
None  
7. The maximum number of variable length memory blocks defined.  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 255  
None  
Define the maximum number of variable length memory blocks defined.  
8. The maximum number of cyclic activation handlers defined  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 255  
None  
The maximum number of cyclic handler defined  
9. The maximum number of alarm handler defined  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 255  
None  
Define the maximum number of alarm handlers defined.  
10. The maximum number of short data queues defined.  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 255  
None  
Define the maximum number of short data queues defined.  
233  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[( Task definition )]  
<< Format >>  
// Tasks Definition  
task[ ]{  
name  
entry_address =  
ID No.  
=
;
ID name  
Start task of address  
User stack size of task  
Initial priority of task  
;
stack_size  
priority  
context  
=
=
=
;
;
;
Registers used  
Section name in which the stack is located  
TA_ACT attribute (initial startup state)  
stack_section =  
initial_start =  
;
;
exinf  
=
;
Extended information  
};  
:
:
The ID number must be in the range of 1 to 255. The ID number can be omitted.  
If omitted, numbers are automatically assigned sequentially beginning with the smallest.  
<< Content >>  
Define the following for each task ID number.  
1. Task ID name  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
None  
None  
Define the ID name of a task. Note that the function name defined here is output to the kernel_id.h file, as shown  
below.  
#define Task ID Name task ID  
2. Start address of task  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol or function name  
None  
None  
Define the entry address of a task. When written in the C language, add () at the end or _at the beginning of the  
function name you have defined.  
The function name defined here causes the following declaration statement to be output in the kernel_id.h file:  
#pragma TASK /V4 Function Name  
234  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
3. User stack size of task  
[( Definition format )]  
Numeric value  
12 or more  
256  
[( Definition range )]  
[( Default value )]  
Define the user stack size for each task. The user stack means a stack area used by each individual task. MR100  
requires that a user stack area be allocated for each task, which amount to at least 12 bytes.  
4. Initial priority of task  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to (maximum value of priority in system definition)  
1
Define the priority of a task at startup time.  
As for MR100's priority, the lower the value, the higher the priority.  
5. Regisers Used  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol[,Symbol,....]  
Selected from R2R0,R3R1,R6R4,R7R5,A0,A1,A2,A3,SB,FB  
All registers  
Define the registers used in a task. MR100 handles the register defined here as a context. Specify the R2R0 reg-  
ister because task startup code is set in it when the task starts.  
However, the registers used can only be selected when the task is written in the assembly language. Select all  
registers when the task is written in the C language. When selecting a register here, be sure to select all registers  
that store service call parameters used in each task.  
MR100 kernel does not change the registers of bank.  
If this definition is omitted, it is assumed that all registers are selected.  
6. Section name in which the stack is located  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
None  
stack  
Define the section name in which the stack is located. The section defined here must always have an area allo-  
cated for it in the section file (asm_sec.inc or c_sec.inc).  
If no section names are defined, the stack is located in the stack section.  
7. TA_ACT attribute (initial startup state)  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
ON or OFF  
OFF  
Define the initial startup state of a task.  
If this attribute is specified ON, the task goes to a READY state at the initial system startup time.  
The task startup code of the initial startup task is the extended information.  
235  
Download from Www.Somanuals.com. All Manuals Search And Download.  
8. Extended information  
[( Definition format )]  
Numeric value  
0 to 0xFFFFFFFF  
0
[( Definition range )]  
[( Default value )]  
Define the extended information of a task. This information is passed to the task as argument when it is restarted  
by a queued startup request, for example.  
[( Eventflag definition )]  
This definition is necessary to use Eventflag function.  
<< Format >>  
// Eventflag Definition  
flag[  
name  
wait_queue  
]{  
ID No.  
=
=
;
Name  
Selecting an event flag waiting queue  
;
initial_pattern =  
wait_multi  
;
Initial value of the event flag  
=
;
Multi-wait attribute  
clear_attribute =  
;
Clear attribute  
};  
:
:
The ID number must be in the range of 1 to 255. The ID number can be omitted.  
If omitted, numbers are automatically assigned sequentially beginning with the smallest.  
<< Content >>  
Define the following for each eventflag ID number.  
1. ID Name  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
None  
None  
Define the name with which an eventflag is specified in a program.  
2. Selecting an event flag waiting queue  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
TA_TFIFO or TA_TPRI  
TA_TFIFO  
Select a method in which tasks wait for the event flag. If TA_TFIFO is selected, tasks are enqueued in order of  
FIFO. If TA_TPRI is selected, tasks are enqueued in order of priority beginning with the one that has the highest  
priority.  
3. Initial value of the event flag  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
0 to 0xFFFFFFFF  
0
Specify the initial bit pattern of the event flag.  
236  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
4. Multi-wait attribute  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
TA_WMUL or TA_WSGL  
TA_WSGL  
Specify whether multiple tasks can be enqueued in the eventflag waiting queue. If TA_WMUL is selected, the  
TA_WMUL attribute is added, permitting multiple tasks to be enqueued. If TA_WSGL is selected, the  
TA_WSGL attribute is added, prohibiting multiple tasks from being enqueued.  
5. Clear attribute  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
YES or NO  
NO  
Specify whether the TA_CLR attribute should be added as an eventflag attribute. If YES is selected, the  
TA_CLR attribute is added. If NO is selected, the TA_CLR attribute is not added.  
[( Semaphore definition )]  
This definition is necessary to use Semaphore function.  
<< Format >>  
// Semaphore Definition  
semaphore[  
]{  
ID No.  
name  
wait_queue  
=
=
;
ID name  
Selecting a semaphore waiting queue  
;
initial_count =  
;
Initial value of semaphore counter  
Maximum value of the semaphore counter  
max_count  
=
;
};  
:
:
The ID number must be in the range of 1 to 255. The ID number can be omitted.  
If omitted, numbers are automatically assigned sequentially beginning with the smallest.  
<< Content >>  
Define the following for each semaphore ID number.  
1. ID Name  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
None  
None  
Define the name with which a semaphore is specified in a program.  
237  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
2. Selecting a semaphore waiting queue  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
TA_TFIFO or TA_TPRI  
TA_TFIFO  
Select a method in which tasks wait for the semaphore. If TA_TFIFO is selected, tasks are enqueued in order of  
FIFO. If TA_TPRI is selected, tasks are enqueued in order of priority beginning with the one that has the highest  
priority.  
3. Initial value of semaphore counter  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
0 to 65535  
1
Define the initial value of the semaphore counter. This value must be less than the maximum value of the sema-  
phore counter.  
4. Maximum value of the semaphore counter  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 65535  
1
Define the maximum value of the semaphore counter.  
[(Data queue definition )]  
This definition must always be set when the data queue function is to be used.  
<< Format >>  
// Dataqueue Definition  
dataqueue[  
]{  
ID No.  
name  
buffer_size  
wait_queue  
=
=
=
;
ID name  
Number of data queues  
Select data queue waiting queue  
;
;
};  
:
:
The ID number must be in the range 1 to 255. The ID number can be omitted. If omitted, ID numbers are automatically  
assigned in order of numbers beginning with the smallest.  
<< Content >>  
For each data queue ID number, define the items described below.  
1. ID name  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
None  
None  
Define the name by which the data queue is specified in a program.  
238  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
2. Number of data  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric Value  
0 to 0x1FFF  
0
Specify the number of data that can be transmitted. What should be specified here is the number of data, and not  
a data size.  
3. Selecting a data queue waiting queue  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
TA_TFIFO or TA_TRPI  
TA_TFIFO  
Select a method in which tasks wait for data queue transmission. If TA_TFIFO is selected, tasks are enqueued in  
order of FIFO. If TA_TPRI is selected, tasks are enqueued in order of priority beginning with the one that has the  
highest priority.  
[( Short data queue definition )]  
This definition must always be set when the short data queue function is to be used.  
<< Format >>  
// Vdataqueue Definition  
vdataqueue [  
]{  
ID No.  
name  
=
;
ID name  
buffer_size  
wait_queue  
=
=
;
Number of data queues  
Select data queue waiting queue  
;
};  
:
:
The ID number must be in the range 1 to 255. The ID number can be omitted. If omitted, ID numbers are automatically  
assigned in order of numbers beginning with the smallest.  
<< Content >>  
For each short data queue ID number, define the items described below.  
1. ID name  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
None  
None  
Define the name by which the short data queue is specified in a program.  
2. Number of data  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric Value  
0 to 0x3FFF  
0
Specify the number of data that can be transmitted. What should be specified here is the number of data, and not  
a data size.  
239  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
3. Selecting a data queue waiting queue  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
TA_TFIFO or TA_TRPI  
TA_TFIFO  
Select a method in which tasks wait for short data queue transmission. If TA_TFIFO is selected, tasks are en-  
queued in order of FIFO. If TA_TPRI is selected, tasks are enqueued in order of priority beginning with the one  
that has the highest priority.  
[( Mailbox definition )]  
This definition must always be set when the mailbox function is to be used.  
<< Format >>  
// Mailbox Definition  
mailbox[  
]{  
ID No.  
name  
wait_queue  
=
=
;
ID name  
Select mailbox waiting queue  
;
message_queue =  
max_pri  
;
Select message queue  
Maximum message priority  
=
;
};  
:
:
The ID number must be in the range 1 to 255. The ID number can be omitted. If omitted, ID numbers are automatically  
assigned in order of numbers beginning with the smallest.  
<< Content >>  
For each mailbox ID number, define the items described below.  
1. ID name  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
None  
None  
Define the name by which the mailbox is specified in a program.  
2. Select mailbox waiting queue  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
TA_TFIFO or TA_TPRI  
TA_TFIFO  
Select a method in which tasks wait for the mailbox. If TA_TFIFO is selected, tasks are enqueued in order of  
FIFO. If TA_TPRI is selected, tasks are enqueued in order of priority beginning with the one that has the highest  
priority.  
3. Select message queue  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
TA_MFIFO or TA_MRPI  
TA_MFIFO  
Select a method by which a message queue of the mailbox is selected. If TA_MFIFO is selected, messages are  
enqueued in order of FIFO. If TA_MPRI is selected, messages are enqueued in order of priority beginning with  
the one that has the highest priority.  
240  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
4. Maximum message priority  
[( Definition format )]  
Numeric Value  
[( Definition range )]  
1 to "maximum value of message priority" that was specified  
in "definition of maximum number of items"  
1
[( Default value )]  
Specify the maximum priority of message in the mailbox.  
[( Fixed-size memory pool definition )]  
This definition must always be set when the fixed-size memory pool function is to be used.  
<< Format >>  
// Fixed Memory pool Definition  
memorypool[  
]{  
ID No.  
name  
=
;
ID name  
Section Name  
Number of blocks in memory pool  
section  
num_block  
siz_block  
wait_queue  
};  
=
=
=
=
;
;
;
Block size of Memory pool  
Select memory pool waiting queue  
;
The ID number must be in the range 1 to 255. The ID number can be omitted. If omitted, ID numbers are automatically  
assigned in order of numbers beginning with the smallest.  
<< Content >>  
For each memory pool ID number, define the items described below.  
1. ID name  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
None  
None  
Define the name by which the memory pool is specified in a program.  
2. Section name  
[( Definition format )]  
Symbol  
None  
[( Definition range )]  
[( Default value )]  
MR_HEAP  
Define the name of the section in which the memory pool is located. The section defined here must always have  
an area allocated for it in the section file (asm_sec.inc or c_sec.inc).  
If no section names are defined, the memory pool is located in the MR_HEAP section.  
3. Number of block  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 65,535  
1
Define the total number of blocks that comprise the memory pool.  
241  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
4. Size (in bytes)  
[( Definition format )]  
Numeric value  
4 to 65,535  
256  
[( Definition range )]  
[( Default value )]  
Define the size of the memory pool per block. The RAM size to be used as a memory pool is determined by this  
definition: (number of blocks) x (size) in bytes.  
5. Selecting a memory pool waiting queue  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
TA_TFIFO or TA_TPRI  
TA_TFIFO  
Select a method in which tasks wait for acquisition of the fixed-size memory pool. If TA_TFIFO is selected,  
tasks are enqueued in order of FIFO. If TA_TPRI is selected, tasks are enqueued in order of priority beginning  
with the one that has the highest priority.  
[( Variable-size memory pool definition )]  
This definition is necessary to use Variable-size memory pool function.  
<< Format >>  
// Message buffer Definition  
message_buffer[  
]{  
ID No.  
name  
=
=
=
=
=
;
ID Name  
mbf_section  
mbf_size  
max_msgsz  
wait_queue  
};  
;
Section name  
Message buffer size  
Maximum message size  
Message buffer transmit wait queue selection  
;
;
;
The ID number must be in the range from 1 to 255. The ID number can be omitted. If omitted, ID numbers are automati-  
cally assigned in order of magnitude beginning with the smallest.  
<< Content >>  
6. ID name  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
None  
None  
Define the name by which the memory pool is specified in a program.  
7. The maximum memory block size to be allocated  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 65520  
None  
Specify, within an application program, the maximum memory block size to be allocated.  
242  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
8. Section name  
[( Definition format )]  
Symbol  
None  
[( Definition range )]  
[( Default value )]  
MR_HEAP  
Define the name of the section in which the memory pool is located. The section defined here must always have  
an area allocated for it in the section file (asm_sec.inc or c_sec.inc).  
If no section names are defined, the memory pool is located in the MR_HEAP section.  
9. Memory pool size  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
16 to 0xFFFFFFFC  
None  
Specify a memory pool size.  
Round off a block size you specify to the optimal block size among the four block sizes, and acquires memory  
having the rounded-off size from the memory pool.  
The following equations define the block sizes:  
a = (((max_memsize+(X-1))/ (X × 8))+1) × 8  
b = a × 2  
c = a × 4  
d = a × 8  
max_memsize: the value specified in the configuration file  
X: data size for block control (8 byte per a block control)  
Variable-size memory pool function needs 8 byte RAM area per a block control. Memory pool size needs a size  
more than a, b, c or d that can be stored max_memsize + 8.  
10. Select block usage  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
ON,OFF  
OFF  
This is an option to increase memory efficiency for even small-sized memory pools by means of small blocks.  
Memory is managed in 12 fixed-length memory pools ranging in size from 24 bytes to 65,528 bytes. When this  
option is turned on, the value of max_memsize has no effect.  
243  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[( Cyclic handler definition )]  
This definition is necessary to use Cyclic handler function.  
<< Format >>  
// Cyclic Handlar Definition  
cyclic_hand[  
]{  
ID No.  
name  
interval_counter  
start  
=
=
=
=
=
=
=
;
ID name  
;
Activation cycle  
TA_STA attribute  
TA_PHS attribute  
Activation phase  
Start address  
Extended information  
;
;
;
phsatr  
phs_counter  
entry_address  
exitf  
;
;
};  
:
:
The ID number must be in the range of 1 to 255. The ID number can be omitted.  
If omitted, numbers are automatically assigned sequentially beginning with the smallest.  
<< Content >>  
Define the following for each cyclic handler ID number.  
1. ID name  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
None  
None  
Define the name by which the memory pool is specified in a program.  
2. Activation cycle  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
1 to 0x7FFFFFFF  
None  
Define the activation cycle at which time the cyclic handler is activated periodically. The activation cycle here  
must be defined in the same unit of time as the system clock's unit time that is defined in system clock definition  
item. If you want the cyclic handler to be activated at 1-second intervals, for example, the activation cycle here  
must be set to 1000.  
3. TA_STA attribute  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
ON or OFF  
OFF  
Specify the TA_STA attribute of the cyclic handler. If ON is selected, the TA_STA attribute is added; if OFF is  
selected, the TA_STA attribute is not added.  
4. TA_PHS attribute  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
ON or OFF  
OFF  
Specify the TA_PHS attribute of the cyclic handler. If ON is selected, the TA_PHS attribute is added; if OFF is  
selected, the TA_PHS attribute is not added.  
244  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
5. Activation phase  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
0 to 0x7FFFFFFF  
None  
Define the activation phase of the cyclic handler. The time representing this startup phase must be defined in ms  
units.  
6. Start Address  
[( Definition format )]  
Symbol or Function Name  
[( Definition range )]  
[( Default value )]  
None  
None  
Define the start address of the cyclic handler.  
Note that the function name defined here will have the declaration statement shown below output to the ker-  
nel_id.h file.  
#pragma CYCHANDLER /V4 function name  
7. Extended information  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
0 to 0xFFFFFFFF  
0
Define the extended information of the cyclic handler. This information is passed as argument to the cyclic han-  
dler when it starts.  
[( Alarm handler definition )]  
This definition is necessary to use Alarm handler function.  
<< Format >>  
// Alarm Handlar Definition  
alarm_hand[  
]{  
ID No.  
name  
=
;
ID name  
entry_address =  
exitf  
;
Start address  
Extended information  
=
;
};  
:
:
The ID number must be in the range of 1 to 255. The ID number can be omitted.  
If omitted, numbers are automatically assigned sequentially beginning with the smallest.  
<< Content >>  
Define the following for each alarm handler ID number.  
1. ID name  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
None  
None  
Define the name by which the alarm handler is specified in a program.  
245  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
2. Start address  
[( Definition format )]  
[( Definition range )]  
Symbol or Function Name  
None  
Define the start address of the alarm handler. The function name defined here causes the following declaration  
statement to be output in the kernel_id.h file.  
3. Extended information  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Numeric value  
0 to 0xFFFFFFFF  
0
Define the extended information of the alarm handler. This information is passed as argument to the alarm han-  
dler when it starts.  
[( Interrupt vector definition )]  
This definition is necessary to use Interrupt function.  
<< Format >>  
// Interrupt Vector Definition  
interrupt_vector[  
]{  
Vector No.  
os_int  
=
;
Kernel-managed (OS dependent) interrupt handler  
entry_address =  
pragma_switch =  
;
Start address  
Switch passed to PRAGMA extended function  
;
};  
:
:
The vector number can be written in the range of 0 to 255. However, whether or not the defined vector number is valid de-  
pends on the microcomputer used  
Configurator can’t create an Initialize routine (interrupt control register, interrupt causes etc.) for this defined interrupt. You  
need to create that.  
<< Content >>  
4. Kernel (OS dependent) interrupt handler  
[( Definition format )]  
[( Definition range )]  
Symbol  
YES or NO  
Define whether the handler is a kernel(OS dependent) interrupt handler. If it is a kernel(OS dependent) interrupt  
handler, specify YES; if it is a non-kernel(OS independent) interrupt handler, specify No.  
If this item is defined as YES, the declaration statement shown below is output to the kernel_id.h file.  
#pragma INTHANDLER /V4 function name  
If this item is defined as NO, the declaration statement shown below is output to the kernel_id.h file.  
#pragma INTERRUPT /V4 function name  
5. Start address  
[( Definition format )]  
Symbol or function name  
None  
[( Definition range )]  
[( Default value )]  
__SYS_DMY_INH  
Define the entry address of the interrupt handler. When written in the C language, add () at the end or at the be-  
ginning of the function name you have defined.  
246  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
6. Switch passed to PRAGMA extended function  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
E, F, B or R  
None  
Specify the switch to be passed to #pragma INTHANDLER or #pragma INTERRUPT. If "E" is specified, a "/E"  
switch is selected, in which case multiple interrupts are enabled. If "F" is specified, a "/F" switch is selected, in  
which case a "FREIT" instruction is output at return from the interrupt handler. If "B" is specified, a "/B" switch  
is selected, in which case register bank 1 is selected. If "R" is specified, a "/R" switch is selected, in which case  
no codes are output that change the floating-number rounding mode of the FLG register to the "nearest value."  
Multiple switches can be specified at the same time. However, if a kernel managed interrupt handler is con-  
cerned, only the "E" or "R" switch can be specified. For non-kernel managed interrupt handlers, the "E", "F" and  
"B" switches can be specified, providing that "E" and "B" are not specified at the same time.  
[( Fixed interrupt vector definition )]  
This definition needs to be set when interrupt handlers based on fixed vector table are used.  
<< Format >>  
// Fixed Interrupt Vector Definition  
interrupt_fvector[  
]{  
Vector No.  
Start address  
Switch passed to PRAGMA extended function  
entry_address =  
pragma_switch =  
;
;
};  
:
:
The interrupt vector number can be set in the range from 0 to 11. The relationship between the vector numbers and the in-  
terrupts and vector addresses is shown below. All these interrupts are handled as non-kernel managed interrupt handlers.  
247  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
Table 8.3 List of vector number and vector address  
Vector number  
Vector address  
FFFFFFD0H  
FFFFFFD4H  
FFFFFFD8H  
FFFFFFDCH  
FFFFFFE0H  
FFFFFFE4H  
FFFFFFE8H  
FFFFFFECH  
FFFFFFF0H  
FFFFFFF4H  
FFFFFFF8H  
FFFFFFFCH  
Interrupt  
0
Kernel reserved area  
1
Kernel reserved area  
2
Kernel reserved area  
3
Undefined instruction  
4
Overflow  
5
BRK instruction  
6
Reserved area  
7
Reserved area  
8
Watchdog timer, voltage down detection, oscillation stop detection  
9
Reserved area  
NMI  
10  
11  
Reset  
<< Content >>  
1. Start address  
[( Definition format )]  
Symbol or function name  
[( Definition range )]  
[( Default value )]  
None  
__SYS_DMY_INH  
Define the entry address to the interrupt handler. When written in C language, add () at the end of the function  
name or __ at the beginning of it.  
2. Switch passed to PRAGMA extended function  
[( Definition format )]  
[( Definition range )]  
[( Default value )]  
Symbol  
B or R  
None  
Specify the switch to be passed to #pragma INTERRUPT. If "B" is specified, a "/B" switch is selected, in which  
case register bank 1 is selected. If "R" is specified, a "/R" switch is selected, in which case no codes are output  
that change the floating-number rounding mode of the FLG register to the "nearest value."  
Both switches can be specified at the same time.  
248  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
[Precautions]  
1. Regarding the method for specifying a register bank  
No kernel interrupt handlers that use the registers in register bank 1 can be written in C language. These handlers can only  
be written in assembly language. When writing in assembly language, write the entry and exit to and from the interrupt  
handler as shown below.  
(Always be sure to clear the B flag before issuing ret_int service call.)  
Example: interrupt;  
fset  
fclr  
B
B
ret_int  
Internally in the MR100 kernel, register banks are not switched over.  
2. Regarding the method for specifying a high-speed interrupt  
To ensure the effective use of a high-speed interrupt, be sure that the registers in register bank 1 are used in the high-speed  
interrupt. Also be aware that the high-speed interrupts used cannot be a kernel interrupt handler..  
249  
Download from Www.Somanuals.com. All Manuals Search And Download.  
8.1.3  
Configuration File Example  
The following is the configuration file example.  
1 ////////////////////////////////////////////////////////////////////////////////  
2 //  
3 //  
4 //  
5 //  
6 //  
kernel.cfg : building file for MR100 Ver.1.00  
Generated by M3T-MR100 GUI Configurator at 2007/02/28 19:01:20  
7 ////////////////////////////////////////////////////////////////////////////////  
8
9 // system definition  
10 system{  
11  
12  
stack_size  
= 256;  
= 4;  
sys m_IPL  
13  
14  
15  
16  
message_pri  
timeout = NO;  
task_pause  
tick_nume  
= 64;  
= NO;  
= 10;  
= 1;  
17  
tick_deno  
18 };  
19  
20 // max definition  
21 maxdefine{  
22  
max_task  
max_flag  
= 3;  
= 4;  
23  
24  
25  
26  
27  
28  
29  
30  
max_sem = 3;  
max_dtq = 3;  
max_mbx = 4;  
max_mpf = 3;  
max_mpl = 3;  
max_cyh = 4;  
max_alh = 2;  
31 };  
32  
33 // system clock definition  
34 clock{  
35  
36  
timer_clock  
timer = A0;  
= 20.000000MHz;  
37  
IPL  
= 3;  
38 };  
39  
40 task[]{  
41  
42  
entry_address = task1();  
name = ID_task1;  
43  
44  
stack_size  
priority  
= 256;  
= 1;  
45  
46  
initial_start = OFF;  
exinf = 0x0;  
47 };  
48 task[]{  
49  
50  
entry_address = task2();  
name = ID_task2;  
51  
52  
stack_size  
priority  
= 256;  
= 5;  
53  
54  
initial_start = ON;  
exinf = 0xFFFF;  
55 };  
56 task[3]{  
57  
58  
entry_address = task3();  
name = ID_task3;  
59  
60  
stack_size  
priority  
= 256;  
= 7;  
61  
62  
initial_start = OFF;  
exinf = 0x0;  
63 };  
64  
65 flag[]{  
66  
name  
= ID_flg1;  
67  
68  
69  
70  
initial_pattern = 0x00000000;  
wait_queue  
clear_attribute = NO;  
wait_multi = TA_WSGL;  
= TA_TFIFO;  
71 };  
72 flag[1]{  
73  
74  
name  
= ID_flg2;  
initial_pattern = 0x00000001;  
250  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
75  
76  
77  
wait_queue  
clear_attribute = NO;  
wait_multi = TA_WMUL;  
= TA_TFIFO;  
78 };  
79 flag[2]{  
80  
name  
initial_pattern = 0x0000ffff;  
wait_queue = TA_TPRI;  
clear_attribute = YES;  
wait_multi = TA_WMUL;  
= ID_flg3;  
81  
82  
83  
84  
85 };  
86 flag[]{  
87  
name  
= ID_flg4;  
88  
89  
90  
91  
initial_pattern = 0x00000008;  
wait_queue  
clear_attribute = YES;  
wait_multi = TA_WSGL;  
= TA_TPRI;  
92 };  
93  
94 semaphore[]{  
95  
name  
wait_queue  
initial_count = 0;  
max_count = 10;  
= ID_sem1;  
96  
97  
= TA_TFIFO;  
98  
99 };  
100 semaphore[2]{  
101  
102  
name  
wait_queue  
= ID_sem2;  
= TA_TFIFO;  
103  
104  
initial_count = 5;  
max_count = 10;  
105 };  
106 semaphore[]{  
107  
name  
= ID_sem3;  
108  
109  
110  
wait_queue  
initial_count = 255;  
max_count = 255;  
= TA_TPRI;  
111 };  
112  
113 dataqueue[]{  
114  
name  
= ID_dtq1;  
115  
116  
wait_queue  
buffer_size  
= TA_TFIFO;  
= 10;  
117 };  
118 dataqueue[2]{  
119  
120  
121  
name  
wait_queue  
buffer_size  
= ID_dtq2;  
= TA_TPRI;  
= 5;  
122 };  
123 dataqueue[3]{  
124  
125  
126  
name  
wait_queue  
buffer_size  
= ID_dtq3;  
= TA_TFIFO;  
= 256;  
127 };  
128  
129 mailbox[]{  
130  
name  
= ID_mbx1;  
131  
132  
133  
wait_queue  
message_queue = TA_MFIFO;  
max_pri = 4;  
= TA_TFIFO;  
134 };  
135 mailbox[]{  
136  
name  
wait_queue  
= ID_mbx2;  
= TA_TPRI;  
137  
138  
139  
message_queue = TA_MPRI;  
max_pri = 64;  
140 };  
141 mailbox[]{  
142  
name  
wait_queue  
= ID_mbx3;  
= TA_TFIFO;  
143  
144  
145  
message_queue = TA_MPRI;  
max_pri = 5;  
146 };  
147 mailbox[4]{  
148  
name  
wait_queue  
= ID_mbx4;  
= TA_TPRI;  
149  
150  
151  
message_queue = TA_MFIFO;  
max_pri = 6;  
152 };  
153  
154 memorypool[]{  
251  
Download from Www.Somanuals.com. All Manuals Search And Download.  
155  
156  
157  
name  
wait_queue  
section = MR_RAM;  
= ID_mpf1;  
= TA_TFIFO;  
158  
159  
siz_block  
num_block  
= 16;  
= 5;  
160 };  
161 memorypool[2]{  
162  
163  
name  
wait_queue  
= ID_mpf2;  
= TA_TPRI;  
164  
165  
166  
section = MR_RAM;  
siz_block  
num_block  
= 32;  
= 4;  
167 };  
168 memorypool[3]{  
169  
170  
171  
172  
name  
= ID_mpf3;  
wait_queue  
section = MPF3;  
siz_block  
num_block  
= TA_TFIFO;  
= 64;  
= 256;  
173  
174 };  
175  
176 variable_memorypool[]{  
177  
178  
179  
name  
max_memsize  
heap_size  
= ID_mpl1;  
= 8;  
= 16;  
180 };  
181 variable_memorypool[]{  
182  
183  
184  
name  
max_memsize  
heap_size  
= ID_mpl2;  
= 64;  
= 256;  
185 };  
186 variable_memorypool[3]{  
187  
188  
189  
name  
max_memsize  
heap_size  
= ID_mpl3;  
= 256;  
= 1024;  
190 };  
191  
192 cyclic_hand[]{  
193  
194  
entry_address = cyh1();  
name = ID_cyh1;  
195  
196  
197  
198  
exinf = 0x0;  
start = ON;  
phsatr = OFF;  
interval_counter  
phs_counter  
= 0x1;  
199  
= 0x0;  
200 };  
201 cyclic_hand[]{  
202  
203  
entry_address = cyh2();  
name = ID_cyh2;  
204  
205  
206  
exinf = 0x1234;  
start = OFF;  
phsatr = ON;  
207  
208  
interval_counter  
= 0x20;  
= 0x20;  
= 0x100;  
phs_counter  
= 0x10;  
209 };  
210 cyclic_hand[]{  
211  
212  
213  
214  
215  
216  
entry_address = cyh3;  
name = ID_cyh3;  
exinf = 0xFFFF;  
start = ON;  
phsatr = OFF;  
interval_counter  
217  
218 };  
219 cyclic_hand[4]{  
phs_counter  
= 0x0;  
220  
221  
222  
223  
224  
225  
226  
227 };  
228  
entry_address = cyh4();  
name = ID_cyh4;  
exinf = 0x0;  
start = ON;  
phsatr = ON;  
interval_counter  
phs_counter  
= 0x80;  
229 alarm_hand[]{  
230  
231  
232  
entry_address = alm1();  
name = ID_alm1;  
exinf = 0xFFFF;  
233 };  
234 alarm_hand[2]{  
252  
Download from Www.Somanuals.com. All Manuals Search And Download.  
235  
236  
237  
entry_address = alm2;  
name = ID_alm2;  
exinf = 0x12345678;  
238 };  
239  
240  
241 //  
242 // End of Configuration  
243 //  
253  
Download from Www.Somanuals.com. All Manuals Search And Download.  
8.2 Configurator Execution Procedures  
8.2.1  
Configurator Overview  
The configurator is a tool that converts the contents defined in the configuration file into the assembly language include file,  
etc.Figure 8.1 outlines the operation of the configurator.  
When used on HEW, the configurator is automatically started, and an application program is built.  
Executing the configurator requires the following input files:  
Configuration file (XXXX.cfg)  
This file contains description of the system's initial setup items. It is created in the current directory.  
Default configuration file (default.cfg)  
This file contains default values that are referenced when settings in the configuration file are omitted. This file  
is placed in the directory indicated by environment variable "LIB30" or the current directory. If this file exists in  
both directories, the file in the current directory is prioritized over the other.  
include template file(mr100.inc, sys_ram.inc)  
This file serves as the template file of include file "mr100.inc" and “sys_ram.inc”. It resides in the directory in-  
dicated by environment variable "LIB100."  
MR100 version file (version)  
This file contains description of MR100's version. It resides in the directory indicated by environment variable  
"LIB100." The configurator reads in this file and outputs MR100's version information to the startup message.  
Service call definition file(kernel_sysint.h)  
This file contains description of MR100 service call definition. It resides in the directory indicated by environ-  
ment variable "LIB100." The configurator reads in this file and outputs to thecurrent directory.  
When the configurator is executed, the files listed below are output.  
Do not define user data in the files output by the configurator. Starting up the configurator after entering data definitions  
may result in the user defined data being lost.  
System data definition file (sys_rom.inc, sys_ram.inc)  
This file contains definition of system settings.  
Include file (mr100.inc)  
This is an include file for the assembly language.  
Service call definition file(kernel_sysint.h)  
This file contains description of MR100 service call definition  
254  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
Configuration File  
xxx.cfg  
System Data Difinition File  
sys_ram.inc, sys_rom.inc  
Default  
Configuration File  
Include File  
mr100.inc  
cfg100  
default.cfg  
Template File  
ID Number Definition File  
kernel_id.h  
sys_ram.inc, mr100.inc  
MR100 Version File  
version  
Service call Definition File  
kernel_sysint.h  
Service call Definition File  
kernel_sysint.h  
Figure 8.1 The operation of the Configurator  
8.2.2  
Setting Configurator Environment  
Before executing the configurator, check to see if the environment variable "LIB100" is set correctly.  
The configurator cannot be executed normally unless the following files are present in the directory indicated by the envi-  
ronment variable "LIB100":  
Default configuration file (default.cfg)  
This file can be copied to the current directory for use. In this case, the file in the current directory is given priority.  
System RAM area definition database file (sys_ram.inc)  
mr100.inc template file (mr100.inc)  
Section definition file(c_sec.inc or asm_sec.inc)  
Startup file(crt0mr.a30 or start.a30)  
MR100 version file(version)  
Service call definition file(kernel_sysint.h)  
255  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
8.2.3  
Configurator Start Procedure  
Start the configurator as indicated below.  
C:\> cfg100 [-vV] [-Eipl] [-Wipl] Configuration file name  
Normally, use the extension .cfg for the configuration file name. The file name can includes space character with “”.  
Command Options  
-v Option  
Displays the command option descriptions and detailed information on the version.  
-V Option  
Displays the information on the files generated by the command.  
-Eipl Option  
Enable the check function of an IPL value. When System_IPL! = 7 in the con-figuration file, the error message "  
system_IPL should be 7" is displayed and the execution of cfg100 is stpped.  
-Wipl Option  
Enable the check function of a IPL value. When System_IPL! = 7 in the con-figuration file, the error message "  
system_IPL should be 7" is displayed..  
8.2.4  
Precautions on Executing Configurator  
The following lists the precautions to be observed when executing the configurator:  
Do not modify the startup program name and the section definition file name. Otherwise, an error may  
be encountered when executing the configurator.  
256  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
8.2.5  
Configurator Error Indications and Remedies  
If any of the following messages is displayed, the configurator is not normally functioning. Therefore, correct the configu-  
ration file as appropriate and the execute the configurator again.  
Error messages  
cfg100 Error : Syntax error near line xxx (xxxx.cfg)  
There is an syntax error in the configuration file.  
cfg100 Error : Not enough memory  
Memory is insufficient.  
cfg100 Error : Illegal option --> <x>  
The configurator's command option is erroneous.  
cfg100 Error : Illegal argument --> <xx>  
The configurator's startup format is erroneous.  
cfg100 Error : Can't write open <XXXX>  
The XXXX file cannot be created. Check the directory attribute and the remaining disk capacity available.  
cfg100 Error : Can't open <XXXX>  
The XXXX file cannot be accessed. Check the attributes of the XXXX file and whether it actually exists.  
cfg100 Error : Can't open version file  
The MR100 version file "version" cannot be found in the directory indicated by the environment variable  
"LIB30".  
cfg100 Error : Can't open default configuration file  
The default configuration file cannot be accessed. "default.cfg" is needed in the current directory or directory  
"LIB100" specifying.  
cfg100 Error : Can't open configuration file <xxxx.cfg>  
The configuration file cannot be accessed. Check that the file name has been properly designated.  
cfg100 Error : illegal XXXX --> <xx> near line xxx (xxxx.cfg)  
The value or ID number in definition item XXXX is incorrect. Check the valid range of definition.  
cfg100 Error : Unknown XXXX --> <xx> near line xx (xxxx.cfg)  
The symbol definition in definition item XXXX is incorrect. Check the valid range of definition.  
cfg100 Error : XXXX's ID number is too large.--> <xxx> (xxxx.cfg)  
A value is set to the ID number in XXXX definition that exceeds the total number of objects defined.The ID  
number must be smaller than the total number of objects.  
cfg100 Error : Task[x]'s priority is too large.--> <xxx> near line xxx (xxxx.cfg)  
The initial priority in task definition of ID number x exceeds the priority in system definition.  
cfg100 Error : clock.IPL is too large.--> <xxx> near line xxx (xxxx.cfg)  
The system clock interrupt priority level for system clock definition item exceeds the value of IPL within service  
call of system definition item.  
257  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
cfg100 Error : System timer's vector <x>conflict near line xxx  
A different vector is defined for the system clock timer interrupt vector. Confirm the vector No.x for interrupt  
vector definition.  
cfg100 Error : XXXX is not defined (xxxx.cfg)  
"XXXX" item must be set in your configuration file.  
cfg100 Error : System's default is not defined  
These items must be set int the default configuration file.  
cfg100 Error : <XXXX> is already defined near line xxx (xxxx.cfg)  
XXXX is already defined. Check and delete the extra definition.  
cfg100 Error : XXXX[x] is already defined near line xxx (default.cfg)  
cfg100 Error : XXXX[x] is already defined near line xxx (xxxx.cfg)  
The ID number in item XXXX is already registered. Modify the ID number or delete the extra definition.  
cfg100 Error : XXXX must be defined near line xxx (xxxx.cfg)  
XXXX cannot be omitted.  
cfg100 Error : SYMBOL must be defined near line xxx (xxxxcfg)  
This symbol cannot be omitted.  
cfg100 Error : Zero divide error near line xxx (xxxx.cfg)  
A zero divide operation occurred in some arithmetic expression.  
cfg100 Error : task[X].stack_size must set XX or more near line xxx (xxxx.cfg)  
You must set more than XX bytes.in task[x].stack_size.  
cfg100 Error : "R2R0" must be contained in task[x].context near line xxxx (xxxx.cfg)  
You must select R2R0 register in task[x].context.  
cfg100 Error : Can't specify B or F switch when os_int=YES. (xxxx.cfg)  
"/B" and "/F" switch cannot be specified to a kernel interrupt handler.  
cfg100 Error : Can't specify B and E switch at a time when os_int=NO. (xxxx.cfg)  
"/B" and "/E" switch cannot be specified to the non-kernel interrupt handler at a time.  
cfg100 Error : interrupt_vector[%ld].os_int must be YES. (xxxx.cfg)  
When a kernel interrupt mask level is 7, an interrupt handler must be kernel interrupt handler..  
cfg100 Error : system_IPL should be 7. (xxxx.cfg)  
When "-Eipl" is specified as the command option of configurator, the value of sysrem_IPL of a system definition  
must be 7.  
cfg100 Error : Timer counter value is overflow. (xxxx.cfg)  
Overflow occurred in the operation of a timer count. A timer cannot be initialized with the time tick cycle and  
peripheral clock which were specified. Please initialize the timer and sets clock.timer to “OTHER”.  
258  
Download from Www.Somanuals.com. All Manuals Search And Download.  
Warning messages  
The following message are a warning. A warning can be ignored providing that its content is understood.  
cfg100 Warning : system is not defined (xxxx.cfg)  
cfg100 Warning : system.XXXX is not defined (xxxx.cfg)  
System definition or system definition item XXXX is omitted in the configuration file.  
cfg100 Warning : task[x].XXXX is not defined near line xxx (xxxx.cfg)  
The task definition item XXXX in ID number is omitted.  
cfg100 Warning : Already definition XXXX near line xxx (xxxx.cfg)  
XXXX has already been defined.The defined content is ignored, check to delete the extra definition.  
cfg100 Warning : interrupt_vector[x]'s default is not defined (default.cfg)  
The interrupt vector definition of vector number x in the default configuration file is missing.  
cfg100 Warning : interrupt_vector[x]'s default is not defined near line xxx (xxxx.cfg)  
The interrupt vector of vector number x in the configuration file is not defined in the default configuration file.  
cfg100 Warning : Initial start task is not defined  
The task of task ID number 1 was defined as the initial startup task because no initial startup task is defined in  
the configuration file.  
cfg100 Warning : system.stack_size is an uneven number near line xxx  
cfg100 Warning : task[x].stack_size is an uneven number near line xxx  
Please set even size in system.stack_size or task[x].stack_size.  
cfg100 Warning : system_IPL should be 7  
When "-Wipl" is specified as the command option of KONFIGYURETA, you should make the value of sys-  
rem_IPL of a system definition 7.  
cfg100 Warning : Timer counter value is less than your settimg time  
The error occurred in the operation of a timer count. Please check whether an error is permitted.  
cfg100 Warning : XXXX is specified as YYYY.  
XXXX is specified as YYYY.  
259  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
9. Sample Program Description  
9.1 Overview of Sample Program  
As an example application of MR100, the following shows a program that outputs a string to the standard output device  
from one task and another alternately.  
Table 9.1 Functions in the Sample Program  
Function  
Name  
Type  
ID No.  
Priority Description  
main()  
Task  
1
2
3
1
1
Starts task1 and task2.  
Outputs "task1 running."  
Outputs "task2 running."  
Wakes up task1().  
task1()  
task2()  
cyh1()  
Task  
2
3
Task  
Handler  
The content of processing is described below.  
The main task starts task1, task2, and cyh1, and then terminates itself.  
task1 operates in order of the following.  
1. Gets a semaphore.  
2. Goes to a wakeup wait state.  
3. Outputs "task1 running."  
4. Frees the semaphore.  
task2 operates in order of the following.  
1. Gets a semaphore.  
2. Outputs "task2 running."  
3. Frees the semaphore.  
cyh1 starts every 100 ms to wake up task1.  
260  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
9.2 Program Source Listing  
1 /*************************************************************************  
2 *  
3 *  
MR100 smaple program  
4 * COPYRIGHT(C) 2003(2005) RENESAS TECHNOLOGY CORPORATION  
5 * AND RENESAS SOLUTIONS CORPORATION ALL RIGHTS RESERVED  
6 *  
7 *  
8 *  
9 *************************************************************************/  
10  
$Id: demo.c,v 1.2 2005/06/15 05:29:02 inui Exp $  
11 #include <itron.h>  
12 #include <kernel.h>  
13 #include "kernel_id.h"  
14 #include <stdio.h>  
15  
16  
17 void main( VP_INT stacd )  
18 {  
19  
20  
21  
sta_tsk(ID_task1,0);  
sta_tsk(ID_task2,0);  
sta_cyc(ID_cyh1);  
22 }  
23 void task1( VP_INT stacd )  
24 {  
25  
26  
while(1){  
wai_sem(ID_sem1);  
27  
28  
29  
slp_tsk();  
printf("task1 running\n");  
sig_sem(ID_sem1);  
30  
}
31 }  
32  
33 void task2( VP_INT stacd )  
34 {  
35  
36  
while(1){  
wai_sem(ID_sem1);  
37  
38  
printf("task2 running\n");  
sig_sem(ID_sem1);  
39  
}
40 }  
41  
42 void cyh1( VP_INT exinf )  
43 {  
44  
iwup_tsk(ID_task1);  
45 }  
46  
261  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
9.3 Configuration File  
1 //*************************************************************************  
2 //  
3 // COPYRIGHT(C) 2003,2005 RENESAS TECHNOLOGY CORPORATION  
4 // AND RENESAS SOLUTIONS CORPORATION ALL RIGHTS RESERVED  
5 //  
6 //  
7 //  
8 //  
MR100 System Configuration File.  
"$Id: smp.cfg,v 1.5 2005/06/15 05:41:54 inui Exp $"  
9 //*************************************************************************  
10  
11 // System Definition  
12 system{  
13  
stack_size  
priority  
system_IPL  
tic_nume  
= 1024;  
= 10;  
= 4;  
= 1;  
14  
15  
16  
17  
18  
tic_deno  
message_pri  
= 1;  
= 255;  
19 };  
20 //System Clock Definition  
21 clock{  
22  
mpu_clock  
timer  
= 20MHz;  
= A0;  
23  
24  
IPL  
= 4;  
25 };  
26 //Task Definition  
27 //  
28 task[]{  
29  
30  
31  
32  
entry_address = main();  
name = ID_main;  
stack_size = 100;  
priority = 1;  
initial_start = ON;  
33  
34 };  
35 task[]{  
36  
37  
38  
39  
entry_address = task1();  
name  
stack_size  
priority  
= ID_task1;  
= 500;  
= 2;  
40 };  
41 task[]{  
42  
43  
44  
45  
entry_address = task2();  
name  
stack_size  
priority  
= ID_task2;  
= 500;  
= 3;  
46 };  
47  
48 semaphore[]{  
49  
name  
max_count  
= ID_sem1;  
= 1;  
50  
51  
52  
initial_count = 1;  
wait_queue = TA_TPRI;  
53 };  
54  
55  
56  
57 cyclic_hand [1] {  
58  
59  
60  
name  
= ID_cyh1;  
= 100;  
= OFF;  
= OFF;  
= 0;  
= cyh1();  
= 1;  
interval_counter  
start  
61  
62  
63  
64  
phsatr  
phs_counter  
entry_address  
exinf  
65 };  
262  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
263  
Download from Www.Somanuals.com. All Manuals Search And Download.  
10. Stack Size Calculation Method  
10.1Stack Size Calculation Method  
The MR100 provides two kinds of stacks: the system stack and the user stack. The stack size calculation method differ be-  
tween the stacks.  
zUser stack  
This stack is provided for each task. Therefore, writing an application by using the MR100 requires to allocate  
the stack area for each stack.  
zSystem stack  
This stack is used inside the MR100 or during the execution of the handler.  
When a task issues a service call, the MR100 switches the user stack to the system stack. (See Figure  
The system stack uses interrupt stack(ISP).  
MR100 Service Call Processing Position  
Task  
User Stack  
Register save  
Stack switching  
Service call  
rocessing  
System Stack  
(interruput stack)  
XXX_XXX()  
Task Selection  
Stack switching  
Register return  
User Stack  
Figure 10.1:System Stack and User Stack  
The sections of the system stack and user stack each are located in the manner shown below. However, the diagram shown  
below applies to the case where the stack areas for all tasks are located in the stack section during configuration.  
264  
Download from Www.Somanuals.com. All Manuals Search And Download.  
     
SFR  
System Stack  
User satck of  
TaskID No.1  
User satck of  
TaskID No.2  
Stack Section  
User satck of  
TaskID No.n  
Figure 10.2: Layout of Stacks  
265  
Download from Www.Somanuals.com. All Manuals Search And Download.  
10.1.1 User Stack Calculation Method  
User stacks must be calculated for each task. The following shows an example for calculating user stacks in cases when an  
application is written in the C language and when an application is written in the assembly language.  
z When an application is written in the C language  
Using the stack size calculation utility of NC100, calculate the stack size of each task. The necessary stack size  
of a task is the sum of the stack size output by the stack size calculation utility plus a context storage area of 48  
bytes54  
zWhen an application is written in the assembly language  
Sections used in user program  
The necessary stack size of a task is the sum of the stack size used by the task in subroutine call plus the size  
used to save registers to a stack in that task.  
Sections used in MR100  
The sections used in MR100 refer to a stack size that is used for the service calls issued.  
MR100 requires that if you issue only the service calls that can be issued from tasks, 8bytes of area be allocated  
for storing the PC and FLG registers. Also, if you issue the service calls that can be issued from both tasks and  
bytes) to ensure that the necessary stack area is allocated.  
Furthermore, when issuing multiple service calls, include the maximum value of the stack sizes used by those  
service calls as the sections used by MR100 as you calculate the necessary stack size.  
Therefore,  
User stack size =  
Sections used in user program + registers used + Sections used in MR100  
(registers used is total size of used registers.)  
Figure 2.3:Example of Use Stack Size Calculation shows an example for calculating a user stack. In the example below, the  
registers used by the task are R2R0, R3R1, and A0.  
54  
If written in the C language, this size is fixed.  
266  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
Stack growing direction  
When use register R2R0,R3R1,A0(12bytes)  
4bytes  
24bytes(PC+FLG+size of re gisters used  
stack size used by sta_tsk)  
jsr sub1  
sta_tsk  
36bytes(PC+FLG+size of registe rs used  
stack size used by prcv_mbx)  
prcv_mbx  
40bytes  
Figure 2.3:Example of Use Stack Size Calculation  
267  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
10.1.2 System Stack Calculation Method  
The system stack is most often consumed when an interrupt occurs during service call processing followed by the occur-  
rence of multiple interrupts.55 The necessary size (the maximum size) of the system stack can be obtained from the fol-  
lowing relation:  
Necessary size of the system stack = αΣβi( γ)  
zα  
The maximum system stack size among the service calls to be used.56.  
When sta_tsk, ext_tsk, and dly_tsk are used for example, according to the Table 10.1 Stack Sizes Used by Ser-  
vice Calls Issued from Tasks (in bytes),each of system stack size is the following.  
Service Call name  
sta_tsk  
System Stack Size  
4 bytes  
ext_tsk  
4 bytes  
slp_tsk  
4 bytes  
dly_tsk  
8 bytes  
Therefore,the maximum system stack size among the service calls to be used is the 8 bytes of dly_tsk.  
The stack size to be used by the interrupt handler.57 The details will be described later.  
Stack size used by the system clock interrupt handler. This is detailed later.  
zβi  
zγ  
55  
56  
After switchover from user stack to system stack  
Refer from Table 10.1 Stack Sizes Used by Service Calls Issued from Tasks (in bytes) to Table 10.3 Stack Sizes Used by Service Calls  
Issued from Tasks and Handlers (in bytes) for the system stack size used for each individual service call.  
57  
Kernel interrupt handler (not including the system clock interrupt handler here) and non-kernel interrupt handler.  
268  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
α:The maximum system stack size among the service calls to be used.  
α
βι:The system stack size to be used by the interrupt handler.  
β1  
β2  
Interrupt  
Interrupt  
βn  
The necessary system stack  
Figure 10.4: System Stack Calculation Method  
269  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[( Stack size βi used by interrupt handlers )]  
The stack size used by an interrupt handler that is invoked during a service call can be calculated by the equation below.  
The stack size βi used by an interrupt handler is shown below.  
C language  
Using the stack size calculation utility of NC100, calculate the stack size of each interrupt handler.  
Refer to the manual of for the stack size calculation utility detailed use of it.  
Assembly language  
The stack size to be used by kernel interrupt handler  
= register to be used + user size + stack size to be used by service call  
The stack size to be used by non-kernel interrupt handler  
= register to be used + user size  
User size is the stack size of the area written by user.  
Context(48bytes)  
Interrupt  
4bytes  
jsr func  
32bytes  
iset_flg  
ret_int  
84bytes  
Figure 10.5: Stack size to be used by Kernel Interrupt Handler(Written in C language)  
270  
Download from Www.Somanuals.com. All Manuals Search And Download.  
[( System stack size γ used by system clock interrupt handler )]  
When you do not use a system timer, there is no need to add a system stack used by the system clock interrupt handler.  
The system stack size γ used by the system clock interrupt handler is whichever larger of the two cases below:  
48 + maximum size used by cyclic handler  
48 + maximum size used by alarm handler  
72 bytes  
C language  
Using the stack size calculation utility of NC100, calculate the stack size of each Alarm or Cyclic handler.  
Refer to the manual of the stack size calculation utilityr for detailed use of it.  
Assembly language  
The stack size to be used by Alarm or Cyclic handler  
= register to be used + user size + stack size to be used by service call  
If neither cyclic handler nor alarm handler is used, then  
γ = 72 bytes  
When using the interrupt handler and system clock interrupt handler in combination, add the stack sizes used by both.  
271  
Download from Www.Somanuals.com. All Manuals Search And Download.  
10.2Necessary Stack Size  
service calls that can be issued from tasks.  
Table 10.1 Stack Sizes Used by Service Calls Issued from Tasks (in bytes)  
Service call  
Stack size  
Service call  
Stack size  
User stack  
System  
User stack  
System  
stack  
stack  
28  
0
28  
0
28  
0
32  
16  
0
74  
38  
0
0
0
0
0
0
0
0
0
0
0
act_tsk  
can_act  
sta_tsk  
ext_tsk  
ter_tsk  
0(4)  
0(12)  
0(4)  
0
4
0
4
4
16  
16  
0
0
0
4
8
16  
0
16  
4
4
4
8
16  
28  
0
28  
0
24  
0
28  
0
rcv_mbx  
4
prcv_mbx  
trcv_mbx  
ref_mbx  
get_mpf  
pget_mpf  
tget_mpf  
rel_mpf  
ref_mpf  
pget_mpl  
rel_mpl  
ref_mpl  
set_tim  
get_tim  
sta_cyc  
stp_cyc  
ref_cyc  
sta_alm  
stp_alm  
ref_alm  
rot_rdq  
0(16)  
0(4)  
0(8)  
4
0(20)  
4
0(4)  
0(8)  
4
0(4)  
0(20)  
0(8)  
0(8)  
0(12)  
0(8)  
0(16)  
0(12)  
0(12)  
0(16)  
0(4)  
0(8)  
0
0(4)  
0(12)  
0(4)  
0(4)  
0(4)  
0(4)  
4
0(4)  
0(4)  
0(12)  
0(32)  
0(12)  
0(4)  
0(4)  
0(4)  
0(12)  
0(4)  
0(4)  
0(4)  
0(4)  
0(4)  
0(4)  
0(4)  
0(8)  
0(4)  
0(12)  
0(4)  
0(8)  
4
chg_pri  
get_pri  
ref_tsk  
ref_tst  
slp_tsk  
tslp_tsk  
wup_tsk  
can_wup  
rel_wai  
sus_tsk  
rsm_tsk  
frsm_tsk  
dly_tsk  
sig_sem  
wai_sem  
pol_sem  
twai_sem  
ref_sem  
set_flg  
get_tid  
loc_cpu  
unl_cpu  
ref_ver  
0
0
0
clr_flg  
wai_flg  
pol_flg  
twai_flg  
ref_flg  
vsnd_dtq  
vpsnd_dtq  
vtsnd_dtq  
vfsnd_dtq  
vrcv_dtq  
vprcv_dtq  
vtrcv_dtq  
vref_dtq  
vrst_dtq  
vrst_vdtq  
vrst_mbx  
vrst_mpf  
vrst_mpl  
ena_dsp  
28  
16  
28  
16  
16  
16  
16  
0
48  
48  
0
48  
28(68)  
0
0(8)  
4
28  
0
0(8)  
0(4)  
0(4)  
0(4)  
0(4)  
4
4
4
0(8)  
0(4)  
0
snd_dtq  
psnd_dtq  
tsnd_dtq  
fsnd_dtq  
rcv_dtq  
prcv_dtq  
trcv_dtq  
ref_dtq  
snd_mbx  
dis_dsp  
28  
16  
28  
16  
16  
16  
16  
0
4
4
0(8)  
0(4)  
0(4)  
0(8)  
0(4)  
0
12  
0
0(4)  
(): Stack sizes used by service call in Assembly programs.  
272  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
stack) used by service calls that can be issued from handlers.  
Table 10.2 Stack Sizes Used by Service Calls Issued from Handlers (in bytes)  
Service call  
iact_tsk  
ican_act  
ista_tsk  
ichg_pri  
iget_pri  
iref_tsk  
Stack size  
12(40)  
12(24)  
12(40)  
24(52)  
16(24)  
12(44)  
12(24)  
24(56)  
12(24)  
24(56)  
12(32)  
12(40)  
12(40)  
28(60)  
12(20)  
12(20)  
32(68)  
12(20)  
16(24)  
12(20)  
28(60)  
28(60)  
40(64)  
12(20)  
12(20)  
Service call  
iprcv_mbx  
Stack size  
16(28)  
12(20)  
28(32)  
32(64)  
12(20)  
12(20)  
12(20)  
12(24)  
12(20)  
12(28)  
12(24)  
12(24)  
12(28)  
12(24)  
16(20)  
12  
iref_mbx  
ipget_mpf  
irel_mpf  
iref_mpf  
iset_tim  
iget_tim  
ista_cyc  
istp_cyc  
iref_cyc  
ista_alm  
istp_alm  
iref_alm  
irot_rdq  
iget_tid  
iref_tst  
iwup_tsk  
ican_wup  
irel_wai  
isus_tsk  
irsm_tsk  
ifrsm_tsk  
isig_sem  
ipol_sem  
iref_sem  
iset_flg  
iclr_flg  
ipol_flg  
iref_flg  
ipsnd_dtq  
ifsnd_dtq  
iprcv_dtq  
iref_dtq  
iref_mpl  
iloc_cpu  
iunl_cpu  
ret_int  
12(20)  
16  
iref_ver  
12(24)  
32(64)  
32(64)  
36(64)  
12(20)  
24(52)  
vipsnd_dtq  
vifsnd_dtq  
viprcv_dtq  
viref_dtq  
isnd_mbx  
(): Stack sizes used by service call in Assembly programs.  
sizes (system stack) used by service calls that can be issued from both tasks and handlers. If the service call  
issued from task, system uses user stack. If the service call issued from handler, system uses system stack.  
Table 10.3 Stack Sizes Used by Service Calls Issued from Tasks and Handlers (in bytes)  
Service call  
sns_ctx  
sns_dsp  
Stack size  
12(20)  
12(20)  
Service call  
sns_loc  
sns_dpn  
Stack size  
12(20)  
12(20)  
(): Stack sizes used by service call in Assembly programs.  
273  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
Download from Www.Somanuals.com. All Manuals Search And Download.  
11. Note  
11.1The Use of INT Instruction  
MR100 has INT instruction interrupt numbers reserved for issuing service calls as listed in Table 11.1 Interrupt Number  
Assignment. For this reason, when using software interrupts in a user application, do not use interrupt numbers 63 through  
48 and be sure to use some other numbers.  
Table 11.1 Interrupt Number Assignment  
Interrupt No.  
249  
Service calls Used  
Service calls that can be issued from only task context  
Service calls that can be issued from only non-task context.  
Service calls that can be issued from both task context and non-task context.  
ret_int service call  
dis_dsp service call  
loc_cpu, iloc_cpu service call  
ext_tsk service call  
Reserved for future extension  
250  
251  
252  
253  
254  
255  
11.2The Use of registers of bank  
The registers of bank is 0, when a task starts on MR100.  
MR100 does not change the registers of bank in processing kernel.  
You must pay attention to the followings.  
Don’t change the regisers of bank in processing a task.  
If an interrupt handler with regisers of bank 1 have multiple interrupts of an interrupt handler with regis-  
ers of bank 1 , the program can not execute normally.  
- 275 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
       
11.3Regarding Delay Dispatching  
MR100 has four service calls related to delay dispatching.  
dis_dsp  
ena_dsp  
loc_cpu  
unl_cpu  
The following describes task handling when dispatch is temporarily delayed by using these service calls.  
14. When the execution task in delay dispatching should be preempted  
While dispatch is disabled, even under conditions where the task under execution should be preempted, no time  
is dispatched to new tasks that are in an executable state. Dispatching to the tasks to be executed is delayed until  
the dispatch disabled state is cleared. When dispatch is being delayed.  
Task under execution is in a RUN state and is linked to the ready queue  
Task to be executed after the dispatch disabled state is cleared is in a READY state and is linked to the  
highest priority ready queue (among the queued tasks).  
15. isus_tsk,irsm_tsk during dispatch delay  
In cases when isus_tsk is issued from an interrupt handler that has been invoked in a dispatch disabled state to  
the task under execution (a task to which dis_dsp was issued) to place it in a SUSPEND state. During delay dis-  
patching.  
The task under execution is handled inside the OS as having had its delay dispatching cleared. For this  
reason, in isus_tsk that has been issued to the task under execution, the task is removed from the  
ready queue and placed in a SUSPEND state. Error code E_OK is returned. Then, when irsm_tsk is  
issued to the task under execution, the task is linked to the ready queue and error code E_OK is re-  
turned. However, tasks are not switched over until delay dispatching is cleared.  
The task to be executed after disabled dispatching is re-enabled is linked to the ready queue.  
16. rot_rdq, irot_rdq during dispatch delay  
When rot_rdq (TPRI_RUN = 0) is issued during dispatch delay, the ready queue of the own task's priority is ro-  
tated. Also, when irot_rdq (TPRI_RUN = 0) is issued, the ready queue of the executed task's priority is rotated.  
In this case, the task under execution may not always be linked to the ready queue. (Such as when isus_tsk is is-  
sued to the executed task during dispatch delay.)  
17. Precautions  
No service call (e.g., slp_tsk, wai_sem) can be issued that may place the own task in a wait state while  
in a state where dispatch is disabled by dis_dsp or loc_cpu.  
ena_dsp and dis_dsp cannot be issued while in a state where interrupts and dispatch are disabled by  
loc_cpu.  
Disabled dispatch is re-enabled by issuing ena_dsp once after issuing dis_dsp several times.  
The above status transition can be summarized in Table 3.3.  
- 276 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
11.4Regarding Initially Activated Task  
MR100 allows you to specify a task that starts from a READY state at system startup. This specification is made by setting  
the configuration file.  
Refer to 8.1.2 for details on how to set.  
- 277 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
Download from Www.Somanuals.com. All Manuals Search And Download.  
12. Appendix  
12.1Data Type  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
typedef  
signed char  
signed short  
signed long  
unsigned char  
unsigned short  
unsigned long  
char  
short  
long  
void  
void  
W
UW  
H
H
W
B;  
H;  
W;  
UB;  
UH;  
UW;  
VB  
VH;  
/* Signed 8-bit integer */  
/* Signed 16-bit integer */  
/* Signed 32-bit integer */  
/* Unsigned 8-bit integer */  
/* Unsigned 16-bit integer */  
/* Unsigned 32-bit integer */  
/* 8-bit value with unknown data type */  
/* 16-bit value with unknown data type */  
/* 32-bit value with unknown data type */  
/* Pointer to unknown data type */  
/* Pointer to a function */  
/* Signed 32-bit integer */  
/* Unsigned 32-bit integer */  
/* Object ID number */  
/* Priority */  
VW;  
*VP;  
(*FP)();  
INT  
UINT;  
ID;  
PRI;  
TMO;  
ER;  
ATR;  
STAT;  
MODE;  
SIZE;  
RELTIM  
VP_INT;  
/* Timeout */  
H
/* Error code(Signed integer) */  
/* Object attribute(Unsigned integer) */  
/* Task status */  
/* Service call operation mode */  
/* Memory area size */  
/* Relative time */  
/* Pointer to an unknown data type, or a signed in-  
teger for the processor */  
UH  
UH  
UH  
UW  
UW  
W
typedef  
struct  
UH  
UW  
systim{  
utime;  
ltimer;  
/* System time */  
/* Upper16bit of the system time */  
/* Lower32bit of the system time */  
}
SYS-  
TIM;  
typedef  
W
ER_UINT;  
/* Error code or unsigned integer */  
- 279 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
   
12.2Common Constants and Packet Format of Structure  
----Common formats----  
TRUE  
FALSE  
1
0
/* True */  
/* False */  
----Formats related to task management----  
TSK_SELF  
TPRI_RUN  
0
0
/* Specifies the issuing task itself */  
/* Specifies priority of task being executed then */  
typedef struct t_rtsk {  
STAT  
PRI  
PRI  
STAT  
ID  
tskstat;  
/* Task status */  
/* Current priority of task */  
/* Base priority of task */  
/* Reason for which task is kept waiting */  
/* Object ID for which task is kept waiting */  
/* Remaining time before task times out */  
/* Number of activation requests */  
/* Number of wakeup requests */  
/* Number of suspension requests */  
tskpri;  
tskbpri;  
tskwait;  
wid;  
tskatr;  
actcnt;  
wupcnt;  
suscnt;  
TMO  
UINT  
UINT  
UINT  
} T_RTSK;  
typedef struct t_rtst {  
STAT  
STAT  
tskstat;  
tskwait;  
/* Task status */  
/* Reason for which task is kept waiting */  
} T_RTST;  
----Formats related to semaphore----  
typedef struct t_rsem {  
ID  
INT  
wtskid;  
semcnt;  
/* ID number of task at the top of waiting queue */  
/* Current semaphore count value */  
} T_RSEM;  
----Formats related to eventflag----  
wfmod:  
TWF_ANDW  
TWF_ORW  
H’0000  
H’0002  
/* AND wait */  
/* OR wait */  
typedef struct t_rflg {  
ID  
UINT  
wtskid;  
flgptn;  
/* ID number of task at the top of waiting queue */  
/* Current bit pattern of eventflag */  
} T_RFLG;  
----Formats related to data queue and short data queue----  
typedef struct t_rdtq {  
ID  
ID  
UINT  
stskid;  
rtskid;  
sdtqcnt;  
/* ID number of task at the top of transmission waiting queue */  
/* ID number of task at the top of reception waiting queue */  
/* Number of data bytes contained in data queue */  
} T_RDTQ;  
----Formats related to mailbox----  
typedef struct  
VP msghead;  
} T_MSG;  
typedef struct t_msg_pri {  
t_msg  
{
/* Message header */  
T_MSG  
PRI  
msgque;  
msgpri;  
/* Message header */  
/* Message priority */  
} T_MSG_PRI;  
typedef struct t_mbx {  
ID  
T_MSG  
wtskid;  
*pk_msg;  
/* ID number of task at the top of waiting queue */  
/* Next message to be received */  
} T_RMBX;  
----Formats related to fixed-size memory pool----  
typedef struct t_rmpf {  
ID  
*/  
UINT  
wtskid;  
/* ID number of task at the top of memory acquisition waiting queue  
frbcnt;  
/* Number of memory blocks */  
} T_RMPF;  
- 280 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
----Formats related to Variable-size Memory pool----  
typedef struct t_rmpl {  
ID  
*/  
SIZE  
wtskid;  
/* ID number of task at the top of memory acquisition waiting queue  
fmplsz;  
fblksz;  
/* Total size of free areas */  
/* Maximum memory block size that can be acquired immediately */  
UINT  
} T_RMPL;  
----Formats related to cyclic handler----  
typedef struct t_rcyc {  
STAT  
RELTIM  
cycstat;  
lefttim;  
/* Operating status of cyclic handler */  
/* Remaining time before cyclic handler starts */  
} T_RCYC;  
----Formats related to alarm handler----  
typedef struct t_ralm {  
STAT  
RELTIM  
almstat;  
lefttim;  
/* Operating status of alarm handler */  
/* Remaining time before alarm handler starts */  
} T_RALM;  
----Formats related to system management----  
typedef struct t_rver {  
UH  
UH  
UH  
UH  
UH  
maker;  
prid;  
spver;  
prver;  
prno[4];  
/* Maker */  
/* Type number */  
/* Specification version */  
/* Product version */  
/* Product management information */  
} T_RVER;  
- 281 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
12.3Assembly Language Interface  
When issuing a service call in the assembly language, you need to use macros prepared for invoking service  
calls.  
Processing in a service call invocation macro involves setting each parameter to registers and starting ex-  
ecution of a service call routine by a software interrupt. If you issue service calls directly without using a ser-  
vice call invocation macro, your program may not be guaranteed of compatibility with future versions of  
MR100.  
The table below lists the assembly language interface parameters. The values set forth in μITRON specifica-  
tions are not used for the function code.  
Task Management Function  
Parameter  
R2  
ReturnParameter  
ServiceCall  
INTNo.  
FuncCode  
A0  
R1  
R3  
A1  
R0  
R2  
ista_tsk  
250  
8
6
stacd  
tskid stacd  
tskid stacd  
-
-
-
-
-
-
-
-
-
-
-
ercd  
ercd  
ercd  
ercd  
ercd  
actcnt  
actcnt  
ercd  
ercd  
ercd  
ercd  
-
sta_tsk  
act_tsk  
iact_tsk  
ter_tsk  
can_act  
ican_act  
chg_pri  
ichg_pri  
rel_wai  
irel_wai  
ref_tst  
249  
249  
250  
249  
250  
250  
250  
250  
249  
250  
250  
250  
250  
250  
137  
250  
250  
stacd  
-
0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
tskid  
tskid  
tskid  
tskid  
tskid  
-
-
-
-
-
-
2
-
10  
4
-
-
4
-
12  
14  
32  
34  
20  
20  
18  
18  
106  
16  
16  
tskid tskpri  
tskid tskpri  
-
-
tskid  
tskid  
tskid  
tskid  
tskid  
tskid  
-
-
-
-
-
-
-
-
-
-
-
-
pk_rtst ercd  
pk_rtst ercd  
pk_rtsk ercd  
pk_rtsk ercd  
-
iref_tst  
ref_tsk  
iref_tsk  
ext_tsk  
get_pri  
iget_pri  
-
-
-
-
-
-
-
-
tskid  
tskid  
ercd  
ercd  
tskpri  
tskpri  
- 282 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
 
Task Dependent Synchronization Function  
Parameter  
ReturnParameter  
R0  
ServiceCall INTNo.  
FuncCode  
A0  
R2  
R6R4  
slp_tsk  
249  
249  
250  
250  
250  
249  
249  
250  
249  
250  
249  
250  
22  
-
-
-
-
-
-
ercd  
ercd  
ercd  
wupcnt  
wupcnt  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
wup_tsk  
iwup_tsk  
can_wup  
ican_wup  
tslp_tsk  
sus_tsk  
isus_tsk  
rsm_tsk  
irsm_tsk  
frsm_tsk  
ifrsm_tsk  
26 tskid  
28 tskid  
30 tskid  
30 tskid  
24  
-
tmout  
36 tskid  
38 tskid  
40 tskid  
42 tskid  
40 tskid  
42 tskid  
-
-
-
-
-
-
-
tmout  
dly_tsk  
rel_wai  
249  
249  
44  
32 tskid  
34 tskid  
-
-
irel_wai  
250  
Synchronization & Communication Function  
Parameter  
R3R1  
ReturnParameter  
ServiceCall  
INTNo.  
FuncCode  
A0  
R0  
R2  
semid  
R6R4  
A1  
R0  
R3R1  
wai_sem  
pol_sem  
ipol_sem  
sig_sem  
isig_sem  
twai_sem  
ref_sem  
iref_sem  
wai_flg  
249  
250  
250  
249  
250  
249  
250  
250  
249  
249  
250  
250  
249  
250  
250  
250  
250  
250  
249  
249  
250  
249  
250  
249  
50  
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
-
52  
52  
46  
48  
54  
56  
56  
semid  
semid  
semid  
semid  
semid  
semid  
semid  
-
-
-
-
-
-
-
-
tmout  
-
-
pk_rsem ercd  
pk_rsem ercd  
-
-
-
64 wfmode  
92 wfmode  
66 wfmode  
66 wfmode  
waiptn flgid  
waiptn flgid  
waiptn flgid  
waiptn flgid  
-
-
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
flgptn  
twai_flg  
pol_flg  
tmout  
-
fgptn  
-
-
flgptn  
ipol_flg  
set_flg  
-
-
flgptn  
58  
60  
70  
70  
62  
62  
72  
74  
76  
80  
82  
104  
-
-
-
-
setptn  
setptn  
-
flgid  
flgid  
flgid  
flgid  
flgid  
flgid  
dtqid  
dtqid  
dtqid  
dtqid  
dtqid  
dtqid  
-
-
-
-
-
-
-
-
-
-
-
-
-
-
iset_flg  
-
-
ref_flg  
-
pk_rflg  
iref_flg  
-
-
pk_rflg  
clr_flg  
-
-
-
clrptn  
clrptn  
data  
data  
data  
data  
data  
data  
-
-
-
-
-
-
-
-
-
iclr_flg  
-
snd_dtq  
psnd_dtq  
ipsnd_dtq  
fsnd_dtq  
ifsnd_dtq  
tsnd_dtq  
-
-
-
-
-
-
-
-
-
-
tmout  
- 283 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
Synchronization & Communication Function  
Parameter  
R2  
ReturnParameter  
ServiceCall  
rcv_dtq  
INTNo.  
249  
FuncCode  
A0  
R3R1  
R6R4  
A1  
R0  
R3R1  
A1  
84  
-
-
-
-
-
-
-
-
-
-
-
-
-
-
dtqid  
-
-
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
data  
-
prcv_dtq  
iprcv_dtq  
trcv_dtq  
ref_dtq  
249  
250  
249  
250  
250  
249  
250  
249  
250  
250  
249  
250  
250  
86  
88  
dtqid  
-
-
data  
-
dtqid  
-
-
data  
-
90  
dtqid  
tmout  
-
data  
-
92  
dtqid  
-
pk_rdtq  
-
-
-
-
-
-
-
-
-
-
-
iref_dtq  
92  
dtqid  
-
pk_rdtq  
-
snd_mbx  
isnd_mbx  
rcv_mbx  
prcv_mbx  
iprcv_mbx  
trcv_mbx  
ref_mbx  
iref_mbx  
94  
mbxid  
mbxid  
mbxid  
mbxid  
mbxid  
mbxid  
mbxid  
mbxid  
-
pk_msg  
-
96  
-
pk_msg  
-
98  
-
-
-
-
-
pk_msg  
pk_msg  
pk_msg  
pk_msg  
-
100  
100  
102  
104  
104  
-
-
tmout  
-
-
pk_rmbx ercd  
pk_rmbx ercd  
-
- 284 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
Interrupt Management Functions  
Parameter ReturnParameter  
ServiceCall INTNo.  
FuncCode  
A0  
R0  
ret_int  
251  
-- --  
System State Management Functions  
Parameter  
ReturnParameter  
ServiceCall INTNo.  
FuncCode  
A0  
R3  
R0  
R2  
rot_rdq  
irot_rdq  
get_tid  
249  
250  
250  
250  
253  
253  
252  
249  
249  
250  
250  
250  
250  
250  
140 tskpri ercd  
142 tskpri ercd  
-
-
144  
144  
198  
200  
206  
150  
146  
148  
152  
154  
156  
158  
-
-
-
-
-
-
-
-
-
-
-
-
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
tskid  
iget_tid  
loc_cpu  
iloc_cpu  
dis_dsp  
ena_dsp  
unl_cpu  
iunl_cpu  
sns_ctx  
sns_loc  
sns_dsp  
sns_dpn  
tskid  
-
-
-
-
-
-
-
-
-
-
- 285 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
Memorypool Management Functions  
ReturnParam-  
eter  
Parameter  
R3  
Service-  
Call  
INT-  
No.  
Func-  
Code  
A0  
R1  
R2  
R6R4  
A1  
R0  
R3R1  
get_mpf  
pget_mpf  
ipget_mpf  
tget_mpf  
rel_mpf  
irel_mpf  
ref_mpf  
iref_mpf  
pget_mpl  
rel_mpl  
249  
250  
250  
249  
249  
250  
250  
250  
249  
249  
250  
250  
108  
106  
106  
110  
-
-
-
-
mpfid  
mpfid  
mpfid  
mpfid  
mpfid  
mpfid  
mpfid  
mpfid  
mplid  
mplid  
mplid  
mplid  
-
-
-
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
p_blk  
-
-
-
p_blk  
-
-
-
p_blk  
-
tmout  
-
p_blk  
112 blk  
114 blk  
blk  
-
-
-
-
-
-
-
-
-
-
blk  
-
-
116  
116  
118  
-
-
-
-
pk_rmpf  
pk_rmpf  
-
-
-
-
-
p_blk  
120 blk  
blk  
-
-
-
ref_mpl  
iref_mpl  
122  
122  
-
-
-
-
pk_rmpl  
pk_rmpl  
Time Management Functions  
ReturnParameter  
R0  
Parameter  
R2 R6R4  
ServiceCall INTNo.  
FuncCode  
A0  
A1  
-
-
-
-
set_tim  
iset_tim  
get_tim  
iget_tim  
sta_cyc  
ista_cyc  
stp_cyc  
istp_cyc  
ref_cyc  
250  
250  
250  
250  
250  
250  
250  
250  
250  
250  
250  
250  
250  
250  
250  
250  
124  
124  
126  
126  
-
-
-
-
p_systim  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
p_systim  
p_systim  
p_systim  
128 cycid  
128 cycid  
130 cycid  
130 cycid  
132 cycid  
132 cycid  
134 almid  
134 almid  
136 almid  
136 almid  
138 almid  
138 almid  
-
-
-
-
pk_rcyc  
iref_cyc  
sta_alm  
ista_alm  
stp_alm  
istp_alm  
ref_alm  
iref_alm  
pk_rcyc  
almtim  
almtim  
-
-
-
-
pk_ralm  
pk_ralm  
- 286 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
System Configuration Management Functions  
Parameter  
ReturnParameter  
R0  
ServiceCall INTNo.  
FuncCode  
A1  
A0  
ref_ver  
iref_ver  
250  
250  
160 pk_rver  
160 pk_rver  
ercd  
ercd  
Extenden Function(Reset Function)  
Parameter  
ReturnParameter  
R0  
ServiceCall INTNo.  
FuncCode  
A0  
R2  
vrst_vdtq  
vrst_dtq  
vrst_mbx  
vrst_mpf  
vrst_mpl  
vrst_mbf  
249  
249  
250  
249  
250  
249  
192 vdtqid  
184 dtqid  
186 mbxid  
188 mpfid  
190 mplid  
218 mbfid  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
Extenden Function(Short Data Queue Function)  
Parameter  
R2  
ReturnParameter  
R0 R1  
ercd  
ServiceCall INTNo.  
FuncCode  
A0  
R1  
R6R4  
A1  
vsnd_dtq  
vpsnd_dtq  
vipsnd_dtq  
vfsnd_dtq  
vifsnd_dtq  
vtsnd_dtq  
vrcv_dtq  
249  
249  
250  
249  
250  
249  
249  
249  
250  
249  
250  
250  
162 data vdtqid  
164 data vdtqid  
166 data vdtqid  
170 data vdtqid  
172 data vdtqid  
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
ercd  
228 data vdtqid tmout  
174  
176  
178  
180  
182  
182  
-
-
-
-
-
-
vdtqid  
vdtqid  
vdtqid  
-
-
-
data  
data  
data  
data  
-
vprcv_dtq  
viprcv_dtq  
vtrcv_dtq  
vref_dtq  
vdtqid tmout  
vdtqid  
vdtqid  
-
-
pk_rdtq ercd  
pk_rdtq ercd  
viref_dtq  
-
- 287 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
- 288 -  
Download from Www.Somanuals.com. All Manuals Search And Download.  
Real-time OS for R32C/100 Series  
M3T-MR100/4 User's Manual  
Publication Date: September. 16, 2007 Rev.1.00  
Sales Strategic Planning Div.  
Published by:  
Renesas Technology Corp.  
Application Engineering Department 1  
Edited by:  
Renesas Solutions Corp.  
© 2007. Renesas Technology Corp. and Renesas Solutions Corp.,  
Download from Www.Somanuals.com. All Manuals Search And Download.  
M3T-MR100/4  
User's Manual  
Download from Www.Somanuals.com. All Manuals Search And Download.  

PYLE Audio Stereo Amplifier PQ1000 User Guide
Quatech Home Theater Server ABDG SE HD101 User Guide
Ricoh Printer CL7200 User Guide
Roadmaster Car Speaker RS460 User Guide
Roper Microwave Oven MHE14X User Guide
Runco Home Theater Screen SP 42 User Guide
Samsung Clothes Dryer DC68 02312A 04 User Guide
Samsung CRT Television WS 32Z308T User Guide
Samsung Security Camera SCC B2305P User Guide
Schumacher Battery Charger 1010 User Guide