
             TOPPERS/FDMPͥ 桼ޥ˥奢 

            Release 1.1бǽ: 14-Mar-2006

 Υ桼ޥ˥奢ϡTOPPERSץȤƤ롤
ǽʬޥץåꥢ륿५ͥͤȦITRON4.0ͽ
Ver. 4.02.00ˤƤ˵ҤƤޤǽʬޥץ
ꥢ륿५ͥͤϡܥѥå ./doc/spec.txt ˤ
ޤITRON4.0ͽϡʲURLɤ뤳ȤǤޤ

        http://www.ertl.jp/ITRON/SPEC/mitron4-j.html


----------------------------------------------------------------------
 TOPPERS/FDMP Kernel
    Toyohashi Open Platform for Embedded Real-Time Systems/
     Function Distributed Multiprocessor Kernel 

 Copyright (C) 2004-2006 by Embedded and Real-Time Systems Laboratory
             Graduate School of Information Science, Nagoya Univ., JAPAN

 嵭Ԥϡʲ (1)(4) ξ狼Free Software Foundation 
 ˤäƸɽƤ GNU General Public License  Version 2 ˵
 ҤƤ˸¤ꡤܥեȥܥեȥ
 ѤΤޤࡥʲƱˤѡʣѡۡʰʲ
 ѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
 (1) ܥեȥ򥽡ɤηѤˤϡ嵭
     ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
     ˴ޤޤƤ뤳ȡ
 (2) ܥեȥ򡤥饤֥ʤɡ¾Υեȥȯ˻
     ѤǤǺۤˤϡۤȼɥȡ
     ԥޥ˥奢ʤɡˤˡ嵭ɽѾ浪Ӳ
     ̵ݾڵǺܤ뤳ȡ
 (3) ܥեȥ򡤵Ȥ߹ʤɡ¾Υեȥȯ˻
     ѤǤʤǺۤˤϡΤ줫ξ
     ȡ
   (a) ۤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
       ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
   (b) ۤη֤̤ˡˤäơTOPPERSץȤ
       𤹤뤳ȡ
 (4) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
     ⡤嵭ԤTOPPERSץȤդ뤳ȡ

 ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥ
 TOPPERSץȤϡܥեȥ˴ؤơŬѲǽ
 ޤơʤݾڤԤʤޤܥեȥѤˤľ
 ŪޤϴŪʤ»˴ؤƤ⡤Ǥʤ

 @(#) $Id: user.txt,v 1.2 2006/03/21 08:33:59 honda Exp $
----------------------------------------------------------------------
 * ITRON4.0ͤϡȥ󶨲濴Ȥʤäƺꤵ줿ץʥꥢ
   륿५ͥͤǤITRON4.0ͤλͽϡȥ󶨲Υۡ
   ڡhttp://www.assoc.tron.org/ˤꤹ뤳ȤǤޤ
----------------------------------------------------------------------
 * TRON  "The Real-time Operating system Nucleus" άΤǤ
 * ITRON  "Industrial TRON" άΤǤ
 * ITRON  "Micro Industrial TRON" άΤǤ
 * TRONITRONӦITRONϡξʤʤϾʷؤ̾Τ
   Ϥޤ
 * TOPPERS  "Toyohashi OPen Platform for Embedded Real-time Systems" 
   άΡJSP  "Just Standard Profile" άΡFDMP  "Function 
   Distributed Multi Processor" άΤǤ
 * ܥޥ˥奢ξ̾ϡƼҤξɸޤϿɸǤ
----------------------------------------------------------------------


TOPPERS/FDMPͥγ

TOPPERS/FDMPͥʰʲñFDMPͥȽ񤯡ˤϡTOPPERSץ
Ȥˤꤵ줿ITRONͤǽʬޥץå˳
ĥǽʬޥץåꥢ륿५ͥͤ˽򤷤
ꥢ륿५ͥǤ롥ĥͤǤϡͥ륪֥ȤưŪ
ץå֤ΰưϥݡȤƤʤץå٤Ǧ 
ITRONͤAPIȯԤ뤳ȤǽǤ롥ITRON4.0ͤΤ
ɥץե˴ޤޤƤ뵡ǽ򥵥ݡȤƤ롥ͤξܺ٤˴
Ƥϡspec.txt 򻲾ȤΤȡ

1.1 åȥץå

FDMPͥϡǰʲΥåȤ򥵥ݡȤƤ롥ޤ
MeP(Media embedded Processor)ˤĤƤݡƥ󥰺ȤʤƤ
롥ƥåȤξܺ٤ˤĤƤ̤˽Ҥ٤롥

      ץå    ᡼  С
      Nios2         Altera  NiosII Devlopment Kit 5.1
      Microblaze    Xilinx  EDK 6.2.1
    
FDMPͥϡͥ¿ʬCǵҤ롤å
¸Ȱ¸ΤʬΥʤɡ¾ΥåȥץåؤΥݡƥ
󥰤ưפʹ¤ˤʤäƤ롥ݡƥ󥰤ˤɤ٤μ֤
뤫ϡåȥץåΥƥ䥷ƥιʤɤ˰
¸롥

1.2 ȯĶ

FDMPͥϡGCCʤɤGNUȯĶɸΥեȥȯĶȤ
뤬¾μγȯĶѤǤ褦˹θƤ롥ѤǤ볫
ȯĶˤĤƤϡåޤϳȯĶΥޥ˥奢롥

å¸ϡʬɸŪCˤäƵҤƤ뤬
ǽȲξΩ뤿ˡǥ饤ؿѤƤ롥
饤ؿεǽʤȯĶξǤ⡤¤ʤбǽǤϤ
뤬Ψ̵̤ʥɤ뤪줬롥

ͥΤϡΥ饤֥ؿ˰¸ʤ褦˵ҤƤ롥
ѥ餬ɸC饤֥ؿƤӽФɤ礬
ꡤξˤɸC饤֥꤬ɬפǤ롥ޤƥॵӥ
䥵ݡȥ饤֥ꡤץꥱץɸC饤֥꤬ɬ
פˤʤͤ롥ºݡɸۥåȤ˴ޤޤǡƥ
ǽƤӽФΥ饤֥ؿǡѿ뤿
ǽstdarg.h, va_list, va_start, va_argˤѤƤʼºݤˤϡGNU
ȯĶǤϡѿ뤿εǽGCCΤǥݡȤƤ
뤿ᡤɸC饤֥ɬפʤˡͳˤꡤɸC饤֥
Ѥ빽Ȥ褦ˤƤ롥

1.3 ưƥ㡼

FDMPͥư뤿ˤϡʲ˼ƥ㡼ɬ
פ롥

 ƥץåΥǡ(rodataޤ)֤꤬ߤ˥
   ǽǤ뤳ȡƤΥץå鸫Ʊ
   ɥ쥹ǥǤɬפ롥

 ǤդΥץå˳(ץåֳ)ȯǽǤ뤳ȡ

 ץå֤Ǥ¾ΤεڤӤεѤƥå    
   ץåx2ĺǽǤ뤳ȡ2ĤǤưϲǽ
      -  : test & set ̿, Mutex ϩ

1.4 TOPPERS/JSPͥ뤫ΰܿ

FDMPͥϡTOPPERS/JSPͥʰʲñJSPͥˤ١
Ƥ롥ǽʬޥץåγĥϡCǵҤƤ
å¸ФƱƶ뤿ᡤåȰ¸¿JSP
ͥȶ̤Ǥ롥ǤϡJSPͥΥåȰ¸FDMP
ͥήѤ뤿ξȤơNios2¸ˤˤ롤JSPͥ
FDMPͥΥåȰ¸ĤƤޤȤ롥

 cpu_config.h : ѹ
    - init_tsk_lock() :  ɲ
       ͤEXCCB tsk_lock_ptr Ͽ 
    - init_obj_lock() :  ɲ
       ͤEXCCB obj_lock_ptr Ͽ

 cpu_context.h : ѹ
    - activate_context(CCB *ccb, TCB *tcb)
      CCBϿƤץåactivate_rͤѤ褦ѹ

 cpu_support.S : ѹ
    ret_int
    ret_exc
     TCBterflgåơtrueʤХǥѥå㡼
    activate_r
     åǤϤʤtinibtaskexinf褦ѹ
    㳰Υå
     call_texrtn  dispatch_call_texrtn ѹ

 makeoffset.c : ѹ
     terflg, tinib, task, exinf ΥեåȤ褦ѹ

 nios2.h
     Mutexȥɥ饤Фɲ

 mp_config.c  : ɲ
   - ưƱѴؿ
      - mp_initialize(void) : ƱѤΥǡ(ޥץåΤ߼¹)
      - mp_init_sync(void)  : ޥץåˤ
      - mp_start(void)      : ץåEXCCBνԤ
   - åѴؿ
      - local_acquire_lock(LOCKOBJ *lockobj)
      - local_release_lock(LOCKOBJ *lockobj)

 mp_config.h  : ɲ
   - ץåߴؿ
      - raise_ipi(INT procid)   : ץåֳߤȯ
      - clear_ipi(void)         : ץåֳߤΥꥢ
      - hw_ipi_initialize(void) : ץåֳߤ˴ؤ

1.5 ͥ뤬ݡȤ뵡ǽ

FDMPͥϡ̤̾ꡤITRON4.0ͤΥɥץե
˴ޤޤ뵡ǽ򤹤٤ƥݡȤƤ롥ɥץեǤϡ
ߥϥɥȳߥӥ롼Τ줫򥵥ݡȤФ褤
FDMPͥϡǤϳߥϥɥΤߤ򥵥ݡȤƤ롥

ɥץե˴ޤޤʤǽȤơåȰ¸˰ʲ
ߴǽӥӥ򥵥ݡȤ礬롥ε
ǽζŪƤˤĤƤϡå˰ۤʤ롥ܤϡå
Υޥ˥奢򻲾Ȥ뤳ȡ

    dis_int     ߤζػ
    ena_int     ߤε
    chg_ixx     ߥޥѹ
    get_ixx     ߥޥλ
     xx ϥå롥

ޤITRON4.0ͤƤʳˡʲȼγĥǽ
ӥ򥵥ݡȤƤ롥

(1) CPU㳰ȯΥƥ֤λ

ɥץեǤϡCPU㳰ϥɥǡCPU㳰ȯ
ƥȤ֤򻲾ȤǤ뤳ȤɬפǤ뤬ΤAPI
ʤFDMPͥǤϡCPU㳰ȯsns_yyyƤӽФ
η̤CPU㳰ϥɥǼФ褦ˤ뤿ˡʲθޤ
Υӥȼ˥ݡȤƤ롥

    vxsns_ctx   CPU㳰ȯΥƥȤλ
    vxsns_loc   CPU㳰ȯCPUå֤λ
    vxsns_dsp   CPU㳰ȯΥǥѥåػ߾֤λ
    vxsns_dpn   CPU㳰ȯΥǥѥåα֤λ
    vxsns_tex   CPU㳰ȯΥ㳰ػ߾֤λ

(2) ǽɾѥƥﻲȵǽ

ǽɾѥƥﻲȵǽȤϡFDMPͥư륿
FDMPͥ뼫Ȥǽ¬뤿Ρƥñ̤ɤ߽
ǽǤ롥εǽΤɲäӥϼ̤Ǥ롥

    vxget_tim   ǽɾѥƥλ

ǽɾѥƥﻲȵǽ򥵥ݡȤ뤫ɤϡåȰ¸
եǻꤹ뤳ȤǤ롥ޤåȥƥ
ˤꡤεǽ򥵥ݡȤǤʤ⤢롥

(3) λ롼ǽ

FDMPͥǤϡƥνλ˸ƤӽФ뽪λ롼Ͽ
뤿εǽ򥵥ݡȤƤ롥εǽΤɲäŪAPIϼ
̤Ǥ롥

    VATT_TER    λ롼ɲáŪAPI

λ롼ˤĤƤϡ2.12 ƥཪλȽλ롼
򻲾ȤΤȡ

(4) ͥư֤λ

ͥư륿ƤӽФؿͥνλ
佪λϸˤƤӽФǽˤϡǥ
ΥӥƤӽФ뤫Ƚ̤뤳ȤɬפȤʤ롥FDMP
ǤϡȽ̤ǽˤ뤿ˡΥӥɲäƤ롥

    vsns_ini    ͥư֤λ

1.6 Τ

СǤϡŪAPIνΥ顼θеǽǡå
¸Υ顼θФԽʬǤ롥㤨Сߥϥɥֹ椬
Ǥ硤ͥȥե졼Τ⥨顼򸡽Ф
ͥ뤬ưʤ̤Ȥʤ롥

kernel_cfg.cϡͥ롤ƥॵӥץꥱΤ
󥯥롼ɥե⥤󥯥롼ɤΥܥ⻲Ȥǽ
롥Τᡤͥ롤ƥॵӥץꥱǥ
ͤƤ䡤ѥ륪ץ󤬿äƤˡ
kernel_cfg.cѥǤʤʤ礬ͤ롥ͥ
ܥ͡हʤɤˡǤʤڸƤϤ뤬꤬ʤ
ʤäƤ櫓ǤϤʤ

ꥢ륤󥿥եɥ饤ФǡꥢݡȤ򥯥˥
ץ󤷤ʤˡưʤϡꥢ륤󥿥ե
ɥ饤ФѤƤ륻ޥեʤǤ롥


1.7 ջ

CRE_DTQΥѥ᡼dtqcntϡITRON4.0ͤVer. 4.01.00Ǥϰ
ѥ᡼ȵꤵƤ뤬FDMPͥǤVer. 4.02.00˽򤷤ơ
ץץåѥ᡼ȰäƤ롥


FDMPͥεǽ

ǤϡITRON4.0ͤǼȤʤäƤ濴ˡFDMP
ͥεǽˤĤƲ⤹롥

2.1 ˤȥǥ

ITRON4.0ͤΥɥץեϡƥΤĤΥ⥸
˥󥯤뤳ȤꤷƵꤵƤ롥ޤӥθ
Фϡñʤ륵֥롼󥳡ˤäƹԤȤꤵƤ롥FDMP
ͥϡ˽ץꥱȥͥĤΥ⥸塼
˥󥯤֥롼󥳡ˤäƥӥƤӽФˡ
ߤ򥵥ݡȤƤ롥

FDMPͥǤϡץå˥ץꥱȥͥ碌ư
ĤΥ⥸塼Ȥ롥

FDMPͥư륢ץꥱϡ٤CǵҤ뤳
§ȤƤ롥Τᡤߥϥɥʤɤνñ̤򥢥
֥ǵҤˡϡ̤ˤѰդƤʤʤ󡤥󥿥
Cδؿˤ碌СҤ˥֥ȤȤ
ʤˡ

ץꥱ¹Ԥץåѹ(ΰư)ϡ
ưΥץåΥ⥸塼˥ץꥱΥɤޤ褦ˤ
ʤФʤ餤

FDMPͥǤϡӥʬĤγ߶ػ߶֤ȤƼ
Ƥ뤿ᡤӥԲʬϸ̩ݾڤ롥դ˷
Ƥϡ߶ػ߻֡ʺ֤߱Ʊ͡ˤԤ塼
Ĥʤ륿κ䥿।٥Ȥκ˰¸뤳Ȥˤʤ뤬
ɥץեεǽåȤϰǤϡˡǤ⤽ۤ
ˤʤʤȻפ롥

2.2 ǡ

FDMPͥǤϡʲ˥ꥹȥåפǡsigned int
unsigned intޤsize_tƤ롥ηΥϡ
FDMPͥ뤬ݡƥ󥰤Ƥ륿åȥץåѥ
¿ˤ 32ӥåȤǤ뤿ᡤǤʤˤΤߥåΥ
˥奢롥ʤåΥޥ˥奢Ƥ
¤ꡤʲ˥ꥹȥåפǡΥ 32ӥåȤǤ롥

    signed intƤǡ

        INT             դ
        BOOL            
        FN              ǽ
        ER              顼
        ID              IDֹ
        PRI             ͥ
        TMO             ॢ
        ER_BOOL         ER ޤ BOOL
        ER_ID           ER ޤ ID
        ER_UINT         ER ޤ UINT

    unsigned intƤǡ

        UINT            ̵
        ATR             °
        STAT            
        MODE            ư⡼
        RELTIM          л
        TEXPTN          㳰װΥӥåȥѥ
        FLGPTN          ٥ȥե饰Υӥåȥѥ

    size_tƤǡ
        SIZE            

RELTIMͭӥåȿ31ӥåȤۤ뤳ȤϤʤʤ
unsigned intΥ32ӥåȤξˤϡRELTIMͭӥåȿ 
31ӥåȤǤꡤ(2^31 - 1)ۤͤ RELTIMΥѥ᡼Ϥ
硤E_PAR顼Ȥʤ롥unsigned intΥ16ӥåȤξˤϡ
RELTIMͭӥåȿ16ӥåȤǤ롥ɥץեǤϡ
RELTIM16ӥåȰʾȵꤷƤꡤλͤǥɥץե
뵬˽򤷤Ƥ롥

SYSTIMϡ32ӥåȤ̵Ƥꡤ¤ΤȤ
ˡѤƤʤ

֤򤢤魯ǡTMORELTIMSYSTIMˤλñ̤ϡ
ɥץեε˽٤1ߥäȤƤ롥

2.3 ֥ȤIDֹͥ

֥ȤIDֹϡ̥ӥåȤǥ֥Ȥ°Ƥ륯饹
ID򲼰̥ӥåȤǥ֥ȤID򼨤IDֹˤϡ1Ϣ³
ͤѤ롥֥ȤIDֹȴ㤨СID=1ID=3
֥ȤϿ졤ID=2Υ֥ȤϿʤˤˤϡ
ե졼顼𤹤롥IDֹѤƥ४֥
Ȥȥ桼֥Ȥζ̤ϥݡȤƤʤ饹IDϥե
졼ե1Ϣ³ͤդ롥

Ǥ륪֥ȤκϡͥΥɾϡIDֹ椬ID
signed intƤˤɽǤϰǤ뤬ºݤˤϥ
̤ˤä¤롥ʤFDMPͥǤϡ֥Ȥ
뤿ΥӥϥݡȤƤʤ

ȥåͥ٤ˤϡ116ͤѤ롥

2.4 顼åȥ顼

FDMPͥǤϡʲ˼ᥤ󥨥顼ɤ֤顼θФά
Ƥ롥

    E_SYS       ƥ२顼
    E_MACV      ꥢȿ

ޤݥ󥿤ͤʾΥѥ᡼顼E_PARˤθФά
Ƥ롥ꥢȿE_MACVˤθФάƤ뤿ᡤ
ݥ󥿤ϤӥФơ¸ߤʤϤ򺹤ݥ
ʤɡʥݥ󥿤Ϥ硤ץå
顼ʤɤCPU㳰򵯤礬ʶŪưϥåȥץ
å˰¸ˡ

ITRON4.0ͽƤᥤ󥨥顼ɤǡ
ץեεǽǤȯʤΤ䡤FDMPͥμȯʤ
Τ롥FDMPͥǥӥ뤬֤ᥤ󥨥顼ɤˤĤ
Ƥϡ9.3 ᥤ󥨥顼ɰפ򻲾ȤΤȡ

FDMPͥǤϡ֥顼ɤѤƤʤ֥顼ɤˤ
-1֤롥

2.5 ߥϥɥ

FDMPͥǤϡߥϥɥεǽȤŪAPIDEF_INH
򥵥ݡȤƤꡤߥӥ롼εǽȤɲäŪ
APIATT_ISRˤϥݡȤƤʤ

ߥϥɥCˤ뵭ҷϼ̤Ȥ롥

        void interrupt_handler(void)
        {
                ߥϥɥ
        }

FDMPͥǤϡCǵҤ줿ߥϥɥ餬ƤФǡCPU
å֤ˤʤäƤ롥ޤߥϥɥ餫꥿󤹤ˤϡ
Cδؿñ˥꥿󤹤Ф褤

ߥϥɥ򥢥֥ǵҤˡϡݡȤƤʤ

NMIʥޥǤʤߡ˰ʳ˥ͥδγߤ뤫ɤ
ϡåȰ¸Ǥ롥ŪʻͤˤĤƤϡåΥޥ˥
򻲾Ȥ뤳ȡ

2.6 ।٥ȥϥɥ

FDMPͥǤϡ।٥ȥϥɥȤơϥɥΤߤ򥵥
ȤƤ롥ϥɥϡisig_timӥ椫顤֥롼
󥳡ǸƤӽФ롥Τᡤϥɥ̤ͥϡisig_tim
ƤӽФߥϥɥĤ⤤ʸ̩˸ȡisig_tim
ƤӽФߥϥɥ⤯γߥϥɥ⤤ͥ
̤¾Τν㤤ˡ

2.7 CPU㳰ϥɥ

FDMPͥǤϡɥץե뵬˽äơCPU㳰ϥ
εǽȤŪAPIDEF_EXCˤ򥵥ݡȤƤ롥

FDMPͥǤϡCPU㳰ϥɥ󥿥ƥȤǼ¹Ԥ롥
󥿥ƥȤƤӽФ륵ӥϡCPU㳰ϥɥ
ƤӽФȤǤ롥CPU㳰CPUå֤ȯ
ˤϡCPU㳰ϥɥCPUå뤳ȤϤǤ󥿥
ƥȤƤӽФ륵ӥƤӽФȤǤʤ

ITRON4.0ͤˤơCPU㳰ϥɥǹԤ٤ΤȤƵꤵ
ƤϡΤ褦ˡǹԤȤǤ롥

 (a) CPU㳰ȯƥȤ֤λȤϡΤѰդ줿
     FDMPͥȼΥӥvxsns_ctxvxsns_locvxsns_dsp
     vxsns_dpnvxsns_texˤѤƹԤȤǤ롥ܤϡ3.10 
     CPU㳰ȯΥƥֻȡפ򻲾Ȥ뤳ȡ

 (b) CPU㳰ȯIDֹλȤϡiget_tidӥ
     ƤӽФȤˤäƹԤȤǤ롥

 (c) 㳰׵ϡiras_texӥƤӽФȤˤ
     ƹԤȤǤ롥

CPU㳰ϥɥ̤ͥϡƥȤ¹CPU㳰ȯ
ˤϡǥѥå⤯٤Ƥγߥϥɥ餪ӥ
ޥϥɥ㤤󥿥ƥȤ¹CPU㳰ȯ
ˤϡCPU㳰ȯ̤ͥĤ⤤ʸ̩
ȡCPU㳰ȯ⤯CPU㳰ȯ
̤ͥ¾Τν㤤ˡ

CPU㳰ϥɥCˤ뵭ҷϼ̤Ȥ롥

        void cpu_exception_handler(VP p_excinf)
        {
                CPU㳰ϥɥ
        }

p_excinf ˤϡCPU㳰˴ؤ򵭲ƤΰƬϤϤ
롥ϡCPU㳰ϥɥǡCPU㳰ȯƥȤ֤
ȤݤɬפȤʤ롥ܤϡ3.10 CPU㳰ȯΥƥֻ
ȡ׻Ȥ뤳ȡCPU㳰ϥɥ餫꥿󤹤ˤϡCδؿ
ñ˥꥿󤹤Ф褤

CPU㳰ϥɥ򥢥֥ǵҤˡϡݡȤƤʤ

2.8 󥿥ƥȤΥӥƽФȳ߶ػ߶

FDMPͥǤϡƥѤΥӥȡ󥿥
ƥѤΥӥ̩˶̤Ƥ롥ƥ
ѤΥӥ󥿥ƥȤƤӽФ䡤󥿥
ƥѤΥӥ򥿥ƥȤƤӽФ
ˤϡE_CTX顼֤

ޤ󥿥ƥȤƤӽФ줿ӥٱ¹ԤϹԤ
ƤʤΤᡤ󥿥ƥȤƤӽФӥ⡤
оݤΥ֥Ȥξ֤˰¸ȯ륨顼򸡽Ф뤳Ȥ
롥

2.9 ƥȽ롼

ͥưˤϡåȤ˰¸ƹԤʤФʤʤ
νԤä塤CPUå֤Ʊξ֤ǡkernel_startؿ
ӽФFDMPͥǤϡå˥ȥåץ⥸塼Ѱ
ơνԤäƤ롥ܤϡåΥޥ˥奢򻲾Ȥ
뤳ȡ

kernel_startؿǤϡåȰ¸ν򤷤塤ץå֤ǥ
ͥ륪֥Ȥδ֥å뤿ɬפʾʥͥ륪
֥Ȥδ֥åؤΥݥ󥿡ˤǤCCB򴹤뤿ᡤƤ
ץåƱ롥

ATT_INIˤäɲä줿롼ϡͥΥǡ¤
¾ŪAPIν򽪤ˡƥॳե졼
եǤATT_INIεҽƱǸƤӽФ롥롼
ǤϡӥƤӽФƤϤʤʤ롼ǥ
ƤӽФ硤ƥưݾڤʤʼºݤˤϡ
åȤˤäơƤӽФƤ⺹٤ʤӥ뤬ˡޤ
롼¹˥ͥδγߤػߤƤ뤫ɤ
ϡåȤkernel_startؿƤӽФ줿ξ֤˰¸롥
ŪˤϡåΥޥ˥奢򻲾Ȥ뤳ȡ

롼¹ԸˡƤΥץåǽλޤԤ
ƤΥץåǤνλ饷ƥμ¹Ԥ򳫻Ϥ롥


2.10 ŪAPIȥե졼

FDMPͥϡǽʬޥץåꥢ륿५ͥͤ
ꤵ줿ƥॳե졼˽򤷤ǡե
졼ԤĥͤǤŪAPIĥƤ롥Ūˤϡ
֥ȤϿ򥯥饹ΰϤߤ˵Ҥ롥FDMPͥ°Υ
ե졼ϡŪAPIεˡ򥵥ݡȤƤTOPPERSͥ
˥С륳ե졼(ʲCFG) Ǥ롥ۥѥåˤϡ
CFGWindowsѤΥХʥ꤬(./cfg/cfg.exe)ˤ롥

ƥι򵭽Ҥƥॳե졼եϡޤ
CΥץץåǽ졤η̤򥫡ͥΥե졼
cfgץˤϤ롥ͥΥե졼ϥե
졼줿饹˥ǥ쥯ȥƤˤ
쥫ͥ빽եkernel_cfg.cˡIDưդ̥إ
եkernel_id.h/class_id.h롥kernel_id.hˤϥ饹ID
ղäƤʤ֥IDղäޥ롥
class_id.hˤϡץåIDղäID饹ʬ롥
class_id.h ޥˤϡ֥̾˥饹̾ղ
Τˤʤ롥㤨Х饹PE1˽°륿TASK1IDΥޥϰʲ
Τ褦ˤʤ롥

      PE1_TASK1

ޤŪAPIΥѥ᡼åѤեkernel_chk.cˡ
ŪAPIβƤޤ४֥եkernel_obj.dat
롥ŪAPIʸˡ顼ʤӽΥ顼ΰˤФС
ͥΥե졼顼𤹤롥

kernel_cfg.cϡѥ뤵ơץꥱץपӥ
ͥȶ˥󥯤롥󥯤ˤ줿ɥ⥸塼ϡ
ͥΥѥ᡼åץchkץˤˤäơŪAPI
ѥ᡼åԤ롥ѥ᡼ͤΥ顼Фȡ
᡼åץब顼𤹤뤬1.6 Τפ
Ҥ٤̤ꡤСǤϥѥ᡼顼ΥåԴǤ롥

ʾμϡMakefile˵ҤƤ롥եȥʤΥե
졼Ȥ߹ߤˤϡMakefileɬפ롥

2.11 󥯥롼ɥե

ץꥱѤ뤳ȤǤ륤󥯥롼ɥեϡincludeǥ
쥯ȥβ֤Ƥ롥

t_services.hϡͥưץΥեǥ
롼ɤ٤ɸ।󥯥롼ɥեǤ롥ǡkernel.hʤ
ˤ顤t_stddef.hitron.htool_defs.hsys_defs.hcpu_defs.h
t_syslog.hˤserial.h򥤥󥯥롼ɤƤ롥ޤץꥱ
ͭפȻפ򤤤ĤޤǤ롥

s_services.hϡľܥϡɥ˥ǥХɥ饤ФΥ
եǥ󥯥롼ɤ٤ɸ।󥯥롼ɥեǤ롥ǡ
sil.hʤˤ顤t_stddef.hitron.htool_defs.hsys_defs.h
cpu_defs.ht_syslog.hˤt_config.hʤˤ顤sys_config.h
cpu_config.htool_config.hˤ򥤥󥯥롼ɤƤ롥ޤץꥱ
󤫤ƤФǥХɥ饤ФΥ󥯥롼ɥեǡ饤
ؿʤɤǥƥ।󥿥ե쥤ѤƤˤ⡤Υե
򥤥󥯥롼ɤ롥

2ĤΥե뤫饤󥯥롼ɤեʾ󤷤Ρˤϡ
ľܥ󥯥롼ɤʤΤ§Ǥ뤬3ĤΥ㳰Ǥ롥

(1) ͥ뤫ƤФǥХɥ饤ФΥ󥯥롼ɥեǡ
    饤ؿʤɤǥƥ।󥿥ե쥤ѤƤˤϡ
    sil.h򥤥󥯥롼ɤ롥

(2) ͥưץǡåȰ¸򻲾Ȥ
    ˤϡt_config.h򥤥󥯥롼ɤ롥

(3) ¾ITRONOS饽եȥݡƥ󥰤ʤɤˤϡ
    kernel.hľܥ󥯥롼ɤƤ褤

(4) ITRONͶ̵˽򤹤륽եȥʤΥ󥯥롼ɥե
    ϡitron.hľܥ󥯥롼ɤƤ褤

ʤfdmp_kernel.hϡͥץΥեǥ
󥯥롼ɤ٤ɸ।󥯥롼ɥեǤꡤͥư
ץΥե뤫̾ϥ󥯥롼ɤʤ

2.12 ƥཪλȽλ롼

ץꥱ󤫤 kernel_exitؿƤӽФȤǡͥλ
뤳ȤǤ롥kernel_exitؿƤӽФȡͥϡλ
롼μ¹ԡȯĶ¸νλatexit ˤäϿ줿ؿ
 C++ ˤǥȥ饯μ¹ԡˤԤä塤ͥνλ


λ롼ϡץꥱѰդVATT_TER Ȥäƥ
Ͽ롥VATT_TER ˤäɲä줿λ롼ϡͥ
δγߤ٤Ƥγߤػߤ֤ǡƥॳե
졼եǤ VATT_TER εҽȵդνǸƤӽФ롥
λ롼ǤϡӥƤӽФƤϤʤʤλ
롼ǥӥƤӽФ硤ƥưݾڤ
ʼºݤˤϡåȤˤäơƤӽФƤ⺹٤ʤӥ
뤬ˡ

2.13 ¾

FDMPͥǤϡt_stddef.h ǡΥޥƤ롥

(1) assert(exp)

FDMPͥǤϡassertޥȼƤ롥ȯĶɸ
assertޥϻȤʤ

(2) throw()

CEC++Ǥϡthrow() ˤʤ褦Ƥ롥C++줫
ƤӽФǽΤCǵҤ줿ؿΥץȥˡthrow() 
Ĥ뤳ȤꤷƤ롥

ޤt_services.h ǡΥޥƤ롥

(3) syscall(s)

ӥ s ƤӽФͤ顼ǤС顼å
Ϥ롥

(4) _syscall(s)

ӥ s ƤӽФͤ顼ǤС顼å
Ϥͥ۾ｪλ롥


FDMPͥΥӥŪAPI

ǤϡFDMPͥΥӥŪAPIˤĤơITRON4.0
ͤǼȤʤäƤFDMPͥȼΥӥ濴
˲⤹롥

3.1 ǽ

εư׵ᥭ塼󥰿κ͡TMAX_ACTCNTˤ1˸ꤷƤ롥

(1) CRE_TSK                     ŪAPI

tskatr  TA_ASM ꤵ줿εǽʥ򥢥֥ǵ
ˤϥݡȤƤʤޤstk  NULL ʳꤵ줿ε
ǽʥåΰƬϤꤹˤ⥵ݡȤƤʤ

(2) act_tsk, iact_tsk           εư

(3) can_act                     ư׵Υ󥻥

(4) ext_tsk                     νλ

ext_tsk 󥿥ƥȤƤФ줿硤ƥǽѤ
ƥ顼ϤLOG_ALERT٥ˡŪ˥ƥȤ
ڤ괹ơ¹Ծ֤Υλ롥ͥϤΤޤ޼¹Ԥ³
뤬åȤˤäƤϡ󥿥ƥѤΥå˥ߤ
ĤäꡤߥϥɥΥͥȿδ̷⤬ꤹ뤿ᡤʸ
ưݾڤʤ

ext_tsk CPUå֡ʤޤϥǥѥåػ߾֡ˤǸƤФ줿硤
ƥ˥顼ϿLOG_WARNING٥ˡCPUå
ʤޤϥǥѥåľ֡ˤˤƤ饿λ롥

(5) ter_tsk                     ζλ

(6) chg_pri                     ͥ٤ѹ

(7) get_pri                     ͥ٤λ

3.2 °Ʊǽ

ε׵ᥭ塼󥰿κ͡TMAX_WUPCNTˤ 1 ˸ꤷƤ
롥ޤζԤ׵ͥȿκ͡TMAX_SUSCNTˤ 1 ˸
ꤷƤ롥

(1) slp_tsk                     Ԥ
(2) tslp_tsk                    ԤʥॢȤ

(3) wup_tsk, iwup_tsk           ε

(4) can_wup                     ׵Υ󥻥

(5) rel_wai, irel_wai           Ԥ֤ζ

(6) sus_tsk                     Ԥ֤ؤΰܹ

(7) rsm_tsk                     Ԥ֤κƳ
(8) frsm_tsk                    Ԥ֤ζƳ

ζԤ׵ͥȿκ͡TMAX_SUSCNTˤ 1 Ǥ뤿ᡤ
rsm_tsk  frsm_tsk νƤƱǤ롥

(9) dly_tsk                     ٱ

3.3 㳰ǽ

TEXPTNϡunsigned intƤ롥ä TBIT_TEXPTN ϡ
unsigned int 32ӥåȤξ 3216ӥåȤξ 16 ˤʤ롥

(1) DEF_TEX                     㳰롼ŪAPI

texatr  TA_ASM ꤵ줿εǽʥ㳰롼򥢥
֥ǵҤˤϥݡȤƤʤ

(2) ras_tex, iras_tex           㳰׵

(3) dis_tex                     㳰ζػ

(4) ena_tex                     㳰ε

(5) sns_tex                     㳰ػ߾֤λ

3.4 Ʊ̿ǽ

3.4.1 ޥե

ޥեκ񸻿ϡUINTunsigned intƤˤɽ
ͤϰǤ롥ʤunsigned int 32ӥåȤξ 
(2^32 - 1)16ӥåȤξ (2^16 - 1) = 65535 Ǥ롥TMAX_MAXSEM 
Ƥʤ

(1) CRE_SEM                     ޥեŪAPI

(2) sig_sem, isig_sem           ޥե񸻤ֵ

(3) wai_sem                     ޥե񸻤γ
(4) pol_sem                     ޥե񸻤γʥݡ󥰡
(5) twai_sem                    ޥե񸻤γʥॢȤ

3.4.2 ٥ȥե饰

ĤΥ٥ȥե饰ʣΥԤ֤ˤʤ뵡ǽϥݡȤ
ʤ

FLGPTNϡunsigned intƤ롥ä TBIT_FLGPTN ϡ
unsigned int 32ӥåȤξ 3216ӥåȤξ 16 ˤʤ롥

(1) CRE_FLG                     ٥ȥե饰ŪAPI

flgatr  TA_WMUL ꤵ줿εǽʥ٥ȥե饰ʣΥ
Ԥ֤ˤʤˤϥݡȤƤʤ

(2) set_flg, iset_flg           ٥ȥե饰Υå

(3) clr_flg                     ٥ȥե饰Υꥢ

(4) wai_flg                     ٥ȥե饰Ԥ
(5) pol_flg                     ٥ȥե饰Ԥʥݡ󥰡
(6) twai_flg                    ٥ȥե饰ԤʥॢȤ

3.4.3 ǡ塼

dtqcntĤΥǡǼΤɬפʥǡ塼ΰΥϡ
sizeof(VP_INT) * dtqcnt ХȤǤ롥TSZ_DTQ Ƥʤ

(1) CRE_DTQ                     ǡ塼ŪAPI

dtq  NULL ʳꤵ줿εǽʥǡ塼ΰƬϤ
ꤹˤϥݡȤƤʤ

(2) snd_dtq                     ǡ塼ؤ
(3) psnd_dtq, ipsnd_dtq         ǡ塼ؤʥݡ󥰡
(4) tsnd_dtq                    ǡ塼ؤʥॢȤ

(5) fsnd_dtq, ifsnd_dtq         ǡ塼ؤζ

(6) rcv_dtq                     ǡ塼μ
(7) prcv_dtq                    ǡ塼μʥݡ󥰡
(8) trcv_dtq                    ǡ塼μʥॢȤ

3.4.4 ᡼ܥå

T_MSGϲΤ褦Ƥ롥T_MSGΥϡåȥץ
åѥΥݥ󥿤Υ˰פ롥

        typedef struct t_msg {
                struct t_msg    *next;
        } T_MSG;

FDMPͥǤϡ̥ͥå塼إåΰѤƤʤ
TSZ_MPRIHD ƤʤȤ 0 Ȥʤ롥

(1) CRE_MBX                     ᡼ܥåŪAPI

mprihd  NULL ʳꤵ줿εǽ̥ͥå塼إ
ΰƬϤꤹˤϥݡȤƤʤ

(2) snd_mbx                     ᡼ܥåؤ

(3) rcv_mbx                     ᡼ܥåμ
(4) prcv_mbx                    ᡼ܥåμʥݡ󥰡
(5) trcv_mbx                    ᡼ܥåμʥॢȤ

3.5 סǽ

3.5.1 Ĺס

 blkszХȤΥ֥å blkcntĳǤΤɬפʸ
ĹסΰΥϡTROUND_VP(blksz) * blkcnt ХȤǤ롥
ǡTROUND_VP(blksz) ϡblksz 򥿡åȥץåѥ
Υݥ󥿤Υܿˤʤ褦ڤ夲ɽTSZ_MPF 
Ƥʤ

(1) CRE_MPF                     ĹסŪAPI

mpf  NULL ʳꤵ줿εǽʸĹסΰƬ
ϤꤹˤϥݡȤƤʤ

(2) get_mpf                     Ĺ֥åγ
(3) pget_mpf                    Ĺ֥åγʥݡ󥰡
(4) tget_mpf                    Ĺ֥åγʥॢȤ

(5) rel_mpf                     Ĺ֥åֵ

blkѥ᡼ֵѤ֥åƬϡˤֵͤΥ
סΰγ䡤֥åؤˤϡE_PAR顼
֤̤Υ֥åֵѤ䡤ֵѺѤΥ֥å
ֵѤưݾڤʤ

3.6 ִǽ

।٥ȥϥɥ˴ؤƤϡ2.6 ।٥ȥϥɥפ򻲾
뤳ȡ

3.6.1 ƥ

FDMPͥǤϡƥåζisig_tim Ū˸ƤӽФ
ˤϥƥॵӥΥƥ९åɥ饤ФˤäƼ¸Ƥ롥
ƥ९åɥ饤Фμʬϡå˥ϡɥ
ȤäƼ¸Ƥꡤisig_tim ƤӽФϥå롥
Τ TIC_NUME  TIC_DENO ϡåȰ¸Υץꥱ
Υ󥯥롼ɥեcpu_defs.h  sys_defs.hˤƤ
롥åȤˤäƤϡοͤѹ isig_tim ƤӽФ
ѹǤ褦˼Ƥ⤢롥ܤϡå
Υޥ˥奢򻲾Ȥ뤳ȡ

(1) set_tim                     ƥ

(2) get_tim                     ƥλ

(3) isig_tim                    ƥåζ

isig_tim ϡåȰ¸줿 TIC_NUME  TIC_DENO ǻꤵ
֤ƥʤᡤɬפʥ।٥ȡʥॢȡ
ϥɥεưʤɡˤνԤFDMPͥǤϡƥ९å
ɥ饤ФΥӥŪ˸ƤӽФᡤץꥱ
ƤӽФɬפϤʤ

3.6.2 ϥɥ

ϥɥεư¸뵡ǽϥݡȤƤʤ

(1) CRE_CYC                     ϥɥŪAPI

cycatr  TA_PHS ꤵ줿εǽʼϥɥεư¸
ˤϥݡȤƤʤޤTA_ASM ꤵ줿εǽʼ
ϥɥ򥢥֥ǵҤˤ⥵ݡȤƤʤ

cycatr  TA_STA ꤷcycphs  0 ꤷ硤ϥɥ
εưϡƥ൯ưκǽΥƥåǹԤ롥ʤ
cycphs  1 ꤷƱ񤤤Ȥʤ롥θȤʤ뤿ᡤ
cycphs  0 ꤹ뤳ȤϿ侩ʤ

(2) sta_cyc                     ϥɥư

(3) stp_cyc                     ϥɥư

3.7 ƥִǽ

(1) rot_rdq, irot_rdq           ̤ͥβž

(2) rot_rdq, irot_rdq           ꤷ饹IDΥץåΥǥ塼

(3) get_tid, iget_tid           ¹Ծ֤ΥIDλ

(4) mget_tid, imget_tid         ꤷ饹IDΥץåǼ¹ΥID

(5) loc_cpu, iloc_cpu           CPUå֤ؤΰܹ

(6) unl_cpu, iunl_cpu           CPUå֤β

(7) dis_dsp                     ǥѥåζػ

(8) ena_dsp                     ǥѥåε

(9) sns_ctx                     ƥȤλ

(10) sns_loc                    CPUå֤λ

(11) sns_dsp                    ǥѥåػ߾֤λ

(12) sns_dpn                    ǥѥåα֤λ

(13) vsns_ini                   ͥư֤λ

CAPI
        BOOL state = vsns_ini();

ڥѥ᡼
        ʤ

ڥ꥿ѥ᡼
        BOOL    state           ͥư

ڵǽ

ͥνλޤϽλϸ˸ƤӽФ줿 TRUE
ͥư˸ƤӽФ줿 FALSE ֤

Υӥ뤬 TRUE ֤ˤϡ¾ΥӥƤӽФ
ϤʤʤΥӥ뤬 TRUE ֤¾Υӥ
ӽФ硤ƥưݾڤʤ

3.8 ߴǽ

ߥϥɥ˴ؤƤϡ2.5 ߥϥɥפ򻲾Ȥ뤳ȡ

(1) DEF_INH                     ߥϥɥŪAPI

INHNO inhno ΰ̣ϥå롥inhatr ˤϡ
TA_HLNG Τߤꤹ뤳ȤǤ롥

(2) dis_int                     ߤζػ
(3) ena_int                     ߤε
(4) chg_ixx                     ߥޥѹ
(5) get_ixx                     ߥޥλ

Υӥ뤬ݡȤƤ뤫ɤݡȤƤ
λ͡xx ʬ̾Ρȥѥ᡼̾ΤỌ̇̄CPUå
ǥѥå֤ȤδϢˤˤĤƤϡåȰ¸Ǥ롥Ū
ϡåΥޥ˥奢򻲾Ȥ뤳ȡ

3.9 ƥ๽ǽ

CPU㳰ϥɥ˴ؤƤϡ2.7 CPU㳰ϥɥפ򡤽롼˴
Ƥϡ2.9 ƥȽ롼׻Ȥ뤳ȡ

(1) DEF_EXC                     CPU㳰ϥɥŪAPI

EXCNO excno ΰ̣ϥå롥excatr ˤϡ
TA_HLNG Τߤꤹ뤳ȤǤ롥

(2) ATT_INI                     롼ɲáŪAPI

iniatr  TA_ASM ꤵ줿εǽʽ롼򥢥֥
ǵҤˤϥݡȤƤʤ

(3) VATT_TER                    λ롼ɲáŪAPI

ŪAPI
        VATT_TER({ ATR teratr, VP_INT exinf, FP terrtn });

ڥѥ᡼
        ATR     teratr  λ롼°
        VP_INT  exinf   λ롼γĥ
        FP      terrtn  λ롼εư

ڵǽ

λ롼򡤻ꤵƥѥ᡼˴Ťɲä롥teratr 
Ͻλ롼°exinf Ͻλ롼ư˥ѥ
ȤϤĥterrtn Ͻλ롼εưϤǤ롥

VATT_TER ˤƤϡteratr ϥץץåѥ᡼Ǥ롥 
teratr ˤϡTA_HLNG λ꤬Ǥ롥TA_HLNGʡ0x00ˤꤵ줿
ˤϹѤΥ󥿥եǽλ롼ư롥

VATT_ATR ˤäɲä줿λ롼ϡƥཪλ˼
Ԥ롥ܤϡ2.12 ƥཪλȽλ롼פ򻲾
뤳ȡ

3.10 CPU㳰ȯΥƥֻ

CPU㳰ϥɥǡCPU㳰ȯƥȤ֤򻲾Ȥ뤿
ΥӥȤơFDMPͥǤϡޤĤΥӥȼ
ݡȤƤ롥ӥ vxsns_yyy ϡCPU㳰ȯ 
sns_yyy ƤӽФη̤ФΤǡCPU㳰ϥɥϤ
ѥ᡼ p_excinf ѥ᡼Ȥ롥

(1) vxsns_ctx                   CPU㳰ȯΥƥȤλ

CAPI
        BOOL state = vxsns_ctx(VP p_excinf);

ڥѥ᡼
        VP      p_excinf        CPU㳰˴ؤ򵭲Ƥΰ
                                Ƭ

ڥ꥿ѥ᡼
        BOOL    state           ƥ

ڵǽ

CPU㳰ȯƥȤ󥿥ƥȤξ TRUE
ƥȤξ FALSE ֤p_excinf ˤϡCPU㳰ϥɥ
Ϥ p_excinfѥ᡼򤽤ΤޤϤCPU㳰ϥɥʳ
ӽФ䡤p_excinf Ϥʤäο񤤤ݾڤ


(2) vxsns_loc                   CPU㳰ȯCPUå֤λ

CAPI
        BOOL state = vxsns_loc(VP p_excinf);

ڥѥ᡼
        VP      p_excinf        CPU㳰˴ؤ򵭲Ƥΰ
                                Ƭ

ڥ꥿ѥ᡼
        BOOL    state           CPUå

ڵǽ

CPU㳰ȯ֤CPUå֤ξ TRUECPUå
ξ FALSE ֤p_excinf ˤϡCPU㳰ϥɥϤ 
p_excinfѥ᡼򤽤ΤޤϤCPU㳰ϥɥʳƤӽФ
䡤p_excinf Ϥʤäο񤤤ݾڤʤ

(3) vxsns_dsp                   CPU㳰ȯΥǥѥåػ߾֤λ

CAPI
        BOOL state = vxsns_dsp(VP p_excinf);

ڥѥ᡼
        VP      p_excinf        CPU㳰˴ؤ򵭲Ƥΰ
                                Ƭ

ڥ꥿ѥ᡼
        BOOL    state           ǥѥåػ߾

ڵǽ

CPU㳰ȯ֤ǥѥåػ߾֤ξ TRUEǥѥ
ľ֤ξ FALSE ֤p_excinf ˤϡCPU㳰ϥɥϤ
 p_excinfѥ᡼򤽤ΤޤϤCPU㳰ϥɥʳƤӽФ
䡤p_excinf Ϥʤäο񤤤ݾڤʤ

­

CPU㳰ϥɥεưˤäƥǥѥåػߡľ֤ѲCPU
㳰ϥɥǤϥǥѥåζػߤĤϹԤʤᡤvxsns_dsp 
֤ͤ sns_dsp ֤ͤ˾˰פ롥Τᡤvxsns_dsp  
sns_dsp νƤƱȤʤäƤ롥

(4) vxsns_dpn                   CPU㳰ȯΥǥѥåα֤λ

CAPI
        BOOL state = vxsns_dpn(VP p_excinf);

ڥѥ᡼
        VP      p_excinf        CPU㳰˴ؤ򵭲Ƥΰ
                                Ƭ

ڥ꥿ѥ᡼
        BOOL    state           ǥѥåα

ڵǽ

CPU㳰ȯ֤ǥѥåα֤ξ TRUEǤʤ
 FALSE ֤ʤǥѥå̤ͥ⤤
¹ԤƤCPUå֤Ǥäӥǥѥåػ߾
ǤäϡTRUE ֤p_excinf ˤϡCPU㳰ϥɥϤ 
p_excinfѥ᡼򤽤ΤޤϤCPU㳰ϥɥʳƤӽФ
䡤 p_excinf Ϥʤäο񤤤ݾڤʤ

(5) vxsns_tex                   CPU㳰ȯΥ㳰ػ߾֤λ

CAPI
        BOOL state = vxsns_tex(VP p_excinf);

ڥѥ᡼
        VP      p_excinf        CPU㳰˴ؤ򵭲Ƥΰ
                                Ƭ

ڥ꥿ѥ᡼
        BOOL    state           㳰ػ߾

ڵǽ

CPU㳰ȯ˼¹Ծ֤Ǥä㳰ػ߾
ξ TRUE㳰ľ֤ξ FALSE ֤CPU㳰
󥿥ƥȤȯλ˼¹Ծ֤Υʤä
⡤FALSE ֤p_excinf ˤϡCPU㳰ϥɥϤ p_excinf
᡼򤽤ΤޤϤCPU㳰ϥɥʳƤӽФ䡤
p_excinf Ϥʤäο񤤤ݾڤʤ

­

CPU㳰ϥɥεưˤäƥ㳰ػߡľ֤Ѳ 
CPU㳰ϥɥǤϥ㳰ζػߤĤϹԤʤᡤ 
vxsns_tex ֤ͤ sns_tex ֤ͤ˾˰פ롥Τᡤ
vxsns_tex  sns_tex νƤƱȤʤäƤ롥

3.11 ǽɾѥƥﻲȵǽ

FDMPͥǤϡFDMPͥư륿FDMPͥ뼫Ȥǽ
¬뤿ˡƥ٤ι⤤ǽɾѥƥ
߽Фǽ򡤥åȰ¸˥ݡȤƤ롥ǽɾѥƥ
ϡñ̤ɽ뤬ºݤ٤ϥåȰ¸Ǥ롥Ū
ϡåΥޥ˥奢򻲾Ȥ뤳ȡ

ǽɾѥƥﻲȵǽǤϡΥǡѤ롥

        SYSUTIM         ǽɾѥƥ̵

SYSUTIMΥϥåȰ¸Ǥ롥Ūˤϡå
ޥ˥奢򻲾Ȥ뤳ȡ

(1) vxget_tim                   ǽɾѥƥλ

CAPI
        ER ercd = vxget_tim(SYSUTIM *p_sysutim);

ڥѥ᡼
        ʤ

ڥ꥿ѥ᡼
        ER      ercd            顼
        SYSUTIM sysutim         ߤǽɾѥƥ

ڥ顼ɡ
        E_CTX           ƥȥ顼

ڵǽ

ߤǽɾѥƥɤ߽Фsysutim ֤

ΥӥϡƥȤΤ߸ƤӽФȤǤ롥
ƥȤǤСCPUå֤ǤäƤƤӽФ롥󥿥
ƥȤƤӽФˤϡE_CTX顼Ȥʤ롥


ƥǽ

ƥǽϡͥȯ۾ݡʥμԡ
顼ɤ֤ʤ顼ˤ򡤥ƥγΤ뤿εǽ
롥ͥΥȥ졼ƥॵӥ䥢ץꥱȯ
۾ݤȥ졼ˤ⡤ƱǽѤ뤳ȤǤ롥

4.1 ƥǽΰդ

ͥȯ۾ݤ򥷥ƥγΤ뤿ˡȤơ
ꥢ륤󥿥ե˽Ϥ롤ǥ˽񤭽Фʤɤˡͤ
롥

ƥǽϡͥƤӽФȤϡ
ͥΰȹͤΤǤ롥ꥢ륤󥿥եǥ
˥뤿ΥӥʥǥХɥ饤Фʤɡˤϥͥư
뤿ᡤѤ륷ƥǽϡͥ˼줿
ƥॵӥȹͤǡ֤Ť̯Ǥ롥

FDMPͥǤϡͥγĥǽȤơ۾ݤ˴ؤ
ȥ졼ʤ򡤥Τˤ򡤥ͥΥХåե
ʤХåեȸƤ֡ˤ˵Ͽ뵡ǽȡХåե
ɤ߽ФǽѰդ롥򡤥ƥǽȸƤ֡
Хåեɤ߽ФǥХ˥륵ӥѤƳ˽
Ϥ뵡ǽϡƥȤƥͥ˼¸롥

4.2 ХåեؤεϿ٥

Ҥ褦ˡ򥷥ƥγ˽Ϥ뤿ˡǥХ˥
륵ӥɬפˤʤ뤬Υӥϥͥư
Ƥ뤿ᡤͥư³Ǥʤ褦ʽʰ۾ݤä
ˤϡΥӥȤȤǤʤޤΥӥ
ȤǥХåˤ⡤ǥХ˥륵ӥȤȤ
Ǥʤ

ǡͥư륵ӥȤʤˤǤ
뤿ˡ٥ϵǽѰդ롥٥ϵǽϡå
¸Ѱդ٥ʸϴؿsys_putcˤѤƥ
뵡ǽǤ롥٥ʸϴؿϡåȰ¸Ѱդ뤳
ȤȤƤ뤬ǽʤȤ߹ޤʤɤǤϡʸϤˡ
ʤͤ롥Τ褦ʾ硤٥ʸϴؿ
ʸϡ˻ĤƤΤƤƤޤʤ

򡤥ХåեصϿ뤫٥ϵǽѤƽϤ뤫
ϡͥγĥӥvmsk_logˤˤäƹԤȤ
롥vmsk_log λȤˤĤƤϸҤ롥

٥ϵǽѤȡåκprintf ν
ˤ٥ʸϽ򥫡ͥǹԤˡͥα
ʤ뤳ȤդʤФʤʤäˡ٥ʸϽ
ǥХݡ󥰤ǼΤ̾ǡξˤϡͥ
αϼŪȸʤ˰ʤ롥

ͥư³Ǥ褦ʡʤޤǤʤ˻ݤˤĤ
ϡ򥫡ͥΥХåե˵ϿϿν
ϡǥХ˥륵ӥѤư륷ƥ
Ǥ롥ƥϥͥư륿Ǥꡤͥ
γĥӥvrea_logˤѤơХåե
߽ФFDMPͥɸۥåȤˤϡƥΰȤ
ơꥢ륤󥿥ե˥ʸηǽϤ륷ƥ
ޤƤ롥

4.3 μ

FDMPͥΥƥǽϡ˰ʲμ̤ߤƤ롥

        LOG_TYPE_INH            ߥϥɥ
        LOG_TYPE_ISR            ߥӥ롼
        LOG_TYPE_CYC            ϥɥ
        LOG_TYPE_EXC            CPU㳰ϥɥ
        LOG_TYPE_TEX            㳰롼
        LOG_TYPE_TSKSTAT        Ѳ
        LOG_TYPE_DSP            ǥѥå
        LOG_TYPE_SVC            ӥ
        LOG_TYPE_COMMENT        
        LOG_TYPE_ASSERT         μ

μ̤ϡITRONǥХå󥰥󥿥եͤ򻲹ͤƤ롥
ITRONǥХå󥰥󥿥եͤˤȥ졼ϡ
RIMRTOS Interface ModuleˤǥХåġϤη᤿
ΤǤꡤͥ뤬ϤȰפƤɬפϤʤRIM Ѵ
Ф褤ˡºݡμ̤ǡLOG_TYPE_CYC  LOG_TYPE_ASSERT 
ϡǥХå󥰥󥿥եͤȰפƤʤ

μ̤ǡLOG_TYPE_COMMENT  LOG_TYPE_ASSERT ʳϥ
Υȥ졼ΤΤΤǡɤΤ褦Ѥ뤫ϥåȰ¸
ǤƤ4.5Ỳȡˡ

4.4 ν

FDMPͥΥƥǽϡϤݤ˻ꤹ
˴Ťơºݤ˽ϤưŪꤹ뤳ȤǤ롥ϡ 
UNIX ΥƥǽޤͤΤǡν٤μˡ
UNIX  API 򻲹ͤˤƤ롥ޤ٥ϵǽѤƽϤ
⡤٤˴ŤưŪꤹ뤳ȤǤ롥

Ūˤϡν٤ȤƼ8ʳѰդƤ롥

        LOG_EMERG       ƥ򥷥åȥ󤹤٤顼
        LOG_ALERT
        LOG_CRIT
        LOG_ERROR       㤤ƥ२顼
        LOG_WARNING     ٹåƥϰ˷³ưǤ
        LOG_NOTICE
        LOG_INFO
        LOG_DEBUG       ǥХåΤΥå

ʤμԤϡLOG_EMERG ǽϤ롥ͥΥȥ졼
ϡLOG_DEBUG ǽϤΤɸȤʥåȰ¸ˡ

ɤν٤ΥХåե˵Ͽ뤫ȡɤν٤Υ
٥ϵǽѤƽϤ뤫ϡͥγĥӥ
vmsk_logˤˤäꤹ뤳ȤǤ롥vmsk_log γƥѥ᡼ϡ
ꤹνɽӥåȥޥåפǤ롥ޤӥåȥޥåפ
뤿ΥޥȤơLOG_MASK  LOG_UPTO ѰդƤ롥

4.5 ȥ졼ǽ

FDMPͥϡͥΥȥ졼뤿δŪʻȤߤ
äƤ뤬ȥ졼μºݤμˡϥåȰ¸Ȥʤ롥
ͥΥȥ졼μˡƥǽȤΤ1ĤǤ
롥ͥΥȥ졼򥷥ƥѤƼФ
ˡϹͤƤʤʥƥư뤳Ȥˤȥ졼
졤Ф¿Υǽ뤿ˡ

4.6 ƥǽγĥӥ

ƥǽ󶡤ĥӥϼ̤Ǥ롥

(1) ER vwri_log(UINT prio, SYSLOG *p_log)

ƥǽˡ prio ǥϤʥХåեص
Ͽ뤫٥ϵǽѤƽϤˡSYSLOG ϡǼ
뤿Υǡʹ¤ΡˤǡγĥӥˤϡؤΥ
󥿤Ϥ

(2) ER_UINT vrea_log(SYSLOG *p_log)

Хåե1ļФХåեλ E_OBJ
Ǥʤϡ줿οʥ󤬼Ƥʤ 
0ˤ֤ƥѤ뤳ȤꤷƤ롥

(3) ER vmsk_log(UINT logmask, UINT lowmask)

Хåե˵Ͽ٤ν٤Υӥåȥޥlogmaskˤȡ
٥ϵǽѤƽϤ٤ν٤Υӥåȥޥ
lowmaskˤꤹ롥

4.7 ƥǽΤΥ饤֥ؿȥޥ

ƥǽϡ嵭Υӥ˲äơΥ饤֥ؿ
ޥ󶡤롥

(1) void _syslog_n(UINT prio, UINT type, VP_INT arg1, ..., VP_INT argn)
     n  06 Τ줫

̤ typeѥ᡼ arg1argn Υ򡤽 prio 
Ϥ뤿Υ饤֥ؿ

(2) void syslog_n(UINT prio, const char *format, arg1, ..., argn)
     n  05 Τ줫

format ʸ󤪤Ӥ³륳ȡʥ̤ 
LOG_TYPE_COMMENT Υˤ򡤽 prio ǽϤ뤿Υޥ

format ϥåΥեޥåȵҡarg1argn ϥեޥåȵ
ǻȤͤǡprintf ΥեޥåȵҤΥ֥åȤȤʤäƤ롥
arg1argn  VP_INT˥㥹Ȥ뤿ᡤVP_INT˷ѴǤǤ
ηϤȤǤåϤʤformat  arg1argn 
ˤϡ¤롥

format ΥեޥåȵҤϡΥޥäѲƤϤʤ
ʤʸϤȤꤷƤ롥

format ˻ȤեޥåȻϼ̤ꡥ

    %d    signed intȤߤʤ10ʿɽ
    %u    unsigned intȤߤʤ10ʿɽ
    %x    unsigned intȤߤʤ16ʿʱʸϾʸˤɽ
    %X    unsigned intȤߤʤ16ʿʱʸʸˤɽ
    %p    ݥ󥿤Ȥߤʤ16ʿʱʸϾʸˤɽ
    %c    ʸɤȤߤʤʸɽ
    %s    ʸ򼨤ݥ󥿤Ȥߤʤʸɽ
    %%    '%' ɽʰϼʤ

%d, %u, %x, %X ˤƤϡ'%' ľɽꤹ10ʿͤ򵭽
뤳ȤǤ롥ξ硤ɽ٤ʸ󤬻ꤷʤ
ˤϡꤷ˱ͤɽ롥10ʿͤ '0' ǻϤޤ
ˤϡδ֤ '0' 롥

ޤVP_INTΥ longΥʾǤĶˤƤϡ
եޥåȻѤ뤳ȤǤ롥¾ΥեޥåȻ 'l' 
ղäˤ̵뤹%lc%lsˤбƤʤˡ

    %ld   signed longȤߤʤ10ʿɽ
    %lu   unsigned longȤߤʤ10ʿɽ
    %lx   unsigned longȤߤʤ16ʿʱʸϾʸˤɽ
    %lX   unsigned longȤߤʤ16ʿʱʸʸˤɽ

arg1argn ˥ݥ󥿤Ϥ%s бξˤˡݥ
λؤǡϡΥޥäѲƤϤʤʤʸ
ϤȤꤷƤ롥

(3) void syslog(UINT prio, const char *format, ...)

format ʸ󤪤Ӥ³å򡤽 
prio ǥȤƽϤ뤿Υ饤֥ؿǡοѤ
Ρformat ³Ϻ5Ĥޤǡformat Ӥ³
ˤϡsyslog_n Ʊͤ¤롥

Υ饤֥ؿϡѿ뤿ʸ򥹥
롥Τᡤ¹Ի֤Ĺʤǽꡤ߶ػ߾֤ǸƤӽ
٤ǤϤʤ˥ץꥱץबѤ뤳ȤꤷƤ
롥ΤᡤΥ饤֥ؿΥեϡݡȥ饤֥
Υǥ쥯ȥ֤Ƥ롥

(4) UINT LOG_MASK(UINT prio)

 prio ΤߥåȤ줿ӥåȥޥåפޥvmsk_log Ϥ
뤿Ѥ롥

(5) UINT LOG_UPTO(UINT prio)

 prio ʾν٤٤ƥåȤ줿ӥåȥޥåפޥ 
vmsk_log Ϥ뤿Ѥ롥

(6) void syslog_printf(const char *format, VP_INT *args, void (*putc)(char))
(7) void syslog_print(SYSLOG *p_sys, void (*putc)(char))
(8) void syslog_output(void (*putc)(char))

եޥåȽϤ뤿Υ饤֥ؿsyslog_printf 
줿եޥåʸȰsyslog_print Ϥ줿
syslog_output ϥХåե˳Ǽ줿եޥåȽϤ롥

ƥѤ뤳ȤꤷƤ뤿ᡤΥ饤֥ؿ
եϥݡȥ饤֥Υǥ쥯ȥ֤Ƥ롥
٥ϤԤˡƥǽǤѤƤ롥

4.8 ƥǽˡ

FDMPͥΥƥǽꤵƤˡϡʲ̤
롥

(a) ʰ۾ݤ򼨤٥ϵǽѤƽϤ
ǤʤνϤϥƥǤ롥

Хåե˵Ͽν٤ȡ٥ϤѤƽϤ
ν٤Ŭڤꤹ롥ޤХåեɤ
ФƳΤ륷ƥȡ٥ʸϴؿѰ
롥

(b) ٤ƤΥ٥ϵǽѤƽϤ롥

ɬפʥϤ٤٥ϵǽѤƽϤ褦
vmsk_log 1ѥ᡼ 0 ˤ롥ޤ٥ʸ
ؿѰդ롥ƥס

(c) ϥ˵Ͽǡƥ೰ˤϽϤʤ

ɬפʥϤ٤ƥХåեصϿ褦vmsk_log 2
ѥ᡼ 0 ˤ롥ƥס

(d) ϵϿϤ⤷ʤ

Υ⵭ϿϤʤ褦vmsk_log ξѥ᡼
Ȥ 0 ˤ롥

̤ˡȤơOMIT_SYSLOG ƥѥ뤹뤳Ȥǡƥ
ǽ򥫡ͥ뤫곰ͥΥɥ򾮤뤳Ȥ
Ǥ롥ץꥱ󤫤 syslogsyslog_printfsyslog_print
syslog_output γƴؿƤӽФƤ硤δؿΥɤϳ
ʤޤͥ뤫ΥϵϿϤʤץꥱ
󤫤ΥϵϿϤˤϡͥΤ OMIT_SYSLOG 
ƥѥ뤹Ф褤ξ硤ƥǽνؿ
_kernel_syslog_initializeˤȽλؿ_kernel_syslog_teminate
ϡץꥱ󤫤ƤӽФɬפ롥

ʤ(b)(c) ˸ꤷƻѤˤ⡤ͥΰΥ
ɤפˤʤꡤɥ򾮤Ǥ;Ϥ뤬ʰפˡ
դƤʤ


ƥॵӥ

ǤϡFDMPͥ뤬ݡȤƤ륷ƥ।󥿥ե쥤
SILˤȡFDMPͥ뤬ɸŪưɥ饤Фӥƥॿ
ˤĤ롥

5.1 ƥ।󥿥ե쥤SIL

FDMPͥϡITRONǥХɥ饤߷ץɥ饤ΰʬȤƸƤ
Ƥ륷ƥ।󥿥ե쥤SILˤǡʲ˵󤲤뵡ǽ
򥵥ݡȤƤ롥SILѤץफϡt_services.h夨ơ
s_services.h򥤥󥯥롼ɤ롥

ITRONǥХɥ饤߷ץɥ饤ǤϡǥХɥ饤ФǡSIL
̤ľܥǥХ˥⥸塼PDICˤȡͥεǽ
Ѥ⥸塼GDICˤʬΥ뤳ȤˤƤ롥ʤPDIC
SILѤ뤬ͥεǽѤGDICϥͥεǽѤ뤬SIL
ѤƤϤʤʤΤᡤs_services.hˤϡͥѤ뤿
ϴޤޤƤʤ

5.1.1 ߥå֤

ǥХ򰷤ץǤϡ٤ƤγߡNMIʲƱ
ػߤ礬롥ITRON4.0ͤCPUå֤ϡͥδ
γߡNMIʳ˥ͥδγߤ뤫ϡFDMP
ǤϥåȰ¸ˤػߤȤϸ¤餺Τ褦ʾѤΤ
ŬڤǤʤ

ǡ٤Ƥγߤػߤ֤ߥå֤ȸƤӡSILǤ
ߥå֤椹뤿ΰʲεǽѰդƤ롥

(1) SIL_PRE_LOC

ߥå֤ɬפѿޥ
Υޥ򵭽Ҥǡߤζػ߾֤Ͽ롥SIL_LOC_INT
SIL_UNL_INTѤؿʥ֥åˤƬѿ˵Ҥʤ
ʤʤ

(2) SIL_LOC_INT()

٤Ƥγߤػߤߥå֤˰ܹԤ롥

(3) SIL_UNL_INT()

SIL_PRE_LOC򵭽Ҥξ֤᤹

ߥå֤浡ǽλϼ̤ꡥ

        {
                SIL_PRE_LOC;

                SIL_LOC_INT();
                δ֤Ϥ٤Ƥγߤػߤ
                δ֤˥ӥƤӽФƤϤʤʤ
                SIL_UNL_INT();
        }

ʤFDMPͥ뼫Ȥϳߥå֤ϴƤʤᡤ
֤ǤϥӥƤӽФƤϤʤʤʸƤӽФư
ݾڤʤˡ

5.1.2 Ԥ

ǥХ򥢥ݤˡʻԤʤФʤʤ礬
롥Τ褦ʾˡnop򤤤Ĥʤɤˡбȡ
ӥƥʤ롥SILǤϡʻԤԤεǽ
ѰդƤ롥

(1) void sil_dly_nse(UINT dlytim)

dlytimǻꤵ줿ʾλ֡ñ̤ϥʥáˡ롼פʤɤˤäԤġ
ꤷͤˤäƤϡꤷ֤⤫ʤĹԤľ礬Τ
դ뤳ȡ

5.1.3 ǥ

ץåΥǥΤ뤿ΥޥȤơʲΥޥ
Ƥ롥

(1) SIL_ENDIAN

ȥ륨ǥץåǤSIL_ENDIAN_LITTLEʡ0ˡӥåǥ
ץåǤSIL_ENDIAN_BIGʡ1ˤ˥ޥ롥

5.1.4 ֥ؿ

֤˥ޥåԥ󥰤줿ǥХ쥸䡤ǥХȤζͭ
򥢥뤿ˡʲδؿѰդƤ롥

(1) VB sil_reb_mem(VP mem)

memǻꤵ륢ɥ쥹顤8ӥåñ̤ɤ֤ͤ

(2) void sil_wrb_mem(VP mem, VB data)

memǻꤵ륢ɥ쥹ˡdataǻꤵͤ8ӥåñ̤ǽ񤭹ࡥ

(3) VH sil_reh_mem(VP mem)

memǻꤵ륢ɥ쥹顤16ӥåñ̤ɤ֤ͤ

(4) void sil_wrh_mem(VP mem, VH data)

memǻꤵ륢ɥ쥹ˡdataǻꤵͤ16ӥåñ̤ǽ񤭹ࡥ

(5) VH sil_reh_lem(VP mem)

memǻꤵ륢ɥ쥹顤16ӥåñ̤ǥȥ륨ǥɤ
֤ͤȥ륨ǥץåǤϡsil_reh_memȰפ롥

(6) void sil_wrh_lem(VP mem, VH data)

memǻꤵ륢ɥ쥹ˡdataǻꤵͤ16ӥåñ̤ǥȥ륨
ǥǽ񤭹ࡥȥ륨ǥץåǤϡsil_wrh_mem
פ롥

(7) VH sil_reh_bem(VP mem)

memǻꤵ륢ɥ쥹顤16ӥåñ̤ǥӥåǥɤ
֤ͤӥåǥץåǤϡsil_reh_memȰפ롥

(8) void sil_wrh_bem(VP mem, VH data)

memǻꤵ륢ɥ쥹ˡdataǻꤵͤ16ӥåñ̤ǥӥå
ǥǽ񤭹ࡥӥåǥץåǤϡsil_wrh_mem
פ롥

(9) VW sil_rew_mem(VP mem)

memǻꤵ륢ɥ쥹顤32ӥåñ̤ɤ֤ͤ

(10) void sil_wrw_mem(VP mem, VW data)

memǻꤵ륢ɥ쥹ˡdataǻꤵͤ32ӥåñ̤ǽ񤭹ࡥ

(11) VW sil_rew_lem(VP mem)

memǻꤵ륢ɥ쥹顤32ӥåñ̤ǥȥ륨ǥɤ
֤ͤȥ륨ǥץåǤϡsil_rew_memȰפ롥

(12) void sil_wrw_lem(VP mem, VW data)

memǻꤵ륢ɥ쥹ˡdataǻꤵͤ32ӥåñ̤ǥȥ륨
ǥǽ񤭹ࡥȥ륨ǥץåǤϡsil_wrw_mem
פ롥

(13) VW sil_rew_bem(VP mem)

memǻꤵ륢ɥ쥹顤32ӥåñ̤ǥӥåǥɤ
֤ͤӥåǥץåǤϡsil_rew_memȰפ롥

(14) void sil_wrw_bem(VP mem, VW data)

memǻꤵ륢ɥ쥹ˡdataǻꤵͤ32ӥåñ̤ǥӥå
ǥǽ񤭹ࡥӥåǥץåǤϡsil_wrw_mem
פ롥

ʤFDMPͥΥå¸ǤϡI/O֤˥뤿
δؿѰդƤʤåȰ¸ǥݡȤ뤳ȤϲǽǤ
롥ܤϡåΥޥ˥奢򻲾Ȥ뤳ȡ

5.2 ƥ९åɥ饤

ƥ९åɥ饤ФϡϡɥޤѤƼŪ˳ߤ
ȯisig_timƤӽФƥͥ˥ƥå򶡵뤹롥
ƥ९åɥ饤Фϡƥॳե졼ե
timer.cfg򥤥󥯥롼ɤ뤳ȤǡƥȤ߹ळȤǤ롥

5.2.1 ƥ९åɥ饤Ф

ƥ९åɥ饤Фϡޤεư޳ߥϥɥ顤
ޤ߽ǹ롥

(1) void timer_initialize(VP_INT exinf)

ޤεưޤŪʥ޳׵ȯ
롥ͥ˽롼ȤϿ롥exinf̵뤹롥

(2) void timer_handler()

޳ߥϥɥ顥޳׵򥯥ꥢ塤isig_timƤӽ
ƥƥå򶡵뤹롥ͥ˳ߥϥɥȤϿ롥

(3) void timer_terminate(VP_INT exinf)

ޤ߽Ūʥ޳׵ߤ롥ͥ˽λ
롼ȤϿ롥exinf ̵뤹롥

5.3 ꥢ륤󥿥եɥ饤

ꥢ륤󥿥եɥ饤ФϡꥢݡȤ򰷤Υɥ饤Ф
롥ꥢ륤󥿥եɥ饤Фϡƥॳե졼
եserial.cfg򥤥󥯥롼ɤ뤳ȤǡƥȤ߹ळȤ
Ǥ롥

ꥢ륤󥿥եɥ饤Фϡݡ˥ޥե2ĤĻѤ롥
ޥեŪAPIϡserial.cfg˴ޤޤƤ롥

NEWLIBGLIBCʤɤɸC饤֥ѤˤϡɸC饤֥
٥ϥ롼򥷥ꥢ륤󥿥եɥ饤ФƤӽФ
ˤ뤳ȤǡɸϤ򥷥ꥢ륤󥿥եɥ饤зͳ
ڤؤ뤳ȤǤ롥ŪˡϡѤɸC饤֥˰¸
롥

5.3.1 ꥢ륤󥿥եɥ饤ФΥӥ

ꥢ륤󥿥եɥ饤ФƤӽФӥλͤϲ
Ǥ롥ǡꥢݡȤIDֹportidˤβϥå
¸Ȥʤ롥

Υӥϡ󥿥ƥȤƤӽФȤϤǤ
ޤserial_rea_datserial_wri_datϡǥѥåα֤ǸƤ
ФȤϤǤʤ⡤ƤӽФˤE_CTX顼Ȥʤ롥

(1) ER serial_opn_por(ID portid)

portidǼ륷ꥢݡȤ򥪡ץ󤷡ǽʾ֤ˤ
롥

(2) ER serial_cls_por(ID portid)

portidǼ륷ꥢݡȤ򥯥롥

(3) ER_UINT serial_rea_dat(ID portid, char *buf, UINT len)

portidǼ륷ꥢݡȤ顤lenХȤʸbuf
ΰ롥lenХȼޤǡԤ֤Ȥʤ롥ʸ
ޤϥ顼ɤ֤

(4) ER_UINT serial_wri_dat(ID portid, char *buf, UINT len)

portidǼ륷ꥢݡȤˡbuflenХȤʸ롥
lenХХåեޤǡԤ֤Ȥʤ롥ʸޤ
ϥ顼ɤ֤

(5) ER serial_ctl_por(ID portid, UINT ioctl)

portidǼ륷ꥢݡȤioctlǼͤꤹ
롥

ioctlˤϡʲɽ򡤥ӥå¤ȤäΤ
ꤹ롥

    IOCTL_ECHOʥХå⡼ɡ
        ΥӥåȤꤹȡꥢ륤󥿥եɥ饤Ф
        ХåԤŪˤϡХåեʸФ٤ˡ
        ʸ񤭽Ф

    IOCTL_CRLFʲԥ⡼ɡ
        LFline feedˤ񤭽ФȡCRcarriage return+ LFѴ
        ƽ񤭽Ф

    IOCTL_FCSNDʽϥե
        ʸФơXON/XOFFˤեԤ
        ʤSTOPʥȥ-Sˤߤ
        STARTʥȥ-QˤƳ롥

    IOCTL_FCANYեǤդʸƳ
        IOCTL_FCOUTꤷƤˡ˼Ǥդʸ
        Ƴ롥

    IOCTL_FCRCVʼե
        ʸФơXON/XOFFˤեԤ
        ʤХåեλĤΰ褬ʤʤSTOPʥȥ
        -SˤФĤΰ褬STARTʥȥ-Qˤ
        Ф롥

ʤץľΥǥեȤͤ(IOCTL_ECHO | IOCTL_CRLF |
IOCTL_FCOUT | IOCTL_FCIN)Ǥ롥

(6) ER serial_ref_por(ID portid, T_SERIAL_RPOR *pk_rpor)

portidǼ륷ꥢݡȤξ֤򻲾Ȥpk_rporǻꤵѥ
Ȥ֤ѥåreacntˤϼХåեʸwricntˤ
Хåեʸ֤

5.3.2 ꥢ륤󥿥եɥ饤Ф

ꥢ륤󥿥եɥ饤ФϡΥӥ˲äơ
ȳߥϥɥǹ롥ϡͥ˽롼
ȤϿ롥ߥϥɥϡͥ˳ߥϥɥȤϿ
롥Ͽserial.cfg˴ޤޤ롥

(1) void serial_initialize(VP_INT exinf)

ꥢ륤󥿥եɥ饤Ф롥ͥ˽롼
Ͽ롥exinf̵뤹롥

(2) ߥϥɥ

ꥢI/OǥХμˤäơߥϥɥμϰۤʤ롥
Ūˤϡߤȼߤ̤ƤΤ̤ƤʤΤ䡤
ݡȤʣĥꥢI/OǥХǥݡ˳ߥϥɥ餬̤
Τ̤ƤʤΤ롥ꥢ륤󥿥եɥ饤Фγ
ߥϥɥϡͥ˳ߥϥɥȤϿ롥

5.4 ƥ

ƥϡͥΥХåեФ
ǥХ˥륵ӥѤƳ˽Ϥ륿Ǥ롥

FDMPͥɸۥåȤ˴ޤޤ륷ƥϡꥢ륤
󥿥ե˥ʸηǽϤΤǡƥ
ΰȤդ󶡤Ƥ롥Υƥϡƥ
ե졼եlogtask.cfg򥤥󥯥롼ɤ뤳Ȥǡ
ƥȤ߹ळȤǤ롥


ݡȥ饤֥

ݡȥ饤֥ϡץꥱ䥷ƥॵӥ뤿
ѤǤ饤֥ؿǤ롥СǤϡƥॵӥ
䥵ץץǻȤ¤δؿѰդƤʤ

(1) const char *itron_strerror(ER ercd)

ercd Ǽᥤ󥨥顼ɤб륨顼ɤʸ֤
֤줿ʸ񤭴ƤϤʤʤ

(2) void t_perror(const char *file, int line, const char *expr, ER ercd)
    
顼å򥷥ƥӥ˽Ϥ롥assertޥʤɤ
Ѥ뤳ȤꤷƤ롥


ȯĶ󥹥ȡ롦ݡƥ

7.1 ǥ쥯ȥꡦե빽

եΥǥ쥯ȥ깽ϼ̤ꡥ

    include/    ̥إåե
    kernel/     ͥ륽ե
    systask/    ƥॵӥե
    library/     ݡȥ饤֥꥽ե
    config/     åȰ¸
        microblaze/     MicroBlaze ץå¸ե
            mutlimedia/         MultiMedia Board ƥ¸ե
        nios2/          NIOS2 ץå¸ե
            nios2_dev_board_cyclone/   ALTERA_DEV_CYCLONE ƥ¸ե
            nios2_dev_board_stratix/   ALTERA_DEV_STRATIX ƥ¸ե
    tools/      ȯĶ¸ǥ쥯ȥ 
        ALTERA/   Alteraѥե󥹥ǥptfȥץåֳ߲ϩ
        XILINX/   Xilinxѥץåֳ߲ϩ¾ϩ
    cfg/        ͥ륳ե졼
    utils/      桼ƥƥ
    doc/        ɥ

å¸ʥͥ륳ե졼Ͻˤγƥեγ
פϼ̤ꡥ

    README              TOPPERS/FDMPͥδñʾҲ

    include/
        ipi.h           ץåֳߴϢδؿextern
        itron.h         ITRONͶ̵˴Ϣ
        kernel.h        ITRON4.0ͤ˴Ϣ
        kernel_debug.h  ITRON4.0 ǥХåѥ󥯥롼ɥե
        sil.h           ƥ।󥿥ե쥤SIL
        t_stddef.h      ͥ롦ץꥱ ̥󥯥롼ɥե
        t_config.h      åȰ¸
        t_syslog.h      ƥӥϢ
        t_services.h    ץꥱ ɸ।󥯥롼ɥե
        s_services.h    ǥХɥ饤 ɸ।󥯥롼ɥե
        kernel_cfg.h    kernel_cfg.cѤΥ󥯥롼ɥե
        timer.h         ƥ९åɥ饤дϢ
        serial.h        ꥢ륤󥿥եɥ饤дϢ
        logtask.h       ƥϢ

    kernel/
        Makefile.kernel ͥΥե빽
        fdmp_kernel.h   FDMPͥ ɸ।󥯥롼ɥե
        fdmp_rename.def ͥ̾Υ͡
        fdmp_rename.h   ͥ̾Υ͡
        fdmp_unrename.h ͥ̾Υ͡        
        check.h         顼åѥޥ
        class.h         饹
        class.c         饹      
        lock.h          å֥Ȥ     
        queue.h         ֥󥯥塼ι¤
        startup.c       ͥν
        banner.c        ͥεưåν
        task.h          롼Ϣ
        task.c          롼
        wait.h          Ԥ롼Ϣ
        wait.c          Ԥ롼
        time_event.h    ।٥ȴϢ
        time_event.c    ।٥ȴ
        syslog.h        ƥǽϢ
        syslog.c        ƥǽ
        task_manage.c   ǽ
        task_sync.c     °Ʊǽ
        task_except.c   㳰ǽ
        semaphore.h     ޥեǽϢ
        semaphore.c     ޥեǽ
        eventflag.h     ٥ȥե饰ǽϢ
        eventflag.c     ٥ȥե饰ǽ
        dataqueue.h     ǡ塼ǽϢ
        dataqueue.c     ǡ塼ǽ
        mailbox.h       ᡼ܥåǽϢ
        mailbox.c       ᡼ܥåǽ
        mempfix.h       ĹסϢ
        mempfix.c       Ĺס
        time_manage.c   ƥǽ
        cyclic.h        ϥɥ鵡ǽϢ
        cyclic.c        ϥɥ鵡ǽ
        sys_manage.c    ƥǽ
        interrupt.h     ߴǽϢ
        interrupt.c     ߴǽ
        exception.h     CPU㳰ǽϢ
        exception.c     CPU㳰ǽ

    systask/
        timer.c         ƥ९åɥ饤
        timer.cfg       ƥ९åɥ饤Ф국
        serial.c        ꥢ륤󥿥եɥ饤
        serial.cfg      ꥢ륤󥿥եɥ饤Ф국
        logtask.c       ƥ
        logtask.cfg     ƥ국
        newlibrt.c      NEWLIBб󥿥
        ipi.c           ץåֳߥɥ饤
        ipi.cfg         ץåֳߤΥե졼ե

    library/
        log_output.c    ƥǽѥ饤֥ؿsyslog_outputʤɡ
        strerror.c      itron_strerrorؿ
        t_perror.c      t_perrorؿ
        vasyslog.c      syslogؿ

    utils/
        makedep         ¸ط
        genoffset       offset.h ץ
        gencheck        ѥ᡼åѥե
        genrename       ܥ͡
        rename          ܥΥ͡

    doc/
        user.txt        TOPPERS/FDMPͥ 桼ޥ˥奢
        spec.txt        ǽʬޥץåꥢ륿५ͥ
        nios2.txt       Nios2åȰ¸ޥ˥奢
        microblaze.txt  MicroblazeåȰ¸ޥ˥奢

7.2 ȯĶ

FDMPͥѤƥ๽ۤˤϡʲΥġ뤬ɬפǤ롥

    ۥȴĶѤΥġ
        ɸ൬ʤ˽򤷤Cѥ顤C饤֥
        perlưǧ 5.8.7
        GNU Makeưǧ 3.80

    ĶѤΥġ
        GNUȯĶ
            BINUTILSʥ֥顤󥫤ʤɡ
            GCC ޤ GCC-CORECѥ
            GDBʥǥХå
        NEWLIBɸC饤֥

ߥݡȤƤ Nios2, MicroblazeˤĤƤϡȯĶ°GNU
ȯĶѤ뤳ȤꤷƤ롥

ۥȴĶѤC++ѥ顤C++饤֥ Boost饤֥ϡ
Υե졼ġΥѥɬפǤ롥ܥѥå
ˤϡWindowsĶѤΥե졼ġΥХʥ꤬ޤޤ
뤿ᡤWindowsĶǻѤˤϡΥġɬפʤ

ĶѤɸC饤֥ϡץꥱɸC饤֥
Ѥʤˤϡɬפʤѥ餬ɸC饤֥ؿ
memcpymemsetʤɡˤƤӽФɤ礬ꡤξ
ɸC饤֥꤬ɬפǤ롥ʤϡɤƤӽФؿ
ΤߤʬѰդƤ褤

ʲǤϡΥġ뤬ѰդǤƤ뤳ȤˡWindowsޥǡ
CygwinĶǹۼ롥ޤʲǤϡmakeޥɤ 
GNU Make ǤΤȤFDMPͥ Makefile ϡGNU Make γĥ
ǽѤƤˡ

7.3 ե졼ġι

ͥۤˡޤե졼ġ򥳥ѥ
ɬפʥե졼ġХʥꤷ
ϡΥƥåפɬפʤˡ

FDMPͥΥե졼ġϡե졼cfg
ץˤ鹽롥ե졼ġλȤˤĤ
Ƥϡ7.9 ե졼ġλȤפ򻲾Ȥ뤳ȡ

ե졼ġcfgץˤϡɤ鹽
ˤϡVC .Net 2003 ⤷ϡg++ Ѥ롥ɤξǤBoost
֥򥤥󥹥ȡ뤹ɬפ롥

  VC .Net 2003 Ѥ
   ./cfg/ITRON Configurator.sln VC .Net 2003ǳƹۤ롥
    
  g++ Ѥ
   ./cfg/Makefile BOOST_DIRŬڤԽơ
   
      $ make convert 
      $ make

   ¹Ԥȡ¹ԥե뤬 ./cfg/work/cfg/cfg.exe ˺
   ./cfg ˥ԡ롥

7.4 ץץι

ˡץץۤˡ롥

ץץȤ ./dual  ./quad ʲˤ롥Υץץ
ȤϤ줾2ץå4ץåΥץǤ롥桼ǥ
ȤϡΥץȤΥե򻲹ͤˤ뤳ȡ
./dual ˥ͥιۤʲ˲⤹롥

 åȥץåȥƥ
   Makefile.target Խƥåȥץåȥƥꤹ롥
      
 ե졼եѰդ
   2ץåΥץǥǤϡ./dual/dual.cfg Ǥ롥PE1PE2
   2ĤΥ饹Ƥ롥4ץåΥץǥǤϡ
   ./quad/quad.cfg Ǥ롥PE1PE44ĤΥ饹Ƥ롥

 
 CFG¹Ԥ
   ./dual, ./quad Υǥ쥯ȥǡ

     $ make depned

   ¹Ԥ뤳ȤǡCFGμ¹Ԥȳƥץåǥ쥯ȥǤ make 
   depend Ԥ   
   CFGμ¹Ԥˤƥץå˥ץå̾ǥ֥ѤΥ
   쥯ȥ(ץåǥ쥯ȥ)ưʲΥե뤬
   롥

         class_id.h, kernel_id.h, kernel_cfg.c

    class_id.h(饹IDեե)ˤϡ饹IDդΥ֥
    IDƤ롥㤨PE1TASK1ȤPE1ʳ饢
    ˤϡ   class_id.h 򥤥󥯥롼ɤPE1_TASK1ȤID
    API¹ԤФ褤

 ƥץåǥǥ쥯ȥǤκ
   ƥץåΥץåǥ쥯ȥ make depend ¹Ԥư¸
   ե롥ϡ嵭 ./dual, ./quad  make depend 
   ¹Ԥ뤳ȤǡưŪ˹Ԥ롥

 ѥ
   ./dual, ./quad Υǥ쥯ȥǡ

     $ make 
 
   ¹Ԥȡƥץåǥ쥯ȥ make Ԥ֥
   ɤ롥

7.5 Makefileν

FDMPͥμ¹ԴĶˤäƤϡץץMakefile
뤳Ȥɬפˤʤ롥ǤϡMakefileǡɬפȤʤǽ
⤤սˤĤ롥


(A) å̾

CPUϥåȥץå̾SYSϥåȥƥ̾TOOLϳȯĶ
̾롥ץץǤϡ./dual, ./quad ʲ 
Makefile.target Ƥ롥

(B) ֥ȥեγĥҤ

CygwinĶǥѥ뤹ˤϡOBJEXT"exe"ɬפ롥
ϡCygwinĶǤϡ֥ȥץ˳ĥ"exe"ղä
Τб뤿ΤΤǤ롥ץץǤϡƥץå 
Makefile Ƥ롥

(C) ץåʥåȰ¸

ưץå̾PE˻ꤹ롥PEɤѤ뤫ϡåȰ
¸Ǥ롥

(D) ͥ饤֥Υǥ쥯ȥ̾

KERNEL_LIBˤϡͥ饤֥֤줿ǥ쥯ȥ̾롥
ϡ̾ϥե졼󥹥ץȤԤ
KERNEL_LIBѹƤ⤫ޤʤ

(E) ͥ饤֥Υǥ쥯ȥ̾KERNEL_LIB_BY_FUNC ϡ
TRUE⤷FALSE˻ǽǡTRUEˤȡͥ饤֥ؿ
ʥƥॳñ̤ǥ󥯤ƹۤ뤹롥ФFALSEˤ
ȡեñ̤ǥͥ饤֥ۤ롥

(F) ̥ѥ륪ץ

Τ˶̤륳ѥ륪ץɲäɬפʾˤϡѿ
ѹ롥Υѥ륪ץ󤬡ΥåȤǾɬפ
ˤϡåȰ¸줿Makefile.config٤Ǥ
롥ɲäβǽΤ륳ѥ륪ץˤĤƤϡ7.8 ѥ
ץפ򻲾ȤΤȡ

    CDEFS       -D ץ򵭽Ҥ롥
    INCLUDES    -I ץ򵭽Ҥ롥
    COPTS       ѥФ뤽¾Υץ򵭽Ҥ롥
    LDFLAGS     󥫤Ф륪ץ򵭽Ҥ롥
    LIBS        饤֥󥯤ΤΥץ򵭽Ҥ롥

(G) ץꥱץ˴ؤ

ץꥱץबĤCե*.cˤΤߤǹ
ƤˤϡUNAMEˤΥե̾Ф褤ץꥱ
ץबʣΥեǹˤϡUNAMEˤΥ
ץꥱ֥̾ȥե̾UTASK_ASMOBJS
UTASK_COBJS󤹤롥ξˤ⡤ե졼ե
ϡUNAME̾˳ĥ"cfg"ղä̾Ȥ롥

ե򥳥ѥ뤹ΤȤ̤Υǥ쥯ȥ֤ˤϡ
UTASK_DIRSˤΥǥ쥯ȥɲä롥ޤץꥱΥ
ɬפʥѥ륪ץ䡤ץꥱ󤬥饤֥ɬ
ȤˤϡUTASK_CFLAGSUTASK_LIBS 롥

(H) ֥ȥե̾

֥ȥե̾OBJNAME롥ǥեȤfdmpǤ롥

(I) åȥե

ɥ⥸塼ηꤹ롥ŪˤϡELFλ$(OBJFILE) 
ޤ$(OBJNAME).outPARTNER-JĶλˡХʥλ
$(OBJNAME).binȥ Sλ$(OBJNAME).srecꤹ롥
$(OBJFILE) ϡCygwinĶOBJEXT"exe"ˤ$(OBJNAME).exe
Ǥʤˤ$(OBJNAME)Ȥʤ롥

(J) ͥΥե졼ե

եȥʤΥե졼ɲäˤϡε§
뤳ȤɬפǤ롥

7.6 ѥ륪ץ

FDMPͥΥˤϡassertޥȤƤ롥assertޥϡ
NDEBUG뤳Ȥǡ֥ȥ椫äȤǤ롥
ͥΥǥХåλСCDEFS-DNDEBUGꤷƥѥ뤷
Ψ褯ʤ롥

ޤƥǽ곰OMIT_SYSLOGѰդƤ롥ܤ
ϡ4.8 ƥǽˡפ򻲾Ȥ뤳ȡ

7.7 ե졼ġλȤ

ʲǤϡcfgץΥץˤĤ롥Υץ
ˤ륳ե졼ˤĤƤϡ2.10 ŪAPIȥե
졼פ򻲾Ȥ뤳ȡ

cfgץФ륪ץϼ̤ꡥ

  -h ޤ --help  
    ˡɽޤΥץ󤬻ꤵȡ¾ΰ̵
    ޤ

  -lj ޤ --japanese
    ϥåܸꤷޤ

  -le ޤ --english
    ϥåѸꤷޤ-lj--japaneseˤꤵȡ
    -le ̵뤵ޤ

  -cfg <file> ޤ --kernel_cfg=<file>
    `kernel_cfg.c'<file>ꤷޤ

  -id <file> ޤ --kernel_id=<file>
    `kernel_id.h'<file>ꤷޤ

  -ucn
    ե졼եιʸ̾Ĥޤ

  -sjis
    ե졼եΥեJISĤޤ

  -n <directory>
    եνȤ<directory>ꤷޤ

  -kernel <type>
    ̡ͥFDMP ޤ JSPˤꤷޤ

7.8 󥫥ץȤȥΰ

FDMPͥΥˡϡåȰ¸Υ󥫥ץȡ*.ldˤ
ҤƤ롥ץץ Makefile ǤϡåȰ¸
줿 Makefile.config  LDSCRIPT ȡ̾
Υե󥫥ץȤѤ롥

FDMPͥưˤϡʲΥΰ褬ɬפˤʤ롥

(a) ΰ

ͥ뤪ӥץꥱΥץपǡ֤
补ROM֤ȤǽǤ롥Ƭɥ쥹򡤥ͥ󥯤
ݤ -Ttext ץǻꤹ롥ץץ Makefile Ǥϡ
åȰ¸줿 Makefile.config  TEXT_START_ADDRESS 
ȡ󥯻 -Ttext ץղä롥

(b) ǡΰ

ͥ뤪ӥץꥱλѤǡΰ补Ūʥǡΰ
ȡsbrkؿˤäƼҡΰ褫ʤ롥ͥϥҡΰ
ѤʤƬɥ쥹򡤥ͥ󥯤ݤ -Tdata ץ
ǻꤹ롥ץץ Makefile ǤϡåȰ¸
줿 Makefile.config  DATA_START_ADDRESS ȡ
 -Tdata ץղä롥

(c) 󥿥ƥѤΥåΰ

ߥϥɥʤɤ󥿥ƥȤѤ륹åΰ补ΰ
ˡϥåȰ¸Ǥ뤬̾ϡåȥƥ¸Υ
롼ɥեsys_config.hˤǥåνͤå
ץå¸Υȥåץ⥸塼start.Sǽ롥

(D) ͭΰ

ͥ뵯ưˡץå֤Ƕͭǡꤹ뤿ΰ补
̾ .shared ȤƳݤ롥־ϥ󥫥ץȤǻ
ꤹ롥

7.9 ̻ͥҤΥ͡

ITRON4.0ͤϡ̻ͥҤ_kernel_ޤ_KERNEL_ǻϤ
Ȥ׵ᤷƤ롥ȤͥΥľܤΤ褦
̻ҤѤȡ̻ҤĹĹʤꡤ»ʤFDMP
ͥǤϡxxxxxȤ̻ͥҤ_kernel_xxxxx˥͡ह
ȤߤƤ롥

ȤλȤߤˤꡤǥХåȤΨˤʤ륱ͤ
롥Ūˤϡμ̻Ҥ֥ȥμ̻Ҥ
פʤˡѿꤷƤͤɤꡤؿ
ꤷƤ˥֥졼ݥȤ֤ȤäȤǤʤ

褹뤿ˡFDMPͥǤϡɬפʼ
Ҥ͡ह뤿Υ桼ƥƥutils/renameˤѰդƤ롥
rename桼ƥƥˡ͡եxxx_rename.defˤΥץ
åxxxʬˤȡ͡षեꥹȤͿȡ
Ԥʤ㤨Сkernelǥ쥯ȥΤ٤ƤΥեФơ
ͥ̾͡हˤϡΥޥɤѤФ褤

    % cd kernel
    % ../utils/rename fdmp *


¾

8.1 ֥

TOPPERSץȤFDMPͥΤΥ֥Ȥ򡤰ʲURL
ѰդƤ롥

        http://www.toppers.jp/

եåȤκǿǤϡΥ֥Ȥɤ뤳ȤǤ롥
ޤҤΥ᡼󥰥ꥹȤΥ֤ʤɤ⡤Υ֥ȤǱ
뤳ȤǤ롥

8.2 Ѿ

FDMPͥѾϡƥեƬƤʤΥɥ
ȤƬˤĤƤˡϡƥեƬɽƤ
ԤͭƤ롥

Ѿ (3)  (b) ˤơѤη֤TOPPERSץȤ
ˡȤƤϡFDMPͥѤʤμ̤̾ΡѤFDMP
ͥιʤɤΥåȰ¸Ѥˤ򡤼Υɥ쥹إ᡼
ϢˡɸȤ롥FDMPͥʰʳѤˤϡ
˽स𤹤ΤȤ롥

        report@toppers.jp

ޤκݤˡFDMPͥѤƤΥȤ䤴ո⤤ȹ
Ǥ롥ˡǤ񤷤ˤϡ̤줿

8.3 ݾڡݡȡŬ

FDMP̵ͥݾڤ󶡤ƤΤǤ롥ȯԤϡŬѲǽ
ޤơʤݾڤԤʤޤݡȤ«⤷Ƥʤ
䤬ϡҤΥ᡼󥰥ꥹȤѤƤȹǤ
롥

8.4 ᡼󥰥ꥹ

FDMPͥΥ桼Ф󶡤ӥ桼ߴ֤ξ򴹤ư
ˤ뤿ˡTOPPERS桼᡼󥰥ꥹȤѰդƤ롥Υ᡼
󥰥ꥹȤˤϡïǤ⼫ͳ˥᡼դ뤳ȤǤ롥ޤ
줿᡼ϡïǤ⼫ͳ˥֥ȤɤळȤǤ롥FDMP
˥ХȯˤϡΥ᡼󥰥ꥹȤ𤷤ߤ


᡼󥰥ꥹȤؤΥ᡼ϼ̤ꡥ

        users@toppers.jp

᡼󥰥ꥹȤ˥Хʤɤ𤹤ˤϡɬפ˱ơ
ξΤ餻ߤ

    åȤ˴ؤ
        åȥץåμ
        åȥܡɤμ

    ۥȤ˴ؤ
        OSΥСʥӥѥåŬѾ
        ѥʤɤγȯĶΥСCygwinΥС

Υ᡼󥰥ꥹȤؤϿ˾ϡޤ
users-ctl@toppers.jp Ƥˡʸ

        subscribe ʤ̾
        : subscribe Hiroaki Takada

Ƚ񤤤᡼դʾ嵭ΥޥˤȾѱʸΤߤȤȡˡ
ޤ֤ϿǧΤΥ᡼뤬ƤΤǡλؼ˽ä
Ͽ롥

8.5 TOPPERSץȤؤλ

TOPPERSץȤǤϡηǥץȤ˹׸줿
Ȥǳȯեȥ򤪻ȤץȤ˶̣򤪻
λäƤ롥TOPPERSץȤؤλˡˤĤƤϡ
TOPPERSץȤΥ֥Ȥ򻲾Ȥ뤳ȡ

8.6 ITRON Club

Żٶ̣鷺 ITRONͤ ITRONץȤ˶̣
ͤΤξ򴹡ξȤơITRON Club ᡼󥰥ꥹȤѰ
Ƥ롥Υ᡼󥰥ꥹȤˤϡITRON ˶̣äƤͤʤï
⻲äǤ롥ޤΥ᡼󥰥ꥹȤդ줿᡼ϡïǤ⼫
ͳ˥֥ȤɤळȤǤ롥

Υ᡼󥰥ꥹȤؤϿ˾ϡޤ
itron-club-ctl@ertl.jp Ƥˡʸ

        subscribe ʤ̾
        : subscribe Hiroaki Takada

Ƚ񤤤᡼դʾ嵭ΥޥˤȾѱʸΤߤȤȡˡ
ޤ֤ϿǧΤΥ᡼뤬ƤΤǡλؼ˽ä
Ͽ롥

ե

9.1 ӥ

(1) ǽ

    ER ercd = act_tsk(ID tskid);
    ER ercd = iact_tsk(ID tskid);
    ER_UINT actcnt = can_act(ID tskid);
    void ext_tsk();
    ER ercd = ter_tsk(ID tskid);
    ER ercd = chg_pri(ID tskid, PRI tskpri);
    ER ercd = get_pri(ID tskid, PRI *p_tskpri);

(2) °Ʊǽ

    ER ercd = slp_tsk();
    ER ercd = tslp_tsk(TMO tmout);
    ER ercd = wup_tsk(ID tskid);
    ER ercd = iwup_tsk(ID tskid);
    ER_UINT wupcnt = can_wup(ID tskid);
    ER ercd = rel_wai(ID tskid);
    ER ercd = irel_wai(ID tskid);
    ER ercd = sus_tsk(ID tskid);
    ER ercd = rsm_tsk(ID tskid);
    ER ercd = frsm_tsk(ID tskid);
    ER ercd = dly_tsk(RELTIM dlytim);

(3) 㳰ǽ

    ER ercd = ras_tex(ID tskid, TEXPTN rasptn);
    ER ercd = iras_tex(ID tskid, TEXPTN rasptn);
    ER ercd = dis_tex();
    ER ercd = ena_tex();
    BOOL state = sns_tex();

(4) Ʊ̿ǽ

    ER ercd = sig_sem(ID semid);
    ER ercd = isig_sem(ID semid);
    ER ercd = wai_sem(ID semid);
    ER ercd = pol_sem(ID semid);
    ER ercd = twai_sem(ID semid, TMO tmout);

    ER ercd = set_flg(ID flgid, FLGPTN setptn);
    ER ercd = iset_flg(ID flgid, FLGPTN setptn);
    ER ercd = clr_flg(ID flgid, FLGPTN clrptn);
    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 = twai_flg(ID flgid, FLGPTN waiptn,
                    MODE wfmode, FLGPTN *p_flgptn, TMO tmout);

    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);
    ER ercd = rcv_dtq(ID dtqid, VP_INT *p_data);
    ER ercd = prcv_dtq(ID dtqid, VP_INT *p_data);
    ER ercd = trcv_dtq(ID dtqid, VP_INT *p_data, TMO tmout);

    ER ercd = snd_mbx(ID mbxid, T_MSG *pk_msg);
    ER ercd = rcv_mbx(ID mbxid, T_MSG **ppk_msg);
    ER ercd = prcv_mbx(ID mbxid, T_MSG **ppk_msg);
    ER ercd = trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout);

(5) סǽ

    ER ercd = get_mpf(ID mpfid, VP *p_blk);
    ER ercd = pget_mpf(ID mpfid, VP *p_blk);
    ER ercd = tget_mpf(ID mpfid, VP *p_blk, TMO tmout);
    ER ercd = rel_mpf(ID mpfid, VP blk);

(6) ִǽ

    ER ercd = set_tim(const SYSTIM *p_systim);
    ER ercd = get_tim(SYSTIM *p_systim);
    ER ercd = isig_tim();

    ER ercd = sta_cyc(ID cycid);
    ER ercd = stp_cyc(ID cycid);

(7) ƥִǽ

    ER ercd = rot_rdq(PRI tskpri);
    ER ercd = irot_rdq(PRI tskpri);
    ER ercd = mrot_rdq(ID clsid, PRI tskpri);
    ER ercd = imrot_rdq(ID clsid, PRI tskpri);
    ER ercd = get_tid(ID *p_tskid);
    ER ercd = iget_tid(ID *p_tskid);
    ER ercd = mget_tid(ID clsid, ID *p_tskid);
    ER ercd = imget_tid(ID clsid, ID *p_tskid);
    ER ercd = loc_cpu();
    ER ercd = iloc_cpu();
    ER ercd = unl_cpu();
    ER ercd = iunl_cpu();
    ER ercd = dis_dsp();
    ER ercd = ena_dsp();
    BOOL state = sns_ctx();
    BOOL state = sns_loc();
    BOOL state = sns_dsp();
    BOOL state = sns_dpn();
    BOOL state = vsns_ini();

(8) ߴǽ

    ER ercd = dis_int(INTNO intno);
    ER ercd = ena_int(INTNO intno);
    ER ercd = chg_ixx(IXXXX ixxxx);
    ER ercd = get_ixx(IXXXX *p_ixxxx);
     xxxxxxXXXX ϥå롥

(9) CPU㳰ȯΥƥֻ

    BOOL state = vxsns_ctx(VP p_excinf);
    BOOL state = vxsns_loc(VP p_excinf);
    BOOL state = vxsns_dsp(VP p_excinf);
    BOOL state = vxsns_dpn(VP p_excinf);
    BOOL state = vxsns_tex(VP p_excinf);

(10) ǽɾѥƥﻲȵǽ

    ER ercd = vxget_tim(SYSUTIM *p_sysutim);

9.2 ŪAPI

    CRE_TSK(tskid, { ATR tskatr, VP_INT exinf, FP task,
                                PRI itskpri, SIZE stksz, VP stk });
    DEF_TEX(ID tskid, { ATR texatr, FP texrtn });
    CRE_SEM(ID semid, { ATR sematr, UINT isemcnt, UINT maxsem });
    CRE_FLG(ID flgid, { ATR flgatr, FLGPTN iflgptn });
    CRE_DTQ(ID dtqid, { ATR dtqatr, UINT dtqcnt, VP dtq });
    CRE_MBX(ID mbxid, { ATR mbxatr, PRI maxmpri, VP mprihd });
    CRE_MPF (ID mpfid, { ATR mpfatr, UINT blkcnt, UINT blksz, VP mpf } ) ;
    CRE_CYC (ID cycid, { ATR cycatr, VP_INT exinf, FP cychdr,
                                RELTIM cyctim, RELTIM cycphs } ) ;
    DEF_INH(INHNO inhno, { ATR inhatr, FP inthdr });
    DEF_EXC(EXCNO excno, { ATR excatr, FP exchdr });
    ATT_INI({ ATR iniatr, VP_INT exinf, FP inirtn });
    VATT_TER({ ATR teratr, VP_INT exinf, FP terrtn });

9.3 ᥤ󥨥顼ɰFDMPͥ뤬֤ΤΤߡ

    E_PAR       -17             ѥ᥿顼
    E_ID        -18             IDֹ
    E_CTX       -25             ƥȥ顼
    E_ILUSE     -28             ӥ
    E_OBJ       -41             ֥Ⱦ֥顼
    E_QOVR      -43             塼󥰥Сե
    E_RLWAI     -49             Ԥ֤ζ
    E_TMOUT     -50             ݡ󥰼Ԥޤϥॢ

9.4 С

    2006ǯ322      Release 1.1             ǽθ꡼

ʾ
