
		TOPPERS/ASPJ[l
		@\gE`[jOKCh

		Ήo[W: Release 1.4.0
		ŏIXV: 2008N1115

̃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-2008 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 1532 2009-04-29 10:05:42Z ertl-hiro $
----------------------------------------------------------------------

ڎ

EG[`FbN̏ȗ
E^CeBbN̎̕ύX
EړĨWX^̈
E~[ebNX@\
E^XNDx͈̔͂̊g
E݃nh^CPUOnh̒ڌďo


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@\gpbP[W

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


^XNDxgpbP[W

^XNDxő256iKɊg邽߂̊gpbP[WpӂĂD
̊gpbP[ẂC^XNDxɉāCf[^DxCbZ[WD
xC݃T[rX[`Dx256iKɊgD

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Ń}XNȂƂӋ`Ɓ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

ȏ
