
		TOPPERS/ASPJ[l
		@\gE`[jOKCh

		Ήo[W: Release 1.6.0
		ŏIXV: 2010N29

̃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 1862 2010-07-25 11:49:51Z ertl-hiro $
----------------------------------------------------------------------

ڎ

EG[`FbN̏ȗ
E^CeBbN̎̕ύX
EړĨWX^̈
E~[ebNX@\gpbP[W
EI[onh@\gpbP[W
E^XNDxgpbP[W
ECPUOnh̒ڌď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݂ƂāCDx~[
ebNXiTA_CEILING̃~[ebNXĵ݂T|[gCDxp
~[ebNXiTA_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_MUTEXkernel.h
Œ`Ă̂ŁCpă~[ebNX@\gpł邩ǂ
𔻕ʂ邱ƂłD


I[onh@\gpbP[W

ASPJ[lɁCI[onh@\ǉ邽߂̊gpbP[Wp
ӂĂDC̊gpbP[Wg߂ɂ́C^[Qbgˑ
ΉĂKvD

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

I[onh@\gpbP[WŁC^[QbgˑgpbP[
WɑΉĂꍇɂ́CTOPPERS_SUPPORT_OVRHDRkernel.hŒ`
̂ŁCpăI[o^C}@\gpł邩ǂ𔻕ʂ
Ƃł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

^XNDxgpbP[Wł́CTOPPERS_SUPPORT_PRI_LEVELkernel.h
`Ă̂ŁCpă^XNDx͈̔͂gĂ邩
𔻕ʂ邱Ƃł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

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$

ȏ
