
               JSPͥ ե졼 

             Release 1.4бǽ: 20-Dec-2003

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

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

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

 @(#) $Id: configurator.txt,v 1.20 2005/07/06 01:40:05 honda Exp $
------------------------------------------------------------------------


ΥɥȤǤϡJSPͥΥե졼٤ե
ƤˤĤƲ⤹롥

JSPͥΥե졼ϡƥॳե졼ե
ơͥ빽եkernel_cfg.cˤIDưդ
եkernel_id.hˤ롥ޤŪAPIΥѥ᡼å
Ѥեkernel_chk.cˤ롥

IDưդ̥եϡե졼IDֹդ
Ȥ̾򡤳դIDֹեǤ롥

ʲǤϡͥ빽եƤˤĤƲ⤹롥

(1) ʬ

(1-1) ɸ।󥯥롼ɥե

kernel_cfg.c ѤΥ󥯥롼ɥե򥤥󥯥롼ɤץץå
ǥ쥯ƥ֡#includeˤ롥ŪˤϡιԤ롥

#include "kernel_cfg.h"

ޤɬפǤСIDưդ̥ե򥤥󥯥롼ɤץץ
åǥ쥯ƥ֡#includeˤ롥ŪˤϡιԤ
롥

#include "kernel_id.h"

(1-2) ޥִ

ޥִѤ뤿ˡʲΥޥԤ롥

#define CFG_INTHDR_ENTRY(inthdr) INTHDR_ENTRY(inthdr)
#define CFG_EXCHDR_ENTRY(exchdr) EXCHDR_ENTRY(exchdr)
#define CFG_INT_ENTRY(inthdr) INT_ENTRY(inthdr)
#define CFG_EXC_ENTRY(exchdr) EXC_ENTRY(exchdr)

ʤΥޥϡϲΥСȤθߴݤĤ
줿ΤǤ롥ΥСȤθߴɬפʤƤ⡤ޥ
ִѤ뤿ɬפǤ롥

(2)INCLUDEŪAPIν

ƥॳե졼ե˴ޤޤINCLUDEŪAPI
ץץåǥ쥯ƥ֡#includeˤ롥㤨С

INCLUDE("\"sample1.h\"");

ȤŪAPIФơ

#include "sample1.h"

Ȥǥ쥯ƥ֤롥ǥ쥯ƥ֤νϡ
ॳե졼եǤŪAPIν˰פ롥

(3) ƥͥ륪֥Ȥ˴ؤ

ƥॳե졼եˡ֥ȤŪ
APICRE_XXXפޤޤƥͥ륪֥Ȥ˴ؤơ֥
Τ롥

ե졼ϡƱΥ֥ȤŪAPI򽸤ᡤ
IDֹν¤ؤ롥ƱIDֹΥ֥ȤŪ
APIʣޤޤƤˤϡե졼顼𤹤롥 
JSPͥϡ֥ȤIDֹ椬Ϣ³Ƥ뤳ȤꤷƼ
Ƥ롥IDֹ椬Ϣ³Ƥʤˤϡե졼顼
𤹤롥

ޤե졼ϡ֥ȤIDֹ˼̻Ҥ
ƤˡΥ֥ȤIDֹդ롥IDֹϡ¾
֥ȤIDֹȽʣʤIDֹ椬Ǥ¤Ϣ³褦˳
դ롥ǤIDֹ椬Ϣ³ˤʤʤˤϡե졼
顼𤹤롥

ƥͥ륪֥Ȥ˴ؤɸŪʹϡ̤Ǥ롥
֥Ȥˤä㳰ˤϡ֥ι롥

(a) ֥Ȥο

֥Ȥοޥץץåǥ쥯ƥ֡#define
롥Ūˤϡ֥ȤξάXXXפȤȡ
褦ʹԤ롥

#define TNUM_XXXID <֥Ȥο>

(b) Υ֥IDѿ

Υ֥IDѿ롥Ūˤϡ֥
ȤξάXXXxxxפȤȡΤ褦ʹԤ롥

const ID tmax_xxxid = (TMIN_XXXID + TNUM_XXXID - 1);

(c) ֥Ȥɬפʥΰ

֥ȤˤäƤϡ֥Ȥɬפʥΰ롥
Ūˤϡ֥ι롥

(d) ֥Ȥν֥å

֥Ȥν֥å롥Ūˤϡ֥
ξάXXXxxxפȤȡΤ褦ʹԤ롥

const XXXINIB xxxinib_table[TNUM_XXXID] = {
        <֥ID 1 Υ֥Ȥν>,
        <֥ID 2 Υ֥Ȥν>,
                ġ
        <֥ID tmax_xxxid Υ֥Ȥν>
};

֥Ȥνηϡ֥˰ۤʤ롥Ūˤϡ
֥ι롥

(e) ֥ȤΥȥ֥å

֥ȤΥȥ֥å롥Ūˤϡ֥
ȤξάXXXxxxפȤȡΤ褦ʹԤ롥

XXXCB xxxcb_table[TNUM_XXXID];

(3-1) ˴ؤ

JSPͥϡĤʤбƤʤᡤ
ؤɬʤФʤʤ

˴ؤΥ󥯥롼ɥե̾ȥ֥Ȥξάϼ
̤Ǥ롥֥åΥǡ TINIBѿ̾ 
tinib_tableȥ֥åΥǡ TCBѿ̾ 
tcb_table ǤʤTSKtskפ夨ơTtפѤƤˡ

        󥯥롼ɥե̾: task.h
        ֥Ȥξά: TSK

֥åˤϡCRE_TSKŪAPIǻꤵ˲äơ
DEF_TEXŪAPIǻꤵޤ롥

ʲǤϡƥॳե졼ե˼ŪAPIޤޤ
Ƥ٤ˤĤƽҤ٤롥

CRE_TSK(tskid, { tskatr, exinf, task, itskpri, stksz, stack });
DEF_TEX(tskid, { texatr, texrtn });

(3-1-1) ɬפʥΰ

ɬפʥΰȤơΥåΰ褬롥
ˡꤵ줿Υåΰ롥Ūˤϡ嵭
ŪAPIФơ롥

static __STK_UNIT <åΰѿ̾>[__TCOUNT_STK_UNIT(stksz)];

ǡ<åΰѿ̾> ϡ˰ۤʤ뼱̻Ҥ
롥

(3-1-2) ν

֥å륿νϡηȤ롥

        { tskatr, (VP_INT)(exinf), (FP)(task), INT_PRIORITY(itskpri),
            __TROUND_UNIT_STK(stksz), <åΰѿ̾>,
            texatr, (FP)(texrtn) }

ǡCRE_TSK б DEF_TEX ʤˤϡtexatr  TA_NULL
texrtn  NULL Ȥ롥

(3-1-3) ơ֥

ФƤϡ줿ʥŪAPIҤ줿
ˤơ֥˽Ϥɬפ롥ϡ줿ǡ
νʤŪˤϡεưˤԤɬפ뤿Ǥ
롥

ŪˤϡΤ褦ʹԤ롥

const ID torder_table[TNUM_TSKID] = {
        <ǽ줿ΥID>,
        <2ܤ줿ΥID>,
                ġ
        <Ǹ줿ΥID>
};

(3-1-4) 顼

ν˴ؤ륨顼ϼ̤Ǥ롥

DEF_TEX б CRE_TSK ʤE_NOEXS
(tskatr & ~(TA_ACT))  0 ǤʤE_RSATR
(TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI) ǤʤE_PAR
stack  NULL ǤʤE_NOSPT
texatr  0 ǤʤE_RSATR

 ¾ˡtask  texrtn ץγϤȤʤ
䡤stksz ˤ⥨顼Ȥ٤顼郎
Ȥ˰¸ƤޤᡤβȤ롥

(3-2) ޥե˴ؤ

ޥե˴ؤΥ󥯥롼ɥե̾ȥ֥Ȥξά
̤Ǥ롥

        󥯥롼ɥե̾: semaphore.h
        ֥Ȥξά: SEM

ʲǤϡƥॳե졼ե˼ŪAPIޤޤ
Ƥ٤ˤĤƽҤ٤롥ʤޥեɬפʥ
Ϥʤ

CRE_SEM(semid, { sematr, isemcnt, maxsem });

(3-2-1) ޥեν

ޥե֥å륻ޥեνϡηȤ
롥

        { sematr, isemcnt, maxsem }

(3-2-2) 顼

ޥեν˴ؤ륨顼ϼ̤Ǥ롥

(sematr & ~(TA_TPRI))  0 ǤʤE_RSATR
(isemcnt > maxsem) ξE_PAR
(1 <= maxsem && maxsem <= TMAX_MAXSEM) ǤʤE_PAR

(3-3) ٥ȥե饰˴ؤ

٥ȥե饰˴ؤΥ󥯥롼ɥե̾ȥ֥Ȥξά
ϼ̤Ǥ롥

        󥯥롼ɥե̾: eventflag.h
        ֥Ȥξά: FLG

ʲǤϡƥॳե졼ե˼ŪAPIޤޤ
Ƥ٤ˤĤƽҤ٤롥ʤ٥ȥե饰ɬפʥ
ΰϤʤ

CRE_FLG(flgid, { flgatr, iflgptn });

(3-3-1) ٥ȥե饰ν

٥ȥե饰֥å륤٥ȥե饰νϡ
ηȤ롥

        { flgatr, iflgptn }

(3-3-2) 顼

٥ȥե饰ν˴ؤ륨顼ϼ̤Ǥ롥

(flgatr & ~(TA_TPRI|TA_CLR))  0 ǤʤE_RSATR

(3-4) ǡ塼˴ؤ

ǡ塼˴ؤΥ󥯥롼ɥե̾ȥ֥Ȥξά
ϼ̤Ǥ롥

        󥯥롼ɥե̾: dataqueue.h
        ֥Ȥξά: DTQ

ʲǤϡƥॳե졼ե˼ŪAPIޤޤ
Ƥ٤ˤĤƽҤ٤롥

CRE_DTQ(dtqid, { dtqatr, dtqcnt, dtq });

(3-4-1) ǡ塼ɬפʥΰ

ǡ塼ɬפʥΰȤơǡ塼ΰ褬롥
ƥǡ塼ˡɬפʥΥǡ塼ΰ롥Ū
ϡ嵭ŪAPIФơ롥

#if (dtqcnt) > 0
static VP_INT <ǡ塼ΰѿ̾>[dtqcnt];
#else
#define <ǡ塼ΰѿ̾> NULL
#endif

ǡ<ǡ塼ΰѿ̾> ϡǡ塼˰ۤʤ뼱̻Ҥ
Ѥ롥

(3-4-2) ǡ塼ν

ǡ塼֥åǡ塼νϡ
Ȥ롥

        { dtqatr, dtqcnt, <ǡ塼ΰѿ̾> }

(3-4-3) 顼

ǡ塼ν˴ؤ륨顼ϼ̤Ǥ롥

(dtqatr & ~(TA_TPRI))  0 ǤʤE_RSATR
dtq  NULL ǤʤE_NOSPT

(3-5) ᡼ܥå˴ؤ

᡼ܥå˴ؤΥ󥯥롼ɥե̾ȥ֥Ȥξά
ϼ̤Ǥ롥

        󥯥롼ɥե̾: mailbox.h
        ֥Ȥξά: MBX

ʲǤϡƥॳե졼ե˼ŪAPIޤޤ
Ƥ٤ˤĤƽҤ٤롥ʤ᡼ܥåɬפʥ
ΰϤʤ

CRE_MBX(mbxid, { mbxatr, maxmpri, mprihd });

(3-5-1) ᡼ܥåν

᡼ܥå֥å᡼ܥåνϡ
ηȤ롥

        { mbxatr, maxmpri }

(3-5-2) 顼

᡼ܥåν˴ؤ륨顼ϼ̤Ǥ롥

(mbxatr & ~(TA_TPRI|TA_MPRI))  0 ǤʤE_RSATR
(TMIN_MPRI <= maxmpri && maxmpri <= TMAX_MPRI) ǤʤE_PAR
mprihd  NULL ǤʤE_NOSPT

(3-6) Ĺס˴ؤ

Ĺס˴ؤΥ󥯥롼ɥե̾ȥ֥Ȥ
άϼ̤Ǥ롥

        󥯥롼ɥե̾: mempfix.h
        ֥Ȥξά: MPF

ʲǤϡƥॳե졼ե˼ŪAPIޤޤ
Ƥ٤ˤĤƽҤ٤롥

CRE_MPF(mpfid, { mpfatr, blkcnt, blksz, mpf });

(3-6-1) Ĺסɬפʥΰ

ĹסɬפʥΰȤơĹסΰ褬
롥ƸĹסˡɬפʥθĹס
ΰ롥Ūˤϡ嵭ŪAPIФơ롥

static __MPF_UNIT <Ĺסΰѿ̾>
                                [__TCOUNT_MPF_UNIT(blksz) * (blkcnt)];

ǡ<Ĺסΰѿ̾> ϡĹס˰
ʤ뼱̻ҤѤ롥

(3-6-2) Ĺסν

Ĺס֥åĹסν
ϡηȤ롥

        { mpfatr, __TROUND_MPF_UNIT(blksz), <Ĺסΰѿ̾>,
                (VP)(((VB *) <Ĺסΰѿ̾>)
                        + sizeof(<Ĺסΰѿ̾>)) }

(3-6-3) 顼

Ĺסν˴ؤ륨顼ϼ̤Ǥ롥

(mpfatr & ~(TA_TPRI))  0 ǤʤE_RSATR
blkcnt  0 ξE_PAR
blksz  0 ξE_PAR
mpf  NULL ǤʤE_NOSPT

(3-7) ϥɥ˴ؤ

ϥɥ˴ؤΥ󥯥롼ɥե̾ȥ֥Ȥξά
ϼ̤Ǥ롥

        󥯥롼ɥե̾: cyclic.h
        ֥Ȥξά: CYC

ʲǤϡƥॳե졼ե˼ŪAPIޤޤ
Ƥ٤ˤĤƽҤ٤롥ʤϥɥɬפʥ
ΰϤʤ

CRE_CYC(cycid, { cycatr, exinf, cychdr, cyctim, cycphs });

(3-7-1) ϥɥν

ϥɥ֥åϥɥνϡ
Ȥ롥

        { cycatr, exinf, (FP)(cychdr), cyctim, cycphs }

(3-7-2) 顼

ϥɥν˴ؤ륨顼ϼ̤Ǥ롥

(cycatr & ~(TA_STA))  0 ǤʤE_RSATR
(cyctim > TMAX_RELTIM) ξE_PAR
(cycphs > TMAX_RELTIM) ξE_PAR

 ¾ˡcychdr ץγϤȤʤˤ⥨顼
Ȥ٤顼郎åȤ˰¸Ƥޤᡤβ
롥

(4) ߥϥɥ˴ؤ

ƥॳե졼եˡߥϥɥ
ŪAPIDEF_INHפޤޤƤˡߥϥɥ˴ؤ
롥Ūˤϼ̤ꡥ

(4-1) ߥϥɥο

ߥϥɥοޥץץåǥ쥯ƥ
#defineˤ롥ޤͤѿ롥Ū
ˤϡΤ褦ʹԤ롥

#define TNUM_INHNO <ߥϥɥο>
const UINT      tnum_inhno = TNUM_INHNO;

(4-2) ߥϥɥν

Ƴߥϥɥˡߥϥɥν롼
롥Ūˤϡ

DEF_INH(inhno, { inhatr, inthdr });

ȤŪAPIФơ

CFG_INTHDR_ENTRY(inthdr);

ȤԤ롥

(4-3) ߥϥɥ֥å

ߥϥɥ֥å롥ŪˤϡΤ褦ʹԤ
롥

const INHINIB inhinib_table[TNUM_INHNO] = {
        <ߥϥɥ 1 ν>,
        <ߥϥɥ 2 ν>,
                ġ
        <ߥϥɥ TNUM_INHNO ν>
};

γߥϥɥνϡηȤ롥

        { inhno, inhatr, (FP)CFG_INT_ENTRY(inthdr) }

(4-4) 顼

ߥϥɥ˴ؤ륨顼ϼ̤Ǥ롥

inhatr  0 ǤʤE_RSATR

 ¾ˡinthdr ץγϤȤʤ䡤
inhno ߥϥɥֹȤʤˤ⥨顼Ȥ٤
顼郎åȤ˰¸ƤޤᡤβȤ롥

(5) CPU㳰ϥɥ˴ؤ

ƥॳե졼եˡCPU㳰ϥɥ
ŪAPIDEF_EXCפޤޤƤˡCPU㳰ϥɥ˴ؤ
롥Ūˤϼ̤ꡥ

(5-1) CPU㳰ϥɥο

CPU㳰ϥɥοޥץץåǥ쥯ƥ
֡#defineˤ롥ޤͤѿ롥
ŪˤϡΤ褦ʹԤ롥

#define TNUM_EXCNO <CPU㳰ϥɥο>
const UINT      tnum_excno = TNUM_EXCNO;

(5-2) CPU㳰ϥɥν

CPU㳰ϥɥˡCPU㳰ϥɥν롼
롥Ūˤϡ

DEF_EXC(excno, { excatr, exchdr });

ȤŪAPIФơ

CFG_EXCHDR_ENTRY(exchdr);

ȤԤ롥

(5-3) CPU㳰ϥɥ֥å

CPU㳰ϥɥ֥å롥ŪˤϡΤ褦ʹԤ
롥

const EXCINIB excinib_table[TNUM_EXCNO] = {
        <CPU㳰ϥɥ 1 ν>,
        <CPU㳰ϥɥ 2 ν>,
                ġ
        <CPU㳰ϥɥ TNUM_EXCNO ν>
};

CPU㳰ϥɥνϡηȤ롥

        { excno, excatr, (FP)CFG_EXC_ENTRY(exchdr) }

(5-4) 顼

CPU㳰ϥɥ˴ؤ륨顼ϼ̤Ǥ롥

excatr  0 ǤʤE_RSATR

 ¾ˡexcthdr ץγϤȤʤ䡤
excno CPU㳰ϥɥֹȤʤˤ⥨顼Ȥ٤
顼郎åȤ˰¸ƤޤᡤβȤ롥

(6) ।٥ȴ˴ؤ

।٥ȴ˴Ϣơ롥

TMEVTN  tmevt_heap[TNUM_TSKID + TNUM_CYCID];

(7) ƥ⥸塼νؿ

ƥͥ륪֥ȤδߴCPU㳰ϥɥγƵǽ
ؿ˸ƤӽФؿobject_initializeˤ롥Ѥ
ʤǽνؿϡƤӽФʤ

٤ƤεǽȤäؿϼ̤Ǥ롥

void
object_initialize()
{
        task_initialize();
        semaphore_initialize();
        eventflag_initialize();
        dataqueue_initialize();
        mailbox_initialize();
        mempfix_initialize();
        cyclic_initialize();
        interrupt_initialize();
        exception_initialize();
}

(8) 롼μ¹Դؿ

ATT_INIŪAPIɲä롼˸ƤӽФؿ롥
Ūˤϡ

ATT_INI({ iniatr, exinf, inirtn });

ȤŪAPIФơ

inirtn((VP_INT)(exinf));

ƤӽФؿcall_inirtn Ȥ̾롥롼
ӽФϡƥॳե졼եǤŪAPIν
˰פ롥

㤨С

ATT_INI({ TA_HLNG, 0, timer_initialize });
ATT_INI({ TA_HLNG, (INT) CONSOLE_PORTID, serial_initialize });

ȤĤŪAPIνǵҤ줿ؿϼ̤
롥

void
call_inirtn()
{
        timer_initialize((VP_INT)(0));
        serial_initialize((VP_INT)((INT) CONSOLE_PORTID));
}

(8-1) 顼

롼˴ؤ륨顼ϼ̤Ǥ롥

iniatr  0 ǤʤE_RSATR

 ¾ˡinirtn ץγϤȤʤˤ⥨顼
Ȥ٤顼郎åȤ˰¸Ƥޤᡤβ
롥

ʾ


