
	       JSPͥ ե졼 

             Release 1.4бǽ: 4-Jun-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.3 2003/11/10 07:51:20 monaka 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 VP <åΰѿ̾>[TCOUNT_VP(stksz)];

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

(3-1-2) ν

֥å륿νϡηȤ롥

	{ tskatr, (VP_INT)(exinf), (FP)(task), INT_PRIORITY(itskpri),
	    TROUND_VP(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_MAXMSE) Ǥʤ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 VP <Ĺסΰѿ̾>[TCOUNT_VP(blksz) * (blkcnt)];

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

(3-6-2) Ĺסν

Ĺס֥åĹסν
ϡηȤ롥

	{ mpfatr, TROUND_VP(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 ץγϤȤʤˤ⥨顼
Ȥ٤顼郎åȤ˰¸Ƥޤᡤβ
롥

ʾ
