
	       JSPJ[l RtBM[^dl 

             iRelease 1.4ΉCŏIXV: 4-Jun-2003j

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

 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: /local/fi4-1.4/toppers/RELEASE_20061105_1/doc/configurator.txt 2750 2006-03-07T16:15:24.532712Z monaka  $
------------------------------------------------------------------------


̃hLgł́CJSPJ[l̃RtBM[^ׂt@
C̓eɂĉD

JSPJ[l̃RtBM[^́CVXeRtBM[Vt@
CāCJ[l\t@Cikernel_cfg.cjIDt
t@Cikernel_id.hj𐶐D܂CÓIAPĨp[^`FbN
pt@Cikernel_chk.cj𐶐D

IDtʃt@ĆCRtBM[^IDԍtIu
WFNg̖OCtIDԍɒ`t@CłD

ȉł́CJ[l\t@C̓eɂĉD

(1) Œ萶

(1-1) WCN[ht@C

kernel_cfg.c p̃CN[ht@CCN[hvvZbT
fBNeBui#includej𐶐D̓Iɂ́C̍s𐶐D

#include "kernel_cfg.h"

܂CKvł΁CIDtʃt@CCN[hvv
ZbTfBNeBui#includej𐶐D̓Iɂ́C̍s𐶐
D

#include "kernel_id.h"

(1-2) }N̒u̐

}N̒uς邽߂ɁCȉ̃}N`s𐶐D

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

ȂC̃}ŃCX͉ߋ̃o[WƂ̌݊ۂ߂ɓ
ꂽ̂łDCߋ̃o[WƂ̌݊KvȂĂC}N
̒uς邽߂ɕKvłD

(2)uINCLUDEvÓIAPȈ

VXeRtBM[Vt@CɊ܂܂uINCLUDEvÓIAPIɑ
vvZbTfBNeBui#includej𐶐DႦ΁C

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

ƂÓIAPIɑ΂āC

#include "sample1.h"

ƂfBNeBu𐶐DfBNeBȕ́CVXe
RtBM[Vt@Cł̐ÓIAPȈɈvD

(3) eJ[lIuWFNgɊւ`

VXeRtBM[Vt@CɁCIuWFNg𐶐ÓI
APIuCRE_XXXv܂܂eJ[lIuWFNgɊւāCIuWFNg
̂߂̒`𐶐D

RtBM[^́Cނ̃IuWFNg𐶐ÓIAPIW߁C
IDԍ̏ɕבւDIDԍ̃IuWFNg𐶐ÓI
API܂܂Ăꍇɂ́CRtBM[^G[񍐂D 
JSPJ[ĺCIuWFNgIDԍAĂ邱Ƃ肵Ď
ĂDIDԍAĂȂꍇɂ́CRtBM[^G[
D

܂CRtBM[^́CIuWFNgIDԍ̑ɎʎqLq
ĂꍇɁC̃IuWFNgIDԍtDIDԍ́C
IuWFNgIDԍƏdȂCIDԍłA悤Ɋ
tDłIDԍAɂȂȂꍇɂ́CRtBM[^G
[񍐂D

eJ[lIuWFNgɊւ`̕WIȍ\́C̒ʂłDI
uWFNgɂėOꍇɂ́CIuWFNg̍ŐD

(a) IuWFNg̐

IuWFNg̐}N`vvZbTfBNeBui#definej
𐶐D̓Iɂ́CIuWFNg̏ȗLuXXXvƂƁC
悤ȍs𐶐D

#define TNUM_XXXID <IuWFNg̐>

(b) ő̃IuWFNgID̕ϐ̒`

ő̃IuWFNgIDϐ̒`𐶐D̓Iɂ́CIuWFN
g̏ȗLuXXX^xxxvƂƁĈ悤ȍs𐶐D

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

(c) IuWFNgɕKvȃ̈̒`

IuWFNgɂẮCIuWFNgɕKvȃ̈̒`𐶐D
̓Iɂ́CIuWFNg̍ŐD

(d) IuWFNg̏ubN̒`

IuWFNg̏ubN̒`𐶐D̓Iɂ́CIuWFNg
̏ȗLuXXX^xxxvƂƁĈ悤ȍs𐶐D

const XXXINIB xxxinib_table[TNUM_XXXID] = {
	<IuWFNgID 1 ̃IuWFNg̏>,
	<IuWFNgID 2 ̃IuWFNg̏>,
		cc
	<IuWFNgID tmax_xxxid ̃IuWFNg̏>
};

IuWFNg̏̌`́CIuWFNgɈقȂD̓Iɂ́C
IuWFNg̍ŐD

(e) IuWFNg̃Rg[ubN̒`

IuWFNg̃Rg[ubN̒`𐶐D̓Iɂ́CIuWF
Ng̏ȗLuXXX^xxxvƂƁĈ悤ȍs𐶐D

XXXCB xxxcb_table[TNUM_XXXID];

(3-1) ^XNɊւ`

JSPJ[ĺC^XNȂP[XɑΉĂȂ߁C^XN
ւ`͕KȂ΂ȂȂD

^XNɊւ`̃CN[ht@CƃIuWFNg̏ȗL͎
̒ʂłDC^XNubÑf[^^ TINIBCϐ 
tinib_tableC^XNRg[ubÑf[^^ TCBCϐ 
tcb_table łiuTSK^tskvɑウāuT^tvpĂjD

	CN[ht@C: task.h
	IuWFNg̏ȗL: TSK

^XNubNɂ́CuCRE_TSKvÓIAPIŎw肳ɉāC
uDEF_TEXvÓIAPIŎw肳܂߂D

ȉł́CVXeRtBM[Vt@CɎ̐ÓIAPI܂܂
Ă鎞ɐׂɂďqׂD

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

(3-1-1) ^XNɕKvȃ̈̒`

^XNɕKvȃ̈ƂāC^XÑX^bN̈悪De
^XNɁCw肳ꂽTCỸX^bN̈`D̓Iɂ́CL
̐ÓIAPIɑ΂āC̒`𐶐D

static VP <X^bN̈̕ϐ>[TCOUNT_VP(stksz)];

ŁC<X^bN̈̕ϐ> ́C^XNɈقȂ鎯ʎq𐶐ėp
D

(3-1-2) ^XN̏

^XNubNɐ^XN̏́Č`ƂD

	{ tskatr, (VP_INT)(exinf), (FP)(task), INT_PRIORITY(itskpri),
	    TROUND_VP(stksz), <X^bN̈̕ϐ>, texatr, (FP)(texrtn) }

ŁCCRE_TSK ɑΉ DEF_TEX Ȃꍇɂ́Ctexatr  TA_NULLC
texrtn  NULL ƂD

(3-1-3) ^XNe[u̒`

^XNɑ΂ẮCꂽi^XN𐶐ÓIAPILqꂽ
je[uɏo͂KvD́C^XN̐ꂽŁC
^XN̏i̓Iɂ́C^XN̋NjsKv邽߂ł
D

̓Iɂ́Ĉ悤ȍs𐶐D

const ID torder_table[TNUM_TSKID] = {
	<ŏɐꂽ^XÑ^XNID>,
	<2Ԗڂɐꂽ^XÑ^XNID>,
		cc
	<Ōɐꂽ^XÑ^XNID>
};

(3-1-4) G[

^XN̏ɊւG[͎̒ʂłD

EDEF_TEX ɑΉ CRE_TSK ȂꍇiE_NOEXSj
E(tskatr & ~(TA_ACT))  0 łȂꍇiE_RSATRj
E(TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI) łȂꍇiE_PARj
Estack  NULL łȂꍇiE_NOSPTj
Etexatr  0 łȂꍇiE_RSATRj

 ̑ɁCtask  texrtn vO̊JnԒnƂĐȂꍇ
Cstksz ꍇɂG[ƂׂCG[^[Qb
gɈˑĂ܂߁C̉ۑƂD

(3-2) Z}tHɊւ`

Z}tHɊւ`̃CN[ht@CƃIuWFNg̏ȗL
̒ʂłD

	CN[ht@C: semaphore.h
	IuWFNg̏ȗL: SEM

ȉł́CVXeRtBM[Vt@CɎ̐ÓIAPI܂܂
Ă鎞ɐׂɂďqׂDȂCZ}tHɕKvȃ
͂ȂD

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

(3-2-1) Z}tH̏

Z}tHubNɐZ}tH̏́Č`Ƃ
D

	{ sematr, isemcnt, maxsem }

(3-2-2) G[

Z}tH̏ɊւG[͎̒ʂłD

E(sematr & ~(TA_TPRI))  0 łȂꍇiE_RSATRj
E(isemcnt > maxsem) ̏ꍇiE_PARj
E(1 <= maxsem && maxsem <= TMAX_MAXMSE) łȂꍇiE_PARj

(3-3) CxgtOɊւ`

CxgtOɊւ`̃CN[ht@CƃIuWFNg̏ȗ
L͎̒ʂłD

	CN[ht@C: eventflag.h
	IuWFNg̏ȗL: FLG

ȉł́CVXeRtBM[Vt@CɎ̐ÓIAPI܂܂
Ă鎞ɐׂɂďqׂDȂCCxgtOɕKvȃ
̈͂ȂD

CRE_FLG(flgid, { flgatr, iflgptn });

(3-3-1) CxgtȌ

CxgtOubNɐCxgtȌ́C
̌`ƂD

	{ flgatr, iflgptn }

(3-3-2) G[

CxgtȌɊւG[͎̒ʂłD

E(flgatr & ~(TA_TPRI|TA_CLR))  0 łȂꍇiE_RSATRj

(3-4) f[^L[Ɋւ`

f[^L[Ɋւ`̃CN[ht@CƃIuWFNg̏ȗL
͎̒ʂłD

	CN[ht@C: dataqueue.h
	IuWFNg̏ȗL: DTQ

ȉł́CVXeRtBM[Vt@CɎ̐ÓIAPI܂܂
Ă鎞ɐׂɂďqׂD

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

(3-4-1) f[^L[ɕKvȃ̈̒`

f[^L[ɕKvȃ̈ƂāCf[^L[̈悪D
ef[^L[ɁCKvȃTCỸf[^L[̈`D̓I
́CL̐ÓIAPIɑ΂āC̒`𐶐D

#if (dtqcnt) > 0
static VP_INT <f[^L[̈̕ϐ>[dtqcnt];
#else
#define <f[^L[̈̕ϐ> NULL
#endif

ŁC<f[^L[̈̕ϐ> ́Cf[^L[ɈقȂ鎯ʎq
ėpD

(3-4-2) f[^L[̏

f[^L[ubNɐf[^L[̏́C
`ƂD

	{ dtqatr, dtqcnt, <f[^L[̈̕ϐ> }

(3-4-3) G[

f[^L[̏ɊւG[͎̒ʂłD

E(dtqatr & ~(TA_TPRI))  0 łȂꍇiE_RSATRj
Edtq  NULL łȂꍇiE_NOSPTj

(3-5) [{bNXɊւ`

[{bNXɊւ`̃CN[ht@CƃIuWFNg̏ȗ
L͎̒ʂłD

	CN[ht@C: mailbox.h
	IuWFNg̏ȗL: MBX

ȉł́CVXeRtBM[Vt@CɎ̐ÓIAPI܂܂
Ă鎞ɐׂɂďqׂDȂC[{bNXɕKvȃ
̈͂ȂD

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

(3-5-1) [{bNX̏

[{bNXubNɐ郁[{bNX̏́C
̌`ƂD

	{ mbxatr, maxmpri }

(3-5-2) G[

[{bNX̏ɊւG[͎̒ʂłD

E(mbxatr & ~(TA_TPRI|TA_MPRI))  0 łȂꍇiE_RSATRj
E(TMIN_MPRI <= maxmpri && maxmpri <= TMAX_MPRI) łȂꍇiE_PARj
Emprihd  NULL łȂꍇiE_NOSPTj

(3-6) Œ蒷v[Ɋւ`

Œ蒷v[Ɋւ`̃CN[ht@CƃIuWFNg
ȗL͎̒ʂłD

	CN[ht@C: mempfix.h
	IuWFNg̏ȗL: MPF

ȉł́CVXeRtBM[Vt@CɎ̐ÓIAPI܂܂
Ă鎞ɐׂɂďqׂD

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

(3-6-1) Œ蒷v[ɕKvȃ̈̒`

Œ蒷v[ɕKvȃ̈ƂāCŒ蒷v[̈悪
DeŒ蒷v[ɁCKvȃTCY̌Œ蒷v[
̈`D̓Iɂ́CL̐ÓIAPIɑ΂āC̒`𐶐D

static VP <Œ蒷v[̈̕ϐ>[TCOUNT_VP(blksz) * (blkcnt)];

ŁC<Œ蒷v[̈̕ϐ> ́CŒ蒷v[Ɉ
Ȃ鎯ʎq𐶐ėpD

(3-6-2) Œ蒷v[̏

Œ蒷v[ubNɐŒ蒷v[̏
́Č`ƂD

	{ mpfatr, TROUND_VP(blksz), <Œ蒷v[̈̕ϐ>,
		(VP)(((VB *) <Œ蒷v[̈̕ϐ>)
			+ sizeof(<Œ蒷v[̈̕ϐ>)) }

(3-6-3) G[

Œ蒷v[̏ɊւG[͎̒ʂłD

E(mpfatr & ~(TA_TPRI))  0 łȂꍇiE_RSATRj
Eblkcnt  0 ̏ꍇiE_PARj
Eblksz  0 ̏ꍇiE_PARj
Empf  NULL łȂꍇiE_NOSPTj

(3-7) nhɊւ`

nhɊւ`̃CN[ht@CƃIuWFNg̏ȗL
͎̒ʂłD

	CN[ht@C: cyclic.h
	IuWFNg̏ȗL: CYC

ȉł́CVXeRtBM[Vt@CɎ̐ÓIAPI܂܂
Ă鎞ɐׂɂďqׂDȂCnhɕKvȃ
̈͂ȂD

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

(3-7-1) nh̏

nhubNɐnh̏́C
`ƂD

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

(3-7-2) G[

nh̏ɊւG[͎̒ʂłD

E(cycatr & ~(TA_STA))  0 łȂꍇiE_RSATRj
E(cyctim > TMAX_RELTIM) ̏ꍇiE_PARj
E(cycphs > TMAX_RELTIM) ̏ꍇiE_PARj

 ̑ɁCcychdr vO̊JnԒnƂĐȂꍇɂG[
ƂׂCG[^[QbgɈˑĂ܂߁C̉ۑ
D

(4) ݃nhɊւ`

VXeRtBM[Vt@CɁC݃nh`
IAPIuDEF_INHv܂܂ĂꍇɁC݃nhɊւ`𐶐
D̓Iɂ͎̒ʂD

(4-1) `銄݃nh̐

`銄݃nh̐}N`vvZbTfBNeBu
i#definej𐶐D܂C̒lϐ̒`𐶐D̓I
ɂ́Ĉ悤ȍs𐶐D

#define	TNUM_INHNO <`銄݃nh̐>
const UINT	tnum_inhno = TNUM_INHNO;

(4-2) ݃nh̏o

`e݃nhɁC݃nh̏o[`𐶐
D̓Iɂ́C

DEF_INH(inhno, { inhatr, inthdr });

ƂÓIAPIɑ΂āC

CFG_INTHDR_ENTRY(inthdr);

Ƃs𐶐D

(4-3) ݃nhubN̒`

݃nhubN𐶐D̓Iɂ́Ĉ悤ȍs𐶐
D

const INHINIB inhinib_table[TNUM_INHNO] = {
	<݃nh 1 ̏>,
	<݃nh 2 ̏>,
		cc
	<݃nh TNUM_INHNO ̏>
};

̒̊݃nh̏́Č`ƂD

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

(4-4) G[

݃nhɊւG[͎̒ʂłD

Einhatr  0 łȂꍇiE_RSATRj

 ̑ɁCinthdr vO̊JnԒnƂĐȂꍇC
inhno ݃nhԍƂĐȂꍇɂG[ƂׂC
G[^[QbgɈˑĂ܂߁C̉ۑƂD

(5) CPUOnhɊւ`

VXeRtBM[Vt@CɁCCPUOnh`
ÓIAPIuDEF_EXCv܂܂ĂꍇɁCCPUOnhɊւ`
D̓Iɂ͎̒ʂD

(5-1) `CPUOnh̐

`CPUOnh̐}N`vvZbTfBNeB
ui#definej𐶐D܂C̒lϐ̒`𐶐D
Iɂ́Ĉ悤ȍs𐶐D

#define	TNUM_EXCNO <`CPUOnh̐>
const UINT	tnum_excno = TNUM_EXCNO;

(5-2) CPUOnh̏o

`eCPUOnhɁCCPUOnh̏o[`
D̓Iɂ́C

DEF_EXC(excno, { excatr, exchdr });

ƂÓIAPIɑ΂āC

CFG_EXCHDR_ENTRY(exchdr);

Ƃs𐶐D

(5-3) CPUOnhubN̒`

CPUOnhubN𐶐D̓Iɂ́Ĉ悤ȍs
D

const EXCINIB excinib_table[TNUM_EXCNO] = {
	<CPUOnh 1 ̏>,
	<CPUOnh 2 ̏>,
		cc
	<CPUOnh TNUM_EXCNO ̏>
};

̒CPUOnh̏́Č`ƂD

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

(5-4) G[

CPUOnhɊւG[͎̒ʂłD

Eexcatr  0 łȂꍇiE_RSATRj

 ̑ɁCexcthdr vO̊JnԒnƂĐȂꍇC
excno CPUOnhԍƂĐȂꍇɂG[ƂׂC
G[^[QbgɈˑĂ܂߁C̉ۑƂD

(6) ^CCxgǗɊւ`

^CCxgǗɊ֘AāC̒`𐶐D

TMEVTN	tmevt_heap[TNUM_TSKID + TNUM_CYCID];

(7) eW[̏֐̒`

eJ[lIuWFNg̊ǗC݊ǗCCPUOnhǗ̊e@\
֐ɌĂяo֐iobject_initializej𐶐Dgp
Ȃ@\̏֐́CĂяoȂD

ׂĂ̋@\gꍇɐ֐͎̒ʂłD

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

(8) [`̎s֐̒`

uATT_INIvÓIAPIŒǉ[`ɌĂяo֐𐶐D
̓Iɂ́C

ATT_INI({ iniatr, exinf, inirtn });

ƂÓIAPIɑ΂āC

inirtn((VP_INT)(exinf));

Ăяo֐Ccall_inirtn ƂOŐD[`
яóCVXeRtBM[Vt@Cł̐ÓIAPȈ
ɈvD

Ⴆ΁C

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

Ƃ̐ÓIAPȈŋLqꂽɐ֐͎̒ʂ
D

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

(8-1) G[

[`ɊւG[͎̒ʂłD

Einiatr  0 łȂꍇiE_RSATRj

 ̑ɁCinirtn vO̊JnԒnƂĐȂꍇɂG[
ƂׂCG[^[QbgɈˑĂ܂߁C̉ۑ
D

ȏ
