
		TOPPERS/ASPJ[l
		^[Qbgˑ |[eBOKCh

		Ήo[W: Release 1.1.0
		ŏIXV: 2011N329

̃hLǵCTOPPERS/SSPJ[lCT|[g̃^[QbgVXe
Ƀ|[eBO邽߂ɕKvƂȂ^[Qbgˑ̎@
̂łD

----------------------------------------------------------------------
     TOPPERS/SSP Kernel
         Smallest Set Profile Kernel
 
     Copyright (C) 2011 by Meika Sugimoto
 
 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
 
----------------------------------------------------------------------

ڎ

PDʎ
	1.1 ^[Qbgˑ̍\
	1.2 ȌՓ˂̖h~
	1.3 dCN[h̖h~
	1.4 AZuƂ̃wb_t@C̋p 
	1.5 CN[hLq̕@
	1.6 NeBJZNV̏o̎Ɋւ鐧
QDVXe\z̃^[Qbgˑ
	2.1 ^[Qbĝƃ^[Qbgˑ̃fBNg
	2.2 Makefilẽ^[Qbgˑ
	2.3 JƃR}h̐ݒ
	2.4 RpCIvVƃIuWFNgt@C̐ݒ
	2.5 N@̐ݒ
	2.6 ˑ֌W̒`
	2.7 ̑̐ݒ
RDTOPPERSʒ`̃^[Qbgˑ
	3.1 ^[Qbgʃ}N
	3.2 ^̍őlEŏlErbg
	3.3 TCY̎w肳ꂽ^C̍őlEŏlC萔}N
	3.4 TCY̎w肳ꂽ_^C̍őlEŏl̃}N
	3.5 RpC̊g@\̂߂̃}N`
	3.6 WIȒ`̏㏑
	3.7 AT[V̂߂̒`
SDVXeC^tF[XCiSILj̃^[Qbgˑ
	4.1 S݃bNԂ̊Ǘ
	4.2 ԑ҂
	4.3 vZbT̃GfBA
	4.4 ԃANZX֐
	4.5 I/OԃANZX֐
TDJ[lAPĨ^[Qbgˑ
	5.1 ^[Qbg`ŃT|[g@\
	5.2 ݗDx͈̔
	5.3 ^CeBbN̒`
	5.4 ̈mۂ̂߂̌^`
	5.5 ̈mۂ̂߂̃}N
	5.6 I[onh@\ĝ߂̒`iIvVj
UDJ[l̃^[Qbgˑ
	6.1 J[l̃^[Qbgˑ̋ʎ
		6.1.1 J[l̃^[Qbgˑ̍\vf
		6.1.2 ^[Qbgˑ̊֐̖K
	6.2 g[XO@\ւ̑Ή
	6.2 VXeԂ̊Ǘ
		6.2.1 S݃bNԂ̊Ǘ
		6.2.2 ReLXg̊Ǘ
		6.2.3 CPUbNԂ̊Ǘ
	6.3 ݂Ɋ֘AVXeԂ̊Ǘ
		6.3.1 ݗDx}XN̊Ǘ
		6.3.2 ݗv֎~tO̊Ǘ
		6.3.3 ݗṽNA
		6.3.4 ݗṽv[u
		6.3.5 ݃nh̐擪Ɩ
	6.4 ^XNfBXpb`
		6.4.1 ^XNReLXgubNƃ^XNReLXgubN
		6.4.2 fBXpb`{
		6.4.3 ^XNReLXg̃fBXpb`
		6.4.4 fBXpb`̓Jn
		6.4.5 ݂̃ReLXĝĂăfBXpb`
		6.4.6 ^XN̋N
	6.5 ݃nh
		6.5.1 ݃nh̏o
		6.5.2 ݃nh̏o̐
		6.5.3 ݃nh̐ݒ
		6.5.4 ݗvC̑̐ݒ
		6.5.5 ݊Ǘ@\̏̕ύX
		6.5.6 ftHg̊݃nh
		6.5.7 J[lǗO̊
	6.6 CPUOnhCPUÕVXeԂ̎Q
		6.6.1 CPUOnh̏o
		6.6.2 CPUOnh̏o̐
		6.6.3 CPUOnh̐ݒ
		6.6.4 CPUOǗ@\̏̕ύX
		6.6.5 ftHgCPUOnh
		6.6.6 CPUÕVXeԂ̎Q
	6.7 J[l̋NEIƃX^bN̈Ȃ
	6.8 J[l̃`[jO
		6.8.1 rbg}bvT[`
		6.8.2 rbgtB[h
	6.9 J[lɊւ邻̑̒`
		6.9.1 ^XNReLXgp̃X^bN̈
		6.9.2 󃉃x̒`
	6.10 J[l̃^[Qbgˑ̂߂̃l[Lq
	6.12 ^C}hCo
		6.12.1 ^C}hCõt@C\
		6.12.2 ^C}̏EIEݏ
		6.12.3 \]pVXe̎QƂ̂߂̋@\
VDRtBM[^ݒt@C̃^[Qbgˑ
	7.1 ݒt@Cƃ^[Qbgˑ̈ʒut
	7.2 pX2̃ev[gt@C̃^[Qbgˑ
		7.2.1 ^[QbgˑCN[hOɒ`ׂϐ
		7.2.2 ^[QbgˑŒ`ϐ
	7.3 pX3̃ev[gt@C̃^[Qbgˑ
	7.4 cfg1_out.c̃NɕKvȃX^u̒`t@C
WDVXeT[rX̃^[Qbgˑ
	8.1 VXeT[rX̃^[Qbgˑ
	8.2 VAC^tF[XhCõ^[Qbgˑ
		8.2.1 ϐCf[^^CǗ֐
		8.2.2 foCXT[rX[`
		8.2.3 R[obN[`
	8.3 J[lNbZ[W̏o͂̃^[Qbgˑ`
	8.4 TvvOƃeXgvÕ^[Qbgˑ`
XD̑
	9.1 hLg
	9.2 pbP[WLqt@C
PODt@X
	10.1 ^[Qbgˑ̃t@Cꗗ


PDʎ

1.1. ^[Qbgˑ̍\

^[Qbgˑ́CtargetfBNg̉ɁC^[Qbgn[hEFA
J̑gݍ킹ɗpӂDC^[Qbgˑ̍ėp
lCvZbTC`bvCJ݂̂Ɉˑ镔CvZbT
C`bvˑCJˑƂ`Ő؂蕪Ă悢D؂蕪
́C^[Qbgˑ̎ɔCĂDvZbTˑC`bv
CJˑ́CarchfBNg̉ɒuD

ASPJ[l̃^[Qbgˑ́CVXe\ziMakefilej̃^[Qb
gˑCTOPPERSʒ`it_stddef.hj̃^[QbgˑCVXeC
^tF[XCiSILCsil.hj̃^[QbgˑCJ[lAPIikernel.hj
̃^[QbgˑCJ[l̃^[QbgˑiRtBM[^
ݒt@C̃^[Qbgˑ܂ށjCVXeT[rX̃^[Qbg
C^[QbgˑɊւhLgō\D

1.2. ȌՓ˂̖h~

TOPPERSvWFNg񋟂\tgEFÂ߂ɁCTOPPERS_Ŏn܂V
{\񂵂ĂDwb_t@CɋLqCAvP[VQ
ƂłV{́CTOPPERS_Ŏn܂閼OƂD

܂C_kernel_Ŏn܂V{́CJ[l̕ϐ֐̂߂ɗ\
ĂDJ[l̕ϐ֐̖OŁCNɃAvP[V
̖OƏՓ˂\̂́Cl[LqɃXgAbv邱
ŁCRpC_kernel_Ŏn܂閼Oɒu邱ƂƂĂD

1.3. dCN[h̖h~

ׂẴwb_t@ĆCdɃCN[ĥh~邽߂̏
RpCLq邱ƂƂDႦ΁Ctarget_config.hł΁Ct@
C̐擪

#ifndef TOPPERS_TARGET_CONFIG_H
#define TOPPERS_TARGET_CONFIG_H

Ct@C̖

#endif /* TOPPERS_TARGET_CONFIG_H */

LqD

1.4. AZuƂ̃wb_t@C̋p 

ASPJ[l̃wb_t@C̑́CAZũ\[Xt@C
CN[hł悤ɂ邽߂ɁC̃[ɏ]ċLq̂
D

ETOPPERS_MACRO_ONLY}N`Ăꍇɂ́CAZuł
@߂łȂLqi}N`ȊŐLqj悤ɋLqD

E^̒萔ĺCUINT_CULONG_CȂǂ̐萔邽߂̃}
@NpċLqDCAZũ\[Xt@CC
@N[hłt@CłĂCĈ݂ŗp萔
@}NgċLqKv͂ȂD

܂CJ[lɂẮC̃[ɏ]̂ƂD

EAZuꂩp萔̒`Ɍ^LXgpꍇɂ́C
@CAST}NpċLqD

AZuꂩwb_t@CCN[hۂɂ́CKvɉāC
TOPPERS_MACRO_ONLYCUINC_CCULONG_CCCAST}N`ĂCCN[
hȂ΂ȂȂD

1.5. CN[hLq̕@

JŗpӂĂWwb_t@CincludefBNg
Wwb_t@ĆCu#include <...>vɂCN[hD

̑̃wb_t@ĆCu#include "..."vɂCN[hDwb
_t@CCJgfBNgCN[ht@CƓfB
NgȊÕfBNgɒuĂꍇɂ́Ĉ悤ɃpXw
sD

E^[Qbgˑitarget/<^[Qbg>j̃fBNgɒuĂ
@ꍇ́CpXws킸Ct@Ĉ݂LqD
		j#include "target_config.h"

EarchfBNg̃fBNgɒuĂꍇɂ́CarchfBN
@g̑΃pXŋLqD
		j#include "m68k_gcc/prc_config.h"

Ȇ̏ꍇɂ́C\[XvÕ[gfBNgiconfigureu
@ĂfBNgj̑΃pXŋLqD
		j#include "pdic/upd72001/upd72001.h"

EJ[l\t@CCkernelfBNg̃wb_t@C
@CN[hꍇ́CpXws킸Ct@Ĉ݂LqD
		j#include "kernel_impl.h"

1.6. NeBJZNV̏o̎Ɋւ鐧

J[lŗpNeBJZNV̏oꍇɂ́C
2̏𖞂悤ɎȂ΂ȂȂD

(1-6-1) o甲_ł́C݂̋֎~^ĂȂ
΂ȂȂDႦ΁C݋֎~^߂sĂۂɊ݂
֎~^܂ŉ߂xvZbT̏ꍇɂ́Co̒
NOP߂Ȃǂ̕@ŁCo𔲂_ł́C݂֎~^
ꂽԂɂȂĂ邱Ƃۏ؂Ȃ΂ȂȂD

(1-6-2) ̃f[^\ς\邱ƂC炩̕
@ŃRpCɒm点Ȃ΂ȂȂDGNUJł́Ĉꂩ
@ł̐𖞂ƂłD

(a) NeBJZNV̏ȏŜ܂͏o̖{Iȕ
	i̓Iɂ́C݋֎~^鏈jiCCłȂjʏ
	̊֐ɂD

(b) NeBJZNV̏o̖{IȕCCAZu
	ɂĎĂꍇɂ́C̃CCAZuclobber
	Xg"memory"ǉD

(c) NeBJZNV̏o̖{IȕC}NCC
	֐ďoŎĂꍇɂ́CNeBJZNVɓ鏈
	̍ŌƏo鏈̐擪ɁCAsm("":::"memory")ƂLqD

̂悤Ȑ݂闝RɂẮCuTOPPERS/ASPJ[l ݌vv
́uJ[l̃f[^\ɑ΂volatile錾ɂāv̐߂QƂ邱
ƁD

QDVXe\z̃^[Qbgˑ

̏͂̐́CGNUJiGCCCGASCBINUTILSCGNU Makejp邱
z肵ċLqĂDȊO̊Jpꍇɂ́CJ
킹ďCKvD

2.1. ^[Qbĝƃ^[Qbgˑ̃fBNg

V^[Qbgˑ쐬鎞́C܂C^[Qbĝ߂D^[
Qbĝ́CVXêƊJ̂"_"ŘÂƂDVX
êɗp镶͉pƐ"_"ɁCJ̂ɗp镶
pƐɌ肷DGNUJ̊J̂́C"gcc"ƂD
΁CVXê"dve68k"ŁCGNUJpꍇɂ́C^[Qbg
̂"dve68k_gcc"ƂȂD

^[Qbgˑ̃t@Cu߂ɁCtargetfBNg̉ɁC^[
Qbĝ𖼏̂ƂfBNg쐬D^[QbgˑfB
NgƌĂԁD

^[QbgˑvZbTˑ`bvˑ؂蕪ꍇɂ́C
ˑ̂߂Dˑ̂́CvZbT`bv̗̂ƊJ
̂"_"ŘÂƂDvZbT`bv̗̂ɗp镶́Cp
Ɛ"_"Ɍ肷DႦ΁CvZbT̂"m68k"ŁCGNUJ
pꍇɂ́Cˑ̂"m68k_gcc"ƂȂD

܂C^[QbgˑJˑ؂蕪ꍇɂ́CJ
̂ˑ̂ƂDႦ΁CGNUJˑ̈ˑ̂́C"gcc"
ƂȂD

̈ˑ̃t@Cu߂ɁCarchfBNg̉ɁCˑ
̂𖼏̂ƂfBNg쐬D

ȂCGNUJȊO̊Jpꍇɂ́CRtBM[V
XNvgiconfigurejCTvMakefileisample/MakefilejCꕔ
[eBeBvOiutils/genoffsetCutils/makedepjC̊J
pɗpӂKvꍇD̏ꍇɂ́C̃t@CC
^[QbgˑfBNgJˑfBNgɒûƂ
D܂CJp̃vWFNgt@CKvȏꍇɂ́C^[Qbg
ˑfBNgɒûƂD

2.2. Makefilẽ^[Qbgˑ

Makefilẽ^[Qbgˑ́C^[QbgˑfBNgɒu
Makefile.target܂͂CN[ht@CivZbTE`b
vEJˑŗpӂt@CȂǁjɊ܂߂D

2.3. JƃR}h̐ݒ

JƃR}hݒ肷邽߂ɁCMakefilẽ^[QbgˑŎ
̕ϐ`D

(2-3-1) TOOL					J

Jɒ`DGNUJpꍇɂ́Cgccɒ`D

(2-3-2) GCC_TARGET				GNUJ̃^[Qbg

GNUJpꍇɁCGNUJconfigureꍇɎw肷^[
Qbgɒ`DŎw肵^[QbǵCJ̃R}h
̐擪ɕt^镶ƂȂDႦ΁CGCC_TARGETm68k-unknown-elf
`ꍇɂ́CRpCƂm68k-unknown-elf-gccgD
ϐ`Ȃꍇɂ́CPȂgccgD

(2-3-3) CC						CRpChCo̖
(2-3-4) CXX						C++RpChCo̖
(2-3-5) AS						AZu̖
(2-3-6) LD						J̖
(2-3-7) AR						A[JCo̖
(2-3-8) NM						nmvO̖
(2-3-9) RANLIB					ranlibvO̖
(2-3-10) OBJCOPY				objcopyvO̖
(2-3-11) OBJDUMP				objdumpvO̖

GNUJȊO̊JpꍇɁCꂼ̃R}ĥ̖ɒ`
DΉR}hȂꍇCR}hp[^قȂꍇɂ́C
Makefileł̃R}hĂяoĂ镔ύXKvD

GNUJł́CGCC_TARGETpĒ`̂ŁC`Kv
͂ȂD

2.4. RpCIvVƃIuWFNgt@C̐ݒ

Makefilẽ^[QbgˑňȉŐϐ`鎞ɂ́C":="
pāC܂ł̒`ɒǉ`ōsDႦ΁CRpCɑ΂邻
̑̃IvVƂāu-Wall -g -O2vǉꍇɂ́CuCOPTS :=
$(COPTS) -Wall -g -O2vƂLqMakefilẽ^[QbgˑɊ܂߂D

(2-4-1) COPTS				RpCɑ΂邻̑̃IvV
(2-4-2) CDEFS				}N`IvVi-DIvVj
(2-4-3) INCLUDES			wb_t@C̒uꂽfBNgwI
							vVi-IIvVj
(2-4-4) LDFLAGS				Jɑ΂邻̑̃IvV
(2-4-5) LIBS				CuNŵ߂̃IvV

^[QbgɈˑāCׂẴ\[Xt@CɋʂRpCIvV
̒ǉKvȏꍇɂ́CIvV̎ޖɏɎϐɒ`D

قƂǂ̏ꍇɁC^[QbgˑfBNgMakefile.targetɂ́C
̋Lq܂߂KvD

----------------------------------------
INCLUDES := $(INCLUDES) -I$(TARGETDIR)
----------------------------------------

TARGETDIŔC^[QbgˑfBNgɒ`ĂD܂
SRCDIŔCMakefileɂāC\[XvÕ[gfBNg
iconfigureuĂfBNgjɒ`ĂD

RpC̖蓙ŁCxbZ[Wo邱ƂhȂ󋵈ȊOł́C
COPTS-Werrorǉ邱Ƃ𐄏D

----------------------------------------
COPTS := $(COPTS) -Werror
----------------------------------------

J[l̃RpCɁCdereferencing type-punned pointer will break
strict-aliasing rulesƂxoꍇɂ́CȉǉƂ悢D
̌xbZ[WɊւڍׂ́CuTOPPERS/ASPJ[l ݌vv́u^
LXgɔxbZ[Wv̐߂QƂ邱ƁD

----------------------------------------
KERNEL_CFLAGS := $(KERNEL_CFLAGS) -fno-strict-aliasing
----------------------------------------

܂CAZuꃌx̎ʖCCꃌx̎ʖ̐擪"_"
t̂ɂȂꍇɂ́CCDEFS-DTOPPERS_LABEL_ASMǉD

(2-4-6) SYSSVC_DIR			VXeT[rX̃\[XuꂽfBNg
(2-4-7) SYSSVC_ASMOBJS		AZuŋLqꂽVXeT[rX
							IuWFNg
(2-4-8) SYSSVC_COBJS		CŋLqꂽVXeT[rX̃IuWFNg
(2-4-9) SYSSVC_CFLAGS		VXeT[rXɑ΂RpCIvV
(2-4-10) SYSSVC_LIBS		VXeT[rXɑ΂郉CuNw

^[QbgɈˑāCVXeT[rXiVXeO^XNfoCXh
CoȂǁj̃\[XuꂽfBNgCVXeT[rX\
IuWFNgt@C̃XgCRpCۂɓKpRp
CIvVC̍\ɕKvȃCuNwǉꍇɂ́C
Ɏϐɒ`D

(2-4-11) KERNEL_DIR			J[l̃\[XuꂽfBNg
(2-4-12) KERNEL_ASMOBJS		AZuŋLqꂽJ[l̃IuWFNg
(2-4-13) KERNEL_COBJS		CŋLqꂽJ[l̃IuWFNg
(2-4-14) KERNEL_CFLAGS		J[lɑ΂RpCIvV

^[QbgɈˑāCJ[l̃\[XuꂽfBNgCJ[l
\IuWFNgt@C̃XgCRpCۂɓKp
RpCIvVǉꍇɂ́CɎϐɒ`D

قƂǂ̏ꍇɁC^[QbgˑfBNgMakefile.targetɂ́C
̋Lq܂߂KvD

----------------------------------------
KERNEL_DIR := $(KERNEL_DIR) $(TARGETDIR)
KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) target_support.o
KERNEL_COBJS := $(KERNEL_COBJS) target_config.o target_timer.o
----------------------------------------

(2-4-15) CFG_TABS			RtBM[^ɑ΂IvV

^[QbgɈˑāCRtBM[^ɑ΂IvVǉ
ɂ́CɎϐɒ`D̓Iɂ́CRtBM[^̒l
V{e[ũ^[Qbgˑitarget_def.csvjꍇɂ́C
w肷IvVǉKvD

قƂǂ̏ꍇɁC^[QbgˑfBNgMakefile.targetɂ́C
̋Lq܂߂KvD

----------------------------------------
CFG_TABS := $(CFG_TABS) --cfg1-def-table $(TARGETDIR)/target_def.csv
----------------------------------------

(2-4-16) CFG1_OUT_LDFLAGS	cfg1_out.cɑ΂郊NIvV

^[QbgɈˑāCcfg1_out.cNۂɓKpIvV
ꍇɂ́CɎϐɒ`D

(2-4-17) CFG_OBJS			VXeRtBM[V̂߂̃Iu
							WFNg

^[QbgɈˑāCVXeRtBM[V̂߂̃IuWFN
gt@Cikernel_cfg.oȊOɁjǉꍇɂ́CɎϐɒ
`D̏ꍇCǉIuWFNgt@C̍쐬[iRpC^
AZu[ƈˑ֌W쐬[jCMakefilẽ^[Qbgˑ
LqKvD

(2-4-18) CFG2_OUT

^[QbgɈˑāCRtBM[^̃pX2kernel_cfg.c
kernel_cfg.hȊÕt@C𐶐ꍇɂ́CɎϐɒ`D

(2-4-19) OMIT_WARINIG_ALL
(2-4-20) OMIT_OPTIMIZATION

TvMakefileł́CRpCɑ΂IvVɁu-Wall -g -O2v
ǉD-WallǉȂꍇɂ́CMakefilẽ^[Qbgˑ
OMIT_WARNING_ALL"true"ɒ`D-O2ǉȂꍇɂ́C
Makefilẽ^[QbgˑOMIT_OPTIMIZATION"true"ɒ`D

2.5. N@̐ݒ

(2-5-1) LDSCRIPT				JXNvg̃t@C

JɕW̃JXNvggpłȂꍇɂ́C^[Qbgˑ
ŃJXNvgpӂC̃t@C̕ϐɒ`D

(2-5-2) TEXT_START_ADDRESS		eLXgZNV̐擪Ԓn
(2-5-3) DATA_START_ADDRESS		f[^ZNV̐擪Ԓn

eZNV̐擪Ԓn̎w肪Kvȏꍇɂ́C̕ϐɐ擪Ԓn
`D

(2-5-4) START_OBJS				擪ɃNׂW[
(2-5-5) END_OBJS				ŌɃNׂW[

^[QbgɂẮC[hW[̐擪ƍŌɃNׂW[
C^[QbgˑŗpӂKvD̏ꍇCX^[gAbv
W[[hW[̐擪ɃNKvD

[hW[̐擪ɃNׂvOꍇɂ́CMakefile
̃^[QbgˑɂāC̃IuWFNgt@CSTART_OBJSɒ
`Cɑ΂RpC[ƈˑ֌W쐬[`D[
hW[̍ŌɃNׂW[ꍇɂ́C̃IuWF
Ngt@CEND_OBJSɒ`Cɑ΂RpC[ƈˑ
W쐬[`D܂CW̃X^[gAbvW[icrt0.oj
NȂ悤ɁCLDFLAGS-nostdlibǉKvD
ɁC-nostdlib邱ƂŕWCuNȂȂ邽߁C
LIBS-lgccǉȂ΂ȂȂD

Ⴆ΁CX^[gAbvW[̃\[Xt@Cstart.S̏ꍇɂ́C
Makefilẽ^[QbgˑɎ̂悤ȋLqƂ悢D

----------------------------------------
# X^[gAbvW[̃IuWFNgt@C
START_OBJS = start.o

# X^[gAbvW[̃RpC[
$(START_OBJS): %.o: %.S
	$(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<

# X^[gAbvW[̈ˑ֌W쐬[
$(START_OBJS:.o=.d): %.d: %.S
	@$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
		-O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend

# Jɑ΂IvV
LDFLAGS := -nostdlib $(LDFLAGS)
LIBS := $(LIBS) -lgcc
----------------------------------------

܂CGNUJŁCRpCɕWcrtbegin.ocrtend.opꍇ
ɂ́CMakefile ̃^[QbgˑɎ̂悤ȋLqƂ悢D

----------------------------------------
# IuWFNgt@C
START_OBJS = $(shell $(CC) -print-file-name=crtbegin.o)
END_OBJS = $(shell $(CC) -print-file-name=crtend.o)

# ˑ֌W쐬[
$(START_OBJS:.o=.d): %.d:
$(END_OBJS:.o=.d): %.d:

# Jɑ΂IvV
LDFLAGS := -nostdlib $(LDFLAGS)
LIBS := $(LIBS) -lgcc
----------------------------------------

̏ꍇC̃t@CRpC邱Ƃ͂Ȃ߁CRpC[
͕svłD܂Cˑ֌W쐬[̓_~[ł悢iˑ֌W쐬[
ȂƃG[ɂȂjD

(2-5-6) HIDDEN_OBJS				w肵ȂĂN郂W[

[hW[ɃNׂW[CJɑ΂p[^
͂ȂCJXNvgɁiႦ΁CGNUJ̃JXNvg
STARTUPgājLqꍇɂ́C̃IuWFNgt@CC
iSTART_OBJS܂END_OBJSł͂ȂjHIDDEN_OBJSɒ`Cɑ΂R
pC[ƈˑ֌W쐬[`DHIDDEN_OBJSɒ`
W[́CJɑ΂p[^͏ODLIBSLDFLAGSɂ
ẮCSTART_OBJS܂END_OBJSpꍇƓlłD

Ⴆ΁CX^[gAbvW[̃\[Xt@Cstart.SŁCstart.o
N邱ƂJXNvgɋLqꍇɂ́CMakefilẽ^[Qb
gˑɎ̂悤ȋLqƂ悢D

----------------------------------------
# X^[gAbvW[̃IuWFNgt@C
HIDDEN_OBJS = start.o

# X^[gAbvW[̃RpC[
$(HIDDEN_OBJS): %.o: %.S
	$(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<

# X^[gAbvW[̈ˑ֌W쐬[
$(HIDDEN_OBJS:.o=.d): %.d: %.S
	@$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
		-O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend

# Jɑ΂IvV
LDFLAGS := -nostdlib $(LDFLAGS)
LIBS := $(LIBS) -lgcc
----------------------------------------

2.6. ˑ֌W̒`

RtBM[^̊epXɑ΂āC^[Qbgˑ̃t@Cւ̈ˑ
W`D̓Iɂ́CpX1CpX2CpX3ˑt@CC
cfg1_out.cCkernel_cfg.timestampC$(OBJFILE)ɑ΂ˑ֌W̌`
LqD

قƂǂ̏ꍇɁC^[QbgˑfBNgMakefile.targetɂ́C
̋Lq܂߂KvD

----------------------------------------
cfg1_out.c: $(TARGETDIR)/target_def.csv
kernel_cfg.timestamp: $(TARGETDIR)/target.tf
$(OBJFILE): $(TARGETDIR)/target_check.tf
----------------------------------------

2.7. ̑̐ݒ

(2-7-1) CLEAN_FILES				cleanɂ폜t@C

cleanɂ폜t@C^[QbgˑŒǉꍇɂ́Ct@
C̕ϐɒǉ`D

(2-7-2) REALCLEAN_FILES			realcleanɂ폜t@C

realcleanɂ폜t@C^[QbgˑŒǉꍇɂ́C
t@C̕ϐɒǉ`D


RDTOPPERSʒ`̃^[Qbgˑ

TOPPERSʒ`it_stddef.hj̃^[Qbgˑ́Ctarget_stddef.h܂
͂CN[ht@CivZbTE`bvEJˑ
ŗpӂwb_t@CȂǁjɊ܂߂D

3.1. ^[Qbgʃ}N

AvP[VVXeT[rXŃ^[Qbgʂ邽߂ɁC
"TOPPERS_"ɃVXê啶ɂÁiႦ΁C
"TOPPERS_DVE68K"j}N`D

܂C^[QbgˑvZbTˑ`bvˑ؂蕪
ɂ́C"TOPPERS_"Ɉˑ̂啶ɂÁiႦ
΁C"TOPPERS_M68K"j}N`D

3.2. ^̍őlEŏlErbg

(3-2-1) INT_MAX				intɊi[łőliC90j
(3-2-2) INT_MIN				intɊi[łŏliC90j
(3-2-3) UINT_MAX			unsigned intɊi[łőliC90j
(3-2-4) LONG_MAX			longɊi[łőliC90j
(3-2-5) LONG_MIN			longɊi[łŏliC90j
(3-2-6) ULONG_MAX			unsigned longɊi[łőliC90j
(3-2-7) CHAR_BIT			char^̃rbgiC90j

^̍őlEŏlErbgC̃V{Ƀ}Nɒ`D

̃}ŃCC90ɏ̂łDJC90ɏ
limits.hpӂĂꍇɂ́C̃}N`邱ƂɑウāC
limits.hCN[h΂悢D

3.3. TCY̎w肳ꂽ^C̍őlEŏlC萔}N

(3-3-1) int8_t				t8rbgiIvVCC99j
(3-3-2) uint8_t				8rbgiIvVCC99j
(3-3-3) int16_t				t16rbgiC99j
(3-3-4) uint16_t			16rbgiC99j
(3-3-5) int32_t				t32rbgiC99j
(3-3-6) uint32_t			32rbgiC99j
(3-3-7) int64_t				t64rbgiIvVCC99j
(3-3-8) uint64_t			64rbgiIvVCC99j
(3-3-9) int128_t			t128rbgiIvVCC99j
(3-3-10) uint128_t			128rbgiIvVCC99j
(3-3-11) int_least8_t		8rbgȏ̕tiC99j
(3-3-12) uint_least8_t		8rbgȏ̕iC99j
(3-3-13) intptr_t			|C^i[łTCY̕tiC99j
(3-3-14) uintptr_t			|C^i[łTCY̕iC99j
(3-3-15) INT8_MAX			int8_tɊi[łőliIvVCC99j
(3-3-16) INT8_MIN			int8_tɊi[łŏliIvVCC99j
(3-3-17) UINT8_MAX			uint8_tɊi[łőliIvVCC99j
(3-3-18) INT16_MAX			int16_tɊi[łőliC99j
(3-3-19) INT16_MIN			int16_tɊi[łŏliC99j
(3-3-20) UINT16_MAX			uint16_tɊi[łőliC99j
(3-3-21) INT32_MAX			int32_tɊi[łőliC99j
(3-3-22) INT32_MIN			int32_tɊi[łŏliC99j
(3-3-23) UINT32_MAX			uint32_tɊi[łőliC99j
(3-3-24) INT64_MAX			int64_tɊi[łőliIvVCC99j
(3-3-25) INT64_MIN			int64_tɊi[łŏliIvVCC99j
(3-3-26) UINT64_MAX			uint64_tɊi[łőliIvVCC99j
(3-3-27) INT128_MAX			int128_tɊi[łőliIvVCC99j
(3-3-28) INT128_MIN			int128_tɊi[łŏliIvVCC99j
(3-3-29) UINT128_MAX		uint128_tɊi[łőliIvVCC99j
(3-3-30) INT_LEAST8_MAX		int_least8_tɊi[łőliC99j
(3-3-31) INT_LEAST8_MIN		int_least8_tɊi[łŏliC99j
(3-3-32) UINT_LEAST8_MAX	uint_least8_tɊi[łőliC99j
(3-3-33) INT8_C(val)		int_least8_t^̒萔}NiC99j
(3-3-34) UINT8_C(val)		uint_least8_t^̒萔}NiC99j
(3-3-35) INT16_C(val)		int16_t^̒萔}NiC99j
(3-3-36) UINT16_C(val)		uint16_t^̒萔}NiC99j
(3-3-37) INT32_C(val)		int32_t^̒萔}NiC99j
(3-3-38) UINT32_C(val)		uint32_t^̒萔}NiC99j
(3-3-39) INT64_C(val)		int64_t^̒萔}NiIvVCC99j
(3-3-40) UINT64_C(val)		uint64_t^̒萔}NiIvVCC99j
(3-3-41) INT128_C(val)		int128_t^̒萔}NiIvVCC99j
(3-3-42) UINT128_C(val)		uint128_t^̒萔}NiIvVCC99j

w肳ꂽTCY̐^C̃V{Ɍ^`D܂Cf[^
^Ɋi[łőlEŏlƁC萔}NC̃V{
Ƀ}N`D

̃f[^^у}ŃCC99ɏ̂łDJC99
ɏstdint.hpӂĂꍇɂ́C̃f[^^у}N
`邱ƂɑウāCstdint.hCN[h΂悢D

ŃIvVƋLq̂́CYf[^^RpCŃT|[g
Ăꍇɂ̂ݒ`邱ƂD

3.4. TCY̎w肳ꂽ_^C̍őlEŏl̃}N

(3-4-1) float32_t			IEEE75432rbgPx_iIv
							Vj
(3-4-2) double64_t			IEEE75464rbg{x_iIv
							Vj
(3-4-3) FLOAT32_MIN			float32_tɊi[łŏ̐Kꂽ̕
							_iIvVj
(3-4-4) FLOAT32_MAX			float32_tɊi[ł\\ȍő̗L
							_iIvVj
(3-4-5) DOUBLE64_MIN		double64_tɊi[łŏ̐Kꂽ̕
							_iIvVj
(3-4-6) DOUBLE64_MAX		double64_tɊi[ł\\ȍő̗L
							_iIvVj

w肳ꂽTCYE\`̕_^C̃V{Ɍ^`
D܂Cf[^^Ɋi[łőlEŏlC̃V{Ƀ}N
`D

CYf[^^RpCŃT|[gĂꍇɂ̂ݒ
`D

3.5. RpC̊g@\̂߂̃}N`

RpC̊g@\p邽߂̃}NƂāCKvɉāCȉ̃}
N̒`܂߂D

(3-5-1) inlineiIvVCftHg͖`j
(3-5-2) InlineiIvVCftHgstatic inlinej

CC֐ł邱ƂwDInlinéCRpCPʂɃ[J
ȃCC֐ł邱ƂD

(3-5-3) asmiIvVCftHg͖`j
(3-5-4) AsmiIvVCftHg͖`j

CCAZuLq邽߂̎wDAsḿCœKɂ폜Ă
ȂȂƂD́C^[Qbgˑł̂ݎg}Nł邽
߁C^[QbgˑŎgȂȂ`Kv͂ȂD

(3-5-5) offsetof(structure, field)iIvVCftHg̒`j

\structure̒ł́CtB[hfield̃ItZbg߂}ND

(3-5-6) alignof(type)iIvVCftHg̒`j

f[^^typẽACgPʂ߂}ND

(3-5-7) NoReturniIvVCftHg͖`j

^[邱Ƃ̂Ȃ֐ł邱ƂwD́C^[Qbgˑ
̂ݎg}Nł邽߁C^[QbgˑŎgȂȂ`Kv
͂ȂD

3.6. WIȒ`̏㏑

t_stddef.hɊ܂܂TOPPERSʒ`̕WIȒ`㏑ꍇɂ́C
ȉ̃}N`D

(3-6-1) TOPPERS_booliIvVCftHgintj
(3-6-2) TOPPERS_sizeiIvVCftHguintptr_tj
(3-6-3) TOPPERS_fpiIvVCftHg͑ƌ݊̂Ȃ֐|C^j

ꂼCbool_tCSIZECFPɌ^`ׂf[^^D

(3-6-4) UINT_C(val)iIvVCftHgUtj
(3-6-5) ULONG_C(val)iIvVCftHgULtj

ꂼCunsigned uint^Cunsigned long^̒萔邽߂̃}ND

(3-6-6) NULLiIvVCftHg0j

C90Cł́CNULL̒`stddef.hɊ܂܂Ă邽߁C
CN[hĂ悢D

(3-6-7) ERCD(mercd, sercd)iIvVj
(3-6-8) MERCD(ercd)iIvVj
(3-6-9) SERCD(ercd)iIvVj

ERCDCMERCDCSERCD̕W̒`́Ct2̕␔ŕ\ĂC
EVtgZqi>>jZpVtg邱Ƃ肵ĂD̃Rp
Cł̉肪藧CłȂꍇɂ́C^[Qbgˑł
̒`㏑KvD

(3-6-10) ALIGN_TYPE(addr, type)iIvVj

AhXaddrCf[^^typẽACgPʂɃACĂ邩
`FbN}ND

3.7. AT[V̂߂̒`

t_stddef.hɂ́Cassert̒`܂܂Dassertsꍇiassert
p[^falseɂȂꍇj̏C^[QbgˑɗpӂKv
D̒`́Cassert}NgpOł΁Ct_stddef.hȍ~
ɃCN[ht@CɊ܂܂ĂĂ悢DȂCassert𖳌
iNDEBUG}N`ăRpCjꍇɂ́Cpӂ
Kv͂ȂD

(3-7-1) TOPPERS_assert_abort(void)

assertsꍇɁCvO~֐DVXeJ̓f
obKɗƂ̂zIłDVXeғɂ͗Os킹邱
ƂɂȂD

(3-7-2) TOPPERS_assert_fail(exp, file, line)

asserts̏\/L^邽߂̃}NDVXeO@\
pꍇɂ́Ct_syslog.hɃVXeO@\ɋL^邽߂̒`܂
Ă̂ŁC^[QbgˑŗpӂKv͂ȂD


SDVXeC^tF[XCiSILj̃^[Qbgˑ

VXeC^tF[XCiSILCsil.hj̃^[Qbgˑ̒`́C
target_sil.h܂͂CN[ht@CivZbTE`b
vEJˑŗpӂwb_t@CȂǁjɊ܂߂D

SIL̃T[rXR[́CCӂ̃VXeԂŌĂяoƂłD̂
߁CSIL̃^[Qbgˑ̊֐́CCӂ̃VXeԂŌĂяo悤
Ȃ΂ȂȂD

4.1. S݃bNԂ̊Ǘ

SIL̃^[Qbgˑł́CS݃bNԂ֑Jڂ@\ƁC̏
֖߂@\ȉԂL邽߂ɕϐgj񋟂DS݃b
NԂł邩𔻕ʂ@\͒񋟂KvȂD

SIL̋@\́CJ[lgpȂꍇɂgpłKvD̂߁C
S݃bNԂւ̑Jڂƌ̏Ԃւ̕ÁCJ[lpCv
ZbT̃\[X𒼐ڑ삷邱ƂɂĎD܂CS݃b
NԂւ̑Jڂƌ̏Ԃւ̕ÁCS݃bNԂCPUbNԂ
sKvD

ی@\J[lł́C[U^XNvZbT̃\[X
ڑ삷邱ƂłȂ߁C[U^XN͂̋@\p邱
ƂłȂDpꍇ̐U̓^[QbgvZbTɈˑ邪CT
^Iɂ́C߈ᔽȂǂCPUO邱ƂɂȂD

(4-1-1) SIL_PRE_LOC

S݃bNtȌԂۑ邽߂̕ϐ`}ND^
ɁCϐ𑱂̂ɒ`Dϐ́C̖OƏՓ˂Ȃ悤
ɁC"TOPPERS_"Ŏn܂閼OɂD

(4-1-2) SIL_LOC_INT()

݂̑S݃bNtȌԂSIL_PRE_LOCŒ`ϐɕۑCS
݃bNԂɑJڂ}ND̃}Nۂɂ́Cu1.6
NeBJZNV̏o̎Ɋւ鐧v̐߂ɋLqĂ
鐧ɏ]Ȃ΂ȂȂD

(4-1-3) SIL_UNL_INT()

SIL_LOC_INT()ɂĕϐɕۑԂɖ߂}ND̃}N
ۂɂ́Cu1.6 NeBJZNV̏o̎Ɋւ鐧v
߂ɋLqĂ鐧ɏ]Ȃ΂ȂȂD

4.2. ԑ҂

(4-2-1) void sil_dly_nse(ulong_t dlytim)

dlytimŎw肳ꂽȏ̎ԁiPʂ̓imbjC[vȂǂɂđ҂
D

ȉ̊֐ƓȏCAZuŋLq@CWIȎ
@ƂDAZuŋLq̂́CRpC̍œKɈˑ
悤ɂ邽߂łD܂̊֐́CLbV̉e󂯂Ȃ
ɁCł胁ANZXsȂ悤ɎׂłD

	void sil_dly_nse(ulong_t dlytim)
	{
		dlytim -= SIL_DLY_TIM1;
		if (ʂ0傫) {
			do {
				dlytim -= SIL_DLY_TIM2;
			} while (ʂ0傫);
		}
	}

̊֐͎̓̒ʂłDdlytimSIL_DLY_TIM1ȉ̏ꍇɂ́C
if̏CɊ֐甲DdlytimSIL_DLY_TIM1
傫C(SIL_DLY_TIM1+SIL_DLY_TIM2)ȉ̏ꍇɂ́Cŏif̏
邪Cdo[v1炸Ɋ֐甲Ddlytim
(SIL_DLY_TIM1+SIL_DLY_TIM2)傫C(SIL_DLY_TIM1+SIL_DLY_TIM2*2)
̏ꍇɂ́Cdo[v1񂾂Ċ֐甲ĎCdlytim
SIL_DLY_TIM2傫ȂxɁCwhile[v񐔂1񂸂D

ȂC̊֐AZui܂́CCjŋLqꍇCǂ̃t@
CɋLq邩ɂȂDSIL̃^[Qbgˑɂ́CWł́CAZ
ui܂́CCj̊֐`Lq邽߂̃t@Cpӂ
ȂD^[QbgˑŗpӂĂ悢COIɁCJ[l̃^[
QbgˑW[itarget_support.S܂target_config.cjɋLq
悢ƂɂD

(4-2-2) SIL_DLY_TIM1iIvVj
(4-2-3) SIL_DLY_TIM2iIvVj

sil_dly_nseL̕WIȕ@ŎꍇC2̒萔^[Qb
gˑŃ}N`D

SIL_DLY_TIM2́CL̊֐ɂāCdo[v1̎sԁiPʂ̓imbj
ɐݒ肷D^[QbgvZbT̖߃Zbgɂ邪C悻CZ
߂Ə򖽗ߊe1̎sԂɂȂDSIL_DLY_TIM2܂΁C֐
o܂߂Ŝ̎ԂdlytimŎw肳ꂽȏ̎ԂɂȂ悤ɁC
SIL_DLY_TIM1߂D

L̓éC_SSPJ[lł͖؂łD

2̒萔ľxvOƂāCtestfBNgɁC
test_dlynsepӂĂDtest_dlynsesƁĈ悤ȏo͂
D

-- for fitting parameters --
sil_dly_nse(0): 430 OK
sil_dly_nse(420): 430 OK
sil_dly_nse(510): 520 OK
sil_dly_nse(600): 610 OK
<>
-- for checking boundary conditions --
sil_dly_nse(421): 520 OK
sil_dly_nse(511): 610 OK
sil_dly_nse(601): 700 OK

"for fitting parameters"ɑo͂́Csil_dly_nse(dlytim)Ăяo
̑҂Ԃ𑪒肵ʂłD̃vOpāC":"̉E̐
lCdlytim傫͈͂łȂׂ߂lɂȂ悤ɁC2̒萔l
D"for checking boundary conditions"ɑo͂́CvO
Ó`FbN邽߂̂̂ŁC":"̉E̐lCdlytim傫
ƂmFi߂lɂȂKv͂ȂjD

4.3. vZbT̃GfBA

(4-3-1) SIL_ENDIAN_BIG
(4-3-2) SIL_ENDIAN_LITTLE

vZbT̃GfBAɂCꂩЕ̃V{}N`D

(4-3-3) TOPPERS_SIL_REV_ENDIAN_UINT16iIvVj
(4-3-4) TOPPERS_SIL_REV_ENDIAN_UINT32iIvVj

ꂼC16rbgC32rbg̃̕GfBA𔽓]}
NDvZbTGfBA]̂߂̖߂ꍇɂ́C̖
pĎD̃V{}N`Ȃꍇɂ́CftH
g̒`gD

4.4. ԃANZX֐

(4-4-1) TOPPERS_OMIT_SIL_ACCESS

W̃ԃANZX֐gpC^[Qbgˑŗpӂꍇ
ɂ́C̃V{}N`D

(4-4-2) TOPPERS_OMIT_SIL_REH_LEM
(4-4-3) TOPPERS_OMIT_SIL_WRH_LEM
(4-4-4) TOPPERS_OMIT_SIL_REH_BEM
(4-4-5) TOPPERS_OMIT_SIL_WRH_BEM
(4-4-6) TOPPERS_OMIT_SIL_REW_LEM
(4-4-7) TOPPERS_OMIT_SIL_WRW_LEM
(4-4-8) TOPPERS_OMIT_SIL_REW_BEM
(4-4-9) TOPPERS_OMIT_SIL_WRW_BEM

ꂼCWsil_reh_lemCsil_wrh_lemCsil_reh_bemCsil_wrh_bemC
sil_rew_lemCsil_wrw_lemCsil_rew_bemCsil_wrw_bemgpC^[Qb
gˑŗpӂꍇɂ́C̃V{}N`D

4.5. I/OԃANZX֐

ԂƂ͕ʂI/OԂvZbTł́CI/OԂɂfoCX
WX^ANZX邽߂̊֐ƂāCsil_reb_iopCsil_wrb_iopC
sil_reh_iopCsil_wrh_iopCsil_reh_lepCsil_wrh_lepCsil_reh_bepC
sil_wrh_bepCsil_rew_iopCsil_wrw_iopCsil_rew_lepCsil_wrw_lepC
sil_rew_bepCsil_wrw_bep̒ŕKvȂ̂C^[QbgˑŗpӂD


TDJ[lAPĨ^[Qbgˑ

J[lAPIikernel.hj̃^[Qbgˑ̒`́Ctarget_kernel.h܂
͂CN[ht@CivZbTE`bvEJˑ
ŗpӂwb_t@CȂǁjɊ܂߂D

5.1. ^[Qbg`ŃT|[g@\

(5-1-1) TOPPERS_TARGET_SUPPORT_DIS_INT		dis_intT|[g
(5-1-2) TOPPERS_TARGET_SUPPORT_ENA_INT		ena_intT|[g

dis_intCena_intCT|[gꍇɁCꂼ̃V{}N
`D

5.2. ݗDx͈̔

(5-2-1) TMIN_INTPRI				ݗDx̍ŏliōlj
(5-2-2) TMAX_INTPRI				ݗDx̍őliŒlj

ꂼCJ[lǗ̊ݗDx̍ŏliDxōjCJ[l
Ǘ̊ݗDx̍őliDxŒjɒ`DTMAX_INTPRI-1
ɌŒ肳Ă邪CΏ̐̂߂ɁC^[QbgˑŒ`邱Ƃɂ
ĂD

5.3. ^CeBbN̒`

(5-3-1) TIC_NUME				^CeBbN̎̕q
(5-3-2) TIC_DENO				^CeBbN̎̕

^CeBbN̎isignal_timeĂяojC~bPʂŁC
TIC_NUME/TIC_DENOɒ`DႦ΁C^CeBbN̎1/30b̏ꍇ
ɂ́CTIC_NUME100ɁCTIC_DENO3ɒ`΂悢D

^CeBbN̎́C1~bƂi܂CTIC_NUMECTIC_DENOƂ1
ɒ`jƂ𐄏邪CV~[V␫\̒ႢvZb
TłꂪK؂łȂꍇɂ́CȊO̒lƂĂ悢D̏ꍇłC
\ȌC1~b̔{łi܂CTIC_DENO1ɒ`jƂ
]܂D

TIC_NUMETIC_DENO̒`ύX邱ƂŁC^CeBbN̎ύX
悤Ƀ^C}hCoꍇɂ́C2̒萔̒`̓ftH
gl^Ă邱ƂɂȂDŁC̒`u#ifndef TIC_NUMEv
u#endifvň͂ŋLqD

5.4. ̈mۂ̂߂̌^`

(5-4-1) TOPPERS_STK_T	X^bN̈mۂ邽߂̌^iIvVj

X^bN̈́CWł́Cintptr_t^̔zƂĊmۂ邪C傫Pʂ
ACȂǂ̗RŁCȊǑ^̔zƂĊmۂꍇɂ́C
ꂼTOPPERS_STK_TƂCz̃x[XƂȂf[^^Ƀ}N`D

5.5. ̈mۂ̂߂̃}N

(5-5-1) TOPPERS_ROUND_SZiIvVj
(5-5-2) TOPPERS_COUNT_SZiIvVj

TOPPERS_COUNT_SZ(sz, unit)́Csz/unit؂グl߂}NŁCT
CYsz̃̈TCYunit̃f[^^̔zŊmۂꍇ̗vf
߂邽߂ɗpDTOPPERS_ROUND_SZ(sz, unit)́Csz/unit؂グ
̂unitl߂}NŁCTCYsz̃̈TCY
unit̃f[^^̔zŊmۂꍇ̃g[^TCY߂邽߂ɗp
D

ꂼCWTOPPERS_ROUND_SZCTOPPERS_COUNT_SZK؂łȂC^[Qb
gˑŗpӂꍇɂ́C̃V{K؂ȒlɃ}N`D

UDJ[l̃^[Qbgˑ

6.1. J[l̃^[Qbgˑ̋ʎ

6.1.1. J[l̃^[Qbgˑ̍\vf

J[l̃^[Qbgˑ́Cȉ̗vfō\D

(a) J[l̃^[Qbgˑ̒`

J[l̃^[QbgˑQƂ^[Qbgˑ̒`́C
target_config.h܂͂CN[ht@CivZbTE`b
vEJˑŗpӂwb_t@CȂǁjɊ܂߂D

^[Qbg̃n[hEFAi݃nhԍCPUOnhԍC
foCXWX^̔ԒnȂǁj̒`́CVXeT[rXAvP[V
ɂLpł邽߁CJ[l݂̂ɗLpȒ`܂ރt@CƂ͐
蕪āCƗwb_t@CɊ܂߂D̃wb_t@C̕WI
̂CVXe.hi܂́C`bv.hCvZbT.hjƂD

(b) J[l̃^[QbgˑW[

J[l̃^[Qbgˑ̕ϐ`֐܂ރW[DCŋL
q镔target_config.cCAZuŋLq镔
target_support.SɊ܂߂DvZbTE`bvEJˑ؂蕪
邱ƂCt@C傫Ȃꍇɕ̃t@Cɕ邱Ƃ\
łD

(c) J[l̃^[Qbgˑ̂߂̃l[Lq

J[l̃^[Qbgˑ̕ϐ֐C擪_kernel_t^
OɃl[邽߂̃W[Dtarget_rename.defpӂCc[
iutils/genrenamejɂCtarget_rename.htarget_unrename.h𐶐
DvZbTE`bvEJˑ؂蕪ꍇɂ́Cl[L
q؂蕪D

(d) ^C}hCo

J[lɃ^CeBbNʒmisignal_timeIɌĂяoj
̃^C}hCõwb_t@CCt@CCVXeRtBM[
Vt@CCꂼCtarget_timer.hCtarget_timer.cC
target_timer.cfgɊ܂߂DvZbTE`bvEJˑ؂蕪
邱Ƃ\łD

(e) RtBM[^ݒt@C

RtBM[^̐ݒt@C̃^[QbgˑCtarget_def.csvC
target.tfCtarget_check.tfɗpӂDRtBM[^ݒt@C
Lq@ɂẮCV͂ŐD

6.1.2. ^[Qbgˑ̊֐̖K

J[l̃^[Qbgˑ\֐̒ŁCt_Ŏn܂̂̓^
XNReLXgpCi_Ŏn܂͔̂^XNReLXgpCx_Ŏn
܂̂͂̃ReLXgłĂяoƂł֐łD

6.2. VXeԂ̊Ǘ

ASPJ[lVȃ^[QbgVXeɃ|[eBOۂɁCłdv
Ƃ́CJ[l`VXeԂCn[hEFAivZbTj
łǂ̂悤Ɏ邩łDȉ̐́CTOPPERSVJ[lɂ
VXeԂ̒`EӖmĂ邱ƂOɋLqĂD

6.2.1. S݃bNԂ̊Ǘ

S݃bNԂ́CNMIׂĂ݂̊}XNԂłDS
݃bNԂǗ@\́CVXeC^tF[XCiSILj
Ē񋟂CJ[l͑S݃bNԂǗȂD

S݃bNԂł́Csns_kerext_kerȊÕJ[l̃T[rXR[
ĂԂƂ͂łȂ̂ƂĂCĂ񂾏ꍇɂ͉N邩ۏ؂
ȂDsns_kerext_kerĂяóCg[XO擾SIL
T[rXR[ƁCcall_exit_kernel݂̂łD̂߁C
call_exit_kernelĂяôāCJ[l̃^[Qbgˑ
֐CS݃bNԂŌĂяo󋵂͍lKvȂD

6.2.2. ReLXg̊Ǘ

PʂsReLXǵC^XNReLXgƔ^XNRe
LXgɕނD

^[Qbgˑ́Cs̏PʂC^XNReLXgŎs
邩^XNReLXgŎsĂ邩𔻕ʂ@\񋟂D
܂CCPUOReLXgɂĔʂ@\񋟂D

^[Qbgˑł́C݃nhCPUOnh̓Ŕ^X
NReLXgɐ؂芷C̏oŌ̃ReLXgɖ߂D
CfBXpb`̓ňꎞIɔ^XNReLXgɐ؂芷D

(6-2-2-1) bool_t sense_context(void)

s̏PʂC^XNReLXgŎsĂꍇɂfalseC
^XNReLXgŎsĂꍇɂtrueԂ֐D̊֐́C
CPUbNԂłCPUbNԂłĂяo悤ɎȂ΂
ȂD

6.2.3. CPUbNԂ̊Ǘ

^[Qbgˑ́CCPUbNԂ֑Jڂ@\CCPUbNԂ֑J
ڂ@\CCPUbNԂł邩𔻕ʂ@\񋟂D

(6-2-3-1) void t_lock_cpu(void)
(6-2-3-2) void i_lock_cpu(void)
(6-2-3-3) void x_lock_cpu(void)

CPUbNԂCCPUbNԂ֑Jڂ֐D̊֐́C
CPUbNԂŌĂяo邱Ƃ͂ȂCĂяoꂽꍇ͕̓ۏ؂
KvȂD

̊֐ۂɂ́Cu1.6 NeBJZNV̏o
Ɋւ鐧v̐߂ɋLqĂ鐧ɏ]Ȃ΂ȂȂD

(6-2-3-4) void t_unlock_cpu(void)
(6-2-3-5) void i_unlock_cpu(void)
(6-2-3-6) void x_unlock_cpu(void)

CPUbNԂCCPUbNԂ֑Jڂ֐D̊֐́C
CPUbNԂŌĂяo邱Ƃ͂ȂCĂяoꂽꍇ͕̓ۏ
KvȂD

^XNReLXgCPUbNԂɑJڂꍇɂ́CCPUbN
ɖ߂̂̓^XNReLXgɌC^XNReLXgCPUbN
Ԃɖ߂邱Ƃ͂ȂDƁCt_unlock_cpuĂяốC
t_lock_cpuɂCPUbNԂɂȂĂ鎞łDi_lock_cpuɂ
CPUbNԂɂȂĂ鎞ɂ́Ct_unlock_cpuĂяo邱Ƃ͂ȂD

lɁC^XNReLXgCPUbNԂɑJڂꍇɂ́CCPUb
NԂɖ߂͔̂^XNReLXgɌC^XNReLXg
CPUbNԂɖ߂邱Ƃ͂ȂDƁCi_unlock_cpuĂяo
̂́Ci_lock_cpuɂCPUbNԂɂȂĂ鎞łD
t_lock_cpuɂCPUbNԂɂȂĂ鎞ɂ́Ci_unlock_cpuĂяo
邱Ƃ͂ȂD

̊֐ۂɂ́Cu1.6 NeBJZNV̏o
Ɋւ鐧v̐߂ɋLqĂ鐧ɏ]Ȃ΂ȂȂD

(6-2-3-7) bool_t t_sense_lock(void)
(6-2-3-8) bool_t i_sense_lock(void)
(6-2-3-9) bool_t x_sense_lock(void)

݂̃VXeԂCCPUbNԂ̏ꍇtrueCCPUbNԂ̏
ɂfalseԂ֐D

̊֐S݃bNԂŌĂяo󋵂͍lKvȂ
ƂCS݃bNԂCPUbNԂʂłKv͂ȂDNMI
OɃJ[l̊ǗO݂݂̊Ȃꍇɂ́CS݃bNԂ
CPUbNԂS̏Ԃł܂ȂD

6.3. ݂Ɋ֘AVXeԂ̊Ǘ

6.3.1. ݗDx}XN̊Ǘ

^[Qbgˑ́CݗDx}XNݒ肷@\ƁCݗDx}
XNQƂ@\񋟂D

(6-3-1-1) void x_set_ipm(PRI intpri)
(6-3-1-2) void t_set_ipm(PRI intpri)
(6-3-1-3) void i_set_ipm(PRI intpri)

ݗDx}XN̒lintpriɐݒ肷֐D

̊֐́CCPUbNԂłCPUbNԂłĂяo悤
̂]܂DCx_set_ipmt_set_ipḿC^[Qbgˑ
CPUbNԂŌĂяoƂ͂Ȃ߁CCPUbNԂŌĂ
oꂽꍇ͕̓ۏ؂KvȂDi_set_ipḿCCPUbNԂł
CPUbNԂłĂяo悤ɎȂ΂ȂȂD

܂C̊֐́CVALID_INTPRI_CHGIPM(intpri)trueԂintpriɑ
Ă̂݌Ă΂DintpriɂłȂlnꂽꍇ͕̓ۏ؂K
vȂD

(6-3-1-4) PRI x_get_ipm(void)
(6-3-1-5) PRI t_get_ipm(void)
(6-3-1-6) PRI i_get_ipm(void)

ݗDx}XN̒lQƂĕԂ֐D

̊֐́CCPUbNԂłCPUbNԂłĂяo悤
̂]܂DCx_get_ipmt_get_ipḿC^[Qbgˑ
CPUbNԂŌĂяoƂ͂Ȃ߁CCPUbNԂŌĂ
oꂽꍇ͕̓ۏ؂KvȂDi_get_ipḿCCPUbNԂł
CPUbNԂłĂяo悤ɎȂ΂ȂȂD

ݗDx}XNpăJ[lǗׂ݂̊ă}XNԂ́C
CPUbNԂƋʂł邱ƂKvłD̓Iɂ́CCPUbN
ԂɂāCx_set_ipmpăJ[lǗׂ݂̊ă}XNꍇ
łCx_sense_lockfalseԂD

ɑ΂āCݗDx}XNpNMIׂĂ݂̊}XN
łꍇC̏ԂƑS݃bNԂʂłKv͂ȂCS
̏Ԃł܂ȂD

6.3.2. ݗv֎~tO̊Ǘ

^[Qbgˑ́Cݗv֎~tOZbg@\ƃNA@
\񋟂D

(6-3-2-1) bool_t VALID_INTNO_DISINT(INTNO intno)

intnoCdis_int^ena_intɑ΂銄ݔԍƂėLȒlłꍇ
trueCłȂꍇfalseԂ}NDݗv֎~tOZbg^
NAłȂintnoɑ΂ẮC̃}NfalseԂ悤ɂD

(6-3-2-2) bool_t x_disable_int(INTNO intno)
(6-3-2-3) bool_t t_disable_int(INTNO intno)
(6-3-2-4) bool_t i_disable_int(INTNO intno)

intnoŎw肳ꂽݗvCɑ΂銄ݗv֎~tOZbgC
trueԂ֐Dw肳ꂽݗvCɑ΂āCݑݒ肳
ĂȂꍇɂ́CfalseԂD

̊֐́C^[QbgˑCPUbNԂŌĂяoƂ͂
߁CCPUbNԂŌĂяoꂽꍇ͕̓ۏ؂KvȂD
C^[QbgˑCPUbNԂŌĂяoꍇɂ́Cۏ؂
KvD

܂C̊֐́CVALID_INTNO_DISINT(intno)trueƂȂintnoɑ΂
Ă̂݌Ă΂DintnoɂłȂlnꂽꍇ͕̓ۏ؂Kv
ȂD

dis_intT[rXR[T|[gꍇiTOPPERS_SUPPORT_DIS_INT}N
`ꍇjɂ́Ct_disable_intpӂĂȂ΂ȂȂD

(6-3-2-5) bool_t x_enable_int(INTNO intno)
(6-3-2-6) bool_t t_enable_int(INTNO intno)
(6-3-2-7) bool_t i_enable_int(INTNO intno)

intnoŎw肳ꂽݗvCɑ΂銄ݗv֎~tONAC
trueԂ֐Dw肳ꂽݗvCɑ΂āCݑݒ肳
ĂȂꍇɂ́CfalseԂD

̊֐́C^[QbgˑCPUbNԂŌĂяoƂ͂
߁CCPUbNԂŌĂяoꂽꍇ͕̓ۏ؂KvȂD
C^[QbgˑCPUbNԂŌĂяoꍇɂ́Cۏ؂
KvD

܂C̊֐́CVALID_INTNO_DISINT(intno)trueƂȂintnoɑ΂
Ă̂݌Ă΂DintnoɂłȂlnꂽꍇ͕̓ۏ؂Kv
ȂD

ena_intT[rXR[T|[gꍇiTOPPERS_SUPPORT_ENA_INT}N
`ꍇjɂ́Ct_enable_intpӂĂȂ΂ȂȂD

6.3.3. ݗṽNA

(6-3-3-1) void x_clear_int(INTNO intno)
(6-3-3-2) void t_clear_int(INTNO intno)
(6-3-3-3) void i_clear_int(INTNO intno)

intnoŎw肳ꂽݗvCGbWgKłꍇɁCgK
ݗvNA֐DintnoŎw肳ꂽݗvCx
gKłꍇɂ͉ȂD

ASPJ[l̃^[Qbgˑł́C̊֐ĂяoĂȂC
^[QbgˑVXeT[rXŌĂяo\߁Cpӂ
ƂƂĂD̂߁C̊֐ǂ̂悤ȃVXeԂŌĂяo
邩́C^[QbgˑňтĂ΂悢D

6.3.4. ݗṽv[u

(6-3-4-1) bool_t x_probe_int(INTNO intno)
(6-3-4-2) bool_t t_probe_int(INTNO intno)
(6-3-4-3) bool_t i_probe_int(INTNO intno)

intnoŎw肳ꂽݗvCɑ΂āC݂vĂꍇ
trueCłȂꍇfalseԂ֐D

ASPJ[l̃^[Qbgˑł́C̊֐ĂяoĂȂC
^[QbgˑVXeT[rXŌĂяo\߁Cpӂ
ƂƂĂD̂߁C̊֐ǂ̂悤ȃVXeԂŌĂяo
邩́C^[QbgˑňтĂ΂悢D

6.3.5. ݃nh̐擪Ɩ

(6-3-5-1) void i_begin_int(INTNO intno)

intnoŎw肳ꂽݗvCɑ΂銄݃nh̐擪ōsׂ
s֐DōsׂƂẮCݗvCGbWg
Kłꍇ̃gKꂽݗṽNAD

intnoɑ΂ēo^ꂽ݃T[rX[`Ăяo݃nh
擪ŌĂяoD̂߂̊֐́C݃nh̐擪iʏ
CPUbNԁjŌĂяo悤ɎȂ΂ȂȂD

(6-3-5-2) void i_end_int(INTNO intno)

intnoŎw肳ꂽݗvCɑ΂銄݃nh̖ōsׂ
s֐DōsׂƂẮC݃Rg[iIRCj
΂銄ݏ̏IʒmD

intnoɑ΂ēo^ꂽ݃T[rX[`Ăяo݃nh
ŌĂяoD̂߂̊֐́C݃nh̖iʏ
CPUbNԁjŌĂяo悤ɎȂ΂ȂȂD

6.4. ^XNfBXpb`


6.4.1. fBXpb`̓Jn

(6-4-1-1) void start_dispatch(void)

fBXpb`̓Jnistart_dispatchj́CJ[lNɁCJ[l
̏ĂяoDstart_dispatch́C^[邱Ƃ̂
֐łD

start_dispatch́C^XNReLXgŁCNMIׂĂ݂̊}X
NԁiS݃bNԂƓ̏ԁjŌĂяoDstart_dispatch
ŁC^XNReLXgɐ؂芷CCPUbNԁEݗDx}XNS
ԂɂȂ΂ȂȂD

ReLXg؂ւ̓^[Qbgˑ֐dispatcherĂяoD

start_dispatch̏e͎̒ʂD

----------------------------------------
void
start_dispatch(void)
{
	^XNReLXgɐ؂芷
	CPUbNԁEݗDx}XNSԂɂ
	dispatcherɕ򂷂
}
----------------------------------------

6.5. ݃nh

6.5.1. ݃nh̏o

J[lǗ݂̊̏o̕@́CvZbTɂđ傫ق
邪C悻̏e͎̒ʂD

----------------------------------------
void
<݂̏o>(void)
{
	ȂƂJ[lǗ݂̊֎~Ԃɂ c (*f)
	XNb`WX^X^bNɕۑ
	if (^XNReLXgŊݔ) {
		^XNReLXgɐ؂芷
	}

	݂̊Dx݂݂̍̂󂯕t悤ɂāC
												CPUbNԂɂ
#ifdef LOG_INH_ENTER
	log_inh_enter(݃nhԍ);
#endif /* LOG_INH_ENTER */
	݃nhĂяo
#ifdef LOG_INH_LEAVE
	log_inh_leave(݃nhԍ);
#endif /* LOG_INH_LEAVE */

  ret_int:
	if (^XNReLXgŊݔ) {
		iȂƂjJ[lǗ݂̊֎~Ԃɂ c (*d)
		if (reqflg) {
			reqflg = false;
			CPUbNԂɂ c (*e)
			if (dspflg) {
				search_schedtskĂяoCōD揇ʃ^XN߂
				ōD揇ʂ̃^XNIDɂrun_taskɕ򂷂
			}
		}
	}
	ݏ̃^[ɁCCPUbNԂɖ߂悤ɏ
	XNb`WX^X^bN畜A
	ݏ̃^[
}
----------------------------------------

݂̎tɂ肷ׂĂ݂̊֎~ȂvZbTł́C(*f)
āCȂƂJ[lǗ݂̊֎~D̗R͎̒ʂ
D

݂̓ɂāCX^bN^XNReLXgp̃X^bN
؂芷Oɑd݂ƁC^XÑX^bN̈悪gpD
L̂悤ȃvZbTł́CX^bN̐؊OɁCőŊݗDx
ȋd݂邱ƂhƂ͂łCe^XÑX^bN
̈mۂۂɁC̕ŊmۂȂ΂ȂȂDe^XN
X^bN̈Ȃׂ邽߂ɂ́CX^bNȂׂgpȂ
ɁCd݂֎~̂]܂D̂߁CXNb`WX^
X^bNɕۑOɁC݂֎~DC݂̋֎~ɕK
vȍŒ̃WX^ɂẮC݂̋֎~ɐ旧ăX^bNɕۑ
KvD

l̂Ƃ́CJ[lǗO݂̊ɂĂ͂܂DȂ킿CJ[l
ǗO݂̊ɂĂCX^bNȂׂgpȂɋ֎~̂
]܂D̂ƂCJ[lǗO݂̊gpꍇɂ́C(*f)
ɂāCׂĂ݂̊֎~Ԃɂ̂]܂ƂɂȂD
CJ[lǗO̊ݏɂĂC^XNReLXgp̃X^b
Nɐ؂芷邱Ƃ]܂C̓J[l̊ǊOłD

(*d)ɂẮCJ[lǗ݂̊֎~邾ŁCCPUbNԂɂ
Kv͂ȂDႦ΁CCPUbNԂł邱ƂϐpӂĂ
ɂ́C(*d)̎_ł͂̕ϐCPUbNԂlɕύXKv͂
C(*e)ɂĕύX΂悢D

݂̏oAZuŋLqꍇɂ́Cg[XO擾
́Cu6.2 g[XO@\ւ̑Ήv̐߂ŋLq@ŃR[fB
O邱ƁD

6.5.2. ݃nh̏o̐

݃xNgn[hEFAŎĂꍇȂǁC݃nh
opӂǂ^[Qbĝ߂ɁC݃nh
ɏo𐶐@\pӂĂD

ȉ̃}ŃCW̊݊Ǘ@\̏pꍇ̂݁C^[
QbgˑŎgD݊Ǘ@\̏^[Qbgˑ
ŗpӂC̒ł̃}NgȂꍇɂ́C̃}Np
ӂKv͂ȂD

(6-5-2-1) INT_ENTRY(inhno, inthdr)

݃nhԍinhnoC݃nh̊֐inthdrł銄݃n
h̏õx}NDINTHDR_ENTRYpĊ݃n
hɏo𐶐ꍇɂ́Ĉ悤ɒ`D

#define INT_ENTRY(inhno, inthdr)	_kernel_##inthdr##_##inhno

݃nhɏoKvȂꍇɂ́Ĉ悤ɒ`
āC݃nh̊֐̂܂ܕԂD

#define INT_ENTRY(inhno, inthdr)	inthdr

(6-5-2-2) INTHDR_ENTRY(inhno, inhno_num, inthdr)

݃nhԍinhnoC݃nh̊֐inthdrł銄݃n
h̏o𐶐}NDinhno_numɂ́CAZuLqp
ɁC݃nhԍlœnD݃nhɏo
KvȂꍇɂ́Cɒ`D

6.5.3. ݃nh̐ݒ

(6-5-3-1) bool_t VALID_INHNO_DEFINH(INHNO inhno)iIvVj

inhnoCDEF_INHɑ΂銄݃nhԍƂėLȒlłꍇ
trueCłȂꍇfalseԂ}ND

ASPJ[l̃^[Qbgˑł́C̃}N͎gĂȂ߁C^[
QbgˑŎgȂȂCpӂKvȂD

(6-5-3-2) void x_define_inh(INHNO inhno, FP int_entry)

inhnoŎw肳ꂽ݃nh̏o̔Ԓnint_entryɐݒ肷D

̊֐́CW̊݊Ǘ@\̏pꍇ̂݁C^[Qb
gˑĂяoD݊Ǘ@\̏^[Qbgˑ
ŗpӂC̒ł̊֐ĂяoȂꍇɂ́C̊֐pӂ
Kv͂ȂD

̊֐́C^[Qbgˑ̃J[lĂяo邽߁C
J[l̏iNMIׂĂ݂̊}XNĂj
яo悤Ɏ΂悢D

w肳ꂽ݃nhԍDEF_INHɑ΂̂ƂėLȒlłȂ
͕̓ۏ؂KvȂiassertŃG[Ƃ̂]܂jD
́CRtBM[^CpX2̃ev[gt@C̃^[Qbgˑ
Œ`INHNO_DEFINH_VALIDpăG[o邽߂łD

6.5.4. ݗvC̑̐ݒ

(6-5-4-1) bool_t VALID_INTNO_CFGINT(INTNO intno)iIvVj

intnoCCFG_INTɑ΂銄ݔԍƂėLȒlłꍇtrueC
łȂꍇfalseԂ}NDݗvC̑ݒłȂ
intnoɑ΂ẮC̃}NfalseԂ悤ɂD

ASPJ[l̃^[Qbgˑł́C̃}N͎gĂȂ߁C^[
QbgˑŎgȂȂCpӂKvȂD

(6-5-4-2) void x_config_int(INTNO intno, ATR intatr, PRI intpri)

intnoŎw肳ꂽݗvC̊ݑCintatrŎw肳ꂽʂ
ɐݒ肷D܂CݗDxCintpriŎw肳ꂽlɐݒ肷D

̊֐́CW̊݊Ǘ@\̏pꍇ̂݁C^[Qb
gˑĂяoD݊Ǘ@\̏^[Qbgˑ
ŗpӂC̒ł̊֐ĂяoȂꍇɂ́C̊֐pӂ
Kv͂ȂD

̊֐́C^[Qbgˑ̃J[lĂяo邽߁C
J[l̏iNMIׂĂ݂̊}XNĂj
яo悤Ɏ΂悢D

intatrƂĐݒł銄ݑ͎̒ʂD

	TA_ENAINT		0x01	ݗv֎~tONA
	TA_EDGE			0x02	GbWgK

̑ɁC^[Qbg`ŊݑǉĂ悢D^[Qbg`
ǉ邽߂ɁCȉ̑\񂳂ĂD

	TA_POSEDGE				|WeBuGbWgK
	TA_NEGEDGE				lKeBuGbWgK
	TA_BOTHEDGE				GbWgK
	TA_LOWLEVEL				[xgK
	TA_HIGHLEVEL			nCxgK

̑^[Qbg`Œǉꍇɂ́C̑l肵C
`target_kernel.hi܂́CCN[ht@CjɊ
߂D܂CRtBM[^ev[gt@CQƂł悤ɁC
target_def.csvi܂́CCN[ht@CjɊ܂߁CR
tBM[^ev[gt@C̃^[QbgˑŃG[ƂȂ
Ȃ悤ɁCtarget.tfi܂́CCN[ht@Cj
TARGET_INTATRɐݒ肷D

w肳ꂽݔԍCFG_INTɑ΂̂ƂėLȒlłȂꍇC
̊ݗvCɑ΂ĐݒłȂw肵ꍇCݒłȂ
ݗDxw肵ꍇ͕̓ۏ؂KvȂiassertŃG[
̂]܂jD̂悤ȃP[X́CRtBM[^ŃG[
oׂłDRtBM[^ev[gt@C̃^[Qbg
́CpX2̃ev[gt@C̃^[QbgˑŒ`
INTNO_CFGINT_VALIDCTARGET_INTATRCINTPRI_CFGINT_VALIDpăG[
o邪CW̊ݑiTA_ENAINTCTA_EDGEjݒłȂꍇC
ݒłȂ⊄ݗDxݗvCɂĈقȂꍇɂ́C
RtBM[^ev[gt@C̃^[QbgˑŌoȂ
΂ȂȂD

6.5.5. ݊Ǘ@\̏̕ύX

(6-5-5-1) OMIT_INITIALIZE_INTERRUPTiIvVj

݊Ǘ@\̏^[QbgˑŗpӂC^[Qbgˑ
Ɋ܂܂W̊݊Ǘ@\̏pȂꍇɂ́C̃V
{}N`D

̃V{}N`ƁCINHINIBCINTINIBCinitialize_interrupt
̒`CJ[l̃^[Qbgˑ菜D܂C
TNUM_INHNOCtnum_inhnoCinhinib_tableCTNUM_INTNOCtnum_intnoC
intinib_table̒`ƁC݃nh̏o𐶐邽߂̋Lq
iINTHDR_ENTRY}ÑXgjCRtBM[^̃pX2̃ev[
gt@C̃^[Qbgˑɂkernel_cfg.cɐȂȂD
CRtBM[^̃pX2̃ev[gt@C̃^[Qbgˑ
ŁCUSE_INHINIB_TABLEUSE_INTINIB_TABLEݒ肷邱ƂŁC̈ꕔ
kernel_cfg.cɐ邱Ƃ\łD

(6-5-5-2) void initialize_interrupt(void)iIvVj

OMIT_INITIALIZE_INTERRUPT}N`ꍇɂ́C̊֐^[Qbg
ˑŗpӂDOMIT_INITIALIZE_INTERRUPT}N`邱Ƃɂ
菜邻̑̃f[^^CϐC}ŃC̊֐Ŏgpꍇɂ
ݗpӂ΂悢D

6.5.6. ftHg̊݃nh

(6-5-6-1) default_int_handler(void)iIvVj

RtBM[^ɂ芄݃nh̃e[u𐶐ꍇȂǂɂ́C
݃nho^Ȃ݃nhԍɑ΂āCftHg
݃nhƂāCdefault_int_handlero^D

default_int_handleŕCŴ̂^[Qbgˑŗpӂ邪C[U
pӂ̂Œu悤ɁCOMIT_DEFAULT_INT_HANDLER}N
`ꍇɂ́C^[QbgˑŒ`Ȃ悤ɂDȂC[U
pӂꍇ̖̂́C_kernel_default_int_handlerƂȂD

6.5.7. J[lǗO̊

J[lǗO̊݃nh́CJ[l̊ݏooR
Ɏŝ{łD

CׂĂ݂̊œAhXɕ򂷂vZbTł́CJ[l
̊ݏoSoRɃJ[lǗO̊݃nh
s邱ƂłȂ߁CݏôȂׂ^C~OŁC
J[lǗO݂̊ł邩𔻕ʂCe𕪂KvD
̓Iɂ́CJ[lǗO݂̊̏oł́CI[onh
~ƓJnsĂ͂ȂȂD܂Creqflg`FbNC^XN؊
^XNO[`̌ďosKvȂDɁCNMȈo
ł́Cg[XO擾ilog_inh_enterlog_inh_leavej
яoĂ͂ȂȂD

J[lǗO̊݃nhsۂɁCJ[l̊ݏo
̈ꕔoRꍇɂ́CCPUON\ɗ͌炷ƂƂ
ɁCCPUON\ꍇɂ́C̉\^[Qbgˑ
[U[Y}jAɋLڂȂ΂ȂȂD

ɁCJ[lǗO݂̊̐ݒ@ɊւāCuTOPPERSVJ[l
dlv́u2.7.8 J[lǗO݂̊̐ݒ@v̐߂3̕@
̗̂p邩肷D

(a-1)܂(a-2)̗pCJ[lǗOƂ݂ɑ΂āCJ[l
APIɂ銄݃nh̓o^ƊݗvC̑̐ݒT|[g
Ȃꍇɂ́Cɑ@^[Qbgˑ̃[U[Y}jA
ɋLqD

(a-1)܂(a-2)̗păJ[lAPIɂ銄݃nh̓o^⊄
ݗvC̑̐ݒT|[gꍇC(b)̗pꍇɂ́C^[
QbgˑɂĂKvD

J[lǗO݂̊ɑ΂āCDEF_INHɂ銄݃nh̓o^T|[
gɂ́C̐ݒ肪KvɂȂD

ETARGET_INHATRɁCTA_NONKERNELݒ肷D

E(a-1)܂(a-2)̗pꍇɂ́CINHNO_DEFINH_VALIDɁCJ[l
@OƂ݂ɑΉ銄݃nhԍ܂߂D܂C
@VALID_INHNO_DEFINHCJ[lǗOƂ݃nhԍL
@lƔ肷悤ɂD

E(a-1)܂(a-2)̗pꍇɂ́CINHNO_FIX_KERNELɃJ[lǗ
@݃nhԍ̃XgCINHNO_FIX_NONKERNELɃJ[lǗO
@Ƃ݃nhԍ̃Xgݒ肷D

EDEF_INHJ[lǗO݂̊ɑΉł悤ɂDW̊݊
@@\̏pꍇɂ́Cx_define_inhJ[lǗO̊
@݂ɑΉD

EKvȏꍇɂ́CTA_NONKERNELݒ肳ꂽ݃nhJ[l
@ǗOƈ悤ɁCJ[l̊ݏoCDW̊
@݊Ǘ@\̏pꍇCJ[lǗO݂̊ɑ΂
@́CJ[l̊ݏo𐶐CAvP[Vo^
@݃nh𒼐ڌĂяo悤ɁC^[Qbgˑɂݒ肳
@邽߁C^[Qbgˑł͑ΉKvȂD

J[lǗO݂̊ɑ΂āCCFG_INTɂ銄ݗvC̑̐
T|[gɂ́C̐ݒ肪KvɂȂD

E(a-1)܂(a-2)̗pꍇɂ́CINTNO_CFGINT_VALIDɁCJ[l
@OƂ݂ɑΉ銄ݔԍ܂߂D܂CVALID_INTNO_CFGINT
@CJ[lǗOƂݔԍLȒlƔ肷悤ɂD

E(a-1)܂(a-2)̗pꍇɂ́CINTNO_FIX_KERNELɃJ[lǗ
@ݔԍ̃XgCINTNO_FIX_NONKERNELɃJ[lǗOƂ
@ݔԍ̃Xgݒ肷D

EINTPRI_CFGINT_VALIDɁCJ[lǗO݂̊ƂȂDx܂߂D

ECFG_INTJ[lǗO݂̊ɑΉł悤ɂDW̊݊
@@\̏pꍇɂ́Cx_config_intJ[lǗO̊
@݂ɑΉD

chg_ipmɂCiNMIȊÓjJ[lǗO݂̊}XNł悤
ꍇɂ́C̐ݒ肪KvɂȂD

EVALID_INTPRI_CHGIPMCJ[lǗO݂̊ƂȂDxLȒl
@肷悤ɂD

Et_set_ipmCJ[lǗO݂̊ƂȂDx悤ɂD

6.6. CPUOnhCPUÕVXeԂ̎Q

6.6.1. CPUOnh̏o

CPUȌo̕@̓vZbTɂđ傫قȂ邪C悻
e͎̒ʂD

----------------------------------------
void
<CPUȌo>(void)
{
	XNb`WX^X^bNɕۑ
	if (J[lǗOCPUO) {
		if (^XNReLXgCPUO) {
			^XNReLXgɐ؂芷
		}
		VXeԁiReLXg͏jCCPUȌԂɂ
		CPUOnhCCPUȌLĂ̈̐擪Ԓn
									p[^ip_excinfjƂČĂяo
		if (^XNReLXgCPUO) {
			^XNReLXgɐ؂芷
		}
		CPUÕ^[ɁCCPUÕVXeԂ
													߂悤ɏ
	}
	else {
		if (^XNReLXgCPUO) {
			^XNReLXgɐ؂芷
		}
		VXeԁiReLXg͏jCCPUȌԂɂ
			@iCPUO̊ݗDx}XNDx̍
				݂̂󂯕t悤ɂāCCPUbNԂɂj

#ifdef LOG_EXC_ENTER
		log_exc_enter(CPUOnhԍ);
#endif /* LOG_EXC_ENTER */
		CPUOnhCCPUȌLĂ̈̐擪Ԓn
									p[^ip_excinfjƂČĂяo
#ifdef LOG_EXC_LEAVE
		log_exc_leave(CPUOnhԍ);
#endif /* LOG_EXC_LEAVE */

	  ret_exc:
		if (^XNReLXgCPUO) {
			iȂƂjJ[lǗ݂̊֎~Ԃɂ c (*d)
			^XNReLXgɐ؂芷
			if (reqflg) {
				reqflg = false;
				CPUbNԂɂ c (*e)
				if (dspflg) {
					search_schedtskĂяoCōD揇ʃ^XN߂
					ōD揇ʂ̃^XNIDɂrun_taskɕ򂷂
				}
			}
		}
		CPUÕ^[ɁCCPUbNԂɖ߂悤ɏ
	}
	XNb`WX^X^bN畜A
	CPUÕ^[
}
----------------------------------------

CPUOnh́CReLXgɐ؂芷邱ƂẮCCPUO
ƓVXeԂŌĂяoȂ΂ȂȂDႦ΁CCPUOCPU
bNԂŔꍇɂCPUbNԁCCPUbNԂŔ
ꍇɂCPUbNԂŁCCPUOnhĂяoȂ΂ȂȂD
CPUbNԂŔCPUÓCJ[lǗOCPUOƂȂ邽߁CJ[
lǗCPUOnhɂẮCCPUbNԂŌĂяoƂ
ȂD

J[lǗOCPUOł邱Ƃ́Cexc_sense_unlockfalseԂ
ƁC^XNReLXgł邱Ƃ𒲂ׂȂ̈ႢłCقړR[
hŔ肷邱ƂłD

̃R[hł́CJ[lǗOCPUOɑ΂āCg[XO擾
ilog_exc_enterlog_exc_leavejĂяoĂȂCS݃b
NԂNMȈCPUOꍇO΁CĂяoĂ
܂ȂDS݃bNԂNMȈɔCPUȌꍇɂ́C
g[XO擾ĂяoĂ͂ȂȂD

CPUOnhsۂɌoR镔ł́CCPUON\
ɗ͌炷ƂƂɁCCPUON\ꍇiႦ΁CXNb`
WX^X^bNɕۑ鎞ɁCoXG[ȂǂCPUO\
ljɂ́C̉\^[Qbgˑ̃[U[Y}jA
ɋLڂȂ΂ȂȂD

ret_excȍ~̏́C݂̏oret_intȍ~̏Ɠł
߁C^[QbgɂẮCʂ̃[`p邱Ƃł\
D

CPUȌoAZuŋLqꍇɂ́Cg[XO擾
́Cu6.2 g[XO@\ւ̑Ήv̐߂ŋLq@ŃR[fB
O邱ƁD

6.6.2. CPUOnh̏o̐

CPUOxNgn[hEFAŎĂꍇȂǁCCPUOnh
ɏopӂǂ^[Qbĝ߂ɁCCPUOnh
ɏo𐶐@\pӂĂD

ȉ̃}ŃCWCPUOǗ@\̏pꍇ̂݁C^[
QbgˑŎgDCPUOǗ@\̏^[Qbgˑ
ŗpӂC̒ł̃}NgȂꍇɂ́C̃}Np
ӂKv͂ȂD

(6-6-2-1) EXC_ENTRY(excno, exchdr)

CPUOnhԍexcnoCCPUOnh̊֐exchdrłCPU
Onh̏õx}NDEXCHDR_ENTRYpCPUO
nhɏo𐶐ꍇɂ́Ĉ悤ɒ`D

#define EXC_ENTRY(excno, exchdr)	_kernel_##exchdr##_##excno

CPUOnhɏoKvȂꍇɂ́Ĉ悤ɒ`
āCCPUOnh̊֐̂܂ܕԂD

#define EXC_ENTRY(excno, exchdr)	exchdr

(6-6-2-2) EXCHDR_ENTRY(excno, excno_num, exchdr)

CPUOnhԍexcnoCCPUOnh̊֐exchdrłCPU
Onh̏o𐶐}NDexcno_numɂ́CAZuL
qpɁCCPUOnhԍlœnDCPUOnhɏo
KvȂꍇɂ́Cɒ`D

6.6.3. CPUOnh̐ݒ

(6-6-3-1) bool_t VALID_EXCNO_DEFEXC(EXCNO excno)iIvVj

excnoCDEF_EXCɑ΂CPUOnhԍƂėLȒlłꍇ
trueCłȂꍇfalseԂ}ND

ASPJ[l̃^[Qbgˑł́C̃}N͎gĂȂ߁C^[
QbgˑŎgȂȂCpӂKvȂD

(6-6-3-2) void x_define_exc(EXCNO excno, FP exc_entry)

excnoŎw肳ꂽCPUOnh̏o̔Ԓnexc_entryɐݒ肷D

̊֐́CWCPUOǗ@\̏pꍇ̂݁C^[Qb
gˑĂяoDCPUOǗ@\̏^[Qbgˑ
ŗpӂC̒ł̊֐ĂяoȂꍇɂ́C̊֐pӂ
Kv͂ȂD

̊֐́C^[Qbgˑ̃J[lĂяo邽߁C
J[l̏iNMIׂĂ݂̊}XNĂj
яo悤Ɏ΂悢D

w肳ꂽCPUOnhԍDEF_EXCɑ΂̂ƂėLȒlłȂ
ꍇ͕̓ۏ؂KvȂiassertŃG[Ƃ̂]܂jD
́CRtBM[^CpX2̃ev[gt@C̃^[Qbgˑ
Œ`EXCNO_DEFEXC_VALIDpăG[o邽߂łD

6.6.4. CPUOǗ@\̏̕ύX

(6-6-4-1) OMIT_INITIALIZE_EXCEPTIONiIvVj

CPUOǗ@\̏^[QbgˑŗpӂC^[Qbgˑ
Ɋ܂܂W̊݊Ǘ@\̏pȂꍇɂ́C̃V
{}N`D

̃V{}N`ƁCEXCINIBinitialize_exception̒`C
J[l̃^[Qbgˑ菜D܂CTNUM_EXCNOC
tnum_excnoCexcinib_table̒`ƁCCPUOnh̏o𐶐
邽߂̋LqiEXCHDR_ENTRY}ÑXgjCRtBM[^̃p
X2̃ev[gt@C̃^[Qbgˑɂkernel_cfg.cɐ
ȂȂD

(6-6-4-2) void initialize_exception(void)iIvVj

OMIT_INITIALIZE_EXCEPTION}N`ꍇɂ́C̊֐^[Qbg
ˑŗpӂDOMIT_INITIALIZE_EXCEPTION}N`邱Ƃɂ
菜邻̑̃f[^^CϐC}ŃC̊֐Ŏgpꍇɂ
ݗpӂ΂悢D

6.6.5. ftHgCPUOnh

(6-6-5-1) default_exc_handler(void)iIvVj

RtBM[^ɂCPUOnh̃e[u𐶐ꍇȂǂɂ́C
CPUOnho^ȂCPUOnhԍɑ΂āCftHg
CPUOnhƂāCdefault_exc_handlero^D

default_exc_handleŕCŴ̂^[Qbgˑŗpӂ邪C[U
pӂ̂Œu悤ɁCOMIT_DEFAULT_EXC_HANDLER}N
`ꍇɂ́C^[QbgˑŒ`Ȃ悤ɂDȂC[U
pӂꍇ̖̂́C_kernel_default_exc_handlerƂȂD

6.6.6. CPUÕVXeԂ̎Q

(6-6-6-1) bool_t exc_sense_intmask(void *p_excinf)

CPUO̔̃VXeԂCJ[lsłȂC^XNRe
LXgłCS݃bNԂłȂCCPUbNԂłȂCif
́jݗDx}XNSԂł鎞trueCłȂfalse
֐DCPUOJ[lǗO̊ݏŔꍇɂfalse
ԂD

p_excinfɂ́CCPUȌLĂ̈̐擪ԒnnD

(6-6-6-2) bool_t exc_sense_unlock(void *p_excinf)

CPUO̔̃VXeԂCJ[lsłȂC^XNRe
LXgłCS݃bNԂłȂCCPUbNԂłȂtrueC
łȂfalseԂ֐DCPUOJ[lǗO̊ݏŔ
ꍇɂfalseԂD

^[QbgɂẮCS݃bNi܂CPUbNjI[owb
hŎ悤ƂƁCCPUOnh̒ŁCS݃bNԁi܂
CPUbNԁjƊݗDx}XNxɐݒ肵Ԃʂ
ȂꍇD܂CJ[lǗO̊ݏJ[ls
邱Ƃ𐳊mɔf邱ƂDŁC^[Qbg`ŁC
Dx}XNTMIN_INTPRIƓlɐݒ肵ĂԂŔ
CPUOJ[lǗOCPUOƈƂƂCɑ΂
falseԂƂƂĂ悢D

p_excinfɂ́CCPUȌLĂ̈̐擪ԒnnD

6.7. J[l̋NEIƃX^bN̈Ȃ

(6-7-1) X^[gAbvW[

J[l̃X^[gAbvW[́CVXẽZbgɍŏɎs
vOłDX^[gAbvW[́CWIɂ́CvZb
Tˑ܂̓`bvˑŗpӂȉ̏sCɂK
v͂ȂD̓Iɂ́CJɗpӂĂX^[gAbvW[
p@ȉꍇC^[Qbgˑmain֐pӂKvj
CAvP[VŗpӂꍇlD

(a) vZbTԂ̏

vZbT[hCX^bN|C^Ct[|C^CvZbT̏
ԂD܂CNMIׂĂ݂̊}XNԁiS
bNԂƓ̏ԁjƂDDRAMRg[̏ȂǁC
ANZX邽߂ɕKvȏōsĂ悢i
hardware_init_hookōsĂ悢jD

(b) hardware_init_hookĂяo

VXẽZbgシɍsKv̂^[QbgVXeˑ̏
s߂ɁChardware_init_hookĂяoDhardware_init_hookp
ӂĂȂꍇ́CȂDGNUJł́CJXNvg
weak definitionɂChardware_init_hookpӂĂȂꍇ̒l0
Ƃ邱ƂŁCłDweak definition̋@\ȂJ
ł́Chardware_init_hookKĂяoƂɂD

hardware_init_hooḱC^[Qbgˑŗpӂ̂Wł邪CVX
ẽZbgシɍsKv̂鏉ǉ邽߂ɁCAv
P[Vŗpӂ̂pꍇD

ANZXɕKvȏhardware_init_hookōsꍇɂ́C
Ăяo_ŃɃANZX邱ƂłȂ߁C֐iTu[
`jĂяo߂ɃX^bNgpvZbTł́C߂Ԓnėp
WX^ɓČĂяoƂHvKvłD̏ꍇC
hardware_init_hookCŋLq邱Ƃ͂łȂȂ邪CނȂD

(c) bssZNVdataZNV̏

bssZNVNACdataZNVɏlݒ肷D

CJ[l{̂́Ckerflgfalsei0jɏ邱ƈȊOɁC
̃ZNV邱ƂɈˑĂȂ߁CX^[gAb
vW[AvP[VŗpӂꍇŁCVXeT[rXAv
P[ṼZNV邱ƂɈˑĂȂꍇ
ɂ́CVXe̋NԂZk邽߂ɁCkerflgfalseɏ邾
ŏ\łD

(d) software_init_hookĂяo

JiɃCujɈˑĕKvȏs߂ɁC
software_init_hookĂяoDsoftware_init_hookpӂĂȂꍇ
́CȂDGNUJł́CJXNvgweak definition
Csoftware_init_hookpӂĂȂꍇ̒l0Ƃ邱ƂŁC
łDweak definition̋@\ȂJł́C
software_init_hookKĂяoƂɂD

software_init_hooḱC^[Qbgˑŗpӂ̂WłD

(e) sta_ker֕

sta_kerĂяoDsta_keŕCNMIׂĂ݂̊}XN
iS݃bNԂƓ̏ԁjŌĂяoȂ΂ȂȂDsta_ker
̓^[邱ƂȂ߁CX^[gAbvW[ɖ߂Ă邱
Ƃ͍lKvȂD

(6-7-2) void target_initialize(void)

^[Qbgˑ̏s֐Dsta_ker̍ŏŌĂяoDvZb
TE`bvEJˑ̏C̈ˑɐ؂蕪邱
\łD

̊֐́C܂łJ[l̃^[Qbgˑ̏s
̂̂łDAvP[VɕKvȏ́C[`ōs
̂{ł邪CVXẽZbgシɍsKvꍇɂ́C
hardware_init_hookpD

(6-7-3) void call_exit_kernel(void)

^XNReLXgɐ؂芷āCexit_kernel֕򂷂֐Dext_ker
ĂяoDexit_kernel̓^[邱ƂȂ߁C̊֐
߂Ă邱Ƃ͍lKvȂD

^XNReLXgɐ؂芷̂́CI[`C^XNR
eLXgp̃X^bNŎs邽߂łDI[`^XNp
X^bNŎsƁCe^XÑX^bN̈̃TCY肷ۂɁCI
[`gpX^bN̈lȂ΂ȂȂDɂ́C
I[`gpX^bN̈悪傫ꍇɊe^XÑX^bN
̈𖳑ʂɑ傫Ȃ΂ȂȂƂɉāCӐ}ȂX^bNI[
o[t[\߂Ƃ肪D

̊֐́CS݃bNԂŌĂ΂邽߁CS݃bNԂ
яoƂłȂ֐Ă΂Ȃ悤ɎȂ΂ȂȂD

(6-7-4) void target_exit(void)

^[Qbgˑ̏Is֐D̊֐́CJ[lI̍
ɌĂяoC^[Ă͂ȂȂDvZbTE`bvEJ
̏IC̈ˑɐ؂蕪邱Ƃ\łD

̊֐ł́CŏɁCatexitɂēo^ꂽ֐ƃfXgN^Ă
oƂӐ}ĂCWIɂ́Csoftware_term_hookĂяoD
software_term_hookpӂĂȂꍇ́CȂDGNUJł́C
JXNvgweak definitionɂCsoftware_term_hookpӂ
ĂȂꍇ̒l0Ƃ邱ƂŁCłDweak definition̋@
\ȂJł́Csoftware_term_hookKĂяoƂɂD

̊֐́CS݃bNԂŌĂ΂邽߁CS݃bNԂ
яoƂłȂ֐Ă΂Ȃ悤ɎȂ΂ȂȂD

6.8. J[l̃`[jO

6.8.1. rbg}bvT[`

(6-8-1-1) OMIT_BITMAP_SEARCHiIvVj
(6-8-1-2) uint_t bitmap_search(uint16_t bitmap)iIvVj

^[QbgˑŁCuint16_t^̐libitmapj1̃rbg̓C
ʁiEĵ̂T[`C̃rbgԍԂ֐bitmap_searchp
ӂĂDŁCrbgԍ͍ŉʃrbg0ƂCbitmap0w肵
Ă͂ȂȂ̂ƂĂD

rbgT[`߂vZbTł́Cbitmap_searchCrbgT[`
g悤ɏǂꍇD̂悤ȏꍇɂ́C^[
QbgˑŃrbgT[`߂gbitmap_search`C
OMIT_BITMAP_SEARCH}N`D

WCuɃrbgT[`߂pffsꍇCbitmap_search
(ffs(bitmap) - 1)ɒ`Ƃ悢D

(6-8-1-3) uint16_t PRIMAP_BIT(PRI pri)iIvVj

rbgT[`߂̃T[`tȂǂ̗RŁCDxƃrbgƂ̑Ή
ύXꍇɂ́CPRIMAP_BIT}N`D

6.9. J[lɊւ邻̑̒`

6.9.1. ^XNReLXgp̃X^bN̈

(6-9-1-1)  DEFAULT_ISTKSZ

DEF_ICSɂ^XNReLXgp̃X^bN̈悪w肳Ȃꍇ́C
ftHg̃X^bN̈̃TCYD

(6-9-1-2)  DEFAULT_ISTKiIvVj

DEF_ICSɂ^XNReLXgp̃X^bN̈悪w肳Ȃꍇ́C
ftHg̃X^bN̈̐擪ԒnD̃}N`Ȃꍇɂ́C
TCYDEFAULT_ISTKSZ̃X^bN̈悪CzɂmۂD

(6-9-1-3) STK_T *TOPPERS_ISTKPT(STK_T *istk, SIZE istksz)iIvVj

^XNReLXgp̃X^bN|C^̏lێϐiistkptj
pꍇɁC̃V{ɁCX^bN̈̐擪ԒniistkjƃX^b
N̈̃TCYiistkszjCX^bN|C^̏l߂}N
`D

6.9.2. 󃉃x̒`

(6-9-2-1) TOPPERS_EMPTY_LABEL(type, symbol)iIvVj

NG[h߂ɁCf[^^type̔złϐsymbolɒ`^
邽߂̃}ND^`QƂ邱Ƃ͂Ȃ߁Cǂ̂悤Ȓ`
^Ă悢D

ftHgł́CsymbolCvf^typeŃTCY0̔zɒ`ĂD
TCY0̔z񂪃G[ƂȂȂRpCiGCC͂ɊYjp
ꍇɂ́C^[QbgˑŒ`Kv͂ȂD

6.10. g[XO@\Ɋւݒ

ASPJ[l̃\[XR[hɂ́CJ[l̎sg[XO擾邽
̃}NߍłDftHgł́C̃}N͋ɒ`
ăg[XO̎擾͍sȂC̃}NK؂ɒ`邱
Ńg[XO̎擾sƂłD

6.10.1. 擾łg[XO̎ނƃ}N

擾łg[XO̎ނƁC擾邽߂ɒ`}N͎
̒ʂłD

(a) J[l̓JnƏI

̃}N`邱ƂŁCJ[l̓JnƏĨg[XO
擾邱ƂłD

	LOG_KER_ENTER		J[lJn钼Oi̊j
	LOG_KER_LEAVE		J[l̏Iiext_kerjĂ΂ꂽiI
						̎sOj

(b) Pʂ̎sJnƏI

̃}N`邱ƂŁC݃nhiINHjC݃T[rX[`
iISRjCnhiCYCjCA[nhiALMjCCPUOnh
iEXCjC^XNO[`iTEXj̎sJnOƏĨg[X
O擾邱ƂłD

	LOG_<Pʗ>_ENTER	Pʂ̎sJnO
	LOG_<Pʗ>_LEAVE	Pʂ̏I

݃nh́CAvP[Vo^݂̂̂ΏۂƂC
T[rX[`Ăяo߂ɃJ[lɐ̂͑ΏۂƂ
D^XN̎sJnƏÍC̕@Ŏ擾ł邽߁C̕@͗p
ĂȂD

ȂC݃nhCPUOnh̎sJnƏĨg[XO擾
́C^[QbgˑŎKvDڂ́Cu6.2 g[XO
@\ւ̑Ήvu6.6.1 ݃nh̏ovu6.7.1 CPUOnh
̏ov̐߂QƂ邱ƁD

(c) ^XNԂ̕ω

̃}N`邱ƂŁC^XNԂω̃g[XO擾
邱ƂłDCsԂƎs\Ԃ̊Ԃ̑Jڂ́C̕@
Ŏ擾ł邽߁C̃}Nł͎擾łȂD

	LOG_TSKSTAT		^XNԂ̕ω

(d) fBXpb`̎sJnƏI

̃}N`邱ƂŁCfBXpb`sJn鎞ƁCI
̃g[XO擾邱ƂłD

	LOG_DSP_ENTER	fBXpb`̎sJn
	LOG_DSP_LEAVE	fBXpb`̏I

fBXpb`̎sJńC^XNsԂs\ԂɑJڂ
^C~Oł邽߁Cs\Ԃ֑Jڂ^XNTCBւ̃|C^p
[^ƂDtɁCfBXpb`̏ÍC^XNs\Ԃ
sԂɑJڂ^C~Oł邽߁CsԂ֑Jڂ^XNTCB
̃|C^p[^ƂD

ASPJ[lł́Csł^XNȂCJ[lAChԂɂȂ
ɂ́CfBXpb`̒ɗ܂D̂߁CAChԂւ̑JڂƃA
ChԂ瑼̏Ԃւ̑Jڂ́C̃}Nł͎擾łȂD

ȂCfBXpb`̎sJnƏĨg[XO擾́C^[Qbg
ŎKvDڂ́CƁu6.4.2 fBXpb`{́v̐߂
QƂ邱ƁD

(e) T[rXR[̓Əo

̃}N`邱ƂŁCeT[rXR[̓Əõg[XO
擾邱ƂłD

	LOG_<T[rXR[̑啶\L>_ENTER		T[rXR[̓
	LOG_<T[rXR[̑啶\L>_LEAVE		T[rXR[̏o

ꂼ̃}N̖̂p[^̏ڍׂɂẮCJ[l̃\[XR[
hQƂ邱ƁD

6.11. J[l̃^[Qbgˑ̂߂̃l[Lq

J[lɕĎg֐ϐȂǂ̖̂ŁCIuWFNgt@C
̃V{\ɓo^ĊOQƂł閼̂́CCꃌxŁC擪
"_kernel_"܂"_KERNEL_"ł閼̂ƂȂ΂ȂȂCASPJ[l
ł́C\[XR[hRpNgɕۂ邽߂ɁCl[
Lqt@C𓱓ĂD

̓Iɂ́Cl[ׂ̂XgAbvxxx_rename.defpӂC
̃t@Cc[iutils/genrenamejɂĈl[邽
̃}N`܂xxx_rename.hƁC̃}N`邽߂
xxx_unrename.h𐶐Dc[̋N@͎̒ʂłD

	% genrename xxx

xxx_rename.defɂ́Cl[ׂ̂1s1LqDxxxxƂ
̂LqĂꍇCxxx_rename.hɂ͎̂悤ȋLqD

#define xxxx				_kernel_xxxx
#ifdef TOPPERS_LABEL_ASM
#define _xxxx				__kernel_xxxx
#endif /* TOPPERS_LABEL_ASM */

܂Cxxx_unrename.hɂ͎̂悤ȋLqD

#undef xxxx
#ifdef TOPPERS_LABEL_ASM
#undef _xxxx
#endif /* TOPPERS_LABEL_ASM */

xxx_rename.def̒ɂ́C̃l[Lq荞ނ߂ɁCuINCLUDE
"yyy"v܂́uINCLUDE <yyy>vƂLq܂߂邱ƂłD̋Lq
ĂꍇCxxx_rename.hɂ́u#include "yyy_rename.h"v܂
u#include <yyy_rename.h>vƂLqCxxx_unrename.hɂ́u#include
"yyy_unrename.h"v܂́u#include <yyy_unrename.h>vƂLq
D

xxx_rename.def̒"#"Ŏn܂s̓RgƂēǂݔ΂D܂C
sD

J[l̃^[QbgˑŎg閼̂l[邽߂ɁCkernel
fBNgɁCkernel_rename.defƁC琶kernel_rename.h
kernel_unrename.hpӂĂDkernel_rename.defɂ́C
uINCLUDE "target"vƂLq܂܂ĂC^[Qbgˑ̃l[
Lq荞ނ悤ɂȂĂD^[QbgˑŒ`C^[Qbg
ˑŎQƂ閼̂́C^[Qbgˑ̃l[LqɊ܂߂D

^[Qbgˑł́C^[QbgˑŎg閼̂l[邽
ɁCtarget_rename.defƁC琶target_rename.h
target_unrename.hpӂD^[QbgˑvZbTE`bvEJ
ˑ؂蕪ꍇɂ́Ctarget_rename.defINCLUDELqC
vZbTE`bvEJˑ̃l[Lq荞ނ悤ɂD

6.12. ^C}hCo

^C}hCóCJ[lɃ^CeBbNʒm邽߂̃^C}hC
ołD

6.12.1. ^C}hCõt@C\

^C}hCogݍނ߂̐ÓIAPILqVXeRtBM[
Vt@CCtarget_timer.cfgɗpӂD̃t@Cɂ́C^C}
hCo邽߂̏[`̒ǉC^C}hCoI
邽߂̏I[`̒ǉC^C}݂̂߂̊݃nh
`i܂́C݃T[rX[`̒ǉjC^C}݂̂߂̊
ݗvC̑̐ݒ̐ÓIAPIȂǂ܂ނƂɂȂD

^C}hCoĂяo߂ɕKvȒ`܂ރwb_t@CC
target_timer.hɗpӂD܂C^C}hCo̎t@C
target_timer.cɗpӂD

^CeBbN̒ʒmɂs̑́C^XN̋N҂s
̂ł邽߁C^C}݂̊ݗDx́C݂̒ōŒ̗D
xŏ\łDCnhA[nh̎sJnxꂪ
ɂȂꍇɂ́C^C}݂̊ݗDx荂lɐݒ肵D
ŁC^C}݂̊ݗDxύX@C^[Qbgˑ
[U[Y}jAɋLڂׂłD

6.12.2. ^C}̏EIEݏ

(6-12-2-1) void target_timer_initialize(intptr_t exinf)

^C}C^C}݂Iɔ֐D^C}݂
́CTIC_NUMETIC_DENOŎw肳ꂽԂƈviu5.2 ^C
eBbN̒`v̐߂QƁjD

̊֐́Ctarget_timer.cfgɋLqÓIAPIɂC[`
ăJ[lɓo^邱Ƃz肵ĂD

(6-12-2-2) void target_timer_terminate(intptr_t exinf)

^C}̓~C^C}݂𔭐Ȃ悤ɂ֐D

̊֐́Ctarget_timer.cfgɋLqÓIAPIɂCI[`
ƂăJ[lɓo^邱Ƃz肵ĂD

(6-12-2-3) void target_timer_handler(void)
    ܂ void target_timer_isr(intptr_t exinf)

^C}݂ɂN銄ݏvOD݃nhƂ
ꍇɂtarget_timer_handlerC݃T[rX[`ƂĎ
ꍇɂtarget_timer_isr̖̂ƂD^[Qbgˑ
signal_timeĂяoD

target_timer_handleŕCWIɂ͎̂悤ɒ`D

----------------------------------------
void
target_timer_handler(void)
{
	i_begin_int(<^C}݂̊ݔԍ>);
	signal_time();
	i_end_int(<^C}݂̊ݔԍ>);
}
----------------------------------------

̊֐́Ctarget_timer.cfgɋLqÓIAPIɂC݃nh
͊݃T[rX[`ƂăJ[lɓo^邱Ƃz肵ĂD

6.12.3. \]pVXe̎QƂ̂߂̋@\

\]pVXe̎QƋ@\iget_utmjT|[gꍇɂ́C^C
}hCoŁCȉ̃f[^^֐ȂǂpӂD

(6-12-3-1) CLOCK

^C}l̓\̂߂̃f[^^D

(6-12-3-2) CLOCK target_timer_get_current(void)

^C}̌ݒlǂݏoC\ŕԂ֐D^C}ĺCԂ̌o߂
Ƃɑ邱Ƃz肵ĂDn[hEFÃ^C}C^C}l
̂łꍇɂ́C̊֐őlƂȂ悤ɕϊD

(6-12-3-3) bool_t target_timer_probe_int(void)

^C}ݗv`FbN֐D^C}݂vĂꍇ
trueCvĂȂꍇfalseԂD

(6-12-3-4) TO_USEC(clock)

^C}l̓\C1ʕbPʂɕϊ邽߂̃}Ni܂͊֐jD
targettimer_get_currentœǂݏolC^C}ݔ̌oߎ
iP: 1ʕbjɕϊ邽߂ɗpD

VDRtBM[^ݒt@C̃^[Qbgˑ

7.1. ݒt@Cƃ^[Qbgˑ̈ʒut

ASPJ[l̃RtBM[^́Cݒt@C̋Lqɏ]ăt@C
уG[`FbNsDRtBM[^̐ݒt@Cɂ́C
ȉ4D

(a) ÓIAPIe[u

ÓIAPÏꗗƁCeÓIAPĨp[^ɂċLqt@CDÓI
APIgꍇȊO͕ύXKvȂ߁C^[Qbgˑŗp
Ăikernel/kernel_api.csvjD

(b) l擾V{e[u

RtBM[^̃pX1ɂāCp[^vZpCt@Cɏo
Cl߂V{iʂɂ͎jLq邽߂̃t@CD^[Qb
gˑł́C^[QbgɈˑɕKvƂȂV{Lqt@
CpӂĂikernel/kernel_def.csvjD

^[QbgɈˑĕKvƂȂV{ꍇɂ́CtargetfBNg
ɒuꂽtarget_def.csvɋLqDtarget_def.csvɋLqĒl
߂邱ƂłV{́Ckernel/kernel_int.hтCN[
ht@CŒ`ĂȂ΂ȂȂDkernel_int.h́C
target_stddef.hCtarget_kernel.hCtarget_config.hiԐړIɁjCN[
hĂ邽߁C̃t@CтCN[ht@C
Œ`^[Qbgˑ̃V{́Ctarget_def.csvɋLq邱
ƂłD

Œl߂V{̒ĺCRtBM[^̃pX2уpX3
ev[gt@CŎQƂ邱ƂłD

(c) pX2̃ev[gt@C

RtBM[^̃pX2́Cev[gt@Cɏ]āCJ[l̍\
Et@Cikernel_cfg.cjC\Ewb_t@C
ikernel_cfg.hjȂǂ𐶐D̃ev[gt@ĆC^[Qbg
ˑƃ^[Qbgˑɐ؂蕪Ă邪C̃t@C̃^[Qbg
ˑƂ͋tɁC^[Qbgˑ^[QbgˑCN[h
`ɂȂĂD

̓Iɂ́CtargetfBNgɒuꂽtarget.tfŁCKvȕϐ`
Cev[gt@C̃^[Qbgˑikernel/kernel.tfjC
N[hDkernel.tfł́CJ[l̃^[QbgˑŎgp
`𐶐Dkernel.tfCN[hCtarget.tfł́CJ[
l̃^[QbgˑŎgpϐ`𐶐Dtarget.tfCv
ZbTˑC`bvˑCJˑ؂蕪Ă悢D

(d) pX3̃ev[gt@C

RtBM[^̃pX3́Cev[gt@Cɏ]āCÓIAPÏ
ʒ萔p[^̃`FbNsD̃ev[gt@CC^[Qb
gˑƃ^[Qbgˑɐ؂蕪ĂC^[Qbgˑ^[
QbgˑCN[h`ɂȂĂD

̓Iɂ́CtargetfBNgɒuꂽtarget_check.tfŁCKvȕϐ
`Cev[gt@C̃^[Qbgˑ
ikernel/kernel_check.tfjCN[hDkernel_check.tfł́CJ[
l̃^[QbgˑŏubNɏo͂ʒ萔p[^
̃`FbNsDkernel_check.tfCN[hCtarget_check.tf
ł́C^[QbgɈˑ`FbNsDtarget_check.tfCvZb
TˑC`bvˑCJˑ؂蕪Ă悢D

ȂCRtBM[^̏ڍ׎dlƐݒt@C̋Lq@ɂẮC
ʓrPDFt@Č`ŔzzĂuTOPPERSVJ[lpRtBM
[^dlvсuTOPPERSVJ[lpRtBM[^}N
vZbTdlvQƂ邱ƁD

7.2. pX2̃ev[gt@C̃^[Qbgˑ

ȉł́CpX2̃ev[gt@C̃^[QbgˑLqŕK
vȎɂĐD

7.2.1. ^[QbgˑCN[hOɒ`ׂϐ

target.tfkernel.tfCN[hOɁC̕ϐ`Ă
΂ȂȂD

(7-2-2) INTNO_ATTISR_VALID		ATT_ISRŎgpł銄ݔԍ
(7-2-3) INHNO_ATTISR_VALID		INTNO_ATTISR_VALIDɑΉ銄nhԍ
(7-2-4) INHNO_DEFINH_VALID		DEF_INTŎgpł銄݃nhԍ
(7-2-5) EXCNO_DEFEXC_VALID		DEF_EXCŎgpłCPUOnhԍ
(7-2-6) INTNO_CFGINT_VALID		CFG_INTŎgpł銄ݔԍ
(7-2-7) INTPRI_CFGINT_VALID		CFG_INTŎgpł銄ݗDx

APIŎgpł銄ݔԍ^݃nhԍ^CPUOnhԍ^
ݗDx̃XgCeϐɒ`DINHNO_ATTISR_VALIDɂ́C
INTNO_ATTISR_VALIDɃXgAbvݔԍɑΉ銄݃nh
ԍ̃Xg`D

(7-2-8) TARGET_TSKATRiIvVj		^[Qbg`̃^XN
(7-2-9) TARGET_ISRATRiIvVj		^[Qbg`ISR
(7-2-10) TARGET_INHATRiIvVj		^[Qbg`̊݃nh
(7-2-10) TARGET_INTATRiIvVj	^[Qbg`̊ݑ
(7-2-11) TARGET_EXCATRiIvVj	^[Qbg`CPUOnh

eIuWFNg̑C^[Qbg`ɊgꍇɁCYIuWF
NgϐɁCgɎgprbg̘_a`Dɂ
CgɎgprbgݒ肳ĂꍇɁCG[ɂȂ̂hD

(7-2-12) INTNO_FIX_KERNELiIvVj		J[lǗɌŒ肳Ă
											ݔԍ
(7-2-13) INHNO_FIX_KERNELiIvVj		J[lǗɌŒ肳Ă
		 									݃nhԍ
(7-2-14) INHNO_FIX_NONKERNELiIvVj	J[lǗOɌŒ肳Ă
											ݔԍ
(7-2-15) INHNO_FIX_NONKERNELiIvVj	J[lǗOɌŒ肳Ă
		 									݃nhԍ

J[lǗ܂̓J[lǗOɌŒ肳Ă銄݂ꍇɂ́C
̊ݔԍƊ݃nhԍ̃XgCeϐɒ`D

(7-2-16) USE_INHINIB_TABLEiIvVj

OMIT_INITIALIZE_INTERRUPT`C݃nh̏ɕKvȏ
kernel_cfg.cɐꍇɂ́C̕ϐ1ɐݒ肷D̓Iɂ́C
TNUM_INHNOCtnum_inhnoCinhinib_table̒`ƁC݃nh̏o
𐶐邽߂̋LqiINTHDR_ENTRY}ÑXgjC^[Qbg
ˑɂĐD

(7-2-17) USE_INTINIB_TABLEiIvVj

OMIT_INITIALIZE_INTERRUPT`CݗvC̏ɕKv
kernel_cfg.cɐꍇɂ́C̕ϐ1ɐݒ肷D̓I
́CTNUM_INTNOCtnum_intnoCintinib_table̒`C^[Qbgˑ
ĐD

(7-2-18) TARGET_MIN_STKSZiIvVj

^[Qbg`ŁC^XÑX^bNTCY̍ŏlݒ肷ꍇɂ́C
̕ϐX^bNTCY̍ŏlɒ`D

(7-2-19) CHECK_STKSZ_ALIGNiIvVj

X^bN̈̃TCYl̔{łȂ΂ȂȂꍇɁC̕ϐ
̒lɒ`D̕ϐ`邱ƂŁCkernel.tfɂāCX^bN
̈̃TCYȂi̕ϐɒ`l̔{łȂjꍇ̃G[
`FbN悤ɂȂD`FbNKvȂꍇɂ́C̕ϐ`
ȂD

7.2.2. ^[QbgˑŒ`ϐ

kernel.tf̒ł͎̕ϐ`邽߁Ckernel.tfCN[h
Ctarget.tf̒łQƂ邱ƂłD

(7-2-12) INTNO[inhno]		inhnoΉintnoɕϊ邽߂̘Azz
(7-2-13) INHNO[intno]		intnoΉinhnoɕϊ邽߂̘Azz

7.3. pX3̃ev[gt@C̃^[Qbgˑ

ȉł́CpX3̃ev[gt@C̃^[QbgˑLqŕK
vȎɂĐD

target_check.tfkernel_check.tfCN[hOɁCKvɉāC
̕ϐ`ĂȂ΂ȂȂD

(7-3-1) CHECK_FUNC_ALIGNiIvVj@֐̃ACP
(7-3-2) CHECK_FUNC_NONNULLiIvVj֐̔NULL`FbN
(7-3-3) CHECK_STACK_ALIGNiIvVj	X^bN̈̃ACP
(7-3-4) CHECK_STACK_NONNULLiIvVjX^bN̈̔NULL`FbN
(7-3-5) CHECK_MPF_ALIGNiIvVj	Œ蒷v[̈̃ACP
(7-3-6) CHECK_MPF_NONNULLiIvVj	Œ蒷v[̈̔NULL`FbN

֐^X^bN̈^Œ蒷v[̈̐擪ԒñACg
`FbNsꍇɂ́CꂼCCHECK_FUNC_ALIGN^CHECK_STACK_ALIGN^
CHECK_MPF_ALIGNACPʂɒ`D֐^X^bN̈^Œ蒷
v[̈̐擪ԒnNULLłȂ̃`FbNsꍇɂ́Cꂼ
CHECK_FUNC_NONNULL^CHECK_STACK_NONNULL^CHECK_MPF_NONNULL1ɒ`D
`FbNKvȂꍇɂ́CYϐ`ȂD

7.4. cfg1_out.c̃NɕKvȃX^u̒`t@C

RtBM[^Ɋւă^[QbgˑɗpӂKvt@C
āCݒt@CȊOɁCcfg1_out.cN邽߂ɕKvȃX^u̒
`t@CD

RtBM[^̃pX1ł́CÓIAPI̐萔p[^̒lCR
pCpċ߂邽߂ɁCcfg1_out.c𐶐DRpCC
NăIuWFNgt@C𐶐ۂɁCX^[gAbvW[
QƂV{̒`^KvD

̒`^邽߂ɁCcfg1_out.cC^[Qbgˑ
target_cfg1_out.hCN[hĂDtarget_cfg1_out.hi܂́C
CN[ht@Cjɂ́CX^[gAbvW[Q
ƂV{̃X^u̒`܂߂DT^Iɂ́Cȉ̂悤Ȓ`
܂߂KvD

----------------------------------------
void sta_ker(void)
{
}

void hardware_init_hook(void)
{
}

void software_init_hook(void)
{
}

const SIZE		_kernel_istksz = 0;

STK_T *const	_kernel_istk = NULL;
----------------------------------------


WDVXeT[rX̃^[Qbgˑ

8.1. VXeT[rX̃^[Qbgˑ

VA|[gVXeO^XN֘A̒萔ȂǁCVXeT[rX
\肷邽߂̒`target_syssvc.h܂͂CN[h
t@CivZbTE`bvEJˑŗpӂwb_t@C
ȂǁjɊ܂߂D

ȂCTOPPERSg݃R|[lgVXeƁC̃t@C
e̓R|[lgLqt@CɋLq邱ƂɂȂC̃t@C
Ȃi܂́C啝ɏkj݂łD

8.2. VAC^tF[XhCõ^[Qbgˑ

^[QbgˑŒ񋟂ׂVAC^tF[XhCô߂̒`
͎̒ʂłD̒`́CʂɎw肪ȂCtarget_serial.h
͂CN[ht@CɊ܂߁CKvȃRtBM[V
target_serial.cfgɋLqD֐̎̂Kvȏꍇɂ́C
target_serial.c̃t@CpӂD

VAC^tF[XhCo̒ŁC^[Qbg̃VAI/OfoCX
ˑ镔CVAI/OfoCXhCoƌĂԁDVAI/OfoCX
hCóC悻CITRONfoCXhCo݌vKChCPDICɑ
DPDICɑt@CŁC̃VXeɂʂɎg\
ꍇɂ́CpdicfBNgɒuD

8.2.1. ϐCf[^^CǗ֐

(8-2-1-1) TNUM_PORT

VAC^tF[XhCoT|[gVA|[g`
}ND̃}N̒`́Ctarget_syssvc.h܂͂CN[h
t@CɊ܂߂D

(8-2-1-2) void sio_initialize(intptr_t exinf)iIvVj

VAI/OfoCXhCȍDtarget_serial.cfgɁC̊֐
[`Ƃēo^ÓIAPI܂߂D

(8-2-1-3) void sio_terminate(intptr_t exinf)iIvVj

VAI/OfoCXhCȍIDtarget_serial.cfgɁC̊֐
I[`Ƃēo^ÓIAPI܂߂D

(8-2-1-4) void sio_isr(intptr_t exinf)

VAI/OfoCX̊݃T[rX[`Dtarget_serial.cfgɁC
֐݃T[rX[`Ƃēo^ÓIAPI܂߂D܂C̐
IAPIɕKvȃVAI/OfoCX̊ݔԍȂǂ́Ctarget_serial.hŃ}
N`D݃T[rX[`ł͂ȂC݃nhƂ邱
łD

(8-2-1-5) SIOPCB

VAI/O|[gǗubÑf[^^itarget_serial.hɂ́Cf[^^
̐錾܂܂Ă΂悢jD

(8-2-1-6) SIO_RDY_SNDSIO_RDY_RCV

M\R[obN̎ʔԍSIO_RDY_SNDɁCMʒmR[obN̎
ʔԍSIO_RDY_RCVɃ}N`DR[obN̋֎~^sȂT[
rXR[isio_ena_cbrsio_dis_cbrjŗpD

8.2.2. foCXT[rX[`

ȉ̃foCXT[r[`́CiȂƂjVAI/O|[g
݂}XNꂽԂŌĂяoD܂C^XNReLXgC^
XNReLXĝŌĂяoꍇiŌĂяo
삷悤ɂȂ΂ȂȂjD

(8-2-2-1) SIOPCB *sio_opn_por(ID siopid, intptr_t exinf)

siopidŎw肳VAI/O|[gI[v֐Dexinf̓VA
I/O|[gɑ΂gŁCR[obNĂԎɃ|[gʂ邽
߂ɓnD

(8-2-2-2) void sio_cls_por(SIOPCB *siopcb)

siopcbŎw肳VAI/O|[gN[Y֐D

(8-2-2-3) bool_t sio_snd_chr(SIOPCB *siopcb, char_t c)

siopcbŎw肳VAI/O|[gɁCcŎ镶𑗐M֐D
𑗐MWX^ɓꂽꍇɂtrueCOɑM̑MI
ĂȂ߂ɁC𑗐MWX^ɓȂꍇɂfalseԂD

(8-2-2-4) int_t sio_rcv_chr(SIOPCB *siopcb)

siopcbŎw肳VAI/O|[g當ǂފ֐DMĂ
ꍇCǂ񂾕̃R[h͐̒lƂĕԂCMĂȂꍇ
ɂ-1ԂD

(8-2-2-5) void sio_ena_cbr(SIOPCB *siopcb, uint_t cbrtn)

siopcbŎw肳VAI/O|[ǵCcbrtnŎw肳R[ob
NDcbrtnɂ́CSIO_RDY_SNDSIO_RDY_RCVwłD

(8-2-2-6) void sio_dis_cbr(SIOPCB *siopcb, uint_t cbrtn)

siopcbŎw肳VAI/O|[ǵCcbrtnŎw肳R[ob
N֎~Dcbrtnɂ́CSIO_RDY_SNDSIO_RDY_RCVwłD

8.2.3. R[obN[`

^[Qbgˑ́CKvȃ^C~OŁCVAC^tF[XhCo
̃^[QbgˑɊ܂܂ȉ̃R[obN[`Ăяoт
Ȃ΂ȂȂDCꂼ̃R[obN֎~Ă鎞́C
R[obN[`ĂяoĂ͂ȂȂD

R[obN[`́CiȂƂjVAI/O|[g݂̊
~ꂽԂŁC^XNReLXgŌĂяoDexinfɂ́CVAI/O
|[g̃I[vɎw肳ꂽgnD

(8-2-3-1) void sio_irdy_snd(intptr_t exinf)

M\R[obN[`DVAI/O|[gɑ΂ĕMł
ԂɂȂꍇɌĂяoDVAC^tF[XhCóC̃R[
obN[`̒ŁCsio_snd_chrĂяoĎ̕𑗐M邩C
MׂȂꍇɂ͑M\R[obN֎~D

(8-2-3-2) void sio_irdy_rcv(intptr_t exinf)

MʒmR[obN[`DVAI/O|[g當Mꍇ
ĂяoDVAC^tF[XhCóC̃R[obN[`
ŁCKsio_rcv_chrĂяoĎMoD

8.3. J[lNbZ[W̏o͂̃^[Qbgˑ`

^[QbgˑŒ񋟂ׂJ[lNbZ[W̏o͂̂߂̒`
̒ʂłD

(8-3-1) TARGET_NAME

^[Qbĝ̖ɒ`D

(8-3-2) TARGET_COPYRIGHTiIvVj

J[lNbZ[WɁC^[Qbgˑ̒쌠\ǉ邽߂
}NDftHgł́C^[Qbgˑ̒쌠\ǉȂD

8.4. TvvOƃeXgvÕ^[Qbgˑ`

^[QbgˑŒ񋟂ׂTvvOуeXgvO
߂̒`͎̒ʂłD̒`́Ctarget_test.hi܂͂
CN[ht@CjɊ܂߂D

(8-4-1) STACK_SIZEiIvVj

TvvOуeXgvÕ^XÑX^bNTCY`
}ND`Ȃꍇ̃ftHgl4096DftHgݒł̓
sꍇCV~[VȂǂő傫X^bN̈悪Kv
ȏꍇɂ́C^[Qbgˑł̃}Nݒ肷X^bNTCYɒ`
D

(8-4-2) CPUEXC1iIvVj

TvvOуeXgvOŗpCPUOCPUOnh
ԍ`}ND̃}N`ȂꍇCCPUOnhg
TvvO珜ODCPUOnh̃eXg
eXgvO̓RpCłȂD

(8-4-3) RAISE_CPU_EXCEPTIONiIvVj

CPUEXC1ɒ`CPUO𔭐C̃vO`}ND
CPUEXC1`ꍇɂ͕K`Ȃ΂ȂȂD

(8-4-4) CANNOT_RETURN_CPUEXCiIvVj

^[QbgVXe̐ɂCCPUOnh烊^[ɁC^
XN̎spłȂꍇɒ`}ND̃}N`ƁC
CPUOnh̃eXgeXgvOCCPUOnh
^[̏ODTvvO̊Y͐
삵ȂD

(8-4-5) TASK_PORTIDiIvVj

TvvOɂāCR}hǂݍރVA|[gԍ
`}ND`Ȃꍇ̃ftHgl1D

(8-4-6) LOOP_REFiIvVj

TvvOɂāCvZbT̑xv邽߂̃[v
`}ND`Ȃꍇ̃ftHgl1000000DftHgݒ
ł́Cl傫߂ČvɎԂ肷ꍇCl߂Čv
ʂ肵ȂꍇɁC^[Qbgˑł̃}Nݒ肷郋[v
ɒ`D

(8-4-7) MEASURE_TWICEiIvVj

TvvOɂāCvZbT̑x2xvꍇɒ`
}NDV~[VȂǃvZbT̑xϓŁC1x
vł͌vʂ肵Ȃꍇɒ`D

(8-4-8) TASK_LOOPiIvVj

TvvOɂāCvZbT̑xvɁC^XNł
[v񐔂Œ肷ꍇɁC[v񐔂`}ND[vŜ̎
sԂ0.4bxɂȂ悤ȃ[v񐔂C̃}Nɒ`D

XD̑

9.1. hLg

^[Qbgˑ̃[U[Y}jACtarget_user.txtɗpӂDv
ZbTE`bvEJˑ̃[U[Y}jA؂蕪Ă
Ct@C傫Ȃꍇɂ͕̃t@CɕĂ悢C
ꍇɂ́Ctarget_user.txtɂ̃t@CLq邱ƁD

^[Qbgˑ̃[U[Y}jAɂ́CȂƂ̂悤ȓe
Lq邱Ƃ]܂D

(1) ΉĂ^[QbgVXe̎ށE\Co[Wԍ
	E^[Qbgn[hEFAi{[hĵ̖ƑΉĂ\
	E^[Qbg
	E^[Qbgˑ̃o[Wԍ
	EvZbTC`bvCJˑ̍\ƃo[Wԍ
	EgpPDICƃo[Wԍ

(2) gpJƓ쌟؂io[WCIvVj
	EꏈniRpCCAZuCJj
	EfobO

(3) ^[Qbg`̋K

(3-1) f[^^ɊւK
	Eint_t^Clong_t^̃TCY
	Echar_t^Cint_least8_t^Cvoid *^Cintptr_t^̃TCY
	Eint8_t^Cuint8_t^Cint64_t^Cuint64_t^Cint128_t^C
	@uint128_t^Cfloat32_t^Cdouble64_t^̃T|[g̗L

(3-2) ݏɊւK
	E݃nhԍƊݔԍ̊āC҂̑Ή
	EݗDx̒iKiTMIN_INTPRI̒lj
	Edis_intena_int̃T|[g̗LC̐
	ECFG_INT̐Ɗgi^[Qbg`Ŏgpł銄ݑj
	ETOPPERSWݏf̂̑̈E

(3-3) J[lǗO݂̊ɊւK
	ETMIN_INTPRI͌Œ肩ݒł邩C̐ݒ@
	ENMIȊOɃJ[lǗO݂݂̊邩i݂悤ɂ邩j
	EJ[lǗO݂̊̐ݒ@
	EJ[lǗO݂̊ɑ΂DEF_INHCCFG_INTT|[g邩
	EJ[lǗO̊݃nhsJn鎞̃VXeԂ
	@ReLXg
	E݃nh̏Iɍs鏈
	EJ[lǗO̊݃nh̋Lq@
	EJ[l̊ݏoŋN\̂CPUO

(3-4) CPUOɊւK
	ECPUOnhԍ̊
	EݗDx}XNTMIN_INTPRIƓlɐݒ肵
	@ԂŔCPUOCJ[lǗOCPUOƈ
	EJ[lCPUOoŋN\̂CPUO

(3-5) \]pVXe̎QƂɊւK
	Eget_utm̃T|[g̗LC̐

(3-6) ̑
	Ȇ̐
	Ȇ̊g@\

(4) J[l̋N^IɊւ
	EpӂĂX^[gAbvW[̏e
	EX^[gAbvW[hardware_init_hookĂяoĂ
	@ɂ́Chardware_init_hookAvP[Vŗpӂꍇ̍쐬
	@@␧Ȃ
	EJ[lI̐U

(5) }bv
	EftHg̃}bvC̕ύX@

(6) ^C}hCo֘Ȁ
	E^CeBbN̎C̕ύX@
	Egp郊\[Xi^C}j
	E^C}݂̊ݗDx̕ύX@
	EI[o^C}݂̊ݗDx̕ύX@

(7) VAC^tF[XhCȍ
	Egp郊\[XiSIORg[j
	EʐMp[^i{[[gCrbgCpeB̗LCXgbvrbgj

(8) VXe\z菇

(9) ^[QbgVXeŗL̒ӎ
	E^XNReLXgɊ܂܂郌WX^C܂܂ȂWX^

(10) ގ̃^[QbgɃ|[eBOJҌ̎Ql

(11) fBNg\Et@C\

(12) o[W

܂CKvɉāC^[Qbgˑ̐݌vCtarget_design.txtɗp
ӂDvZbTE`bvEJˑɊւ݌v؂蕪
悢Ct@C傫Ȃꍇɂ͕̃t@CɕĂ悢C
̏ꍇɂ́Ctarget_design.txtɂ̃t@CLq邱ƁD

9.2. pbP[WLqt@C

[XpbP[WiʃpbP[WъȈՃpbP[Wj쐬邽
ɁCpbP[WɊ܂߂t@CLqpbP[WLqt@Cpӂ
DpbP[WLqt@Ĉ̖́CʃpbP[WpMANIFESTCȈՃpb
P[WpE_PACKAGEƂD

Ⴆ΁Carch/arm_gccfBNgɒuꂽMANIFESTt@CpČ
pbP[W쐬ꍇɂ́C̃R}hsD

	% utils/makerelease arch/arm_gcc/MANIFEST

̃R}hɂCRELEASE/asp_arch_arm_gcc-<o[Wԍ>.tar.gz
쐬D܂Ctarget/at91skyeye_gccfBNgɒuꂽE_PACKAGE
t@CpĊȈՃpbP[W쐬ꍇɂ́C̃R}hs
D

	% utils/makerelease target/at91skyeye_gcc/E_PACKAGE

̃R}hɂCRELEASE/asp_at91skyeye_gcc-<o[Wԍ>.tar.gz
쐬iRELEASEfBNgȂꍇɂ́CfBNg
jD

ȂCmakerelease[eBeB́CASPJ[l̃\[Xt@Cu
fBNgCaspƂ̂ł邱Ƃ肵ĂiقȂ閼̂̏
łpbP[W͍쐬ł邪CpbP[WWJɓWJfB
NgaspłȂȂjD܂CWtarR}hGNU tarł邱
imɂ́CzIvVɑΉĂ邱Ɓjz肵ĂD

pbP[WLqt@Cɂ́CpbP[WɊ܂߂t@CCpbP[W
Lqt@CuꂽfBNg̑΃pXŁC1s1Lq
D܂CKvɉāCȉ̃fBNeBu܂߂D

(a) E_PACKAGE <ȈՃpbP[W>

ȈՃpbP[Ww肷DȈՃpbP[WLqt@CiE_PACKAGEj̐
ɋLqDȈՃpbP[ẂCasp_<^[Qbg>ƂDႦ΁C
^[Qbĝat91skyeye_gcc̏ꍇɂ́Casp_at91skyeye_gccƂȂD
ʃpbP[WƋʂ邽߂ɁCȈՃpbP[W̃t@Cɂ"target"
܂߂ȂD

(b) PACKAGE <ʃpbP[W>

ʃpbP[Ww肷DʃpbP[WLqt@CiMANIFESTj̐
ɋLqD܂CCN[het@C̐擪ɂLq
CCN[hĂʃpbP[Ww肷D^[Qbg
̌ʃpbP[ẂCʃpbP[WLqt@CuꂽfBN
g̑΃pX"/""_"ɒuC"asp_"̌ɂȂ
̂ƂDႦ΁CʃpbP[WLqt@Carch/arm_gcc/MANIFEST̏
ɂ́Casp_arch_arm_gccƂȂD

(c) VERSION <o[Wԍ>

pbP[W̃o[Wԍw肷DȈՃpbP[WLqt@C
ʃpbP[WLqt@C̒ɋLqDȈՃpbP[WɂāCo[
WԍpbP[WtƂꍇɂ́CpbP[Wԍ̑
%dateƋLqD

o[Wԍ̕t^@ɂẮCuTOPPERS/ASPJ[l [U[Y}
jAv́u2.2 ȈՃpbP[Wvсu2.3 ʃpbP[Wv̐߂Q
Ƃ邱ƁD

(d) INCLUDE <t@C>

ʂ̃pbP[WLqt@CCN[hDȈՃpbP[WLqt@C
́CʃpbP[WLqt@Ĉ݂CN[ĥƂ
DʃpbP[WLqt@CCN[ht@CŎw肳
ʃpbP[ẂCׂĈvĂȂ΂ȂȂD


PODt@X

10.1. ^[Qbgˑ̃t@Cꗗ

WIȃ^[Qbgˑ̃t@C\͎̒ʂłD

Makefile.target		Makefilẽ^[QbgˑiQ́jD

target_stddef.h		TOPPERSʒ`it_stddef.hj̃^[QbgˑiR
					́jDAvP[VƃJ[l̗CN[
					hD
target_sil.h		VXeC^tF[XCisil.hj̃^[Qbg
					iŚjDAvP[VƃJ[l̗
					CN[hD
target_kernel.h		J[lAPIikernel.hj̃^[QbgˑiT́jD
					AvP[VƃJ[l̗CN[h
					D

target_config.h		J[l̃^[Qbgˑ̃wb_t@CiU
					́jDJ[l݂̂CN[hD
target_config.c		J[l̃^[QbgˑCŋLq
					iÚCIvVjD
target_support.S	J[l̃^[Qbgˑ̃AZuŋL
					q镔iÚCIvVjD
target_rename.def	J[l̃^[Qbgˑ̂߂̃l[Lq
					i6.12߁jD
target_rename.h		target_rename.def琶t@Ci6.12߁jD
target_unrename.h	target_rename.def琶t@Ci6.12߁jD
target_timer.cfg	^C}hCõVXeRtBM[Vt@
					Ci6.13߁jD
target_timer.h		^C}hCõwb_t@Ci6.13߁jDJ[l
					݂̂CN[hD
target_timer.c		^C}hCo̎t@Ci6.13߁CIvVjD
VXe.h		^[Qbg̃n[hEFAi݃nhԍ
					CPUOnhԍCfoCXWX^̔ԒnȂǁj
					`܂ރwb_t@CDAvP[VƃJ[l
					̗CN[hiÚCIvVjD

target_def.csv		RtBM[^̒l擾V{e[ũ^[Qb
					gˑiV́CIvVjD
target.tf			RtBM[^̃pX2̃ev[gt@C
					^[Qbgˑi7.2߁jD
target_check.tf		RtBM[^̃pX3̃ev[gt@Ci7.3
					߁jD
target_cfg1_out.h	cfg1_out.c̃NɕKvȃX^u̒`t@Ci7.4
					߁jD

target_syssvc.h		VXeT[rX̃^[Qbgˑ`i8.0߁jD
target_serial.cfg	VAhCõVXeRtBM[Vt@
					Ci8.3߁jD
target_serial.h		VAhCõwb_t@Ci8.3߁jDVA
					hCô݂CN[hD
target_serial.c		VAhCo̎t@Ci8.3߁CIvVjD
target_test.h		eXgvÕ^[Qbgˑ`i8.4߁jD

target_user.txt		[U[Y}jAi9.1߁j
target_design.txt	݌vi9.1߁CIvVj
MANIFEST			ʃpbP[WɊ܂߂t@C̃Xgi9.2߁CIv
					Vj
E_PACKAGE			ȈՃpbP[WɊ܂߂t@C̃Xgi9.2߁CIv
					Vj

ȏ
