
             TOPPERS/JSPJ[l [UY}jA 

            iRelease 1.4.3ΉCŏIXV: 23-Apr-2007j

 ̃[UY}jÁCITRON4.0dliVer. 4.02.00j̓e
OɋLqĂ܂DITRON4.0dĺCȉURL_E[h
邱Ƃł܂D
        http://www.ertl.jp/ITRON/SPEC/mitron4-j.html

----------------------------------------------------------------------
 TOPPERS/JSP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Just Standard Profile Kernel

 Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                             Toyohashi Univ. of Technology, JAPAN
 Copyright (C) 2004-2007 by Embedded and Real-Time Systems Laboratory
             Graduate School of Information Science, Nagoya Univ., JAPAN

 L쌠҂́Cȉ (1)`(4) ̏CFree Software Foundation 
 ɂČ\Ă GNU General Public License  Version 2 ɋL
 qĂ𖞂ꍇɌC{\tgEFAi{\tgEFA
 ς̂܂ށDȉjgpEEρEĔzziȉC
 pƌĂԁj邱Ƃ𖳏ŋD
 (1) {\tgEFA\[XR[ȟ`ŗpꍇɂ́CL̒
     \C̗pщL̖ۏ؋K肪Ĉ܂܂̌`Ń\[
     XR[hɊ܂܂Ă邱ƁD
 (2) {\tgEFACCu`ȂǁC̃\tgEFAJɎg
     pł`ōĔzzꍇɂ́CĔzzɔhLgip
     ҃}jAȂǁjɁCL̒쌠\C̗pщL
     ̖ۏ؋Kfڂ邱ƁD
 (3) {\tgEFAC@ɑgݍނȂǁC̃\tgEFAJɎg
     płȂ`ōĔzzꍇɂ́Ĉꂩ̏𖞂
     ƁD
   (a) ĔzzɔhLgip҃}jAȂǁjɁCL̒
       쌠\C̗pщL̖ۏ؋Kfڂ邱ƁD
   (b) Ĕzž`ԂCʂɒ߂@ɂāCTOPPERSvWFNg
       񍐂邱ƁD
 (4) {\tgEFA̗pɂ蒼ړI܂͊ԐړIɐ邢Ȃ鑹
     QCL쌠҂TOPPERSvWFNgƐӂ邱ƁD

 {\tgEFÁCۏ؂Œ񋟂Ă̂łDL쌠҂
 TOPPERSvWFNǵC{\tgEFAɊւāC̓Kp\
 ܂߂āCȂۏ؂sȂD܂C{\tgEFA̗pɂ蒼
 ړI܂͊ԐړIɐȂ鑹QɊւĂC̐ӔC𕉂ȂD

 @(#) $Id: user.txt,v 1.1 2008/06/17 00:04:40 suikan Exp $
----------------------------------------------------------------------
 * ITRON4.0dĺCgSƂȂč肳ꂽI[vȃA
   ^CJ[ldlłDITRON4.0dl̎dĺCg̃z[
   y[Wihttp://www.assoc.tron.org/j肷邱Ƃł܂D
----------------------------------------------------------------------
 * TRON  "The Real-time Operating system Nucleus" ̗̂łD
 * ITRON  "Industrial TRON" ̗̂łD
 * ITRON  "Micro Industrial TRON" ̗̂łD
 * TRONCITRONCуITROŃC̏iȂ͏iQŵ
   ͂܂D
 * TOPPERS  "Toyohashi OPen Platform for Embedded Real-time Systems" 
   ̗́CJSP  "Just Standard Profile" ̗̂łD
 * {}jȀíCeЂ̏W܂͓o^WłD
----------------------------------------------------------------------


PDTOPPERS/JSPJ[l̊Tv

TOPPERS/JSPJ[liȉCPJSPJ[lƏj́CTOPPERSvWF
NgɂĊJITRON4.0dlɏA^CJ[lłD
JSPiJust Standard Profilej̖OʂCITRON4.0dl̃X^_
[hvt@CKɏ]ĎĂD

1.1 ^[QbgvZbT^^[QbgVXe

JSPJ[ĺC_ŁCȉ̃^[QbgvZbT^^[QbgVXe
T|[gĂD

    fBNg          J
        vZbTi^ԁj      VXei[Jj

    m68k                    GNUJ
        M68040iMC68LC040j     DVE-68K/40idYj

    sh1                     GNUJ
        SH1iSH7032j           KZ-SH1-01is}CNRs[^j
                                 RISC]LbgSH-1iCQoŁjł
        SH1iSH7034j           ITRONSH1CPU{[hi()쏊j
        

    sh2                     GNUJ
        SH2(SH7145)             AP_SH2F_6AiAt@vWFNgj
        SH2(SH7615)             HSB7615IT ikldqj

    sh3                     GNUJ
        SH3iSH7709Aj          MS7709ASE01 iLSIVXeYj
        SH3iSH7729Rj          MS7729RSE01 iLSIVXeYj
        SH3iSH7727j           MS7727CP01  iLSIVXeYj
        SH4iSH7750j           MS7750SE01  iLSIVXeYj

    sh3-ghs                 GHSJ
        SH3iSH7709Aj          MS7709ASE01 iLSIVXeYj
        SH3iSH7727j           MS7727CP01  iLSIVXeYj

    h8                      GNUJ
        H8iH8/3052Fj          AKI-H8/3052FiHdqʏj
        H8iH8/3069Fj          AKI-H8/3069FiHdqʏj

    h8-renesas              RenesasЂ̊J
        H8(HSB8F3048BF25)       H8/3048F-ONEX^[^Lbg(()kldq)

    h8s-renesas              RenesasЂ̊J
        H8S(H8S/2339F)          MiNET-H8S/2339FiЃ~X|j

    armv4                   GNUJ
        ARM9iARM922Tj         Integrator/AP+CM922TiARMj
        ARM9iARM926EJ-Sj      AZ9360MBiYDKj

    armv4-ghs               GHSJ
        ARM9 iARM920Tj        Integrator/AP+CM920TiARMj
        ARM9EiARM966E-Sj      Integrator/AP+CM966E-SiARMj

    m32r                    GNUJ
        M32RiM32102S6FPj      M3A-2131G50iOHd@j
        M32RiM32102S6FPj      M3A-ZA36   iOHd@j

    m32c-renesas            RenesasЂ̊J
        M32C                    OAKS32iI[NXdqj

    microblaze              GNUJ
        MicroBlaze              MIREFiYDKj
        MicroBlaze              MIRE_MULTI3000iYDKj
        MicroBlaze              MultiMedia BoardiXilinxj
        MicroBlaze              Suzaku(Abg}[NeNm)

    tms320c54x              TIЂ̊J
        TMS320C54xiTSM320C5402jTMS320VC5402 DSKiTIj

    xstormy16               GNUJ
        Xstormy16               Om}CRJc[iOmd@j

    m16c-renesas            RenesasЂ̊J
        M16CiM30620FCAFP-CPUj OASKS16iI[NXdqj
        M16CiM30262F8FG-CPUj  OAKS16-MINIiI[NXdqj

    s1c33                   GNUJ
        SC33                    DMT33209iEPSONj
        SC33                    LUXUN2iEPSONj

    s1c33-gnu33             GNU33J
        SC33                    DMT33209iEPSONj
        SC33                    LUXUN2iEPSONj

    nios2                   GNUJ
        Nios2                   NiosII Development BoardiAej

    v850                    GNUJ
        V850                    TK-850/KJ1+ (Application Corp.)
        V850                    TK-850/SG2  (Application Corp.)

    tlcs900                 ŃZ~R_N^А̊J
        TMP91CY22-CPU           Zup-F16g{[h(^}fHƊ)

܂Cȉ̃^[QbǵCȑÕo[W(1.4.1)̃R[hAbvf
[gĂ炸CmFsĂȂ߁C1.4.2ȍ~ł́CQl
ƂD

    h8                      GNUJ
        H8iH8/3048Fj          AKI-H8/3048FiHdqʏj
        H8 (H8/3069F)           NKEV-010H8   (iʐMvT[rX)

    h8s                     GNUJ
        H8Si2350j             H8S/2350 ]{[h(~X|)

    powerpc32               GNUJ
        PowerPC32iMPC860Tj    TB6102Si^obNj

    mips3                   GNUJ
        MIPS3iVR4131j         KZ-Vr4131PCI-01is}CNRs[^j
        MIPS3iVR5500j         RTE-VR5500-CB(64)i}C_XE{j


JSPJ[ĺCJ[l̂ł葽̕CŋLqC^[Qb
gˑƈˑ𖾊mɕȂǁC̃^[QbgvZbTւ̃|
[eBOeՂȍ\ɂȂĂDC|[eBOɂǂ̒x̎
Ԃ邩́C^[QbgvZbT̃A[LeN`VXe̍\
ǂɈˑD

̃[UY}jAł́C^[Qbgi^[QbgvZbTу^[
QbgVXejɈˑȂ@\ɂĂ̂ݐĂD^[Qbg
ˑ@\ɂẮC^[Qbg̃}jAQƂ邱ƁD

1.2 J

JSPJ[ĺCGCCȂǂGNUJW̃\tgEFAJƂ
邪C̎ނ̊Jpł悤ɍlĂDpłJ
ɂẮC^[Qbg܂͊J̃}jAŐD

^[Qbgˑ́C啔͕WICɂċLqĂ邪C
\Ɖǐ𗼗邽߂ɁCꕔŃCC֐pĂDC
C֐̋@\ȂJ̏ꍇłCȂɑΉ\ł͂
邪C^ʂȃR[h邨ꂪD

J[l{̂́CÕCu֐ɈˑȂ悤ɋLqĂD
CRpCWCCu֐ĂяoR[h𐶐ꍇ
C̏ꍇɂ͕WCCuKvłD܂CVXeT[rX
T|[gCuCAvP[VvOŕWCCuK
vɂȂꍇlDہCWzzLbgɊ܂܂钆ŁCVXe
O@\Ăяo߂̃Cu֐ŁCϐ邽߂
@\istdarg.h, va_list, va_start, va_argjpĂiۂɂ́CGNU
Jł́Cϐ邽߂̋@\GCC{̂ŃT|[gĂ
邽߁CWCCu͕KvȂjD̗RɂCWCCu
p\Ƃ悤ɂĂD

1.3 V~[V

JSPJ[l̃V~[VƂāCLinuxœ삷
Windowsœ삷pӂĂD̃V~[V́C
LinuxWindows̈̃vZX̒ŕ̃^XN؂ւē삳
̂ŁCXbhCuƂĎgƂłD

̃V~[VɂĂ̏ڍׂ́CV~[V
}jAQƂ邱ƁD

1.4 J[lT|[g@\

JSPJ[ĺCOʂCITRON4.0dl̃X^_[hvt@C
Ɋ܂܂@\ׂăT|[gĂDX^_[hvt@Cł́C
݃nhƊ݃T[rX[`̂ꂩT|[g΂悢C
JSPJ[ĺCł͊݃nĥ݂T|[gĂD

X^_[hvt@CɊ܂܂Ȃ@\ƂāC^[QbgˑɈȉ
݊Ǘ@\уT[rXR[T|[gꍇD̋@
\̋̓IȓeɂẮC^[QbgɈقȂDڂ́C^[Qbg
̃}jAQƂ邱ƁD

    dis_int     ݂̋֎~
    ena_int     ݂̋
    chg_ixx     ݃}XN̕ύX
    get_ixx     ݃}XN̎Q
     xx ̓^[Qbgɒ߂D

܂CITRON4.0dlɒ`ĂȊOɁCȉ̓Ǝ̊g@\
T[rXR[T|[gĂD

(1) CPUÕVXeԂ̎Q

X^_[hvt@Cł́CCPUOnhŁCCPUOR
eLXgԂQƂł邱ƂKvł邪Ĉ߂API͒߂
ȂDJSPJ[lł́CCPUOsns_yyyĂяo
̌ʂCCPUOnhŎo悤ɂ邽߂ɁCȉ̌܂
̃T[rXR[ƎɃT|[gĂD

    vxsns_ctx   CPUÕReLXg̎Q
    vxsns_loc   CPUOCPUbNԂ̎Q
    vxsns_dsp   CPUÕfBXpb`֎~Ԃ̎Q
    vxsns_dpn   CPUÕfBXpb`ۗԂ̎Q
    vxsns_tex   CPUÕ^XNO֎~Ԃ̎Q

(2) \]pVXeQƋ@\

\]pVXeQƋ@\Ƃ́CJSPJ[lœ삷^XNJSP
J[lg̐\v邽߂́CVXeʕbPʂœǂݏo@
\łD̋@\̂߂ɒǉT[rXR[͎̒ʂłD

    vxget_tim   \]pVXe̎Q

\]pVXeQƋ@\T|[g邩ǂ́C^[Qbgˑ
̒`t@CŎw肷邱ƂłD܂C^[QbgVXe̐
ɂC̋@\T|[głȂꍇD

(3) I[`@\

JSPJ[lł́CVXȅIɌĂяoI[`o^
邽߂̋@\T|[gĂD̋@\̂߂ɒǉÓIAPI͎
̒ʂłD

    VATT_TER    I[`̒ǉiÓIAPIj

I[`ɂẮCu2.12 VXeI菇ƏI[`v
QƂ̂ƁD

(4) J[lԂ̎Q

J[lœ삷^XNĂяo֐CJ[l̏
OIJnɂĂяo\ꍇɂ́C̒ŃJ[l
̃T[rXR[Ăяo邩𔻕ʂ邱ƂKvƂȂDJSPJ[l
ł́C̔ʂ\ɂ邽߂ɁC̃T[rXR[ǉĂD

    vsns_ini    J[lԂ̎Q

1.5 m̖_

o[Wł́CÓIAPȈ̃G[̌o@\̒ŁC^[Qbg
ˑ̃G[̌os\łDႦ΁C݃nhԍsȒl
łꍇCJ[lƃRtBM[^̂G[oCJ[
l삵ȂʂƂȂD

kernel_cfg.ćCJ[lCVXeT[rXCAvP[V̂
CN[ht@CCN[hC̃V{QƂ\
D̂߁CJ[lCVXeT[rXCAvP[VŃV{
Փ˂ĂꍇCRpCIvVHĂꍇɁC
kernel_cfg.cRpCłȂȂꍇlDJ[l
V{l[Ȃǂ̕@łȂyĂ͂邪C肪Ȃ
ȂĂ킯ł͂ȂD

VAC^tF[XhCoŁCVA|[gN[YɃI[
vȂꍇɁC삵ȂD́CVAC^tF[X
hCogpĂZ}tHȂ߂łD

1.6 ӎ

CRE_DTQ̃p[^dtqcnt́CITRON4.0dlVer. 4.01.00ł͈ʒ萔
p[^ƋK肳Ă邪CJSPJ[lłVer. 4.02.00ɏāC
vvZbT萔p[^ƈĂD


QDJSPJ[l̋@\

̐߂ł́CITRON4.0dlŎ`ƂȂĂ鎖𒆐SɁCJSPJ[
l̋@\ɂĉD

2.1 jƃf

ITRON4.0dl̃X^_[hvt@ĆCVXeŜ̃W[
ɃN邱Ƃz肵ċK肳ĂD܂CT[rXR[̌ďo
́CPȂTu[`R[ɂčsƂz肳ĂDJSPJ[
ĺC̑zɏ]CAvP[VƃJ[l̃W[
NCTu[`R[ɂăT[rXR[Ăяo@݂̂
T|[gĂD

JSPJ[lœ삷AvP[V́CׂCŋLq邱Ƃ
ƂĂD̂߁C^XN⊄݃nhȂǂ̏PʂAZ
uŋLq@́Cʂɂ͗pӂĂȂiCC^tF[
XC̊֐ɂ킹΁CLqɃAZugƂ͖
jD

JSPJ[lł́CT[rXR[̑啔̊݋֎~ԂƂĎ
Ă邽߁CT[rXR[̕s͌ɕۏ؂DtɌ_
ẮCő劄݋֎~ԁiő劄݉ԂljC҂L[
Ȃ^XN̍ő吔^CCxg̍ő吔Ɉˑ邱ƂɂȂ邪C
X^_[hvt@C̋@\Zbg͈͓̔ł́C̕@łق
ɂȂȂƎvD

2.2 f[^^

JSPJ[lł́CȉɃXgAbvf[^^Csigned int^C
unsigned int^C܂size_t^ɒ`ĂĎ^̃TCÝC
JSPJ[l|[eBOĂ^[QbgvZbT^RpC
ɂ 32rbgł邽߁CłȂꍇɂ̂݃^[Qbg̃}
jAɖDȂ킿C^[Qbg̃}jAɖĂ
CȉɃXgAbvf[^^̃TCY 32rbgłD

    signed int^ɒ`Ăf[^^

        INT             t
        BOOL            ^Ul
        FN              @\R[h
        ER              G[R[h
        ID              IDԍ
        PRI             Dx
        TMO             ^CAEgl
        ER_BOOL         ER ܂ BOOL
        ER_ID           ER ܂ ID
        ER_UINT         ER ܂ UINT

    unsigned int^ɒ`Ăf[^^

        UINT            
        ATR             
        STAT            
        MODE            샂[h
        RELTIM          Ύ
        TEXPTN          ^XNOṽrbgp^[
        FLGPTN          CxgtÕrbgp^[

    size_t^ɒ`Ăf[^^
        SIZE            TCY

CRELTIM^̗Lrbg31rbgz邱Ƃ͂ȂDȂ킿C
unsigned int^̃TCY32rbg̏ꍇɂ́CRELTIM^̗Lrbg 
31rbgłC(2^31 - 1)zl RELTIM^̃p[^ɓn
CE_PARG[ƂȂDunsigned int^̃TCY16rbg̏ꍇɂ́C
RELTIM^̗Lrbg16rbgłDX^_[hvt@Cł́C
RELTIM^16rbgȏƋK肵ĂC̎dlŃX^_[hvt@C
KɏĂD

SYSTIM^́C32rbg̕^ɒ`ĂC\̂ƂĒ`
@͗pĂȂD

Ԃ킷f[^^iTMOCRELTIMCSYSTIMj̎ԒPʂ́CX^_[
hvt@C̋Kɏ]Cׂ1~bƂĂD

2.3 IuWFNgIDԍƗDx

IuWFNgIDԍɂ́C1A̒lpDIuWFNg
IDԍɔꍇiႦ΁CID=1ID=3̃IuWFNgo^C
ID=2̃IuWFNgo^Ȃꍇjɂ́CRtBM[^G[
񍐂DIDԍpVXeIuWFNgƃ[UIuWFNg
̋ʂ̓T|[gĂȂD

łIuWFNg̍ő吔́CJ[l̃R[h́CIDԍID^
isigned int^ɒ`Ăjŕ\ł͈͓ł邪Cۂɂ̓
eʂɂĐDȂCJSPJ[lł́CIuWFNg𐶐
邽߂̃T[rXR[̓T|[gĂȂD

^XNƃbZ[W̗Dxɂ́C1`16̐̒lpD

2.4 G[`FbNƃG[R[h

JSPJ[lł́CȉɎCG[R[hԂG[̌oȗ
ĂD

    E_SYS       VXeG[
    E_MACV      ANZXᔽ

܂C|C^̒lsȏꍇ̃p[^G[iE_PARǰoȗ
ĂDANZXᔽiE_MACVǰoȗĂ邽߁C
|C^nT[rXR[ɑ΂āC݂ȂԒn|C
^ȂǁCsȃANZXN|C^nꍇCvZbTo
XG[ȂǂCPUONꍇi̓Iȓ̓^[Qbgv
ZbTɈˑjD

ITRON4.0dlɒ`Ă郁CG[R[h̒ŁCX^_[h
vt@C̋@\ł͔Ȃ̂CJSPJ[l̎㔭Ȃ
̂DJSPJ[lŃT[rXR[ԂCG[R[hɂ
ẮCu9.3 CG[R[hꗗvQƂ̂ƁD

JSPJ[lł́CTuG[R[h͗pĂȂDTuG[R[hɂ
-1ԂD

2.5 ݃nh

JSPJ[lł́C݃nh̋@\Ƃ`ÓIAPIiDEF_INHj
T|[gĂC݃T[rX[`̋@\ƂǉÓI
APIiATT_ISRj̓T|[gĂȂD

݃nhCɂLq`͎̒ʂƂD

        void interrupt_handler(void)
        {
                ݃nh{
        }

JSPJ[lł́CCŋLqꂽ݃nhĂ΂鎞_ŁCCPU
bNԂɂȂĂD܂C݃nh烊^[ɂ́C
C̊֐PɃ^[΂悢D

݃nhAZuŋLq@́CT|[gĂȂD

NMIi}XNłȂ݁jȊOɃJ[l̊ǗO݂̊邩ǂ
́C^[QbgˑłD̓IȎdlɂẮC^[Qbg̃}j
AQƂ邱ƁD

2.6 ^CCxgnh

JSPJ[lł́C^CCxgnhƂāCnĥ݂T|[
gĂDnh́Cisig_timT[rXR[̒CTu[`
R[ŌĂяoD̂߁Cnh̗D揇ʂ́Cisig_tim
Ăяo݃nhiɌƁCisig_tim
яo݃nhC̊݃nhD揇
̂̏ႢjD

2.7 CPUOnh

JSPJ[lł́CX^_[hvt@CKɏ]āCCPUOnh
̋@\Ƃ`ÓIAPIiDEF_EXCjT|[gĂD

JSPJ[lł́CCPUOnh͔^XNReLXgŎsD
^XNReLXgĂяoT[rXR[́CCPUOnh
ĂяoƂłDCCPUOCPUbNԂŔꍇ
́CCPUOnhCPUbN邱Ƃ͂łC^XNRe
LXgĂяoT[rXR[ĂяoƂłȂD

ITRON4.0dlɂāCCPUOnhōŝׂƂċK肳
ĂéĈ悤ȕ@ōsƂłD

 (a) CPUOReLXgԂ̎QƂ́Ĉ߂ɗpӂꂽ
     JSPJ[lƎ̃T[rXR[ivxsns_ctxCvxsns_locCvxsns_dspC
     vxsns_dpnCvxsns_texjpčsƂłDڂ́Cu3.10 
     CPUÕVXeԎQƁvQƂ邱ƁD

 (b) CPUO^XNIDԍ̎QƂ́Ciget_tidT[rXR[
     ĂяoƂɂčsƂłD

 (c) ^XNO̗v́Ciras_texT[rXR[ĂяoƂɂ
     čsƂłD

CPUOnh̗D揇ʂ́C^XNReLXgsCPUO
ꍇɂ́CfBXpb`CׂĂ̊݃nhу^
C}nhႢD^XNReLXgsCPUO
ꍇɂ́CCPUO̗D揇ʂi
ƁCCPUOCCPUO
D揇ʂ̂̏ႢjD

CPUOnhCɂLq`͎̒ʂƂD

        void cpu_exception_handler(VP p_excinf)
        {
                CPUOnh{
        }

p_excinf ɂ́CCPUOɊւLĂ̈̐擪Ԓnn
D́CCPUOnhŁCCPUOReLXgԂ
QƂۂɕKvƂȂDڂ́Cu3.10 CPUÕVXeԎQ
ƁvQƂ邱ƁDCPUOnh烊^[ɂ́CC̊֐
PɃ^[΂悢D

CPUOnhAZuŋLq@́CT|[gĂȂD

2.8 ^XNReLXg̃T[rXR[ďoƊ݋֎~

JSPJ[lł́C^XNReLXgp̃T[rXR[ƁC^XNR
eLXgp̃T[rXR[ɋʂĂD^XNReLXg
p̃T[rXR[^XNReLXgĂяoꍇC^X
NReLXgp̃T[rXR[^XNReLXgĂяo
ɂ́CE_CTXG[ԂD

܂C^XNReLXgĂяoꂽT[rXR[̒xs͍s
ĂȂD̂߁C^XNReLXgĂяoT[rXR[C
Ώۂ̃IuWFNg̏ԂɈˑĔG[o邱Ƃ
D

2.9 VXe菇Ə[`

J[lNɂ́C^[QbgɈˑčsȂ΂ȂȂŒ
̏sCCPUbNԂƓ̏ԂŁCkernel_start֐
яoDJSPJ[lł́C^[QbgɃX^[gAbvW[p
āC̏sĂDڂ́C^[Qbg̃}jAQƂ
邱ƁD

ATT_INIɂĒǉꂽ[`́CJ[l̃f[^\
⑼̐ÓIAPȈIɁCVXeRtBM[V
t@CłATT_INI̋LqƓŌĂяoD[`
ł́CT[rXR[ĂяoĂ͂ȂȂD[`ŃT[r
XR[ĂяoꍇCVXe͕̓ۏ؂Ȃiۂɂ́C^[
QbgɂāCĂяoĂxȂT[rXR[jD܂C
[`sɃJ[l̊ǗO݂̊֎~Ă邩ǂ
́C^[Qbgkernel_start֐Ăяoꂽ̏ԂɈˑD
̓Iɂ́C^[Qbg̃}jAQƂ邱ƁD

2.10 ÓIAPIƃRtBM[^

JSPJ[ĺCITRON4.0dlɋK肳ꂽVXeRtBM[V
菇ɏ菇ŁCRtBM[VsD

VXe̍\LqVXeRtBM[Vt@ĆC܂
C̃vvZbTŏČʂJ[l̃RtBM[
^icfgvOjɓ͂DJ[l̃RtBM[^́CJ[l
\Et@Ckernel_cfg.cɁCIDtʃwb_t@C
kernel_id.hɐD܂CÓIAPĨp[^`FbNɗpt@
Ckernel_chk.cɁCÓIAPỈ͓e܂ރIuWFNg`t@C
kernel_obj.datɐDÓIAPI̕@G[iя̃G[
̈ꕔjo΁CJ[l̃RtBM[^G[񍐂D

kernel_cfg.ćCRpCāCAvP[VvOуJ[
lƋɃNDNɂ萶ꂽ[hW[́CJ[
l̃p[^`FbNvOichkvOjɂāCÓIAPI
p[^`FbNsDp[^̒l̃G[oƁCp
[^`FbNvOG[񍐂邪Cu1.5 m̖_v
qׂʂCo[Wł̓p[^G[̃`FbN͕sSłD

ȏ̎菇́CMakefileɋLqĂD\tgEFAĩRtBM
[^gݍ݂ꍇɂ́CMakefileCKvD

2.11 CN[ht@C

AvP[Vp邱ƂłCN[ht@ĆCincludefB
Ng̉ɒuĂD

t_services.h́CJ[lœ삷vÕ\[Xt@CŃCN
[hׂWCN[ht@CłD̒ŁCkernel.hi
ɂCt_stddef.hCitron.hCtool_defs.hCsys_defs.hCcpu_defs.hC
t_syslog.hjserial.hCN[hĂD܂CAvP[V
LvƎv`܂łD

s_services.h́Cڃn[hEFAɃANZXfoCXhCõ\[X
t@CŃCN[hׂWCN[ht@CłD̒ŁC
sil.hiɂCt_stddef.hCitron.hCtool_defs.hCsys_defs.hC
cpu_defs.hCt_syslog.hjt_config.hiɂCsys_config.hC
cpu_config.hCtool_config.hjCN[hĂD܂CAvP[
VĂ΂foCXhCõCN[ht@CŁCCC
֐ȂǂŃVXeC^tF[XCpĂꍇɂC̃t@C
CN[hD

2̃t@CCN[ht@Ciɗ񋓂́j́C
ڃCN[hȂ̂ł邪C3̃P[X͗OłD

(1) J[lĂ΂foCXhCõCN[ht@CŁCC
    C֐ȂǂŃVXeC^tF[XCpĂꍇɂ́C
    sil.hCN[hD

(2) J[lœ삷vOŁC^[QbgˑQƂ
    ɂ́Ct_config.hCN[hD

(3) ITRONdlOS\tgEFA|[eBOꍇȂǂɂ́C
    kernel.h𒼐ڃCN[hĂ悢D

(4) ITRONdlʋKɏ\tgEFAĩCN[ht@C
    ́Citron.h𒼐ڃCN[hĂ悢D

JSPJ[lRelease 1.3ȑÕo[Wł́Ct_services.h
jsp_services.hƂt@CɂȂĂDo[W킸ɓ삷
vOۂɂ́Ct_services.hCN[hCÂo[W
jsp_services.ht_services.hɃV{bNN\@𐄏D

ȂCjsp_kernel.h́CJ[l\vÕ\[Xt@CŃC
N[hׂWCN[ht@CłCJ[lœ삷
vÕ\[Xt@C͒ʏ̓CN[hȂD

2.12 VXeI菇ƏI[`

AvP[V kernel_exit֐ĂяoƂŁCJ[lI
邱ƂłDkernel_exit֐ĂяoƁCJ[ĺCI
[`̎sCJˑ̏Iiatexit ɂēo^ꂽ֐
 C++ ɂfXgN^̎sjsCJ[l̏Is
D

I[`́CAvP[VŗpӂCVATT_TER găJ[l
ɓo^DVATT_TER ɂĒǉꂽI[`́CJ[l
̊ǗOׂ݂̊Ă݂̊֎~ԂŁCVXeRtB
M[Vt@Cł VATT_TER ̋LqƋt̏ŌĂяoD
I[`ł́CT[rXR[ĂяoĂ͂ȂȂDI
[`ŃT[rXR[ĂяoꍇCVXe͕̓ۏ؂
iۂɂ́C^[QbgɂāCĂяoĂxȂT[rXR[
jD

2.13 ̑

JSPJ[lł́Ct_stddef.h ̒ŁC̃}N`ĂD

(1) assert(exp)

JSPJ[lł́Cassert}NƎɒ`ĂDJ̕W
assert}N͎gȂD

(2) throw()

CEC++ł́Cthrow() ɂȂ悤ɒ`ĂDC++ꂩ
Ăяo\̂CŋLqꂽ֐̃vg^Cv錾ɁCthrow() 
邱Ƃz肵ĂD

܂Ct_services.h ̒ŁC̃}N`ĂD

(3) syscall(s)

T[rXR[ s ĂяoCԒlG[ł΁CG[bZ[W
o͂D

(4) _syscall(s)

T[rXR[ s ĂяoCԒlG[ł΁CG[bZ[W
o͂CJ[lُID


RDJSPJ[l̃T[rXR[ƐÓIAPI

̐߂ł́CJSPJ[l̃T[rXR[ƐÓIAPIɂāCITRON4.0d
lŎ`ƂȂĂ鎖JSPJ[lƎ̃T[rXR[𒆐S
D

3.1 ^XNǗ@\

^XN̋NvL[CO̍őliTMAX_ACTCNTj1ɌŒ肵ĂD

(1) CRE_TSK                     ^XN̐iÓIAPIj

tskatr  TA_ASM w肳ꂽꍇ̋@\i^XNAZuŋLq
j̓T|[gĂȂD܂Cstk  NULL ȊOw肳ꂽꍇ̋@
\iX^bN̈̐擪Ԓnw肷jT|[gĂȂD

(2) act_tsk, iact_tsk           ^XN̋N

(3) can_act                     ^XNNṽLZ

(4) ext_tsk                     ^XN̏I

ext_tsk ^XNReLXgĂ΂ꂽꍇCVXeO@\p
ăG[o͂iLOG_EMERGxjĈ܂܎s𑱂邪C
͕ۏ؂ȂD

ext_tsk CPUbNԁi܂̓fBXpb`֎~ԁjŌĂ΂ꂽꍇC
VXeOɃG[L^iLOG_WARNINGxjCCPUbN
i܂̓fBXpb`ԁjɂĂ^XNID

(5) ter_tsk                     ^XN̋I

(6) chg_pri                     ^XNDx̕ύX

(7) get_pri                     ^XNDx̎Q

3.2 ^XNt@\

^XN̋NvL[CO̍őliTMAX_WUPCNTj 1 ɌŒ肵Ă
D܂C^XN̋҂vlXg̍őliTMAX_SUSCNTj 1 Ɍ
肵ĂD

(1) slp_tsk                     N҂
(2) tslp_tsk                    N҂i^CAEgj

(3) wup_tsk, iwup_tsk           ^XN̋N

(4) can_wup                     ^XNNṽLZ

(5) rel_wai, irel_wai           ҂Ԃ̋

(6) sus_tsk                     ҂Ԃւ̈ڍs

(7) rsm_tsk                     ҂Ԃ̍ĊJ
(8) frsm_tsk                    ҂Ԃ̋ĊJ

^XN̋҂vlXg̍őliTMAX_SUSCNTj 1 ł邽߁C
rsm_tsk  frsm_tsk ̏e͓łD

(9) dly_tsk                     ^XN̒x

3.3 ^XNO@\

TEXPTN^́Cunsigned int^ɒ`ĂD TBIT_TEXPTN ́C
unsigned int^ 32rbg̏ꍇ 32C16rbg̏ꍇ 16 ɂȂD

(1) DEF_TEX                     ^XNO[`̒`iÓIAPIj

texatr  TA_ASM w肳ꂽꍇ̋@\i^XNO[`AZ
uŋLqj̓T|[gĂȂD

(2) ras_tex, iras_tex           ^XNO̗v

(3) dis_tex                     ^XNŐ֎~

(4) ena_tex                     ^XNŐ

(5) sns_tex                     ^XNO֎~Ԃ̎Q

3.4 EʐM@\

3.4.1 Z}tH

Z}tH̍ő厑́CUINT^iunsigned int^ɒ`Ăjŕ\
鐔l͈͓̔łDȂ킿Cunsigned int^ 32rbg̏ꍇ 
(2^32 - 1)C16rbg̏ꍇ (2^16 - 1) = 65535 łDTMAX_MAXSEM 
`ĂȂD

(1) CRE_SEM                     Z}tH̐iÓIAPIj

(2) sig_sem, isig_sem           Z}tH̕ԋp

(3) wai_sem                     Z}tH̊l
(4) pol_sem                     Z}tH̊li|[Oj
(5) twai_sem                    Z}tH̊li^CAEgj

3.4.2 CxgtO

̃CxgtOŕ̃^XN҂ԂɂȂ@\̓T|[g
ȂD

FLGPTN^́Cunsigned int^ɒ`ĂD TBIT_FLGPTN ́C
unsigned int^ 32rbg̏ꍇ 32C16rbg̏ꍇ 16 ɂȂD

(1) CRE_FLG                     CxgtO̐iÓIAPIj

flgatr  TA_WMUL w肳ꂽꍇ̋@\iCxgtOŕ̃^XN
҂ԂɂȂj̓T|[gĂȂD

(2) set_flg, iset_flg           CxgtÕZbg

(3) clr_flg                     CxgtÕNA

(4) wai_flg                     CxgtO҂
(5) pol_flg                     CxgtO҂i|[Oj
(6) twai_flg                    CxgtO҂i^CAEgj

3.4.3 f[^L[

dtqcnt̃f[^i[̂ɕKvȃf[^L[̈̃TCÝC
sizeof(VP_INT) * dtqcnt oCgłDTSZ_DTQ ͒`ĂȂD

(1) CRE_DTQ                     f[^L[̐iÓIAPIj

dtq  NULL ȊOw肳ꂽꍇ̋@\if[^L[̈̐擪Ԓnw
肷j̓T|[gĂȂD

(2) snd_dtq                     f[^L[ւ̑M
(3) psnd_dtq, ipsnd_dtq         f[^L[ւ̑Mi|[Oj
(4) tsnd_dtq                    f[^L[ւ̑Mi^CAEgj

(5) fsnd_dtq, ifsnd_dtq         f[^L[ւ̋M

(6) rcv_dtq                     f[^L[̎M
(7) prcv_dtq                    f[^L[̎Mi|[Oj
(8) trcv_dtq                    f[^L[̎Mi^CAEgj

3.4.4 [{bNX

T_MSG^͉L̂悤ɒ`ĂDT_MSG^̃TCÝC^[Qbgv
ZbT^RpC̃|C^̃TCYɈvD

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

JSPJ[lł́CDxʃbZ[WL[wb_̈͗pĂȂD
TSZ_MPRIHD ͒`ĂȂC`Ƃ 0 ƂȂD

(1) CRE_MBX                     [{bNX̐iÓIAPIj

mprihd  NULL ȊOw肳ꂽꍇ̋@\iDxʃbZ[WL[wb
_̈̐擪Ԓnw肷j̓T|[gĂȂD

(2) snd_mbx                     [{bNXւ̑M

(3) rcv_mbx                     [{bNX̎M
(4) prcv_mbx                    [{bNX̎Mi|[Oj
(5) trcv_mbx                    [{bNX̎Mi^CAEgj

3.5 v[Ǘ@\

3.5.1 Œ蒷v[

TCY blkszoCg̃ubN blkcntlł̂ɕKvȌ
蒷v[̈̃TCÝCTROUND_VP(blksz) * blkcnt oCgłD
ŁCTROUND_VP(blksz) ́Cblksz ^[QbgvZbT^RpC
̃|C^̃TCY̔{ɂȂ悤؂グ\DTSZ_MPF ͒`
ĂȂD

(1) CRE_MPF                     Œ蒷v[̐iÓIAPIj

mpf  NULL ȊOw肳ꂽꍇ̋@\iŒ蒷v[̈̐擪
nw肷j̓T|[gĂȂD

(2) get_mpf                     Œ蒷ubN̊l
(3) pget_mpf                    Œ蒷ubN̊li|[Oj
(4) tget_mpf                    Œ蒷ubN̊li^CAEgj

(5) rel_mpf                     Œ蒷ubN̕ԋp

blkp[^iԋp郁ubN̐擪Ԓnj̒lCԋp̃
v[̈̊OCubN̓rwꍇɂ́CE_PARG[
ԂDl̃ubNԋpꍇCԋpς̃ubN
ēxԋpꍇ͕̓ۏ؂ȂD

3.6 ԊǗ@\

^CCxgnhɊւẮCu2.6 ^CCxgnhvQ
邱ƁD

3.6.1 VXeǗ

JSPJ[lł́C^CeBbN̋iisig_tim IɌĂяoj
̓VXeT[rX̃VXeNbNhCoɂĎĂDVX
eNbNhCo̎v́C^[QbgɃn[hEFA^C}g
ĎĂCisig_tim Ăяo̓^[Qbgɒ߂D
 TIC_NUME  TIC_DENO ́C^[Qbgˑ̃AvP[Vp̃C
N[ht@Cicpu_defs.h  sys_defs.hj̒Œ`ĂD
^[QbgɂẮC̐lύX邾 isig_tim Ăяo
ύXł悤ɎĂꍇDڂ́C^[Qbg̃}
jAQƂ邱ƁD

(1) set_tim                     VXe̐ݒ

(2) get_tim                     VXe̎Q

(3) isig_tim                    ^CeBbN̋

isig_tim ́C^[Qbgˑɒ`ꂽ TIC_NUME  TIC_DENO Ŏw肳
鎞ԂVXei߁CKvȃ^CCxgi^CAEgC
nh̋NȂǁj̏sDJSPJ[lł́CVXeNbN
hCõT[rXR[IɌĂяo߁CAvP[V
ĂяoKv͂ȂD

3.6.2 nh

nh̋Nʑۑ@\̓T|[gĂȂD

(1) CRE_CYC                     nh̐iÓIAPIj

cycatr  TA_PHS w肳ꂽꍇ̋@\inh̋Nʑۑ
j̓T|[gĂȂD܂CTA_ASM w肳ꂽꍇ̋@\i
nhAZuŋLqjT|[gĂȂD

cycatr  TA_STA w肵Ccycphs  0 w肵ꍇCnh
̋ŃCVXeN̍ŏ̃^CeBbNōsDȂ킿C
cycphs  1 w肵ꍇƓU镑ƂȂĎƂȂ邽߁C
cycphs  0 w肷邱Ƃ͐ȂD

(2) sta_cyc                     nh̓Jn

(3) stp_cyc                     nh̓~

3.7 VXeԊǗ@\

(1) rot_rdq, irot_rdq           ^XN̗D揇ʂ̉]

(2) get_tid, iget_tid           sԂ̃^XNID̎Q

(3) loc_cpu, iloc_cpu           CPUbNԂւ̈ڍs

(4) unl_cpu, iunl_cpu           CPUbNԂ̉

(5) dis_dsp                     fBXpb`̋֎~

(6) ena_dsp                     fBXpb`̋

(7) sns_ctx                     ReLXg̎Q

(8) sns_loc                     CPUbNԂ̎Q

(9) sns_dsp                     fBXpb`֎~Ԃ̎Q

(10) sns_dpn                    fBXpb`ۗԂ̎Q

(11) vsns_ini                   J[lԂ̎Q

yCAPIz
        BOOL state = vsns_ini();

yp[^z
        Ȃ

y^[p[^z
        BOOL    state           J[l

y@\z

J[l̏O܂͏IJnɌĂяoꂽꍇ TRUEC
J[l̓쒆ɌĂяoꂽꍇ FALSE ԂD

̃T[rXR[ TRUE Ԃɂ́C̃T[rXR[Ăяo
͂ȂȂD̃T[rXR[ TRUE Ԃɑ̃T[rXR[
яoꍇCVXe͕̓ۏ؂ȂD

3.8 ݊Ǘ@\

݃nhɊւẮCu2.5 ݃nhvQƂ邱ƁD

(1) DEF_INH                     ݃nh̒`iÓIAPIj

INHNO^̒` inhno ̈Ӗ̓^[Qbgɒ߂Dinhatr ɂ́C
TA_HLNG ݂̂w肷邱ƂłD

(2) dis_int                     ݂̋֎~
(3) ena_int                     ݂̋
(4) chg_ixx                     ݃}XN̕ύX
(5) get_ixx                     ݃}XN̎Q

̃T[rXR[T|[gĂ邩ǂCT|[gĂ
ꍇ̎dlixx ̖́̕C^ƃp[^̖̂ƈӖCCPUbN
fBXpb`ԂƂ̊֘AjɂẮC^[QbgˑłD̓I
́C^[Qbg̃}jAQƂ邱ƁD

3.9 VXe\Ǘ@\

CPUOnhɊւẮu2.7 CPUOnhvC[`Ɋ
Ắu2.9 VXe菇Ə[`vQƂ邱ƁD

(1) DEF_EXC                     CPUOnh̒`iÓIAPIj

EXCNO^̒` excno ̈Ӗ̓^[Qbgɒ߂Dexcatr ɂ́C
TA_HLNG ݂̂w肷邱ƂłD

(2) ATT_INI                     [`̒ǉiÓIAPIj

iniatr  TA_ASM w肳ꂽꍇ̋@\i[`AZu
ŋLqj̓T|[gĂȂD

(3) VATT_TER                    I[`̒ǉiÓIAPIj

yÓIAPIz
        VATT_TER({ ATR teratr, VP_INT exinf, FP terrtn });

yp[^z
        ATR     teratr  I[`
        VP_INT  exinf   I[`̊g
        FP      terrtn  I[`̋NԒn

y@\z

I[`Cw肳ep[^ɊÂĒǉDteratr 
͏I[`̑Cexinf ͏I[`N鎞Ƀp
[^ƂēngCterrtn ͏I[`̋NԒnłD

VATT_TER ɂẮCteratr ̓vvZbT萔p[^łD 
teratr ɂ́CTA_HLNG ̎w肪łDTA_HLNGi0x00jw肳ꂽꍇ
ɂ͍p̃C^tF[XŏI[`ND

VATT_ATR ɂĒǉꂽI[`́CVXeIɎ
sDڂ́Cu2.12 VXeI菇ƏI[`vQ
邱ƁD

3.10 CPUÕVXeԎQ

CPUOnhŁCCPUOReLXgԂQƂ邽
̃T[rXR[ƂāCJSPJ[lł́C܂̃T[rXR[Ǝ
T|[gĂDT[rXR[ vxsns_yyy ́CCPUO 
sns_yyy Ăяoꍇ̌ʂôŁCCPUOnhɓn
p[^ p_excinf p[^ƂD

(1) vxsns_ctx                   CPUÕReLXg̎Q

yCAPIz
        BOOL state = vxsns_ctx(VP p_excinf);

yp[^z
        VP      p_excinf        CPUOɊւLĂ̈
                                擪Ԓn

y^[p[^z
        BOOL    state           ReLXg

y@\z

CPUOReLXgC^XNReLXg̏ꍇ TRUEC^
XNReLXg̏ꍇ FALSE ԂDp_excinf ɂ́CCPUOnh
ɓn p_excinfp[^̂܂ܓnDCPUOnhȊO
яoꍇCp_excinf 𐳂nȂꍇ̐U͕ۏ؂
D

(2) vxsns_loc                   CPUOCPUbNԂ̎Q

yCAPIz
        BOOL state = vxsns_loc(VP p_excinf);

yp[^z
        VP      p_excinf        CPUOɊւLĂ̈
                                擪Ԓn

y^[p[^z
        BOOL    state           CPUbN

y@\z

CPUOԂCCPUbNԂ̏ꍇ TRUECCPUbN
̏ꍇ FALSE ԂDp_excinf ɂ́CCPUOnhɓn 
p_excinfp[^̂܂ܓnDCPUOnhȊOĂяo
Cp_excinf 𐳂nȂꍇ̐U͕ۏ؂ȂD

(3) vxsns_dsp                   CPUÕfBXpb`֎~Ԃ̎Q

yCAPIz
        BOOL state = vxsns_dsp(VP p_excinf);

yp[^z
        VP      p_excinf        CPUOɊւLĂ̈
                                擪Ԓn

y^[p[^z
        BOOL    state           fBXpb`֎~

y@\z

CPUOԂCfBXpb`֎~Ԃ̏ꍇ TRUECfBXpb
`Ԃ̏ꍇ FALSE ԂDp_excinf ɂ́CCPUOnhɓn
 p_excinfp[^̂܂ܓnDCPUOnhȊOĂяo
ꍇCp_excinf 𐳂nȂꍇ̐U͕ۏ؂ȂD

y⑫z

CPUOnh̋NɂăfBXpb`֎~^Ԃ͕ωCCPU
Onhł̓fBXpb`̋֎~⋖͍sȂ߁Cvxsns_dsp 
Ԃl sns_dsp ̕ԂlɏɈvD̂߁Cvxsns_dsp  
sns_dsp ̏e͓ƂȂĂD

(4) vxsns_dpn                   CPUÕfBXpb`ۗԂ̎Q

yCAPIz
        BOOL state = vxsns_dpn(VP p_excinf);

yp[^z
        VP      p_excinf        CPUOɊւLĂ̈
                                擪Ԓn

y^[p[^z
        BOOL    state           fBXpb`ۗ

y@\z

CPUOԂCfBXpb`ۗԂ̏ꍇ TRUECłȂ
ꍇ FALSE ԂDȂ킿CfBXpb`D揇ʂ
sĂCCPUbNԂłуfBXpb`֎~
ł́CTRUE ԂDp_excinf ɂ́CCPUOnhɓn 
p_excinfp[^̂܂ܓnDCPUOnhȊOĂяo
C p_excinf 𐳂nȂꍇ̐U͕ۏ؂ȂD

(5) vxsns_tex                   CPUÕ^XNO֎~Ԃ̎Q

yCAPIz
        BOOL state = vxsns_tex(VP p_excinf);

yp[^z
        VP      p_excinf        CPUOɊւLĂ̈
                                擪Ԓn

y^[p[^z
        BOOL    state           ^XNO֎~

y@\z

CPUOɎsԂł^XNC^XNO֎~
̏ꍇ TRUEC^XNOԂ̏ꍇ FALSE ԂDCPUO
^XNReLXgŔC̎ɎsԂ̃^XNȂꍇ
CFALSE ԂDp_excinf ɂ́CCPUOnhɓn p_excinfp
[^̂܂ܓnDCPUOnhȊOĂяoꍇC
p_excinf 𐳂nȂꍇ̐U͕ۏ؂ȂD

y⑫z

CPUOnh̋Nɂă^XNO֎~^Ԃ͕ωC 
CPUOnhł̓^XNŐ֎~⋖͍sȂ߁C 
vxsns_tex ̕Ԃl sns_tex ̕ԂlɏɈvD̂߁C
vxsns_tex  sns_tex ̏e͓ƂȂĂD

3.11 \]pVXeQƋ@\

JSPJ[lł́CJSPJ[lœ삷^XNJSPJ[lg̐\
v邽߂ɁCVXe萸x̍\]pVXe
ݏo@\C^[QbgˑɃT|[gĂD\]pVXe
́CʕbPʂŕ\邪Cۂ̐x̓^[QbgˑłD̓I
́C^[Qbg̃}jAQƂ邱ƁD

\]pVXeQƋ@\ł́C̃f[^^pD

        SYSUTIM         \]pVXeij

SYSUTIM^̃TCY̓^[QbgˑłD̓Iɂ́C^[Qbg
}jAQƂ邱ƁD

(1) vxget_tim                   \]pVXe̎Q

yCAPIz
        ER ercd = vxget_tim(SYSUTIM *p_sysutim);

yp[^z
        Ȃ

y^[p[^z
        ER      ercd            G[R[h
        SYSUTIM sysutim         ݂̐\]pVXe

yG[R[hz
        E_CTX           ReLXgG[

y@\z

݂̐\]pVXeǂݏoCsysutim ɕԂD

̃T[rXR[́C^XNReLXĝ݌ĂяoƂłD
^XNReLXgĂяoꍇɂ́CE_CTXG[ƂȂD

^XNReLXgł΁CCPUbNԂłĂĂяo邪CCPUb
NԂԌpƁC^C}݂Ȃ߂ɃVXeX
VꂸC̃T[rXR[\]pVXeԂȂ
DԑԂZꍇẮCԑԑŜCPUbN
Ƃ͓̂K؂ł͂ȂD


SDVXeO@\

VXeO@\́CJ[lŔُ펖ہiAT[V̎sC
G[R[hԂȂG[jCVXe̊Oɒʒm邽߂̋@\
DJ[l̃g[XOCVXeT[rXAvP[VŔ
ُ펖ۂg[XOɂC@\𗘗p邱ƂłD

4.1 VXeO@\̈ʒut

J[lŔُ펖ۂVXe̊Oɒʒm邽߂̕@ƂāC
VAC^tF[Xɏo͂CfBXNɏoȂǂ̕@l
D

VXeO@\́CJ[lĂяoƂϓ_́CJ[
l̈ꕔƍl̂RłDCVAC^tF[XfBX
NɃANZX邽߂̃T[rXifoCXhCoȂǁj̓J[lœ
삷邽߁CpVXeO@\́CJ[lɎꂽV
XeT[rXƍlRŁCʒuÂłD

JSPJ[lł́CJ[l̊g@\ƂāCُ펖ۂɊւ
g[XOiCOƑ̂jCJ[l̃obt@
iOobt@ƌĂԁjɋL^@\ƁCOobt@烍O
ǂݏo@\pӂDCVXeO@\ƌĂԁDO
Oobt@ǂݏoCfoCXɃANZXT[rXpĊOɏo
͂@\́CVXeO^XNƂăJ[lɎD

4.2 Oobt@ւ̋L^ƒ჌xo

q悤ɁCOVXe̊Oɏo͂邽߂ɁCfoCXɃA
NZXT[rXKvɂȂ邪C̃T[rX̓J[lœ삵
Ă邽߁CJ[l̓płȂ悤ȏdȈُ펖ۂN
ꍇɂ́C̃T[rXgƂłȂD܂C̃T[rX
gfobOꍇɂCfoCXɃANZXT[rXgƂ
łȂD

ŁCJ[lœ삷T[rXgȂꍇɂłOo
邽߂ɁC჌xo͋@\pӂD჌xo͋@\́C^[Qbg
ˑɗpӂ჌x̕o͊֐isys_putcjpăOo
@\łD჌x̕o͊֐́C^[Qbgˑŗpӂ邱
ƂƂĂ邪CŏIiɑgݍ܂ꍇȂǂł́Co͂@
Ȃ󋵂lD̂悤ȏꍇC჌x̕o͊֐ɑ
́CɎcĂĈĂĂ܂ȂD

OCOobt@֋L^邩჌xo͋@\pďo͂邩
̐ݒ́CJ[l̊gT[rXR[ivmsk_logjɂčsƂ
Dvmsk_log ̎gɂĂ͌qD

჌xo͋@\pƁCObZ[W̍쐬iprintf ̏
jƒ჌x̕o͏J[lōs߂ɁCJ[l̉
Ȃ邱ƂɒӂȂ΂ȂȂDɁC჌x̕o͏
foCX|[O`Ŏ̂ʏŁC̏ꍇɂ́CJ[l
͎̉pIƌȂɈȂD

CJ[l̓pł悤ȁi܂dłȂjۂɂ
́COJ[l̃Oobt@ɋL^CL^Ȍo
́CfoCXɃANZXT[rXpē삷VXeO^XN
CDVXeO^XN̓J[lœ삷^XNłCJ[l
̊gT[rXR[ivrea_logjpāCOobt@烍O
ݏoDJSPJ[l̕WzzLbgɂ́CVXeO^XN̈Ƃ
āCVAC^tF[XɃO𕶎̌`ŏo͂VXeO
^XN܂߂ĂD

4.3 O̎

JSPJ[l̃VXeO@\́COɈȉ̎ʂ݂ĂD

        LOG_TYPE_INH            ݃nh
        LOG_TYPE_ISR            ݃T[rX[`
        LOG_TYPE_CYC            nh
        LOG_TYPE_EXC            CPUOnh
        LOG_TYPE_TEX            ^XNO[`
        LOG_TYPE_TSKSTAT        ^XNԕω
        LOG_TYPE_DSP            fBXpb`
        LOG_TYPE_SVC            T[rXR[
        LOG_TYPE_COMMENT        Rg
        LOG_TYPE_ASSERT         AT[V̎s

̎ʂ́CITRONfobMOC^tF[XdlQlɒ߂ĂD
CITRONfobMOC^tF[Xdlɂg[XO`́C
RIMiRTOS Interface ModulejfobOc[ɓnꍇ̌`߂
̂łCJ[lo͂`ƈvĂKv͂ȂiRIM ϊ
΂悢߁jDہC̎ʂ̒ŁCLOG_TYPE_CYC  LOG_TYPE_ASSERT 
́CfobMOC^tF[XdlƈvĂȂD

O̎ʂ̒ŁCLOG_TYPE_COMMENT  LOG_TYPE_ASSERT ȊO̓J[l
̃g[XÔ߂̂̂ŁCǂ̂悤ɗp邩̓^[Qbgˑ
CĂi4.5ߎQƁjD

4.4 Ȍdvx

JSPJ[l̃VXeO@\́COo͂ۂɎw肷dvx
ɊÂāCۂɏo͂郍O𓮓Iɐݒ肷邱ƂłD́C 
UNIX ̃VXeO@\܂˂̂ŁCȌdvx̎ނw@
UNIX  API QlɂĂD܂C჌xo͋@\pďo͂郍
OCdvxɊÂēIɐݒ肷邱ƂłD

̓Iɂ́CȌdvxƂĎ8iKpӂĂD

        LOG_EMERG       VXeVbg_EׂG[
        LOG_ALERT
        LOG_CRIT
        LOG_ERROR       dv̒ႢVXeG[
        LOG_WARNING     xbZ[WDVXe͈SɌpł
        LOG_NOTICE
        LOG_INFO
        LOG_DEBUG       fobÔ߂̃bZ[W

ȂCAT[V̎śCLOG_EMERG ŏo͂DJ[l̃g[X
ÓCLOG_DEBUG ŏo͂̂WƂi^[QbgˑjD

ǂ̏dvx̃OOobt@ɋL^邩ƁCǂ̏dvx̃O
჌xo͋@\pďo͂邩́CJ[l̊gT[rXR[
ivmsk_logjɂĐݒ肷邱ƂłDvmsk_log ̊ep[^́C
w肷郍ȌW\rbg}bvłD܂Crbg}bv
邽߂̃}NƂāCLOG_MASK  LOG_UPTO pӂĂD

4.5 g[XO@\

JSPJ[ĺCJ[l̃g[XO擾邽߂̊{IȎdg݂
Ă邪Cg[XO̎ۂ̎擾@̓^[QbgˑƂȂDJ[
l̃g[XO̎擾ɁCVXeO@\ĝI1ł
DCJ[l̃g[XOVXeO^XNpĎo
@͍lĂȂiVXeO^XN삷邱Ƃɂg[XO
Co葽̃O񂪐\邽߁jD

4.6 VXeO@\̊gT[rXR[

VXeO@\̒񋟂gT[rXR[͎̒ʂłD

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

VXeO@\ɁCdvx prio ŃOo͂iOobt@֋L
^邩჌xo͋@\pďo͂jDSYSLOG ́COi[
邽߂̃f[^^i\́jŁC̊gT[rXR[ɂ́Cւ̃|
C^nD

(2) ER_UINT vrea_log(SYSLOG *p_log)

Oobt@烍O1oDOobt@̎ E_OBJC
łȂꍇ́CꂽO̐iO񂪎ĂȂꍇ 
0jԂDVXeO^XNp邱Ƃz肵ĂD

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

Oobt@ɋL^ׂȌdvx̃rbg}XNilogmaskjƁC
჌xo͋@\pďoׂ͂Ȍdvx̃rbg}XN
ilowmaskjݒ肷D

4.7 VXeO@\̂߂̃Cu֐ƃ}N

VXeO@\́CL̃T[rXR[ɉāC̃Cu֐
}N񋟂D

(1) void _syslog_n(UINT prio, UINT type, VP_INT arg1, ..., VP_INT argn)
     n  0`6 ̂ꂩD

Oʂ typeCp[^ arg1`argn ̃OCdvx prio 
o͂邽߂̃Cu֐D

(2) void syslog_n(UINT prio, const char *format, arg1, ..., argn)
     n  0`5 ̂ꂩD

format 񂨂тɑ쐬RgiOʂ 
LOG_TYPE_COMMENT ̃OjCdvx prio ŏo͂邽߂̃}ND

format ̓bZ[W̃tH[}bgLqCarg1`argn ̓tH[}bgLq
ŎQƂlŁCprintf ̃tH[}bgLq̃TuZbgƂȂĂD
arg1`argn  VP_INT^ɃLXg邽߁CVP_INT^Ɍ^ϊłC
̌^nƂłC^`FbN͂ȂDformat  arg1`argn 
ɂ́C̐D

Eformat ̃tH[}bgLq́C̃}N߂ωĂ͂Ȃ
ȂD萔nƂz肵ĂD

Eformat ɎgtH[}bgw͎̒ʂD

    %d    signed int^Ƃ݂ȂC10iŕ\
    %u    unsigned int^Ƃ݂ȂC10iŕ\
    %x    unsigned int^Ƃ݂ȂC16iip͏jŕ\
    %X    unsigned int^Ƃ݂ȂC16iip͑啶jŕ\
    %p    |C^Ƃ݂ȂC16iip͏jŕ\
    %c    𕶎R[hƂ݂ȂC\
    %s    𕶎|C^Ƃ݂ȂC\
    %%    '%' \i͎Ȃj

%d, %u, %x, %X ɂẮC'%' ̒ɕ\w肷10ilLq
邱ƂłD̏ꍇC\ׂ񂪎w肵ɖȂ
ɂ́Cw肵ɉEl߂ŕ\D10il '0' Ŏn܂ꍇ
ɂ́C̊Ԃ '0' 𖄂߂D

܂CVP_INT^̃TCY long^̃TCYȏłɂẮC
tH[}bgwgp邱ƂłD̑̃tH[}bgw 'l' 
tꍇɂ͖i%lc%lsɂ͑ΉĂȂjD

    %ld   signed long^Ƃ݂ȂC10iŕ\
    %lu   unsigned long^Ƃ݂ȂC10iŕ\
    %lx   unsigned long^Ƃ݂ȂC16iip͏jŕ\
    %lX   unsigned long^Ƃ݂ȂC16iip͑啶jŕ\

Earg1`argn Ƀ|C^nꍇi%s ɑΉ̏ꍇjɁC|C
^̎wf[^́C̃}N߂ωĂ͂ȂȂD萔
nƂz肵ĂD

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

format 񂨂тɑ쐬郁bZ[WCdvx 
prio ŃOƂďo͂邽߂̃Cu֐ŁC̐ς
́Dformat ɑ͍ő5܂ŁDformat тɑ
ɂ́Csyslog_n Ɠl̐D

̃Cu֐́Cϐ邽߂ɓŕXL
D̂߁CsԂȂ\C݋֎~ԂŌĂяo
ׂł͂ȂDɃAvP[VvOp邱Ƃz肵Ă
D̂߁C̃Cu֐̃\[Xt@ĆCT|[gCu
̃fBNgɒuĂD

(4) UINT LOG_MASK(UINT prio)

dvx prio ̂݃Zbgꂽrbg}bv}NDvmsk_log ɓn
邽߂ɗpD

(5) UINT LOG_UPTO(UINT prio)

dvx prio ȏ̏dvxׂăZbgꂽrbg}bv}ND 
vmsk_log ɓn邽߂ɗpD

(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))

OtH[}bgo͂邽߂̃Cu֐Dsyslog_printf ͓n
ꂽtH[}bgƈCsyslog_print ͓nꂽOC
syslog_output ̓Oobt@Ɋi[ꂽOtH[}bgo͂D

VXeO^XNp邱Ƃz肵Ă邽߁C̃Cu֐
\[Xt@C̓T|[gCũfBNgɒuĂDC
჌xo͂s߂ɁCVXeO@\łpĂD

4.8 VXeO@\̐ݒ@

JSPJ[l̃VXeO@\̑z肳Ăݒ@́Cȉ̒ʂ
D

(a) dȈُ펖ۂO͒჌xo͋@\pďo͂C
łȂȌo͂̓VXeO^XNɔCD

Oobt@ɋL^郍ȌdvxƁC჌xo͂pďo͂
ȌdvxK؂ɐݒ肷D܂COobt@烍Oǂ
oĊO֒ʒmVXeO^XNƁC჌x̕o͊֐p
D

(b) ׂẴOC჌xo͋@\pďo͂D

KvȃOׂ͂Ē჌xo͋@\pďo͂悤ݒ
ivmsk_log ̑1p[^ 0 ɐݒjD܂C჌x̕o
֐pӂDVXeO^XN͕svD

(c) O̓ɋL^邾ŁCVXeOɂ͏o͂ȂD

KvȃOׂ͂ăOobt@֋L^悤ɐݒivmsk_log ̑2
p[^ 0 ɐݒjDVXeO^XN͕svD

(d) O͋L^o͂ȂD

̃OL^^o͂Ȃ悤ɐݒivmsk_log ̗p[^
Ƃ 0 ɐݒjD

ʂ̕@ƂāCOMIT_SYSLOG `ăRpC邱ƂŁCVXe
O@\J[lOCJ[l̃R[hTCY邱Ƃ
łDCAvP[V syslogCsyslog_printfCsyslog_printC
syslog_output ̊e֐ĂяoĂꍇC̊֐̃R[h͊O
ȂD܂CJ[l̃O͋L^^o͂ȂCAvP[V
̃O͋L^^o͂ꍇɂ́CJ[l̂ OMIT_SYSLOG 
`ăRpC΂悢D̏ꍇCVXeO@\̏֐
i_kernel_syslog_initializejƏI֐i_kernel_syslog_teminatej
́CAvP[VĂяoKvD

ȂC(b)`(c) ̐ݒɌŒ肵ĎgpꍇɂCJ[l̈ꕔ̃R[
hsvɂȂCR[hTCYł]n邪CȈՂȕ@͗p
ӂĂȂD


TDVXeT[rX

̐߂ł́CJSPJ[lT|[gĂVXeC^tF[XC
iSILjƁCJSPJ[lWIɓ삳hCoуVXe^XN
ɂĐD

5.1 VXeC^tF[XCiSILj

JSPJ[ĺCITRONfoCXhCo݌vKChC̈ꕔƂČ
ĂVXeC^tF[XCiSILj̒ŁCȉɋ@\
T|[gĂDSILpvÓCt_services.hɑウāC
s_services.hCN[hD

ITRONfoCXhCo݌vKChCł́CfoCXhCo̒ŁCSIL
ʂĒڃfoCXɃANZX郂W[iPDICjƁCJ[l̋@\
p郂W[iGDICj𕪗邱ƂɂĂDȂ킿CPDIC
SILp邪J[l̋@\͗pCGDIC̓J[l̋@\͗p邪SIL
pĂ͂ȂȂD̂߁Cs_services.hɂ́CJ[lp邽߂
錾`͊܂܂ĂȂD

5.1.1 ݃bNԂ̐

foCXvO̒ł́CׂĂ̊݁iNMICȉj
֎~ꍇDITRON4.0dlCPUbNԂ́CJ[l̊
O̊݁iNMIȊOɃJ[l̊ǗO݂̊邩́CJSPJ[l
ł̓^[Qbgˑj֎~Ƃ͌炸Ĉ悤ȏꍇɗp͓̂K
؂łȂD

ŁCׂĂ݂̊֎~Ԃ݃bNԂƌĂсCSILł
݃bNԂ𐧌䂷邽߂̈ȉ̋@\pӂĂD

(1) SIL_PRE_LOC

݃bNԂ̐ɕKvȕϐ錾C}ND
̃}NLq_ŁC݂̋֎~ԂL^DSIL_LOC_INTC
SIL_UNL_INTp֐iubNj̐擪̕ϐ錾ɋLqȂ
ȂȂD

(2) SIL_LOC_INT()

ׂĂ݂̊֎~C݃bNԂɈڍsD

(3) SIL_UNL_INT()

SIL_PRE_LOCLq_̏Ԃɖ߂D

݃bNԂ̐@\̎gp͎̒ʂD

        {
                SIL_PRE_LOC;

                SIL_LOC_INT();
                ̊Ԃׂ͂Ă݂̊֎~
                ̊ԂɃT[rXR[ĂяoĂ͂ȂȂ
                SIL_UNL_INT();
        }

ȂCJSPJ[lg͊݃bNԂ͊ǗĂȂ߁Cb
NԂł̓T[rXR[ĂяoĂ͂ȂȂiĂяoꍇ̓
ۏ؂ȂjD

5.1.2 ԑ҂

foCXANZXۂɁCȎԑ҂Ȃ΂ȂȂꍇ
D̂悤ȏꍇɁCnopȂǂ̕@őΉƁC|
[^reBȂDSILł́CȎԑ҂s߂̋@\
pӂĂD

(1) void sil_dly_nse(UINT dlytim)

dlytimŎw肳ꂽȏ̎ԁiPʂ̓imbjC[vȂǂɂđ҂D
w肵lɂẮCw肵ԂȂ蒷҂ꍇ̂Œ
ӂ邱ƁD

5.1.3 GfBA

vZbT̃GfBAm邽߂̃}NƂāCȉ̃}N`
ĂD

(1) SIL_ENDIAN

gGfBAvZbTłSIL_ENDIAN_LITTLEi0jCrbOGfB
AvZbTłSIL_ENDIAN_BIGi1jɃ}N`D

5.1.4 ԃANZX֐

ԂɃ}bsOꂽfoCXWX^CfoCXƂ̋L
ANZX邽߂ɁCȉ̊֐pӂĂD

(1) VB sil_reb_mem(VP mem)

memŎw肳AhXC8rbgPʂœǂ񂾒lԂD

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

memŎw肳AhXɁCdataŎw肳l8rbgPʂŏށD

(3) VH sil_reh_mem(VP mem)

memŎw肳AhXC16rbgPʂœǂ񂾒lԂD

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

memŎw肳AhXɁCdataŎw肳l16rbgPʂŏށD

(5) VH sil_reh_lem(VP mem)

memŎw肳AhXC16rbgPʂŃgGfBAœǂ
lԂDgGfBAvZbTł́Csil_reh_memƈvD

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

memŎw肳AhXɁCdataŎw肳l16rbgPʂŃgG
fBAŏށDgGfBAvZbTł́Csil_wrh_mem
vD

(7) VH sil_reh_bem(VP mem)

memŎw肳AhXC16rbgPʂŃrbOGfBAœǂ
lԂDrbOGfBAvZbTł́Csil_reh_memƈvD

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

memŎw肳AhXɁCdataŎw肳l16rbgPʂŃrbOG
fBAŏށDrbOGfBAvZbTł́Csil_wrh_mem
vD

(9) VW sil_rew_mem(VP mem)

memŎw肳AhXC32rbgPʂœǂ񂾒lԂD

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

memŎw肳AhXɁCdataŎw肳l32rbgPʂŏށD

(11) VW sil_rew_lem(VP mem)

memŎw肳AhXC32rbgPʂŃgGfBAœǂ
lԂDgGfBAvZbTł́Csil_rew_memƈvD

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

memŎw肳AhXɁCdataŎw肳l32rbgPʂŃgG
fBAŏށDgGfBAvZbTł́Csil_wrw_mem
vD

(13) VW sil_rew_bem(VP mem)

memŎw肳AhXC32rbgPʂŃrbOGfBAœǂ
lԂDrbOGfBAvZbTł́Csil_rew_memƈvD

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

memŎw肳AhXɁCdataŎw肳l32rbgPʂŃrbOG
fBAŏށDrbOGfBAvZbTł́Csil_wrw_mem
vD

ȂCJSPJ[l̃^[Qbgˑł́CI/OԂɃANZX邽߂
֐pӂĂȂC^[QbgˑŃT|[g邱Ƃ͉\łD
ڂ́C^[Qbg̃}jAQƂ邱ƁD

5.2 VXeNbNhCo

VXeNbNhCóCn[hEFA^C}pĎIɊ݂
Cisig_timĂяoăJ[lɃ^CeBbNDVX
eNbNhCóCVXeRtBM[Vt@C
timer.cfgCN[h邱ƂŁCVXeɑgݍނƂłD

5.2.1 VXeNbNhCo̓\

VXeNbNhCóC^C}̋NC^C}݃nhC^
C}̒~ō\D

(1) void timer_initialize(VP_INT exinf)

^C}̋ND^C}CIȃ^C}ݗv𔭐
DJ[lɏ[`Ƃēo^Dexinf͖D

(2) void timer_handler()

^C}݃nhD^C}ݗvNACisig_timĂяo
ă^CeBbNDJ[lɊ݃nhƂēo^D

(3) void timer_terminate(VP_INT exinf)

^C}̒~DIȃ^C}ݗv~DJ[lɏI
[`Ƃēo^Dexinf ͖D

5.3 VAC^tF[XhCo

VAC^tF[XhCóCVA|[g߂̃hCo
DVAC^tF[XhCóCVXeRtBM[V
t@Cserial.cfgCN[h邱ƂŁCVXeɑgݍނƂ
łD

VAC^tF[XhCóC|[gɃZ}tH2gpD
Z}tH𐶐ÓIAPÍCserial.cfgɊ܂܂ĂD

NEWLIBGLIBCȂǂ̕WCCugpꍇɂ́CWCCu
̒჌xo̓[`VAC^tF[XhCoĂяo
ɂ邱ƂŁC^XN̕Wo͂VAC^tF[XhCooR
؂ւ邱ƂłD̓Iȕ@́CpWCCuɈˑ
D

5.3.1 VAC^tF[XhCõT[rXR[

VAC^tF[XhCoĂяoT[rXR[̎dl͉L̒
łD̒ŁCVA|[gIDԍiportidj̉߂̓^[Qbg
ˑƂȂD

̃T[rXR[́C^XNReLXgĂяoƂ͂ł
D܂Cserial_rea_datserial_wri_dat́CfBXpb`ۗԂŌĂ
oƂ͂łȂDCĂяoꍇɂE_CTXG[ƂȂD

(1) ER serial_opn_por(ID portid)

portidŎVA|[gI[vCM^M\ȏԂɂ
D

(2) ER serial_cls_por(ID portid)

portidŎVA|[gN[YD

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

portidŎVA|[gClenoCg̕MCbuf
̗̈ɓDlenoCgM܂ŁC҂ԂƂȂDM
܂̓G[R[hԂD

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

portidŎVA|[gɁCbuflenoCg̕𑗐MD
lenoCgMobt@ɓ܂ŁC҂ԂƂȂDM܂
̓G[R[hԂD

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

portidŎVA|[g̐CioctlŎlɐݒ肷
D

ioctlɂ́Cȉ̐\萔Crbgɘ_aƂ̂
w肷D

    IOCTL_ECHOiGR[obN[hj
        ̃rbgݒ肷ƁCVAC^tF[XhCoGR[
        obNsD̓Iɂ́Cobt@當oxɁC
        oD

    IOCTL_CRLFis[hj
        LFiline feedjoƁCCRicarriage returnj+ LFɕϊ
        ďoD

    IOCTL_FCSNDio̓t[j
        𑗐M鏈ɑ΂āCXON/XOFFɂt[sD
        Ȃ킿CSTOPiRg[-SjMƑM~C
        STARTiRg[-QjMƑMĊJD

    IOCTL_FCANYiMt[ŔCӂ̕őMĊJj
        IOCTL_FCOUTw肵Ă鎞ɁCM~ɎMCӂ̕
        őMĊJD

    IOCTL_FCRCViMt[j
        M鏈ɑ΂āCXON/XOFFɂt[sD
        Ȃ킿CMobt@̎c̈悪ȂȂSTOPiRg[
        -Sj𑗏oCc̈悪STARTiRg[-Qj
        oD

ȂCI[ṽftHg̐ݒl(IOCTL_ECHO | IOCTL_CRLF |
IOCTL_FCOUT | IOCTL_FCIN)łD

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

portidŎVA|[g̏ԂQƂCpk_rporŎw肳pPb
gɕԂDpPbgreacntɂ͎Mobt@̕Cwricntɂ͑
Mobt@̕ԂD

5.3.2 VAC^tF[XhCo̓\

VAC^tF[XhCóCOL̃T[rXR[ɉāC
Ɗ݃nhō\D́CJ[lɏ[`
Ƃēo^D݃nh́CJ[lɊ݃nhƂēo^
D̓o^serial.cfgɊ܂܂D

(1) void serial_initialize(VP_INT exinf)

VAC^tF[XhCoDJ[lɏ[`
ēo^Dexinf͖D

(2) ݃nh

VAI/OfoCX̎ނɂāC݃nh̎ނ␔͈قȂD
̓Iɂ́CM݂ƎM݂ʂĂ̂ƕʂĂȂ̂C
|[g𕡐VAI/OfoCXŃ|[gɊ݃nhʂ
̂ƕʂĂȂ̂DVAC^tF[XhCo̊
݃nh́CJ[lɊ݃nhƂēo^D

5.4 VXeO^XN

VXeO^XŃCJ[l̃Oobt@烍OoC
foCXɃANZXT[rXpĊOɏo͂^XNłD

JSPJ[l̕WzzLbgɊ܂܂VXeO^XŃCVAC
^tF[XɃO𕶎̌`ŏo͂̂ŁCVXeO^XN
̈ƂʒutŒ񋟂ĂD̃VXeO^XŃCVXe
RtBM[Vt@Clogtask.cfgCN[h邱ƂŁC
VXeɑgݍނƂłD


UDT|[gCu

T|[gCúCAvP[VVXeT[rX쐬邽
ɗpł郉Cu֐QłDo[Wł́CVXeT[rX
TvvOŎgŒ̊֐pӂĂȂD

(1) const char *itron_strerror(ER ercd)

ercd Ŏ郁CG[R[hɑΉG[R[h̕ԂD
ԂꂽĂ͂ȂȂD

(2) void t_perror(const char *file, int line, const char *expr, ER ercd)
    
G[bZ[WVXeOT[rXɏo͂Dassert}NȂǂŗ
p邱Ƃz肵ĂD


VDJECXg[E|[eBO

7.1 fBNgEt@C\

\[Xt@C̃fBNg\͎̒ʂD

    include/    ʃwb_t@C
    kernel/     J[l\[Xt@C
    systask/    VXeT[rX\[Xt@C
    library/     T|[gCu\[Xt@C
    config/     ^[Qbgˑ
        m68k/           M68040 vZbTˑt@C
            dve68k/             DVE-68K/40 VXeˑt@C
        sh1/            SH1 vZbTˑt@C
            kz_sh1/             KZ-SH1-01 VXeˑt@C
            zunda_sh1/          ZUNDA/SH1 VXeˑt@C
        sh2/            SH2 vZbTˑt@C 
            apsh2f6a/           APSH2F6A VXeˑt@C
            hsb7616it/          HSB7616IT VXeˑt@C
        sh3/            SH3 vZbTˑt@C
            ms7727cp01/         MS7727CP01 VXeˑt@C
            solution_engine/    Solution Engine VXeˑt@C
        sh3-ghs/        SH3 vZbTˑt@CiGHSJj
            ms7727cp01/         MS7727CP01 VXeˑt@C
            solution_engine/    Solution Engine VXeˑt@C
        h8/             H8 vZbTˑt@C
            akih8_3048f/        AKI-H8/3048F VXeˑt@C
            akih8_3052f/        AKI-H8/3052F VXeˑt@C
            akih8_3069f/        AKI-H8/3069F VXeˑt@C
            nkev_010h8/         NKEV-010H8 VXeˑt@C
        h8-renesas/     H8 vZbTˑt@C(RenesasJ)
            hsb8f3048bf25/      H8_3048F VXeˑt@C
        h8s/            H8S vZbTˑt@C
            h8s2350/            H8S_2350 VXeˑt@C
            h8s2351/            H8S_2351 VXeˑt@C
        armv4/          ARMV4 vZbTˑt@C
            integrator/         Integrator VXeˑt@C
            az9360mb/           AZ9360MB VXeˑt@C
        armv4-ghs/      ARMV4 vZbTˑt@CiGHSJj
            integrator/         Integrator VXeˑt@C
        microblaze/     MicroBlaze vZbTˑt@C
            miref/              MIREF VXeˑt@C
            mire_multi/         MIRE_MULTI3000 VXeˑt@C
            mutlimedia/         MultiMedia Board VXeˑt@C
            suzaku/             Suzaku VXeˑt@C
        tms320c54x/     TMS320C54x vZbTˑt@C
            c5402dsk/           TMS320VC5402 DSK VXeˑt@C
        xstormy16/      Xstormy16 vZbTˑt@C
           simulator/           Om}CRJc[ ˑt@C
        mips3/          MIPS3 vZbTˑt@C
            vr4131/             VR4131 VXeˑt@C
            vr5500/             VR5500 VXeˑt@C
        m16c-renesas/   M16C vZbTˑt@C(RenesasJ)
            oaks16/             OAKS16 VXeˑt@C
            oaks16_mini/        OAKS16_MINI VXeˑt@C
        m32c-renesas/   M32C vZbTˑt@C(RenesasJ)
            oaks32/             OAKS32 VXeˑt@C
        m32r/           M32R vZbTˑt@C
            m3a2131g50/         M3A-2131G50 VXeˑt@C
            m3a_za36/           M3A-ZA36 VXeˑt@C
        s1c33/          S1C33 vZbTˑt@C
            dmt33209/           DMT33209 VXeˑt@C
            dmt33401/           DMT33401 VXeˑt@C
            luxun2/             LUXUN2 VXeˑt@C
            luxun4/             LUXUN4 VXeˑt@C
        s1c33-gnu33/    S1C33 vZbTˑt@C(GNU33J)
            dmt33209/           DMT33209 VXeˑt@C
            dmt33401/           DMT33401 VXeˑt@C
            luxun2/             LUXUN2 VXeˑt@C
            luxun4/             LUXUN4 VXeˑt@C
        powerpc32/      POWERPC32 vZbTˑt@C
            ibm_ppc_emb_sample/ The IBM PowerPC Embedded Environment VXeˑt@C
            mpc860t/            MPC860T VXeˑt@C
        nios2/          NIOS2 vZbTˑt@C
            altera_dev_board/   ALTERA_DEV VXeˑt@C
        v850/           V850 vZbTˑt@C
            tk850_kj1/          TK-850ES VXeˑt@C        
            tk850_sg2/          TK-850SG2 VXeˑt@C        
        tlcs900-toshiba/ TLCS900 vZbTˑt@C
            zup_f16_ex/         Zup-F16g{[h VXeˑt@C
        linux/          Linux̃V~[Vˑt@C
        windows/        Windows̃V~[Vˑt@C
    tools/      JˑfBNg
        WINDOWS/        Windows̃TvvOƃvWFNgt@C
        GHS/            GHSiGreen Hills SoftwarejJp̃t@C
        C5402DSK/       TMS320VC5402 DSKp̃vWFNgt@C
        H8-RENESAS/     H8-RENESASp̃vWFNgfBNg
        M16C-RENESAS/   M16C-RENESASp̃vWFNgfBNg
        M32C-RENESAS/   M32C-RENESASp̃vWFNgfBNg
    pdic/       PDICifoCXhCoOSˑj
        simple_sio/     ȈSIOhCoiVAhCogṕj
    cfg/        J[lRtBM[^
    utils/      [eBeB
        h8/             H8pxN^[e[u[eBeB
        h8-renesas/     H8-RENESASpxN^[e[u[eBeB
        m16c-renesas/   M16C-RENESASpxN^[e[u[eBeB 
    sample/     TvvO Makefile
    doc/        hLg
    windev/     WindowsfoCX}l[W

^[QbgˑiJ[lRtBM[^͏j̊et@C̊T
v͎̒ʂD

    README              TOPPERS/JSPJ[l̊ȒPȏЉ
    configure           RtBM[VXNvg

    include/
        itron.h         ITRONdlʋKɊ֘A`
        kernel.h        ITRON4.0dlɊ֘A`
        kernel_debug.h  ITRON4.0dl fobOpCN[ht@C
        sil.h           VXeC^tF[XCiSILj
        t_stddef.h      J[lEAvP[V ʃCN[ht@C
        t_config.h      ^[Qbgˑ̒`
        t_syslog.h      VXeOT[rX֘A̒`
        t_services.h    AvP[Vp WCN[ht@C
        s_services.h    foCXhCop WCN[ht@C
        kernel_cfg.h    kernel_cfg.cp̃CN[ht@C
        timer.h         VXeNbNhCo֘A̒`
        serial.h        VAC^tF[XhCo֘A̒`
        logtask.h       VXeO^XN֘A̒`
        linux_sigio.h   Linuxp mubLOI/OT|[g

    kernel/
        Makefile.kernel J[l̃t@C\̒`
        jsp_kernel.h    JSPJ[lp WCN[ht@C
        jsp_rename.def  J[l̓ʖ̃l[`
        jsp_rename.h    J[l̓ʖ̃l[
        jsp_unrename.h  J[l̓ʖ̃l[
        check.h         G[`FbNp}N
        queue.h         _uNL[̍\Ƒ
        startup.c       J[l̏
        banner.c        J[l̋NbZ[W̏o
        task.h          ^XN샋[`֘A̒`
        task.c          ^XN샋[`
        wait.h          ҂ԑ샋[`֘A̒`
        wait.c          ҂ԑ샋[`
        time_event.h    ^CCxgǗ֘A̒`
        time_event.c    ^CCxgǗ
        syslog.h        VXeO@\֘A̒`
        syslog.c        VXeO@\
        task_manage.c   ^XNǗ@\
        task_sync.c     ^XNt@\
        task_except.c   ^XNO@\
        semaphore.h     Z}tH@\֘A̒`
        semaphore.c     Z}tH@\
        eventflag.h     CxgtO@\֘A̒`
        eventflag.c     CxgtO@\
        dataqueue.h     f[^L[@\֘A̒`
        dataqueue.c     f[^L[@\
        mailbox.h       [{bNX@\֘A̒`
        mailbox.c       [{bNX@\
        mempfix.h       Œ蒷v[֘A̒`
        mempfix.c       Œ蒷v[
        time_manage.c   VXeǗ@\
        cyclic.h        nh@\֘A̒`
        cyclic.c        nh@\
        sys_manage.c    VXeǗ@\
        interrupt.h     ݊Ǘ@\֘A̒`
        interrupt.c     ݊Ǘ@\
        exception.h     CPUOǗ@\֘A̒`
        exception.c     CPUOǗ@\

    systask/
        timer.c         VXeNbNhCo
        timer.cfg       VXeNbNhCo̐ݒLq
        serial.c        VAC^tF[XhCo
        serial.cfg      VAC^tF[XhCo̐ݒLq
        logtask.c       VXeO^XN
        logtask.cfg     VXeO^XN̐ݒLq
        linux_sigio.c           Linuxp mubLOI/OT|[g
        linux_sigio.cfg         Linuxp mubLOI/OT|[g̐ݒLq
        linux_serial.c          Linuxp ^VAhCo
        linux_serial.cfg        Linuxp ^VAhCo̐ݒLq
        cxxrt.c          C++Ή^C{
        cxxrt.cfg        C++Ή^CpIuWFNgݒ
        newlibrt.c       NEWLIBΉ^C

    library/
        log_output.c    VXeO@\pCu֐isyslog_outputȂǁj
        strerror.c      itron_strerror֐
        t_perror.c      t_perror֐
        vasyslog.c      syslog֐

    utils/
        makedep         ˑ֌W`̐
        genoffset       offset.h vO
        gencheck        p[^`FbNpt@C̐
        genrename       V{l[`̐
        rename          V{̃l[

    sample/
        Makefile        Tv Makefile
        Makefile.linux  Tv MakefileiLinuxpj
        Makefile.mware  Tv Makefilei~hEFAƂ̑gݍ킹pj
        sample1.cfg     TvvO(1)̐ݒLq
        sample1.h       TvvO(1)Ɋւ`
        sample1.c       TvvO(1)̖{
        cxx_sample1.cfg C++pTvvO(1)̐ݒLq
        cxx_sample1.h   C++pTvvO(1)Ɋւ`
        cxx_sample1.c   C++pTvvO(1)̖{
        cxx_sample2.cfg C++pTvvO(1)̐ݒLq
        cxx_sample2.h   C++pTvvO(1)Ɋւ`
        cxx_sample2.c   C++pTvvO(1)̖{

    doc/
        user.txt        TOPPERS/JSPJ[l [UY}jA
        gnu_install.txt GNUJ\z}jA
        m68k.txt        M68040 ^[Qbgˑ}jA
        sh1.txt         SH1 ^[Qbgˑ}jA
        sh2.txt         SH2 ^[Qbgˑ}jA
        sh3.txt         SH3 ^[Qbgˑ}jA
        h8.txt          H8 ^[Qbgˑ}jA
        h8-renesas.txt  H8-RENESAS ^[Qbgˑ}jA
        h8s.txt         H8S ^[Qbgˑ}jA
        armv4.txt       ARMV4 ^[Qbgˑ}jA
        microblaze.txt  MicroBlaze ^[Qbgˑ}jA
        tsm320c54x.txt  TMS320C54x ^[Qbgˑ}jA
        xstormy16.txt   Xstormy16 ^[Qbgˑ}jA
        mips3.txt       MIPS3 ^[Qbgˑ}jA
        m16c.txt        M16C ^[Qbgˑ}jA
        m32c.txt        M32C ^[Qbgˑ}jA
        m32r.txt        M32R ^[Qbgˑ}jA
        nios2.txt       Nios2 ^[Qbgˑ}jA
        powerpc32.txt   POWERPC32 ^[Qbgˑ}jA
        s1c33.txt       S1C33 ^[Qbgˑ}jA
        v850.txt        V850 ^[Qbgˑ}jA
        linux.txt       Linux V~[Vˑ}jA
        windows.txt     Windows V~[Vˑ}jA
        config.txt      JSPJ[l ^[Qbgˑ |[eBOKCh
        configurator.txt JSPJ[l RtBM[^dl
        design.txt      JSPJ[l ݌v

7.2 J

JSPJ[lpVXe\zɂ́Cȉ̃c[KvłD

    zXgp̃c[
        WKiɏCRpCCCCu
        C++RpCCC++CuCSTL
                mF: GNU C++ 2.95.3C3.2C3.3iLinuxj
                          GNU C++ 3.2iCygwinj
                          Visual C++ 6.0C.NET
        perlimF 5.6.1j
        GNU MakeimF 3.79.1j

    NXp̃c[
        GNUJ
            BINUTILSiAZuCJȂǁj
            GCC ܂ GCC-COREiCRpCj
            GDBifobKj
        NEWLIBiWCCuj

GNUJCXg[@ɂẮCuGNUJ\z}jAv
pӂĂ̂ŁCQƂƂ悢D܂CmFo[Wɂ
ẮC^[Qbg̃}jAQƂ邱ƁD

zXgpCRpCCCúCNXp̃c[̃CX
g[ɕKvɂȂD܂CC++RpCCC++Cu STLiStandard
Template Libraryj́CJ[l̃RtBM[Vc[̃RpC
ɕKvłDNXp̃c[ƃRtBM[Vc[o
Ciœ肵ꍇɂ́C̃c[͕KvȂD

NXp̕WCCúCAvP[VWCCug
pȂꍇɂ́CKvȂDCRpCWCCu֐
imemcpyCmemsetȂǁjĂяoR[h𐶐ꍇC̏ꍇ
͕WCCuKvłDȂ́CR[hĂяo֐
݂̂ŗpӂĂ悢D

ȉł́C̃c[pӂłĂ邱ƂOɁCUNIX}Vi
mF Linuxjō\z菇D܂ȉ̐ł́CmakeR}h
 GNU Make ł̂ƂiJSPJ[l Makefile ́CGNU Make ̊g
@\pĂjD

7.3 RtBM[Vc[̍\z

J[l\zOɁC܂CRtBM[Vc[RpC
KviRtBM[Vc[oCiœ肵ꍇ
́C̃Xebv͕KvȂjD

JSPJ[l̃RtBM[Vc[́CRtBM[^icfgv
Ojƃp[^`FbNvOichkvOj\
DRtBM[Vc[̎gɂẮCu7.9 RtBM
[Vc[̎gvQƂ邱ƁD

RtBM[Vc[icfgvOchkvOj́CcfgfB
NgɈړCmake dependňˑ֌Wt@CiMakefile.dependj
CmakeR}hɂ萶D

    % cd cfg
    % make depend
    % make

7.4 TvvO̍\z

ɁCTvvO\z@D

܂CTvvÕIuWFNgt@CufBNg쐬
CRtBM[VXNvgsDႦ΁CIuWFNgt@
CufBNgCJSPJ[l̃\[Xt@CWJfB
Ng̉OBJƂ̂̃fBNgɂꍇɂ́C̃R}h
sifBNg̏ꏊ͖͔̂CӂɌ߂Ă悢jD

    % mkdir OBJ
    % cd OBJ
    % perl ../configure -C m68k -S dve68k

ŁCm68k̓^[QbgvZbTCdve68k̓^[QbgVXeł
D̃RtBM[VXNvg̃IvVɂẮC
̐߂ŐD

RtBM[VXNvg̎sɂCJgfBNgɂ́C
TvvO\z邽߂MakefileCTvvOp̃R
tBM[Vt@Cisample1.cfgjCTvvO{
isample1.hsample1.cjD

RtBM[VXNvg̎sCKvłMakefileC
DMakefilȅC@ɂẮCu7.7 MakefilȅCvQƂ邱ƁD

̌Cmake dependňˑ֌Wt@CiMakefile.dependj𐶐C
makeR}hɂTvvÕ[hW[ijsp܂
jsp.exejłDˑ֌Wt@C̐ɂ͎኱ԂD

    % make depend
    % make

ō\zTvvOisample1.hCsample1.cCsample1.cfgj
́CJSPJ[l̊{IȓmF邽߂̂̂łD̃vO
̊Tv́Csample1.c̐擪̃RgɂD

7.5 AvP[VƃJ[lʁXɍ\z@

O߂Ő@ł́CAvP[VƃJ[l𓯎ɐ邽߁C
IuWFNgt@CufBNgɔɑ̃t@C쐬
āCɂȂDŁCJ[lCpxႢꍇɂ́CJ[
l͎Oɍ\zĂCŃAvP[V\z@p
ĂDȉł́CTvvO\zɁC̎菇ɂĐ
D

܂CJ[l\zfBNg쐬CRtBM[VX
NvgsDႦ΁CJ[l\zfBNgCJSPJ[
l̃\[Xt@CWJfBNg̉kernel_libƂ̂
fBNgɂꍇɂ́C̃R}hsifBNg̏ꏊ
͖͔̂CӂɌ߂Ă悢jD

    % mkdir kernel_lib
    % cd kernel_lib
    % perl ../configure -C m68k -S dve68k

ɂCJ[l\zfBNgɁCMakefileCsample1.cfgC
sample1.hCsample1.c邪CMakefileȊO͎gpȂD

make dependňˑ֌Wt@CiMakefile.dependj𐶐Cmake
libkernel.aɂJ[lCuilibkernel.ajłD

    % make depend
    % make libkernel.a

ɁCAvP[V\zfBNg쐬CRtBM[
VXNvgsDႦ΁CAvP[V\zfBN
gCJSPJ[l̃\[Xt@CWJfBNg̉APLƂ
̂̃fBNgɂꍇɂ́C̃R}hsifBNg
̏ꏊ͖͔̂CӂɌ߂Ă悢jD

   % cd ..
   % mkdir APL
   % cd APL
   % perl ../configure -C m68k -S dve68k -L ../kernel_lib

-LIvVɂ́CJ[l\zfBNg̃pXw肷D

ŌɁCmake dependňˑ֌Wt@CiMakefile.dependj𐶐C
makeR}hɂTvvÕ[hW[ijsp܂
jsp.exejłD

    % make depend
    % make

̎菇ł́CAvP[V\zɂ̓J[l̍č\zKv`Fb
NȂ߁CJ[l̃\[XR[hCꍇɂ́CJ[l\z
fBNgmake libkernel.aĎsKvD܂CAv
P[V\zɃJ[lCuXVꂽ`FbNȂ߁C
AvP[V\zfBNgŁC[hW[폜
makeĎsKvD

ȏł́CJ[lƃAvP[VʁX̃fBNgō\zC
-LIvVɃJgfBNgi"."jw肷邱ƂŁCfB
NgŁiʁXɁj\z邱ƂłD̓Iɂ́C̎菇ƂȂD

    % mkdir OBJ
    % cd OBJ
    % perl ../configure -C m68k -S dve68k -L .
    % make depend
    % make libkernel.a
    % make cleankernel
    % make

ŁCmake cleankerneĺCJ[lCu𐶐邽߂̒ԃt@
C폜̂łD̎菇ł́Cmake dependɂJ[lC
uɊւˑ֌W𐶐Ȃ߁CJ[l̃\[XR[hC
ꍇɂ́CKmake cleankerneli܂́Cmake cleanjĂCmake
libkernel.aKv̂Œӂ邱ƁDɁC[hW[
폜makeĎsKv̂́CȌꍇƓlłD

7.6 RtBM[VXNvg̎g

RtBM[VXNvǵCJSPJ[lуAvP[V
vO\z邽߂ɕKvȊ{IȃRtBM[Vs
߂̃vOłDJSPJ[lpăAvP[V쐬
ɂ́C܂IuWFNgt@CufBNg쐬C̃fB
NgŃRtBM[VXNvgsDIuWFNgt@C
ufBNg̏ꏊ▼̂́CCӂɌ߂Ă悢D

RtBM[VXNvgɑ΂IvV͎̒ʂD

    -C <vZbT>
        ^[QbgvZbT܂̓V~[VCconfigfB
        Ng̉̃fBNĝŎw肷iK{jD

    -S <VXe>
        ^[QbgVXeCconfig̉̃vZbT̃fBNg
        ̃fBNĝŎw肷DV~[V̏ꍇɂ́C
        w肷KvȂD

    -T <J>
        JCconfig̉̃fBNĝ̌㔼̖̂Ŏw肷
        DGNUJpꍇɂ́Cw肷KvȂD

    -A <AvP[VvO>
        AvP[VvÔ̖w肷Dȗꍇɂ́C
        W̃TvvOisample1jƂȂD

    -U <IuWFNgt@C>
        AvP[VvÕC̃IuWFNgt@Ci-A 
        Ŏw肵AvP[VvO".o"t́j
        OɁCNׂIuWFNgt@Ĉ̖C".o"t
        `Ŏw肷D""ň͂ނƂɂāC̃t@Cw肷邱
        Ƃ\łi-U IvV𕡐gĂ͂ȂȂjD

    -L <J[lCũfBNg>
        Oɍ\zJ[lpāCAvP[V݂̂\z
        ꍇɂ́C̃IvVɃJ[lCuilibkernel.aj
        uꂽfBNgw肷D̃IvV̎gp@ɂ
        ẮCu7.5 AvP[VƃJ[lʁXɍ\z@v
        QƂ邱ƁD

    -D <JSPJ[l\[XfBNg>
        JSPJ[l̃\[XR[hufBNgw肷D
        ꍇɂ́Cconfigure̒uĂfBNgƂȂD

RtBM[VXNvgs͎̒ʂłD

(1) Makefile̐

samplefBNgK؂MakefileICKvȉӏāC
Makefile𐶐D

(2) TvvO̐

w肵AvP[VvOsamplefBNgɂꍇCK
ȃTvvÕ\[Xt@CICKvȉӏāC
TvvÕ\[Xt@CiႦ΁Csample1.hCsample1.cC
sample1.cfgj𐶐D

7.7 MakefilȅC

JSPJ[l̎sɂẮCRtBM[VXNvg
MakefileC邱ƂKvɂȂDł́CMakefile̒ŁCC
KvƂȂ\̍ӏɂĐD

ȂCMakefileCɃRtBM[VXNvgĎs
ƁCCMakefile㏑Ă܂̂Œӂ邱ƁiÂ̂
Makefile.bakɕۑjD

(A) ^[Qbg̒`

CPU̓^[QbgvZbTCSYS̓^[QbgVXeCTOOL͊J
ɒ`D̒`́CRtBM[VXNvgsD

(B) IuWFNgt@C̊gq̐ݒ

CygwinŃRpC鎞ɂ́COBJEXT"exe"ɒ`KvD
́CCygwinł́CIuWFNgvOɊgq"exe"t
̂ɑΉ邽߂̂̂łDCygwinł邱Ƃ𔻒ł΁CR
tBM[VXNvg̒`sD

(C) s̒`i^[Qbgˑj

^[QbgɂẮCsɑΉă^[Qbgˑ̃R[h
ꍇD\ɂ邽߂ɁCs̖̂DBGENVɒ`
ĂDWł́CGDBX^up邱Ƃz肵āCGNU_STUB
`Ă邪C^[Qbgˑ̒`ꂽMakefile.configŏ㏑
ꍇDǂ̃^[Qbgǂ̎sɑΉĂ邩́C^[Qb
g̃}jAQƂ邱ƁD

(D) J[lCũfBNg̒`

KERNEL_LIBɂ́CJ[lCu̒uꂽfBNg`D
̒`́Cʏ̓RtBM[VXNvgsC
KERNEL_LIB̒`ύXĂ܂ȂD

(E) ʃRpCIvV̒`

ŜɋʂRpCIvV̒ǉKvȏꍇɂ́C̕ϐ̒
`ύXD̃RpCIvVC̃^[QbgŏɕKv
ꍇɂ́C^[Qbgˑ̒`ꂽMakefile.configCׂł
Dǉ̉\̂RpCIvVɂẮCu7.8 RpC
IvVvQƂ̂ƁD

    CDEFS       -D IvVLqD
    INCLUDES    -I IvVLqD
    COPTS       RpCɑ΂邻̑̃IvVLqD
    LDFLAGS     Jɑ΂IvVLqD
    LIBS        CuN̂߂̃IvVLqD

(F) AvP[VvOɊւ`

AvP[VvOC\[Xt@Ci*.cĵ݂ō\
Ăꍇɂ́CUNAMEɂ̃t@C`΂悢DAvP[V
vÕ\[Xt@Cō\ꍇɂ́CUNAMEɂ̃A
vP[V`CIuWFNgt@CUTASK_ASMOBJS
UTASK_COBJSɗ񋓂D̏ꍇɂCRtBM[Vt@C
́CUNAMEɒ`OɊgq"cfg"tOƂD

\[Xt@CRpĈƂ͕ʂ̃fBNgɒuꍇɂ́C
UTASK_DIRSɂ̃fBNgǉD܂CAvP[ṼRp
CɕKvȃRpCIvVCAvP[VCuKv
Ƃꍇɂ́CUTASK_CFLAGSUTASK_LIBS ɒ`D

(G) IuWFNgt@C̒`

IuWFNgt@COBJNAMEɒ`DftHgjspłD

(H) ^[Qbgt@C̒`

[hW[̌`w肷D̓Iɂ́CELF`̎$(OBJFILE) 
܂$(OBJNAME).outiPARTNER-J̎jCoCi`̎
$(OBJNAME).binCg[ S`̎$(OBJNAME).srecw肷D
$(OBJFILE) ́CCygwinOBJEXT"exe"ɒ`ɂ$(OBJNAME).exeC
łȂꍇɂ$(OBJNAME)ƂȂD

(I) J[l̃RtBM[Vt@C̐

\tgEFAĩRtBM[^ǉꍇɂ́C̋KC
邱ƂKvłD

7.8 RpCIvV

JSPJ[l̃R[hɂ́Cassert}NgĂDassert}ŃC
NDEBUG`邱ƂŁCIuWFNgR[hƂłDJ[
l̃fobOI΁CCDEFS-DNDEBUGw肵ăRpC
悭ȂD

܂CVXeO@\O߂OMIT_SYSLOGpӂĂDڂ
́Cu4.8 VXeO@\̐ݒ@vQƂ邱ƁD

7.9 RtBM[Vc[̎g

ȉł́CcfgvOchkvÕIvVɂĐD
̃vOɂRtBM[V菇ɂẮCu2.10 
IAPIƃRtBM[^vQƂ邱ƁD

cfgvOchkvOɋʂ̃IvV͎̒ʂD

    -cpu <vZbT>
        ^[QbgvZbTw肷D

    -system <VXe>
        ^[QbgVXew肷D

    -h, --help
        wvbZ[W\D

    -v
        ̓rʂ\D

    -le, --english
        bZ[Wpŕ\iftHgjD

    -lj, --japanese
        bZ[W{ŕ\D

cfgvOɑ΂IvV͎̒ʂD

    -s, --source <t@C>
        <t@C>Ŏw肳ꂽVXeRtBM[Vt@C
        iC̃vvZbTŏ́jǂݍށD<t@C>
        ȗꍇ́CVXeRtBM[Vt@CW
        ͂ǂݍށiIvVgȗĂ͂ȂȂjD

    -c, --check
        ÓIAPĨp[^`FbNɗpt@Ckernel_chk.cɐ
        iftHgł͐ȂjD

    -obj, --dump-object <t@C>
        ÓIAPỈ͓e܂ރIuWFNg`t@CC<t@C>
        Ŏw肳ꂽt@CɐD<t@C>ȗꍇ́C
        kernel_obj.datɐD

    -z, --nonzero
        __EMTPY_LABEL}N̎gp}~D

    -ao=xxx
        ID̊tw肷DxxxɎwłe͎̒ʂD

        alphabetic          ̂̏iAɋ߂̂قǏȒlj
        fcfs                `̏ (ɐ錾̂قǏȒl)
        alphabetic,reverse  ̂̍~
        fcfs,reverse        `̍~

    -id=<t@C>
        IDtʃwb_t@Cikernel_id.hĵ̖ύXD

    -cfg=<t@C>
        J[l\t@C(kernel_cfg.c)̖̂ύXD

    -oproto
        nh^XN{̂Ȃǂ̊֐̃vg^Cv錾J[l\
        t@Cikernel_cfg.cjɏo͂D

    -il
        J[l֘Ãwb_CN[hۂɁC"t@C" ł͂Ȃ
        <t@C> gpD

    -1.3
        TOPPERS/JSPJ[l Release 1.3݊̌`ŐD
        i: -1.3Őt@C1.4ȍ~ł͎gpłȂj

    -iapi
        J[lRtBM[^łȂÓIAPI𖳎D

    -t
        J[lRtBM[^łȂÓIAPIWo͂ɏo
        D

    -ext
        WO̊g@\̎gpD

chkvOɑ΂IvV͎̒ʂD

    -m, --module <W[Lq>
        `FbN郍[hW[w肷DWchkvÓC
        [hW[̃V{t@CiGNU BINUTILSnmo͂
        `jƃg[SR[ht@CǂݍŃp[^`Fb
        NsȂD̏ꍇC<W[Lq>ɂ́CV{t@C
        SR[ht@C2","ŋ؂Ďw肷D

    -cs, --script <t@C>
        <t@C>Ŏw肳ꂽ`FbNt@Cpă`FbND
        `FbNt@CƂ́CcfgvOkernel_chk.cC
        RpC utils/gencheck ɂHt@ĈƂ
        D̃IvVȗꍇC̃`FbNs
        ȂȂDIvVw肵ꍇɂ́C<t@C>͏ȗł
        ȂD

    -obj, --load-object <t@C>
        ÓIAPỈ͓e܂ރIuWFNg`t@CC<t@C>
        Ŏw肳ꂽt@CǂݍށD<t@C>ȗꍇ́C
        kernel_obj.datǂݍށD

    -cl <G[x>
        G[oxύXDxLAZYidȃG[̂݌
        ojCSTANDARDiITRONdl͈݂̔͂̂ŌojCTOPPERSiJSPJ[
        l̐ᔽ܂ŌojCRESTRICTEDiׂẴG[oj
        4ނ̂IiftHgRESTRICTEDjD

7.10 JXNvgƃ̈

JSPJ[l̃N@́C^[Qbgˑ̃JXNvgi*.ldj
LqĂDTvvO Makefile ł́C^[Qbgˑ̒
`ꂽ Makefile.config ̒ LDSCRIPT `ƁC`O
̃t@CJXNvgɗpD

JSPJ[l쎞ɂ́Cȉ̃̈悪KvɂȂD

(a) R[ḧ

J[lуAvP[ṼvOђ萔f[^u
DROMɒuƂ\łD擪AhXCJ[lN
ۂ -Ttext IvVŎw肷DTvvO Makefile ł́C
^[Qbgˑ̒`ꂽ Makefile.config ̒ TEXT_START_ADDRESS 
`ƁCN -Ttext IvVtD

(b) f[^̈

J[lуAvP[V̎gpf[^̈DŒIȃf[^̈
ƁCsbrk֐ɂĎq[v̈悩ȂDJ[l̓q[v̈
gpȂD擪AhXCJ[lNۂ -Tdata IvV
Ŏw肷DTvvO Makefile ł́C^[Qbgˑ̒`
ꂽ Makefile.config ̒ DATA_START_ADDRESS `ƁCN
 -Tdata IvVtD

(c) ^XNReLXgp̃X^bN̈

݃nhȂǂ̔^XNReLXggpX^bN̈D̈
ݒ@̓^[Qbgˑł邪Cʏ́C^[QbgVXeˑ̃C
N[ht@Cisys_config.hjŃX^bN̏l`C^[Qbg
vZbTˑ̃X^[gAbvW[istart.SjŏD

7.11 ̃^[Qbgւ̃|[eBO

JSPJ[l𑼂̃^[Qbgփ|[eBO邽߂ɕKvȍƂ́CJ[
lg̃|[eBOCVXeT[rX̃|[eBOCJ̍\z
ƕW̊JƂ̍ق̋zȂǂȂDڂ́CuJSPJ[l ^
[Qbgˑ |[eBOKChviconfig.txtjQƂ邱ƁD

7.12 J[l̓ʎq̃l[

ITRON4.0dĺCJ[l̓ʎq_kernel_܂_KERNEL_Ŏn߂
ƂvĂDƂ낪CJ[l̃\[XR[hŒڂ̂悤
ʎqpƁCʎq̒ȂCǐ𑹂ȂDJSPJ[
lł́CxxxxxƂJ[l̓ʎq_kernel_xxxxxɃl[
dg݂ĂD

Ƃ낪C̎dg݂ɂCfobOƂɂȂP[Xl
D̓Iɂ́C\[XR[h̎ʎqIuWFNgR[h̎ʎq
vȂ߂ɁC\[XR[h̕ϐw肵Ă̒lǂ񂾂C֐
w肵ĂɃu[N|CguƂƂłȂD

̖邽߂ɁCJSPJ[lł́C\[XR[h̕KvȎ
ql[邽߂̃[eBeBiutils/renamejpӂĂD
rename[eBeBɁCl[`t@Cixxx_rename.defj̃v
tBbNXixxx̕jƁCl[t@CXg^ƁC
l[sȂDႦ΁CkernelfBNĝׂẴt@Cɑ΂
āCJ[l̓ʖl[ɂ́C̃R}hp΂悢D

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


WD̑

8.1 EFuTCg

TOPPERSvWFNgJSPJ[l̂߂̃EFuTCgCȉURL
ɗpӂĂD

        http://www.toppers.jp/

ztLbg̍ŐVł́C̃EFuTCg_E[h邱ƂłD
܂Cq̃[OXg̃A[JCuȂǂC̃EFuTCgŉ{
邱ƂłD

8.2 pE쌠

JSPJ[l̗ṕCet@C̐擪ɖĂĩhL
g̐擪ɂĂjD쌠́Cet@C̐擪ɕ\Ă
钘쌠҂ۗLĂD

p (3)  (b) ɂāCp̌`ԂTOPPERSvWFNgɕ
@ƂẮCJSPJ[l𗘗pî̖ƉpCi
ЖƋƎ퓙̏CȉURL̃y[W񍐂̂ƂD

        http://www.toppers.jp/report.html

܂̍ۂɁCJSPJ[lgpẴRg₲ӌƍK
łD

8.3 ۏ؁ET|[gEKp

JSPJ[l͖ۏ؂Œ񋟂Ă̂łDJ҂́C̓Kp\
܂߂āCȂۏ؂sȂD܂CT|[g̖񑩂ĂȂD
₪ꍇ́Cq̃[OXg𗘗pĂƍKł
D

8.4 [OXg

JSPJ[l̃[Uɑ΂񋟂у[U݊Ԃ̏e
ɂ邽߂ɁCTOPPERS[UY[OXgpӂĂD̃[
OXgɂ́CNłRɃ[𑗕t邱ƂłD܂Ct
ꂽ[́CNłRɃEFuTCgœǂނƂłDJSPJ[l
ɃoO_𔭌ꍇɂ́C̃[OXgɕ񍐂ė~
D

[OXgւ̃[̑t͎̒ʂD

        users@toppers.jp

[OXgɃoO_Ȃǂ񍐂ꍇɂ́CKvɉāC
̏m点ė~D

    ^[QbgɊւ
        E^[QbgvZbT̎
        E^[Qbg{[h̎

    zXgɊւ
        EOS̃o[WiT[rXpbN̓Kp󋵂j
        ERpCȂǂ̊J̃o[WiCygwiño[Wj

̃[OXgւ̓o^]ꍇ́C܂C
users-ctl@toppers.jp ĂɁC{

        subscribe Ȃ̖O
        : subscribe Hiroaki Takada

Ə[𑗕tiL̃R}hɂ͔pp݂̂gƁjD
܂ԂCo^mF̂߂̃[Ă̂ŁC̎wɏ]ēo
^D

8.5 TOPPERSvWFNgւ̎Q

TOPPERSvWFNgł́Č`ŃvWFNgɍvꂽCv
WFNgŊJ\tgEFAg̕CvWFNgɋ
̎̕Q߂ĂDTOPPERSvWFNgւ̎Q@ɂẮC
TOPPERSvWFNg̃EFuTCgQƂ邱ƁD

8.6 ~hEFAp Makefile

TvfBNgɂ Makefilew.mware JSPJ[lɃ~hEFA
gݍ킹ăRpC邽߂ Makefile łD Makefile 
CN[h~hEFAp Makefile ł́Cȉ̕ϐ`邱
ƁD

(1) MTASK_CFG
~hEFÃRtBM[Vt@Ci\[XjǉD

(2) MTASK_KERNEL_CFG
~hEFÃRtBM[^o͂CJSPJ[l ̃VXeR
tBM[Vt@CɃCN[ht@CǉD

(3) MTASK_DIR
~hEFÃfBNgǉD

(4) MTASK_LCSRCS
~hEFACu\[Xt@CǉD

(5) MTASK_ASMOBJS
~hEFÃAZũIuWFNgt@CǉD

(6) MTASK_CXXOBJS
~hEFA C++ ̃IuWFNgt@CǉD

(7) MTASK_COBJS
~hEFA C ̃IuWFNgt@CǉD

(8) MTASK_CFLAGS
~hEFARpCƂ̃IvVw肷D

(9) MTASK_LIBS
~hEFÃCuǉD

(10) MAKE_MTASK
Cu~hEFAw肷D

XDt@X

9.1 T[rXR[ꗗ

(1) ^XNǗ@\

        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) ^XNt@\

        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) ^XNO@\

        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) EʐM@\

        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) v[Ǘ@\

        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) VXeԊǗ@\

        ER ercd = rot_rdq(PRI tskpri);
        ER ercd = irot_rdq(PRI tskpri);
        ER ercd = get_tid(ID *p_tskid);
        ER ercd = iget_tid(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);
         xxCxxxxCXXXX ̓^[Qbgɒ߂D

(9) CPUÕVXeԎQ

     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) \]pVXeQƋ@\

        ER ercd = vxget_tim(SYSUTIM *p_sysutim);

9.2 ÓIAPIꗗ

    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 CG[R[hꗗiJSPJ[lԂ̂̂݁j

    E_PAR       -17             p^[G[
    E_ID        -18             sIDԍ
    E_CTX       -25             ReLXgG[
    E_ILUSE     -28             T[rXR[sgp
    E_OBJ       -41             IuWFNgԃG[
    E_QOVR      -43             L[COI[o[t[
    E_RLWAI     -49             ҂Ԃ̋
    E_TMOUT     -50             |[Os܂̓^CAEg

9.4 o[W

    2000N1115      Release 1.0             ŏ̃[X
    2000N1124      Release 1.0 (PL=1)      _̏C
    2001N224       Release 1.1             V850̒ǉȂ
    2001N59        Release 1.1 (PL=1)      SH1̒ǉȂ
    2001N1115      Release 1.2             SH4CH8CARM7TDMI̒ǉȂ
    2002N415       Release 1.3             M32RCMicroBlazeCTMS320C54xC
                                                i386CH8S̒ǉȂ
    2003N1225      Release 1.4             ̉
    2004N1014      Release 1.4 (PL=1)      SH2CM16CCSC33CPowerPC32C
                                                Nios2̒ǉȂ
    2005N1128      Release 1.4 (PL=2)      M32C-Renesas, H8-Renesas,
                                                H8S-Renesas, V850
    2007N61        Release 1.4 (PL=3)      _̏CCTLCS900̒ǉȂ

ȏ
