
		TOPPERS/ASPJ[l
		@\gE`[jOKCh

		Ήo[W: Release 1.3.1
		ŏIXV: 2008N427

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

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

~[ebNX@\

ASPJ[lɁC~[ebNX@\ǉ邽߂̊gpbP[Wpӂ
ĂDCDxt]𐧌䂷邽߂̎dg݂ƂāCDxv
gRiTA_CEILING̃~[ebNXĵ݂T|[gCDxpv
gRiTA_INHERIT̃~[ebNXj̓T|[gĂȂD

gpbP[ẂCextension/mutexfBNgɒuĂDgpbP[
Wgpꍇɂ́CUNIXł΁CASPJ[l̃\[Xt@C̃gbv
fBNgŁC

	% cp -r extension/mutex/* .

sD̎ĆigÓj\[Xt@C͏㏑Ă܂
߁CgȂJ[lgpꍇɂ́Cʂ̃fBNgɃ\[X
t@CWJāC̃R}hs邱ƁD܂C̊gpbP[
Wgꍇɂ́C炪Փ˂\̂ŁCӂKvłD

~[ebNX@\̊gpbP[Wł́CTOPPERS_SUPPORT_MUTEX
kernel.hŒ`Ă̂ŁCpĊgpbP[WgpĂ
邩ǂ𔻕ʂ邱ƂłD

^XNDx͈̔͂̊g

^XNDxő256iKɊg邽߂̊gpbP[WpӂĂD

gpbP[ẂCextension/pri_levelfBNgɒuĂDgpb
P[W̎gp@́C~[ebNX@\ƓlłD

^XNDx͈̔͂̊gpbP[Wł́CTOPPERS_SUPPORT_PRI_LEVEL
kernel.hŒ`Ă̂ŁCpĊgpbP[WgpĂ
邩ǂ𔻕ʂ邱ƂłD

݃nh^CPUOnh̒ڌďo

n[hEFAŃxN^e[uvZbTɂāCJ[l̏o
oRɁC[Upӂ݃nh^CPUOnhĂ
o@ǉɂ́Cȉ̂悤ȉsƂ悢D

TO̐

J[lǗO݂̊ɂ́CJ[l̎sɂ֎~ȂƂӋ`
ƁCJ[l̏ooRɊ݃nhsłƂ
Ӌ`2̈Ӌ`D

TOPPERSVJ[ldlł́CJ[lǗO݂̊CO҂̈Ӌ`̂
̂ƈʒuÂD

҂̈Ӌ`dg݁CȂ킿CJ[l̏ooR
Ɋ݃nhsdg݂ɂẮCJ[lǗO݂̊Ƃ
ʂɗpӂ邱ƂłD̃hLgł́C̎dg݂C݃n
h^CPUOnh̒ڌďoƌĂԁD

ȂC݃nh^CPUOnh̒ڌďóCn[hEFAŃxN
^e[uȂvZbTł͈Ӌ`ႢD

TA_DIRECT̓

݃nh^CPUOnh̒ڌďow肷邽߂ɁC݃n
hCPUOnhɁCTA_DIRECT𓱓D݃n
hɂẮCTA_NONKERNELw肳Ă銄݃nhɑ΂
Ă̂݁CTA_DIRECTw肷邱ƂłD

J[l̏Cӏ

J[l̏CӏƂāCTA_DIRECT̒linclude/kernel.hŒ`邱
ɉāCRtBM[^ݒt@Cikernel/kernel_def.csv
kernel/kernel.tfjȉ̂悤ɏCKvD

܂CTA_DIRECT̒lRtBM[^o߂ɁCkernel_def.csv
Ɏ̍sǉD

TA_DIRECT,TA_DIRECT

kernel.tf́Ĉ悤ɏCD܂C݃nh̃G[`Fb
NɂẮĈ悤ɏCD

	$IF (INH.INHATR[inhno] & ~(TA_NONKERNEL|TA_DIRECT|ALT(TARGET_INHATR,0))) != 0$

܂C݃nh̏o𐶐邽߂̋LqiINTHDR_ENTRỸ
Xgj𐶐镔́Ĉ悤ɏCD

$FOREACH inhno INH.ORDER_LIST$
	$IF (INH.INHATR[inhno] & TA_DIRECT) == 0$
		INTHDR_ENTRY($INH.INHNO[inhno]$, $INH.INTHDR[inhno]$)$NL$
	$END$
$END$

܂C݃nhubN̒`𐶐镔́Ĉ悤ɏC
D

const INHINIB _kernel_inhinib_table[TNUM_INHNO] = {$NL$
$JOINEACH inhno INH.ORDER_LIST ",\n"$
	$IF (INH.INHATR[inhno] & TA_DIRECT) == 0$
		$TAB${ ($INH.INHNO[inhno]$), ($INH.INHATR[inhno]$), (FP)(INT_ENTRY($INH.INHNO[inhno]$, $INH.INTHDR[inhno]$)) }
	$ELSE$
		$TAB${ ($INH.INHNO[inhno]$), ($INH.INHATR[inhno]$), (FP)($INH.INTHDR[inhno]$) }
	$END$
$END$$NL$
};$NL$

ɁCTA_NONKERNELw肳Ă炸CTA_DIRECT݂̂w肳Ă
ɃG[񍐂鏈ǉׂłD

CPUOnhɂĂCl̏CsD

^[Qbgˑł̑Ή

^[QbgˑCC^[Qbgˑ̏Ĉ݂łɑΉ
邱Ƃ\łD̓Iɂ́CTA_DIRECT̒ltarget_kernel.hŒ`
邱ƂɉāCRtBM[^ݒt@C̃^[Qbgˑ
itarget_dev.csvtarget.tfjCKvD

܂Ctarget_dev.csvɁCTA_DIRECTɊւsǉD݃nh
̃G[`FbNɂẮCTARGET_INHATRTA_DIRECT邱ƂŁC
TA_DIRECTG[ɂȂȂ悤ɂD

݃nh̏o𐶐邽߂̋LqƊ݃nhu
bN̒`ɂẮCOMIT_INITILIZE_INTERRUPTpĕW̒`
̂}~C^[Qbgˑ̒`Œu΂悢DCPUOn
hɂĂClłD

ȏ
