
		TOPPERS/ASPJ[l
		@\gE`[jOKCh

		Ήo[W: Release 1.6.1
		ŏIXV: 2010N825

̃hLǵCTOPPERS/ASPJ[lC@\gE`[jO邽
߂̕@i܂̓qgĵłD

----------------------------------------------------------------------
 TOPPERS/ASP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Advanced Standard Profile Kernel

 Copyright (C) 2005-2010 by Embedded and Real-Time Systems Laboratory
             Graduate School of Information Science, Nagoya Univ., JAPAN
 
 L쌠҂́Cȉ(1)`(4)̏𖞂ꍇɌC{\tgEF
 Ai{\tgEFAς̂܂ށDȉjgpEE
 ρEĔzziȉCpƌĂԁ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
     ܂C{\tgEFÃ[U܂̓Gh[ÛȂ闝
     RɊÂCL쌠҂TOPPERSvWFNg
     Ɛӂ邱ƁD
 
 {\tgEFÁCۏ؂Œ񋟂Ă̂łDL쌠҂
 TOPPERSvWFNǵC{\tgEFAɊւāC̎gpړI
 ɑ΂K܂߂āCȂۏ؂sȂD܂C{\tgEF
 A̗pɂ蒼ړI܂͊ԐړIɐȂ鑹QɊւĂC
 ̐ӔC𕉂ȂD
 
 $Id: extension.txt 1910 2010-08-25 06:30:21Z ertl-hiro $
----------------------------------------------------------------------

ڎ

EG[`FbN̏ȗ
E^CeBbN̎̕ύX
EړĨWX^̈
EgpbP[W̎g
	- ~[ebNX@\gpbP[W
	- I[onh@\gpbP[W
	- ^XNDxgpbP[W
	- ^XNgpbP[W
ECPUOnh̒ڌďo
	- TA_DIRECT̓
	- ^[Qbgˑ̏Cӏ


G[`FbN̏ȗ

T[rXR[̃I[owbh팸邽߂ɁCÓIȃG[̃`FbN
ȗꍇDASPJ[lɂẮCÓIȃG[̃`FbN͂
CHECK}NpčsĂ邽߁Ckernel/check.hCHECK}N
W邱ƂŁCÓIȃG[̃`FbNȗ邱ƂłD

Ⴆ΁C^XNID̃`FbNȗꍇɂ́CCHECK_TSKID}N
CHECK_TSKID_SELF}NĈ悤ɏC΂悢D

#define CHECK_TSKID(tskid)			((void)(tskid))
#define CHECK_TSKID_SELF(tskid)		((void)(tskid))

̃}N̒`ɂ@邪Cp[^ɕp̂鎮
Ă\lƁip̂鎮͏ׂł͂ȂC
ĂR[hĂ\SȂƂ͌ȂjC̒`
SłDp̂Ȃł΁CœKɂč폜邱Ƃ
邽߁Csɂ͉eȂƊ҂łDCœKɂ
폜Ȃꍇɂ́Cp̂鎮ĂȂƂmFŁC
}N̒`ɂĂ悢D


^CeBbN̎̕ύX

ASPJ[lł́CJ[lփ^CeBbN1~bW
ƂȂĂ邪CᑬȃvZbTł1~bɊ݂I[owb
hɂȂꍇDŁCAvP[VKvƂ鎞Ԑx
eꍇɂ́C^CeBbN̎𒷂邱ƂŁCvZbT̏
ׂጸ@D

^CeBbN̗̎^̓^[Qbgˑł邽߁CꂪύXł
邩ǂ́C^[Qbgˑ̃^C}hCo̎𒲂ׂKvD
WIɂ́Ctarget_kernel.hi܂͂CN[ht@Cj
ɒ`ĂTIC_NUMETIC_DENO邱ƂŁCύXł悤
ɎĂD


ړĨWX^̈

FPUWX^DSPWX^Ȃǂ̓ړĨWX^iȉCꃌWX^j
vZbTł́CWX^̈ɂđ傫3̕@l
D

(1) ꃌWX^^XÑReLXgɊ܂߂Ȃ

1̃^XN݂̂ꃌWX^gpꍇɂ́CꃌWX^^XN
ReLXgɊ܂߂KvȂCJ[lŊǗKvȂD

(2) ꃌWX^^XÑReLXgɊ܂߂

̃^XNꃌWX^gpꍇɂ́CꃌWX^^XÑR
eLXgɊ܂߂@łPłD̂߂ɂ́C^XNfBXpb
`Ɗ݃nh/CPUOnh̏oŁCꃌWX^ۑ/A
R[hǉKvDۂ̕ۑ/Aꏊ́CXNb`WX
^ƂȊÕWX^ňقȂ邽߁CӂKvłD

(3) ꃌWX^ReLXgɊ܂߂邩ǂ^XNɎw肷

ꃌWX^gp^XNƎgpȂ^XNꍇŁCׂẴ^
XÑReLXgɓꃌWX^܂߂@ł̓I[owbhɂ
ꍇɂ́CꃌWX^ReLXgɊ܂߂邩ǂ^XNɎw
@L͂łD@͎̒ʂłD

܂CꃌWX^ReLXgɊ܂߂邩ǂw肷^XN
݂DႦ΁CFPUWX^ł΁C^XNTA_FPU݂D^XN
fBXpb`ł́C^XNāC̑ݒ肳ĂΓꃌ
WX^ۑ/AD

n[hEFAIɓꃌWX^fBXG[ułꍇɂ́C̑
ݒ肳ĂȂ^XNɐ؂芷鎞ɓꃌWX^fBXG[u
ƁCēꃌWX^gꍇołD

ɁC݃nhiISRCnhCA[nh܂ށj
CPUOnhœꃌWX^gpꍇɂ́C̏Pʂɂ
ꃌWX^gp邩ǂ݂̑@lD

ŁC^XNi܂͑̏PʁjꃌWX^gp邩ǂ́C
RpC⃉CuɈˑꍇ邽߁CӂKvłDႦ
΁C_Z܂܂ȂvOłĂCRpC̕
\Ɣf΁C_߂𐶐ꍇD


gpbP[W̎g

ASPJ[lł́C̊g@\邽߂ɁCgpbP[WT
|[gĂDgpbP[ẂCextensionfBNgɒuĂD

gpbP[Wgpꍇɂ́CUNIXł΁CASPJ[l̃\[Xt@
C̃gbvfBNgŁC

	% cp -r extension/<gpbP[W̃fBNg>/* .

sD̎ĆigÓj\[Xt@C͏㏑Ă܂
߁CgȂJ[lgpꍇɂ́Cʂ̃fBNgɃ\[X
t@CWJāC̃R}hs邱ƁD

̊gpbP[WgƂ͍lĂȂCȉɏqׂP[X
ẮCƂɂ蕡̊gpbP[W}[W邱Ƃ͉\łD
_ł́C~[ebNX@\gpbP[WƐ^XNgpbP[W
}[W邱Ƃ͂łȂD

~[ebNX@\gpbP[W

~[ebNX@\gpbP[ẂC~[ebNX@\ǉ邽߂
gpbP[WłDCDxt]𐧌䂷邽߂̎dg݂ƂāC
Dx~[ebNXiTA_CEILING̃~[ebNXĵ݂T|[
gCDxp~[ebNXiTA_INHERIT̃~[ebNXj̓T|[
gĂȂD~[ebNX@\gpbP[ẂCextension/mutexfB
NgɒuĂD

~[ebNX@\gpbP[Wł́CTOPPERS_SUPPORT_MUTEXkernel.h
Œ`Ă̂ŁCpă~[ebNX@\gpł邩ǂ
𔻕ʂ邱ƂłD

I[onh@\gpbP[W

I[onh@\gpbP[ẂCI[onh@\ǉ
邽߂̊gpbP[WłDC̊gpbP[Wg߂ɂ́C
^[QbgˑΉĂKvDI[onh@\gpb
P[ẂCextension/ovrhdrfBNgɒuĂD

I[onh@\gpbP[WŁC^[QbgˑgpbP[
WɑΉĂꍇɂ́CTOPPERS_SUPPORT_OVRHDRkernel.hŒ`
̂ŁCpăI[o^C}@\gpł邩ǂ𔻕ʂ
ƂłD

^XNDxgpbP[W

^XNDxgpbP[ẂC^XNDxő256iKɊg邽߂
gpbP[WłD̊gpbP[ẂC^XNDxɉāCf[
^DxCbZ[WDxC݃T[rX[`Dx256iKɊg
D^XNDxgpbP[ẂCextension/pri_levelfBNgɒu
ĂD

^XNDxgpbP[Wł́CTOPPERS_SUPPORT_PRI_LEVELkernel.h
`Ă̂ŁCpă^XNDx͈̔͂gĂ邩
𔻕ʂ邱ƂłD

^XNgpbP[W

^XNgpbP[ẂC^XN̋@\ǉ邽߂̊gpbP[
WłDTOPPERSVJ[ldlɋK肳ꂽ^XN̋@\
āC^XÑx[XDxύXT[rXR[ras_pri
D

----------------------------------------------------------------------
ras_pri		^XÑx[XDẍグkTl

yCAPIz
	ER ercd = ras_pri(PRI tskpri)

yp[^z
	PRI			tskpri		x[XDx

y^[p[^z
	ER			ercd		IiE_OKj܂̓G[R[h

yG[R[hz
	E_CTX			ReLXgG[i^XNReLXǧďo
					CCPUbNԂ̌ďoj
	E_PAR			p[^G[itskprisj
	E_ILUSE			T[rXR[sgpitskpriC^XN̋N
					DxႢꍇj

y@\z

^XÑx[XDxCtskpriŎw肵DxɕύXD̓IȐU
͈ȉ̒ʂD

^XÑx[XDxCtskpriŎw肵DxɕύXDɔ
āC^XŇݗDxύXDDx̃^XN̒ł́C^
XNōD揇ʂƂȂD

tskpriTPRI_INIi0jw肷ƁC^XÑx[XDxCND
xɕύXD

tskpríCTPRI_INIł邩CTMIN_TPRIȏCTMAX_TPRIȉłȂ΂Ȃ
ȂD܂CtskpríC^XN̋NDxƓȂ
΂ȂȂD
----------------------------------------------------------------------

^XNgpbP[Wł́CTOPPERS_SUPPORT_RSTR_TASKkernel.hŒ
`Ă̂ŁCpĐ^XN̋@\gpł邩ǂ
ʂ邱ƂłD


CPUOnh̒ڌďo

CPUOnh̏óCCPUOȂ悤ɎȂ
ȂȂCꂪhȂ^[QbgɂẮCCPUOnh̏o
oRɁCAvP[VpӂCPUOnh𒼐ڎs
@pӂ̂]܂DCCPUOnh̒ڌďoƌĂԁD

ł́Cn[hEFAŃxN^e[uvZbTɂāC^[Qb
gˑ݂̂̏CɂCCPUOnh̒ڌďő@\ǉ
@ɂĐD

TA_DIRECT̓

CPUOnh̒ڌďow肷邽߂ɁCCPUOnhɁC
TA_DIRECT𓱓D

^[Qbgˑ̏Cӏ

TA_DIRECT̒lCtarget_kernel.hi܂́CCN[ht@
CjŒ`C̒lRtBM[^o悤ɁC
target_def.csvi܂́Cɑt@CjɎ̍sǉD

TA_DIRECT,TA_DIRECT

ɁCtarget.tfi܂́CCN[ht@CjŁC
TARGET_INHATRɐݒ肳lɁCTA_DIRECTǉDႦ΁CTARGET_INHATR
TA_NONKERNEL݂̂ݒ肳Ăꍇɂ́Ĉ悤ɏCD

$TARGET_INHATR = TA_NONKERNEL | TA_DIRECT$

ɁCOMIT_INITILIZE_EXCEPTIONpāCCPUOnh̏o
邽߂̋LqCPUOnhubN̕W̒`
̂}~Cɂė}~镔target.tfɃRs[ŁCȉ
̏CD

CPUOnh̏o𐶐邽߂̋LqiEXCHDR_ENTRỸXgj
𐶐镔́Ĉ悤ɏCD

$FOREACH excno EXC.ORDER_LIST$
	$IF (EXC.EXCATR[excno] & TA_DIRECT) == 0$
		EXCHDR_ENTRY($EXC.EXCNO[excno]$, $+EXC.EXCNO[excno]$, $EXC.EXCHDR[excno]$)$NL$
	$END$
$END$

܂CCPUOnhubN̒`𐶐镔́Ĉ悤ɏC
D

$IF LENGTH(EXC.ORDER_LIST)$
	const EXCINIB _kernel_excinib_table[TNUM_EXCNO] = {$NL$
	$JOINEACH excno EXC.ORDER_LIST ",\n"$
		$IF (EXC.EXCATR[excno] & TA_DIRECT) == 0$
			$TAB${ ($EXC.EXCNO[excno]$), ($EXC.EXCATR[excno]$), (FP)(EXC_ENTRY($EXC.EXCNO[excno]$, $EXC.EXCHDR[excno]$)) }
		$ELSE$
			$TAB${ ($EXC.EXCNO[excno]$), ($EXC.EXCATR[excno]$), (FP)($EXC.EXCHDR[excno]$) }
		$END$
	$END$$NL$
	};$NL$
$ELSE$
	TOPPERS_EMPTY_LABEL(const EXCINIB, _kernel_excinib_table);$NL$
$END$

ȏ
