
		TOPPERS/ASPͥ
		åȰ¸ ݡƥ󥰥

		бС: Release 1.3.2
		ǽ: 2008ǯ83

ΥɥȤϡTOPPERS/ASP̤ͥݡȤΥåȥ
˥ݡƥ󥰤뤿ɬפʻΤǤ롥

----------------------------------------------------------------------
 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
 
 嵭Ԥϡʲ(1)(4)ξ˸¤ꡤܥեȥ
 ܥեȥѤΤޤࡥʲƱˤѡʣ
 ѡۡʰʲѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
 (1) ܥեȥ򥽡ɤηѤˤϡ嵭
     ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
     ˴ޤޤƤ뤳ȡ
 (2) ܥեȥ򡤥饤֥ʤɡ¾Υեȥȯ˻
     ѤǤǺۤˤϡۤȼɥȡ
     ԥޥ˥奢ʤɡˤˡ嵭ɽѾ浪Ӳ
     ̵ݾڵǺܤ뤳ȡ
 (3) ܥեȥ򡤵Ȥ߹ʤɡ¾Υեȥȯ˻
     ѤǤʤǺۤˤϡΤ줫ξ
     ȡ
   (a) ۤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
       ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
   (b) ۤη֤̤ˡˤäơTOPPERSץȤ
       𤹤뤳ȡ
 (4) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
     ⡤嵭ԤTOPPERSץȤդ뤳ȡ
     ޤܥեȥΥ桼ޤϥɥ桼Τʤ
     ͳ˴Ťᤫ⡤嵭ԤTOPPERSץȤ
     դ뤳ȡ
 
 ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥ
 TOPPERSץȤϡܥեȥ˴ؤơλŪ
 ФŬޤơʤݾڤԤʤޤܥեȥ
 ѤˤľŪޤϴŪʤ»˴ؤƤ⡤
 Ǥʤ
 
 @(#) $Id: porting.txt 1229 2008-08-08 05:19:00Z ertl-hiro $
----------------------------------------------------------------------

ܼ

̻
	1.1 åȰ¸ι
	1.2 ̾ξͤɻ
	1.3 ¿ť󥯥롼ɤɻ
	1.4 ֥ȤΥإåեζ 
	1.5 󥯥롼ɵҤˡ
	1.6 ƥ륻νμ¸˴ؤ
ƥ๽۴Ķ
	2.1 åάΤȥåȰ¸Υǥ쥯ȥ
	2.2 MakefileΥåȰ¸
	2.3 ȯĶ̾ȥޥ̾
	2.4 ѥ륪ץȥ֥ȥե
	2.5 եåȥեˡ
	2.6 ˡ
	2.7 ¸ط
	2.8 ¾
TOPPERSΥåȰ¸
	3.1 åȼ̥ޥ
	3.2 κ͡Ǿ͡ӥåȿ
	3.3 λꤵ줿κ͡Ǿ͡ޥ
	3.4 λꤵ줿ưκ͡ǾͤΥޥ
	3.5 ѥγĥǽΤΥޥ
	3.6 ɸŪξ
	3.7 Τ
ƥ।󥿥ե쥤SILˤΥåȰ¸
	4.1 ߥå֤δ
	4.2 Ԥ
	4.3 ץåΥǥ
	4.4 ֥ؿ
	4.5 I/O֥ؿ
ͥAPIΥåȰ¸
	5.1 åǥݡȤ뵡ǽ
	5.2 ͥ٤ϰ
	5.3 ƥå
	5.4 ΰݤΤη
	5.5 ӥåȥѥΥӥåȿ
	5.6 ΰݤΤΥޥ
ͥΥåȰ¸
	6.1 ͥΥåȰ¸ζ̻
		6.1.1 ͥΥåȰ¸ι
		6.1.2 åȰ¸δؿ̿̾§
	6.2 ȥ졼ǽؤб
	6.3 ƥ֤δ
		6.3.1 ߥå֤δ
		6.3.2 ƥȤδ
		6.3.3 CPUå֤δ
	6.4 ߤ˴Ϣ륷ƥ֤δ
		6.4.1 ͥ٥ޥδ
		6.4.2 ׵ػߥե饰δ
		6.4.3 ׵Υꥢ
		6.4.4 ׵Υץ
		6.4.5 ߥϥɥƬ
		6.4.6 ׵饤°
	6.5 ǥѥå
		6.5.1 ƥȥ֥åΥǡ
		6.5.2 ǥѥå
		6.5.3 ƥȤΥǥѥå
		6.5.4 ǥѥåư
		6.5.5 ߤΥƥȤΤƤƥǥѥå
		6.5.6 εư
	6.6 ߥϥɥ
		6.6.1 ߥϥɥν
		6.6.2 ߥϥɥν
		6.6.3 ߥϥɥ
		6.6.4 ߴǽνѹ
		6.6.5 ǥեȤγߥϥɥ
		6.6.6 ͥγ
	6.7 CPU㳰ϥɥCPU㳰ȯΥƥ֤λ
		6.7.1 CPU㳰ϥɥν
		6.7.2 CPU㳰ϥɥν
		6.7.3 CPU㳰ϥɥ
		6.7.4 CPU㳰ǽνѹ
		6.7.5 ǥեȤCPU㳰ϥɥ
		6.7.6 CPU㳰ȯΥƥ֤λ
	6.8 ͥεưλȥåΰʤ
	6.9 ͥΥ塼˥
		6.9.1 ӥåȥޥåץ
		6.9.2 ӥåȥե
	6.10 ͥ˴ؤ뤽¾
		6.10.1 󥿥ƥѤΥåΰ
		6.10.2 ٥
	6.11 ȥ졼ǽ˴ؤ
		6.11.1 Ǥȥ졼μȥޥ
		6.11.2 ȥ졼ϿΥץ륳
	6.12 ͥΥåȰ¸ΤΥ͡൭
	6.13 ޥɥ饤
		6.13.1 ޥɥ饤ФΥե빽
		6.13.2 ޤνλ߽
		6.13.3 ǽɾѥƥλȤΤεǽ
ե졼ե
	7.1 եȥåȰ¸ΰդ
	7.2 ѥ2Υƥץ졼ȥեΥåȰ¸
		7.2.1 å¸򥤥󥯥롼ɤ٤ѿ
		7.2.2 å¸ѿ
	7.3 ѥ3Υƥץ졼ȥեΥåȰ¸
	7.4 cfg1_out.cΥ󥯤ɬפʥ֤ե
ƥॵӥΥåȰ¸
	8.0 ƥॵӥΥåȰ¸
	8.1 ƥǽΥåȰ¸
	8.2 ΥåȰ¸
	8.3 ꥢ륤󥿥եɥ饤ФΥåȰ¸
		8.3.1 ѿǡؿ
		8.3.2 ǥХӥ롼
		8.3.3 Хå롼
	8.4 ͥ뵯ưåνϤΥåȰ¸
	8.5 ƥȥץΥåȰ¸
¾
	9.1 ɥ
	9.2 ѥåҥե
ե
	10.1 åȰ¸Υե


̻

1.1 åȰ¸ι

åȰ¸ϡtargetǥ쥯ȥβˡåȥϡɥ
ȯĶȤ߹碌Ѱդ롥åȰ¸κ
θץååסȯĶΤߤ˰¸ʬ򡤥ץå
¸åװ¸ȯĶ¸ȤڤʬƤ褤ڤʬ
ϡåȰ¸μǤƤ롥ץå¸åװ
¸ȯĶ¸ϡarchǥ쥯ȥβ֤

ASPͥΥåȰ¸ϡƥ๽۴ĶMakefileˤΥ
Ȱ¸TOPPERSt_stddef.hˤΥåȰ¸ƥ।
ե쥤SILsil.hˤΥåȰ¸ͥAPIkernel.h
ΥåȰ¸ͥΥåȰ¸ƥॵӥ
åȰ¸ǹ롥

1.2 ̾ξͤɻ

TOPPERSץȤ󶡤륽եȥΤˡTOPPERS_ǻϤޤ륷
ܥͽ󤷤Ƥ롥إåե˵Ҥ졤ץꥱ󤫤黲
ȤǤܥϡTOPPERS_ǻϤޤ̾Ȥ롥

ޤ_kernel_ǻϤޤ륷ܥϡͥѿؿΤͽ
Ƥ롥ͥѿؿ̾ǡ󥯻˥ץꥱ
̾ȾͤǽΤϡ͡൭Ҥ˥ꥹȥåפ뤳
ǡѥ_kernel_ǻϤޤ֤̾뤳ȤȤƤ롥

1.3 ¿ť󥯥롼ɤɻ

٤ƤΥإåեϡ¿Ť˥󥯥롼ɤΤɻߤ뤿ξ
拾ѥ뵭Ҥ뤳ȤȤ롥㤨Сtarget_config.hǤСե
Ƭ

#ifndef TOPPERS_TARGET_CONFIG_H
#define TOPPERS_TARGET_CONFIG_H

򡤥ե

#endif /* TOPPERS_TARGET_CONFIG_H */

򵭽Ҥ롥

1.4 ֥ȤΥإåեζ 

ASPͥΥإåե¿ϡ֥Υե뤫
⥤󥯥롼ɤǤ褦ˤ뤿ˡΥ롼˽äƵҤΤ
롥

TOPPERS_MACRO_ONLYޥƤˤϡ֥Ǥ
ǤʤޥʳεҤ褦˵Ҥ롥

̵ͤϡUINT_CULONG_Cʤɤ뤿Υ
ѤƵҤ롥֥Υե뤫⥤
󥯥롼ɤǤեǤäƤ⡤CΤߤѤ򤳤
ޥȤäƵҤɬפϤʤ

ޤͥˤƤϡΥ롼˽ΤȤ롥

֥줫Ѥ˷㥹ȤѤˤϡ
CASTޥѤƵҤ롥

֥줫إåե򥤥󥯥롼ɤݤˤϡɬפ˱ơ
TOPPERS_MACRO_ONLYUINC_CULONG_CCASTޥƤ顤󥯥롼
ɤʤФʤʤ

1.5 󥯥롼ɵҤˡ

ȯĶѰդƤɸإåե뤪includeǥ쥯ȥ겼
ɸإåեϡ#include <...>פˤꥤ󥯥롼ɤ롥

¾Υإåեϡ#include "..."פˤꥤ󥯥롼ɤ롥إ
ե뤬ȥǥ쥯ȥ䥤󥯥롼ɤեƱǥ
쥯ȥʳΥǥ쥯ȥ֤ƤˤϡΤ褦˥ѥ
Ԥ

åȰ¸target/<å̾>ˤΥǥ쥯ȥ֤Ƥ
ϡѥԤ鷺ե̾Τߤ򵭽Ҥ롥
		#include "target_config.h"

archǥ쥯ȥ겼Υǥ쥯ȥ֤Ƥˤϡarchǥ쥯
ȥ꤫ХѥǵҤ롥
		#include "m68k_gcc/prc_config.h"

¾ξˤϡץΥ롼ȥǥ쥯ȥconfigure
Ƥǥ쥯ȥˤХѥǵҤ롥
		#include "pdic/upd72001/upd72001.h"

ͥե뤫顤kernelǥ쥯ȥ겼Υإåե
򥤥󥯥롼ɤϡѥԤ鷺ե̾Τߤ򵭽Ҥ롥
		#include "kernel_impl.h"

1.6 ƥ륻νμ¸˴ؤ

ͥѤ륯ƥ륻ν¸ˤϡ
Υǡ¤Ѥǽ뤳Ȥ򡤲餫ˡǥ
ѥΤ餻ʤФʤʤGNUȯĶǤϡΤ줫ˡǤ
ȤǤ롥

(a) ƥ륻νΤޤϽܼŪʬ
	ʶŪˤϡ߶ػߡĤˤʥ饤Ǥʤ̾
	δؿˤ¸롥

(b) ƥ륻νܼŪʬ򥤥饤󥢥
	ˤäƼ¸ƤˤϡΥ饤󥢥֥clobber
	ꥹȤ"memory"ɲä롥

(c) ƥ륻νܼŪʬޥ䥤饤
	ؿƽФǼ¸Ƥˤϡƥ륻
	κǸȽФƬˡAsm("":::"memory")ȤҤ롥

Τ褦ߤͳˤĤƤϡTOPPERS/ASPͥ ߷ץ
Ρ֥ͥΥǡ¤ФvolatileˤĤơפ򻲾Ȥ뤳
ȡ


ƥ๽۴Ķ

ϡGNUȯĶGCCGASBINUTILSGNU MakeˤѤ뤳
ꤷƵҤƤ롥ʳγȯĶѤˤϡȯĶ
碌ƽɬפ롥

2.1 åάΤȥåȰ¸Υǥ쥯ȥ

åȰ¸ϡޤåάΤ롥
åάΤϡƥάΤȳȯĶάΤ"_"Ϣ뤷ΤȤ롥
ƥάΤȳȯĶάΤѤʸϡѾʸȿ˸ꤹ롥GNUȯ
ĶγȯĶάΤϡ"gcc"Ȥ롥㤨СƥάΤ"dve68k"ǡ
GNUȯĶѤˤϡåάΤ"dve68k_gcc"Ȥʤ롥

åȰ¸Υե֤ˡtargetǥ쥯ȥβˡ
åάΤ̾ΤȤǥ쥯ȥ롥򥿡åȰ¸ǥ
쥯ȥȸƤ֡

åȰ¸ץå¸åװ¸ڤʬˤϡ
¸άΤ롥¸άΤϡץååפάΤȳȯĶά
Τ"_"Ϣ뤷ΤȤ롥ץååפάΤѤʸϡ
ʸȿ˸ꤹ롥㤨СץåάΤ"m68k"ǡGNUȯĶ
Ѥˤϡ¸άΤ"m68k_gcc"Ȥʤ롥

ޤåȰ¸鳫ȯĶ¸ڤʬˤϡȯĶ
άΤ¸άΤȤ롥㤨СGNUȯĶ¸ΰ¸άΤϡ"gcc"
Ȥʤ롥

ΰ¸Υե֤ˡarchǥ쥯ȥβˡ¸ά
Τ̾ΤȤǥ쥯ȥ롥

ʤGNUȯĶʳγȯĶѤˤϡե졼
ץȡconfigureˡץMakefilesample/Makefileˡ
桼ƥƥץutils/genoffsetutils/makedepˤ򡤤γȯ
ĶѤѰդɬפ礬롥ξˤϡΥե
åȰ¸ǥ쥯ȥꡤޤϳȯĶ¸ǥ쥯ȥ֤
ΤȤ롥ޤȯĶѤΥץȥե뤬ɬפʾˤϡ
åȰ¸ǥ쥯ȥ֤ΤȤ롥

2.2 MakefileΥåȰ¸

MakefileΥåȰ¸ϡåȰ¸ǥ쥯ȥ֤
Makefile.targetޤϤ饤󥯥롼ɤեʥץå
סȯĶ¸Ѱդեʤɡˤ˴ޤ롥

2.3 ȯĶ̾ȥޥ̾

ȯĶ̾ȥޥ̾ꤹ뤿ˡMakefileΥåȰ¸Ǽ
ѿ롥

(2-3-1) TOOL					ȯĶ̾

ȯĶ̾롥GNUȯĶѤˤϡgcc롥

(2-3-2) GCC_TARGET				GNUȯĶΥå̾

GNUȯĶѤˡGNUȯĶconfigure˻ꤹ륿
å̾롥ǻꤷå̾ϡȯĶΥޥ̾
ƬͿʸȤʤ롥㤨СGCC_TARGETm68k-unknown-elf
ˤϡѥȤm68k-unknown-elf-gccȤ롥
ѿʤˤϡñʤgccȤ롥

(2-3-3) CC						Cѥɥ饤Ф̾
(2-3-4) CXX						C++ѥɥ饤Ф̾
(2-3-5) AS						֥̾
(2-3-6) LD						󥫤̾
(2-3-7) AR						Ф̾
(2-3-8) NM						nmץ̾
(2-3-9) RANLIB					ranlibץ̾
(2-3-10) OBJCOPY				objcopyץ̾
(2-3-11) OBJDUMP				objdumpץ̾

GNUȯĶʳγȯĶѤˡ줾Υޥɤ̾Τ
롥б륳ޥɤʤ䡤ޥɥѥ᡼ۤʤˤϡ
MakefileǤΥޥɤƤӽФƤʬѹɬפ롥

GNUȯĶǤϡGCC_TARGETѤΤǡɬ
Ϥʤ

2.4 ѥ륪ץȥ֥ȥե

MakefileΥåȰ¸ǰʲѿˤϡ":="
ѤơޤǤɲäǹԤ㤨СѥФ뤽
¾ΥץȤơ-Wall -g -O2פɲäˤϡCOPTS :=
$(COPTS) -Wall -g -O2פȤҤMakefileΥåȰ¸˴ޤ롥

(2-4-1) COPTS				ѥФ뤽¾Υץ
(2-4-2) CDEFS				ޥץ-Dץ
(2-4-3) INCLUDES			إåեΥǥ쥯ȥꥪץ
							-Iץ
(2-4-4) LDFLAGS				󥫤Ф뤽¾Υץ
(2-4-5) LIBS				饤֥󥯻ΤΥץ

åȤ˰¸ơ٤ƤΥե˶̤륳ѥ륪ץ
ɲäɬפʾˤϡץμ˾˼ѿ롥

ۤȤɤξˡåȰ¸ǥ쥯ȥMakefile.targetˤϡ
εҤޤɬפ롥

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

SRCDIRϡMakefileˤơץΥ롼ȥǥ쥯ȥ
configure֤Ƥǥ쥯ȥˤƤ롥ޤTARGETDIR
ϡåȰ¸ǥ쥯ȥƤ롥

ѥǡٹåФ뤳ȤɤʤʳǤϡ
COPTS-Werrorɲä뤳Ȥ侩롥

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

ͥΥѥˡdereferencing type-punned pointer will break
strict-aliasing rulesȤٹ𤬽ФˤϡʲɲäȤ褤
ηٹå˴ؤܺ٤ϡTOPPERS/ASPͥ ߷ץפΡַ
㥹Ȥȼٹåפ򻲾Ȥ뤳ȡ

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

ޤ֥٥μ̾C٥μ̾Ƭ"_"
դΤˤʤˤϡCDEFS-DTOPPERS_LABEL_ASMɲä롥

(2-4-6) SYSSVC_DIR			ƥॵӥΥ֤줿ǥ쥯ȥ
(2-4-7) SYSSVC_ASMOBJS		֥ǵҤ줿ƥॵӥ
							֥
(2-4-8) SYSSVC_COBJS		CǵҤ줿ƥॵӥΥ֥
(2-4-9) SYSSVC_CFLAGS		ƥॵӥФ륳ѥ륪ץ
(2-4-10) SYSSVC_LIBS		ƥॵӥФ饤֥󥯻

åȤ˰¸ơƥॵӥʥƥǥХ
饤ФʤɡˤΥ֤줿ǥ쥯ȥꡤ륪֥
եΥꥹȡ򥳥ѥ뤹ݤŬѤ륳ѥ륪ץ
󡤤ιɬפʥ饤֥󥯻ɲäˤϡ˼
ѿ롥

(2-4-11) KERNEL_DIR			ͥΥ֤줿ǥ쥯ȥ
(2-4-12) KERNEL_ASMOBJS		֥ǵҤ줿ͥΥ֥
(2-4-13) KERNEL_COBJS		CǵҤ줿ͥΥ֥
(2-4-14) KERNEL_CFLAGS		ͥФ륳ѥ륪ץ

åȤ˰¸ơͥΥ֤줿ǥ쥯ȥꡤ
륪֥ȥեΥꥹȡ򥳥ѥ뤹ݤŬѤ
ѥ륪ץɲäˤϡ˼ѿ롥

ۤȤɤξˡåȰ¸ǥ쥯ȥMakefile.targetˤϡ
εҤޤɬפ롥

----------------------------------------
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			ե졼Ф륪ץ

åȤ˰¸ơե졼Ф륪ץɲä
ˤϡ˼ѿ롥Ūˤϡե졼ͼ
ܥơ֥ΥåȰ¸target_def.csvˤˤϡ
ꤹ륪ץɲäɬפ롥

ۤȤɤξˡåȰ¸ǥ쥯ȥMakefile.targetˤϡ
εҤޤɬפ롥

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

(2-4-16) CFG1_OUT_LDFLAGS	cfg1_out.cФ󥯥ץ

åȤ˰¸ơcfg1_out.c󥯤ݤŬѤ륪ץ
äˤϡ˼ѿ롥

(2-4-17) CFG_OBJS			ƥॳե졼ΤΥ
							

åȤ˰¸ơƥॳե졼ΤΥ֥
ȥեkernel_cfg.oʳˡɲäˤϡ˼ѿ
롥ξ硤ɲä֥ȥեκ롼ʥѥ롿
֥롼Ȱ¸ط롼ˤMakefileΥåȰ¸
Ҥɬפ롥

(2-4-18) CFG2_OUT

åȤ˰¸ơե졼Υѥ2kernel_cfg.c
kernel_cfg.hʳΥեˤϡ˼ѿ롥

2.5 եåȥեˡ

֥ǵҤץफ顤Cι¤Τ˥
ˤϡ¤ΤγƥեɤΥեåȤ򻲾Ȥ뤳ȤɬפǤ롥
ASPͥǤϡɬפʥեåͤեɸǤoffset.hˤ˽
뤿λȤߤȤơmakeoffset.cgenoffsetѰդƤ롥
makeoffset.cϡɤΥեåͤե˽Ϥ뤫ꤹΤǡ
åȰ¸Ѱդɬפ롥genoffsetϡǤGNUȯ
ˤΤбƤ롥

makeoffset.cgenoffsetȤȤǡ㤨СTCBtexptnեɤ
եåͤTCB_texptn˥ޥ뤳Ȥ䡤TCBΥƥ
ȥ֥åtskctxbˤ˴ޤޤpcեɤΥեåͤTCB_pc˥ޥ
뤳ȤǤ롥ޤTCBenatexեɤΥեå͡ӥ
Ȱ֡ӥåȥޥ򡤤줾TCB_enatexTCB_enatex_bit
TCB_enatex_mask˥ޥ뤳ȤǤ롥ӥåȰ֤ӥåȥޥ
ޥˤϡ륵䥨ǥꤹ
ɬפ롥

GNUȯĶʳѤʤɡλȤߤǥեåȥե
ʤˤϡoffset.h򥿡åȰ¸ѰդMakefileΥå
¸OMIT_MAKEOFFSET"true"롥

makeoffset.cgenoffset˴ؤޥ˥奢ϡǤѰդǤƤʤ
Ȥ狼ʤ䡤ǽ­ʤˤϡ̤줿

2.6 ˡ

(2-6-1) LDSCRIPT				󥫥ץȤΥե̾

ȯĶɸΥ󥫥ץȤѤǤʤˤϡåȰ¸
ǥ󥫥ץȤѰդΥե̾򤳤ѿ롥

(2-6-2) TEXT_START_ADDRESS		ƥȥƬ
(2-6-3) DATA_START_ADDRESS		ǡƬ

ƥƬϤλ꤬ɬפʾˤϡѿƬϤ
롥

(2-6-4) START_OBJS				Ƭ˥󥯤٤⥸塼̾
(2-6-5) END_OBJS				Ǹ˥󥯤٤⥸塼̾

åȤˤäƤϡɥ⥸塼ƬȺǸ˥󥯤٤⥸塼
򡤥åȰ¸Ѱդɬפ롥¿ξ硤ȥå
⥸塼ɥ⥸塼Ƭ˥󥯤ɬפ롥

ɥ⥸塼Ƭ˥󥯤٤ץबˤϡMakefile
ΥåȰ¸ˤơΥ֥ȥե̾START_OBJS
Ф륳ѥ롼Ȱ¸ط롼롥
ɥ⥸塼κǸ˥󥯤٤⥸塼뤬ˤϡΥ֥
ȥե̾END_OBJSФ륳ѥ롼Ȱ¸
롼롥ޤɸΥȥåץ⥸塼crt0.o
󥯤ʤ褦ˡLDFLAGS-nostdlibɲäɬפ롥
ˡ-nostdlibĤ뤳Ȥɸ饤֥꤬󥯤ʤʤ뤿ᡤ
LIBS-lgccɲäʤФʤʤ

㤨Сȥåץ⥸塼Υե뤬start.Sξˤϡ
MakefileΥåȰ¸˼Τ褦ʵҤȤ褤

----------------------------------------
# ȥåץ⥸塼Υ֥ȥե̾
START_OBJS = start.o

# ȥåץ⥸塼Υѥ롼
$(START_OBJS): %.o: %.S
	$(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<

# ȥåץ⥸塼ΰ¸ط롼
$(START_OBJS:.o=.d): %.d: %.S
	@$(PERL) $(SRCDIR)/utils/makedep -C $(CC) \
		-O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend

# 󥫤Ф륪ץ
LDFLAGS := -nostdlib $(LDFLAGS)
LIBS := $(LIBS) -lgcc
----------------------------------------

ޤѥɸcrtbegin.ocrtend.oѤˤϡMakefile
ΥåȰ¸˼Τ褦ʵҤȤ褤

----------------------------------------
# ֥ȥե̾
START_OBJS = $(shell $(CC) -print-file-name=crtbegin.o)
END_OBJS = $(shell $(CC) -print-file-name=crtend.o)

# ¸ط롼
$(START_OBJS:.o=.d): %.d:
$(END_OBJS:.o=.d): %.d:

# 󥫤Ф륪ץ
LDFLAGS := -nostdlib $(LDFLAGS)
LIBS := $(LIBS) -lgcc
----------------------------------------

ξ硤Υե򥳥ѥ뤹뤳ȤϤʤᡤѥ롼
פǤ롥ޤ¸ط롼ϥߡǤ褤ʰ¸ط롼
뤬ʤȥ顼ˤʤˡ

ɥ⥸塼Ƭ˥󥯤٤⥸塼򡤥󥫥ץ
STARTUPˤꤹˤϡΥ֥ȥե̾START_OBJS
HIDDEN_OBJSФ륳ѥ롼Ȱ¸ط
롼롥LIBSLDFLAGSˤĤƤϡSTART_OBJSѤƱ
Ǥ롥

㤨Сȥåץ⥸塼Υե뤬start.Sξˤϡ
MakefileΥåȰ¸˼Τ褦ʵҤȤ褤

----------------------------------------
# ȥåץ⥸塼Υ֥ȥե̾
HIDDEN_OBJS = start.o

# ȥåץ⥸塼Υѥ롼
$(HIDDEN_OBJS): %.o: %.S
	$(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<

# ȥåץ⥸塼ΰ¸ط롼
$(HIDDEN_OBJS:.o=.d): %.d: %.S
	@$(PERL) $(SRCDIR)/utils/makedep -C $(CC) \
		-O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend

# 󥫤Ф륪ץ
LDFLAGS := -nostdlib $(LDFLAGS)
LIBS := $(LIBS) -lgcc
----------------------------------------

2.7 ¸ط

ե졼γƥѥФơåȰ¸Υեؤΰ¸
롥Ūˤϡѥ1ѥ2ѥ3¸ե򡤤
cfg1_out.ckernel_cfg.timestamp$(OBJFILE)Ф¸طη
Ҥ롥

ۤȤɤξˡåȰ¸ǥ쥯ȥMakefile.targetˤϡ
εҤޤɬפ롥

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

2.8 ¾

(2-8-1) CLEAN_FILES				cleanˤե̾

cleanˤե򥿡åȰ¸ɲäˤϡե
̾򤳤ѿɲ롥

(2-8-2) REALCLEAN_FILES			realcleanˤե̾

realcleanˤե򥿡åȰ¸ɲäˤϡ
ե̾򤳤ѿɲ롥


TOPPERSΥåȰ¸

TOPPERSt_stddef.hˤΥåȰ¸ϡtarget_stddef.hޤ
Ϥ饤󥯥롼ɤեʥץååסȯĶ¸
Ѱդإåեʤɡˤ˴ޤ롥

3.1 åȼ̥ޥ

ץꥱ䥷ƥॵӥǥåȤ̤뤿ˡ
"TOPPERS_"˥ƥάΤʸˤʸϢ뤷Ρ㤨С
"TOPPERS_DVE68K"ˤޥ롥

ޤåȰ¸ץå¸åװ¸ڤʬ
ˤϡ"TOPPERS_"˰¸άΤʸˤʸϢ뤷Ρ㤨
С"TOPPERS_M68K"ˤޥ롥

3.2 κ͡Ǿ͡ӥåȿ

(3-2-1) INT_MAX				int˳ǼǤ͡C90
(3-2-2) INT_MIN				int˳ǼǤǾ͡C90
(3-2-3) UINT_MAX			unsigned int˳ǼǤ͡C90
(3-2-4) LONG_MAX			long˳ǼǤ͡C90
(3-2-5) LONG_MIN			long˳ǼǤǾ͡C90
(3-2-6) ULONG_MAX			unsigned long˳ǼǤ͡C90
(3-2-7) CHAR_BIT			charΥӥåȿC90

κ͡Ǿ͡ӥåȿ򡤤Υܥ˥ޥ롥

ΥޥϡC90˽򤷤ΤǤ롥ȯĶC90˽򤷤
limits.hѰդƤˤϡΥޥ뤳Ȥ夨ơ
limits.h򥤥󥯥롼ɤФ褤

3.3 λꤵ줿κ͡Ǿ͡ޥ

(3-3-1) int8_t				դ8ӥåʥץC99
(3-3-2) uint8_t				̵8ӥåʥץC99
(3-3-3) int16_t				դ16ӥåC99
(3-3-4) uint16_t			̵16ӥåC99
(3-3-5) int32_t				դ32ӥåC99
(3-3-6) uint32_t			̵32ӥåC99
(3-3-7) int64_t				դ64ӥåʥץC99
(3-3-8) uint64_t			̵64ӥåʥץC99
(3-3-9) int128_t			դ128ӥåʥץC99
(3-3-10) uint128_t			̵128ӥåʥץC99
(3-3-11) int_least8_t		8ӥåȰʾդC99
(3-3-12) uint_least8_t		8ӥåȰʾ̵C99
(3-3-13) intptr_t			ݥ󥿤ǼǤ륵դC99
(3-3-14) uintptr_t			ݥ󥿤ǼǤ륵̵C99
(3-3-15) INT8_MAX			int8_t˳ǼǤ͡ʥץC99
(3-3-16) INT8_MIN			int8_t˳ǼǤǾ͡ʥץC99
(3-3-17) UINT8_MAX			uint8_t˳ǼǤ͡ʥץC99
(3-3-18) INT16_MAX			int16_t˳ǼǤ͡C99
(3-3-19) INT16_MIN			int16_t˳ǼǤǾ͡C99
(3-3-20) UINT16_MAX			uint16_t˳ǼǤ͡C99
(3-3-21) INT32_MAX			int32_t˳ǼǤ͡C99
(3-3-22) INT32_MIN			int32_t˳ǼǤǾ͡C99
(3-3-23) UINT32_MAX			uint32_t˳ǼǤ͡C99
(3-3-24) INT64_MAX			int64_t˳ǼǤ͡ʥץC99
(3-3-25) INT64_MIN			int64_t˳ǼǤǾ͡ʥץC99
(3-3-26) UINT64_MAX			uint64_t˳ǼǤ͡ʥץC99
(3-3-27) INT128_MAX			int128_t˳ǼǤ͡ʥץC99
(3-3-28) INT128_MIN			int128_t˳ǼǤǾ͡ʥץC99
(3-3-29) UINT128_MAX		uint128_t˳ǼǤ͡ʥץC99
(3-3-30) INT_LEAST8_MAX		int_least8_t˳ǼǤ͡C99
(3-3-31) INT_LEAST8_MIN		int_least8_t˳ǼǤǾ͡C99
(3-3-32) UINT_LEAST8_MAX	uint_least8_t˳ǼǤ͡C99
(3-3-33) INT8_C(val)		int_least8_tޥC99
(3-3-34) UINT8_C(val)		uint_least8_tޥC99
(3-3-35) INT16_C(val)		int16_tޥC99
(3-3-36) UINT16_C(val)		uint16_tޥC99
(3-3-37) INT32_C(val)		int32_tޥC99
(3-3-38) UINT32_C(val)		uint32_tޥC99
(3-3-39) INT64_C(val)		int64_tޥʥץC99
(3-3-40) UINT64_C(val)		uint64_tޥʥץC99
(3-3-41) INT128_C(val)		int128_tޥʥץC99
(3-3-42) UINT128_C(val)		uint128_tޥʥץC99

ꤵ줿򡤤Υܥ˷롥ޤǡ
˳ǼǤ͡Ǿͤȡޥ򡤤Υ
˥ޥ롥

ΥǡӥޥϡC99˽򤷤ΤǤ롥ȯĶC99
˽򤷤stdint.hѰդƤˤϡΥǡӥޥ
뤳Ȥ夨ơstdint.h򥤥󥯥롼ɤФ褤

ǥץȵҤΤϡǡѥǥݡ
ƤˤΤ뤳Ȥ򼨤

3.4 λꤵ줿ưκ͡ǾͤΥޥ

(3-4-1) float32_t			IEEE75432ӥåñưʥ
							
(3-4-2) double64_t			IEEE75464ӥåưʥ
							
(3-4-3) FLOAT32_MIN			float32_t˳ǼǤǾ줿
							ưʥץ
(3-4-4) FLOAT32_MAX			float32_t˳ǼǤɽǽʺͭư
							ʥץ
(3-4-5) DOUBLE64_MIN		double64_t˳ǼǤǾ줿
							ưʥץ
(3-4-6) DOUBLE64_MAX		double64_t˳ǼǤɽǽʺͭư
							ʥץ

ꤵ줿ɽư򡤤Υܥ˷
롥ޤǡ˳ǼǤ͡Ǿͤ򡤤Υܥ˥ޥ
롥

⡤ǡѥǥݡȤƤˤΤ
롥

3.5 ѥγĥǽΤΥޥ

ѥγĥǽѤ뤿ΥޥȤơɬפ˱ơʲΥ
ޤ롥

(3-5-1) inlineʥץ󡤥ǥեȤ̤
(3-5-2) Inlineʥץ󡤥ǥեȤstatic inline

饤ؿǤ뤳Ȥ򼨤ꡥInlineϡѥñ̤˥
ʥ饤ؿǤ뤳Ȥ򼨤

(3-5-3) asmʥץ󡤥ǥեȤ̤
(3-5-4) Asmʥץ󡤥ǥեȤ̤

饤󥢥֥򵭽Ҥ뤿λꡥAsmϡŬˤƤ
ʤʤȤ򼨤ϡåȰ¸ǤΤ߻ȤޥǤ뤿
ᡤåȰ¸ǻȤʤʤɬפϤʤ

(3-5-5) offsetof(structure, field)ʥץ󡤥ǥեȤ

¤structureǤΡեfieldΥեåȤޥ

(3-5-6) alignof(type)ʥץ󡤥ǥեȤ

ǡtypeΥ饤ñ̤ޥ

(3-5-7) NoReturnʥץ󡤥ǥեȤ̤

꥿󤹤뤳ȤΤʤؿǤ뤳Ȥ򼨤ꡥϡåȰ¸
Τ߻ȤޥǤ뤿ᡤåȰ¸ǻȤʤʤɬ
Ϥʤ

3.6 ɸŪξ

t_stddef.h˴ޤޤTOPPERSɸŪ񤭤ˤϡ
ʲΥޥ롥

(3-6-1) TOPPERS_boolʥץ󡤥ǥեȤint
(3-6-2) TOPPERS_sizeʥץ󡤥ǥեȤuintptr_t
(3-6-3) TOPPERS_fpʥץ󡤥ǥեȤ¾ȸߴΤʤؿݥ󥿡

줾졤bool_tSIZEFP˷٤ǡ

(3-6-4) UINT_C(val)ʥץ󡤥ǥեȤUղá
(3-6-5) ULONG_C(val)ʥץ󡤥ǥեȤULղá

줾졤unsigned uintunsigned long뤿Υޥ

(3-6-6) NULLʥץ󡤥ǥեȤ0

C90CĶǤϡNULLstddef.h˴ޤޤƤ뤿ᡤ
󥯥롼ɤƤ褤

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

ERCDMERCDSERCDɸϡդ2ɽƤꡤ
եȱ黻ҡ>>ˤѥեȤ뤳ȤꤷƤ롥¿Υ
Ǥβ꤬ΩĤǤʤˤϡåȰ¸Ǥ
񤭤ɬפ롥

(3-6-10) ALIGN_TYPE(addr, type)ʥץ

ɥ쥹addrǡtypeΥ饤ñ̤˥饤󤷤Ƥ뤫
åޥ

3.7 Τ

t_stddef.hˤϡassertޤޤ롥assertԤassert
ѥ᡼falseˤʤäˤν򡤥åȰ¸Ѱդɬפ
롥ϡassertޥѤǤСt_stddef.hʹ
˥󥯥롼ɤե˴ޤޤƤƤ褤ʤassert̵
NDEBUGޥƥѥ뤹˾ˤϡѰդ
ɬפϤʤ

(3-7-1) TOPPERS_assert_abort(void)

assertԤˡץߤؿƥ೫ȯϥ
ХåȤΤŪǤ롥ƥƯˤ㳰Ԥ碌뤳
Ȥˤʤ롥

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

assertԤξɽ/Ͽ뤿Υޥƥǽ
Ѥˤϡt_syslog.h˥ƥǽ˵Ͽ뤿ޤ
ƤΤǡåȰ¸ѰդɬפϤʤ


ƥ।󥿥ե쥤SILˤΥåȰ¸

ƥ।󥿥ե쥤SILsil.hˤΥåȰ¸ϡ
target_sil.hޤϤ饤󥯥롼ɤեʥץå
סȯĶ¸Ѱդإåեʤɡˤ˴ޤ롥

4.1 ߥå֤δ

SILΥåȰ¸Ǥϡߥå֤ܤ뵡ǽȡξ
᤹ǽʸξ֤򵭲뤿ѿȤˤ󶡤롥ߥ
֤Ǥ뤫Ƚ̤뵡ǽ󶡤ɬפʤ

SILεǽϡͥѤʤˤѤǤɬפ롥Τᡤ
ߥå֤ؤܤȸξ֤ؤϡͥѤץ
åΥ꥽ľ뤳ȤˤäƼ¸롥ޤߥ
֤ؤܤȸξ֤ؤϡߥå֤CPUå֤
Ԥɬפ롥

ݸǽäͥǤϡ桼ץåΥ꥽ľ
뤳ȤǤʤᡤ桼ϤεǽѤ뤳
ȤǤʤѤο񤤤ϥåȥץå˰¸뤬ŵ
Ūˤϡø̿ȿʤɤCPU㳰ȯ뤳Ȥˤʤ롥

(4-1-1) SIL_PRE_LOC

ߥåե饰ξ֤¸뤿ѿޥ̾
ˡѿ̾³Τ롥ѿ̾ϡ¾̾Ⱦͤʤ褦
ˡ"TOPPERS_"ǻϤޤ̾ˤ롥

(4-1-2) SIL_LOC_INT()

ߤߥåե饰ξ֤SIL_PRE_LOCѿ¸
ߥå֤ܤޥΥޥ¸ݤˤϡ1.6
ƥ륻νμ¸˴ؤפ˵ҤƤ
˽ʤФʤʤ

(4-1-3) SIL_UNL_INT()

SIL_LOC_INT()ˤäѿ¸֤᤹ޥΥޥ¸
ݤˤϡ1.6 ƥ륻νμ¸˴ؤפ
˵ҤƤ˽ʤФʤʤ

4.2 Ԥ

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

dlytimǻꤵ줿ʾλ֡ñ̤ϥʥáˡ롼פʤɤˤäԤĴ


ʲδؿʽ򡤥֥ǵҤˡɸŪʼ
ˡȤ롥֥ǵҤΤϡѥκŬ˰¸
褦ˤ뤿Ǥ롥ޤδؿϡåαƶʤ
ˡǤ¤ꥢԤʤ褦˼٤Ǥ롥

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

δؿưϼ̤Ǥ롥dlytimSIL_DLY_TIM1ʲξˤϡ
ifʸξ郎Ω˴ؿȴ롥dlytimSIL_DLY_TIM1
礭(SIL_DLY_TIM1+SIL_DLY_TIM2)ʲξˤϡǽifʸξ
Ω뤬do롼פ1餺˴ؿȴ롥dlytim
(SIL_DLY_TIM1+SIL_DLY_TIM2)礭(SIL_DLY_TIM1+SIL_DLY_TIM2*2)
ξˤϡdo롼פ1äƴؿȴ롥θ塤dlytim
SIL_DLY_TIM2礭ʤ٤ˡwhile롼פ1󤺤롥

ʤδؿ򥢥֥ʤޤϡCˤǵҤ硤ɤΥե
˵Ҥ뤫ˤʤ롥SILΥåȰ¸ˤϡɸǤϡ
֥ʤޤϡCˤδؿ򵭽Ҥ뤿ΥեѰդ
ʤåȰ¸ѰդƤ褤㳰ŪˡͥΥ
åȰ¸⥸塼target_support.Sޤtarget_config.cˤ˵Ҥ
褤

(4-2-2) SIL_DLY_TIM1ʥץ
(4-2-3) SIL_DLY_TIM2ʥץ

sil_dly_nse嵭ɸŪˡǼ¸硤2Ĥ򥿡
Ȱ¸ǥޥ롥

SIL_DLY_TIM2ϡ嵭δؿˤơdo롼1μ¹Ի֡ñ̤ϥʥá
ꤹ롥åȥץå̿᥻åȤˤ뤬褽
̿Ⱦʬ̿1μ¹Ի֤ˤʤ롥SIL_DLY_TIM2ޤСؿ
Фޤ᤿Τλ֤dlytimǻꤵ줿ʾλ֤ˤʤ褦ˡ
SIL_DLY_TIM1롥

2Ĥͤηٱ礹ץȤơtestǥ쥯ȥˡ
test_dlynseѰդƤ롥test_dlynse¹ԤȡΤ褦ʽϤ
롥

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

"for fitting parameters"³Ϥϡsil_dly_nse(dlytim)ƤӽФ
Ԥ֤¬ꤷ̤Ǥ롥ΥץѤơ":"α¦ο
ͤdlytim礭ϰϤǤʤ٤ᤤͤˤʤ褦ˡ2Ĥͤ
Ĵ롥"for checking boundary conditions"³Ϥϡץ
å뤿ΤΤǡ":"α¦οͤdlytim礭
ȤǧʶᤤͤˤʤɬפϤʤˡ

4.3 ץåΥǥ

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

ץåΥǥˤꡤ줫Υܥޥ롥

(4-3-3) TOPPERS_SIL_REV_ENDIAN_UINT16ʥץ
(4-3-4) TOPPERS_SIL_REV_ENDIAN_UINT32ʥץ

줾졤16ӥåȡ32ӥåȤ̵Υǥȿž
ץåǥȿžΤ̿ľˤϡ̿
ѤƼ¸롥Υܥޥʤˤϡǥե
ȤȤ롥

4.4 ֥ؿ

(4-4-1) TOPPERS_OMIT_SIL_ACCESS

ɸΥ֥ؿѤåȰ¸Ѱդ
ˤϡΥܥޥ롥

(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

줾졤ɸsil_reh_lemsil_wrh_lemsil_reh_bemsil_wrh_bem
sil_rew_lemsil_wrw_lemsil_rew_bemsil_wrw_bemѤ
Ȱ¸ѰդˤϡΥܥޥ롥

4.5 I/O֥ؿ

֤Ȥ̤I/O֤ĥץåǤϡI/O֤ˤǥХ
򥢥뤿δؿȤơsil_reb_iopsil_wrb_iop
sil_reh_iopsil_wrh_iopsil_reh_lepsil_wrh_lepsil_reh_bep
sil_wrh_bepsil_rew_iopsil_wrw_iopsil_rew_lepsil_wrw_lep
sil_rew_bepsil_wrw_bepɬפʤΤ򡤥åȰ¸Ѱդ롥


ͥAPIΥåȰ¸

ͥAPIkernel.hˤΥåȰ¸ϡtarget_kernel.hޤ
Ϥ饤󥯥롼ɤեʥץååסȯĶ¸
Ѱդإåեʤɡˤ˴ޤ롥

5.1 åǥݡȤ뵡ǽ

(5-1-1) TOPPERS_SUPPORT_DIS_INT				dis_int򥵥ݡȤ
(5-1-2) TOPPERS_SUPPORT_ENA_INT				ena_int򥵥ݡȤ
(5-1-3) TOPPERS_SUPPORT_GET_UTM				get_utm򥵥ݡȤ

dis_intena_intget_utm򥵥ݡȤˡ줾Υܥޥ
롥

5.2 ͥ٤ϰ

(5-2-1) TMIN_INTPRI				ͥ٤κǾ͡ʺǹ͡
(5-2-2) TMAX_INTPRI				ͥ٤κ͡ʺ͡

줾졤ͥγͥ٤κǾ͡ʡͥ٤ǹˡ
γͥ٤κͥ͡٤ˤ롥TMAX_INTPRI-1
ꤵƤ뤬оΤѰդƤ롥

5.3 ƥå

(5-3-1) TIC_NUME				ƥåμʬ
(5-3-2) TIC_DENO				ƥåμʬ

ƥåμsignal_timeƤӽФˤ򡤥ߥñ̤ǡ
TIC_NUME/TIC_DENO롥㤨Сƥåμ1/30äξ
ˤϡTIC_NUME100ˡTIC_DENO3Ф褤

ƥåμϡ1ߥäȤʤĤޤꡤTIC_NUMETIC_DENOȤ1
ˤȤ侩뤬ߥ졼Ķǽ㤤ץ
Ǥ줬ŬڤǤʤˤϡʳͤȤƤ褤ξǤ⡤
ǽʸ¤ꡤ1ߥäܿǤʤĤޤꡤTIC_DENO1ˤȤ
˾ޤ

TIC_NUMETIC_DENOѹ뤳Ȥǡƥåμѹ
褦˥ޥɥ饤Фˤϡ2Ĥϥǥե
ͤͿƤ뤳Ȥˤʤ롥ǡ#ifndef TIC_NUME
#endifפǰϤǵҤ롥

5.4 ΰݤΤη

(5-4-1) TOPPERS_STK_Tʥץ	åΰݤ뤿η
(5-4-2) TOPPERS_MPF_Tʥץ	Ĺסΰݤ뤿η

åΰȸĹסΰϡɸǤϡintptr_tȤ
Ƴݤ뤬礭ñ̤ǥ饤󤵤ʤɤͳǡʳ
ȤƳݤˤϡ줾TOPPERS_STK_TTOPPERS_MPF_T
Υ١Ȥʤǡ˥ޥ롥

5.5 ӥåȥѥΥӥåȿ

(5-5-1) TBIT_TEXPTNʥץ	㳰װΥӥåȿ
(5-5-2) TBIT_FLGPTNʥץ	٥ȥե饰Υӥåȿ

TBIT_TEXPTNTBIT_FLGPTNɸǤϡͭӥåȿ
sizeofCHAR_BIT褸ΤȰפƤ뤳ȤꤷƤ롥¿
ΥѥǤβ꤬ΩĤǤʤˤϡåȰ¸
Ǥ񤭤ɬפ롥ͤ16ʾǤ
Фʤʤ

5.6 ΰݤΤΥޥ

(5-6-1) TOPPERS_ROUND_SZʥץ
(5-6-2) TOPPERS_COUNT_SZʥץ

TOPPERS_COUNT_SZ(sz, unit)ϡsz/unitڤ夲ͤޥǡ
szΥΰ򥵥unitΥǡǳݤ
뤿Ѥ롥TOPPERS_ROUND_SZ(sz, unit)ϡsz/unitڤ夲
Τunit򤫤ͤޥǡszΥΰ򥵥
unitΥǡǳݤΥȡ륵뤿Ѥ
롥

줾졤ɸTOPPERS_ROUND_SZTOPPERS_COUNT_SZŬڤǤʤ
Ȱ¸ѰդˤϡΥܥŬڤͤ˥ޥ롥


ͥΥåȰ¸

6.1 ͥΥåȰ¸ζ̻

6.1.1 ͥΥåȰ¸ι

ͥΥåȰ¸ϡʲǤǹ롥

(a) ͥΥåȰ¸

ͥΥå¸黲Ȥ륿åȰ¸ϡ
target_config.hޤϤ饤󥯥롼ɤեʥץå
סȯĶ¸Ѱդإåեʤɡˤ˴ޤ롥

åȤΥϡɥ񸻡ʳߥϥɥֹCPU㳰ϥɥֹ桤
ǥХ쥸Ϥʤɡˤϡƥॵӥ䥢ץꥱ
ˤͭѤǤ뤿ᡤͥΤߤͭѤޤեȤ
ʬơΩإåե˴ޤ롥ΥإåեɸŪ
̾Τ򡤥ƥά.hʤޤϡåά.hץåά.hˤȤ롥

(b) ͥΥåȰ¸⥸塼

ͥΥåȰ¸ѿؿޤ⥸塼롥Cǵ
Ҥʬtarget_config.c֥ǵҤʬ
target_support.S˴ޤ롥ץååסȯĶ¸ڤʬ
뤳Ȥ䡤ե뤬礭ʤʣΥեʬ䤹뤳Ȥǽ
Ǥ롥

(c) ͥΥåȰ¸ΤΥ͡൭

ͥΥåȰ¸ѿ̾ؿ̾Ƭ_kernel_Ϳ
̾˥͡ह뤿Υ⥸塼롥target_rename.defѰդġ
utils/genrenameˤˤꡤtarget_rename.htarget_unrename.h
롥ץååסȯĶ¸ڤʬˤϡ͡൭
Ҥڤʬ롥

(d) ޥɥ饤

ͥ˥ƥå򶡵뤹signal_timeŪ˸ƤӽФˤ
Υޥɥ饤ФΥإåե롤ե롤ƥॳե졼
ե򡤤줾졤target_timer.htarget_timer.c
target_timer.cfg˴ޤ롥ץååסȯĶ¸ڤʬ
뤳ȤǽǤ롥

(e) ե졼ե

ե졼եtarget_def.csvtarget.tf
target_check.tfѰդ롥ե졼եεˡˤ
ƤϡϤ롥

6.1.2 åȰ¸δؿ̿̾§

ͥΥåȰ¸ؿǡt_ǻϤޤΤϥ
ƥѡi_ǻϤޤΤ󥿥ƥѡx_ǻ
ޤΤϤΥƥȤǤƤӽФȤǤؿǤ롥

6.2 ȥ졼ǽؤб

ͥΥȥ졼ǽǡǥѥå㡤ߥϥɥ顤CPU
ϥɥγϡλΥȥ졼ϡåȰ¸Ǽ
ɬפ롥ۤȤɤΥåȥƥˤơνϥ
֥ǵҤƤꡤå¸Υȥ졼ޥ
Ʊˡʥȥ졼ޥ򡤥ȥ졼C쵭Ҥ˥ޥ
ˡˤϡȤ뤳ȤǤʤ

ǡ֥ǵҤƤ˥ȥ졼
ˤϡȥ졼ޥƤС줬
뤫̵뤷ơɸŪʥȥ졼ؿCǵҤƤ
ơƤӽФ褦˥ǥ󥰤롥

Ūˤϡɽκ¦˼ȥ졼ޥƤС
ɽα¦˼C쵭ҤƱνԤ褦˥ǥ󥰤롥

	ȥ졼ޥ		ȥ졼
	-----------------------------------------------
	LOG_DSP_ENTER			log_dsp_enter(p_runtsk)
	LOG_DSP_LEAVE			log_dsp_leave(p_runtsk)
	LOG_INH_ENTER			log_inh_enter(inhno)
	LOG_INH_LEAVE			log_inh_leave(inhno)
	LOG_EXC_ENTER			log_exc_enter(excno)
	LOG_EXC_LEAVE			log_exc_leave(excno)

6.3 ƥ֤δ

ASPͥ򿷤ʥåȥƥ˥ݡƥ󥰤ݤˡǤפ
Ȥϡͥ뤬륷ƥ֤򡤥ϡɥʥץå˾
ǤɤΤ褦˼¸뤫Ǥ롥ʲεҤϡTOPPERS奫ͥˤ
륷ƥ֤̣ΤäƤ뤳Ȥ˵ҤƤ롥

6.3.1 ߥå֤δ

ߥå֤ϡNMI٤Ƥγߤޥ֤Ǥ롥
ߥå֤뵡ǽϡƥ।󥿥ե쥤SILˤ
ä󶡤졤ͥߥå֤ʤ

ߥå֤Ǥϡsns_kerext_kerʳΥͥΥӥ
Ƥ֤ȤϤǤʤΤȤƤꡤƤˤϲ뤫ݾڤ
ʤΤᡤsns_kerext_kerƤӽФΤơ
ΥåȰ¸δؿߥå֤ǸƤӽФϹ
ɬפʤ

6.3.2 ƥȤδ

ñ̤¹Ԥ륳ƥȤϡƥȤ󥿥
Ȥʬव롥

åȰ¸ϡ¹νñ̤ƥȤǼ¹Ԥ
뤫󥿥ƥȤǼ¹ԤƤ뤫Ƚ̤뵡ǽ󶡤롥
ޤCPU㳰ȯƥȤˤĤȽ̤뵡ǽ󶡤롥

åȰ¸ǤϡߥϥɥCPU㳰ϥɥ󥿥
ƥȤڤ괹νиǸΥƥȤ᤹
ǥѥåǰŪ󥿥ƥȤڤ괹롥

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

¹νñ̤ƥȤǼ¹ԤƤˤfalse
ƥȤǼ¹ԤƤˤtrue֤ؿ

6.3.3 CPUå֤δ

åȰ¸ϡCPUå֤ܤ뵡ǽCPUå֤
ܤ뵡ǽCPUå֤Ǥ뤫Ƚ̤뵡ǽ󶡤롥

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

CPUå֤顤CPUå֤ܤؿδؿϡ
CPUå֤ǸƤӽФ뤳ȤϤʤƤӽФ줿ưݾڤ
ɬפʤ

δؿ¸ݤˤϡ1.6 ƥ륻ν
¸˴ؤפ˵ҤƤ˽ʤФʤʤ

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

CPUå֤顤CPUå֤ܤؿδؿϡ
CPUå֤ǸƤӽФ뤳ȤϤʤƤӽФ줿ưݾ
ɬפʤ

ƥȤCPUå֤ܤˤϡCPUå
ΤϥƥȤ˸¤졤󥿥ƥȤCPUå
֤뤳ȤϤʤȡt_unlock_cpuƤӽФΤϡ
t_lock_cpuˤäCPUå֤ˤʤäƤǤ롥i_lock_cpuˤä
CPUå֤ˤʤäƤˤϡt_unlock_cpuƤӽФ뤳ȤϤʤ

Ʊͤˡ󥿥ƥȤCPUå֤ܤˤϡCPU
֤Τ󥿥ƥȤ˸¤졤ƥȤ
CPUå֤뤳ȤϤʤȡi_unlock_cpuƤӽФ
Τϡi_lock_cpuˤäCPUå֤ˤʤäƤǤ롥
t_lock_cpuˤäCPUå֤ˤʤäƤˤϡi_unlock_cpuƤӽ
뤳ȤϤʤ

δؿ¸ݤˤϡ1.6 ƥ륻ν
¸˴ؤפ˵ҤƤ˽ʤФʤʤ

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

ߤΥƥ֤CPUå֤ξtrueCPUå֤ξ
ˤfalse֤ؿ

δؿߥå֤ǸƤӽФϹͤɬפʤ
Ȥ顤ߥå֤CPUå֤̤ǤɬפϤʤNMI
˥ͥδγߤߤʤˤϡߥå֤
CPUå֤Ʊξ֤Ǥ⤫ޤʤ

6.4 ߤ˴Ϣ륷ƥ֤δ

6.4.1 ͥ٥ޥδ

åȰ¸ϡͥ٥ޥꤹ뵡ǽȡͥ٥
򻲾Ȥ뵡ǽ󶡤롥

(6-4-1-1) bool_t VALID_INTPRI_CHGIPM(PRI intpri)ʥץ

intprichg_ipmФͥ٤ȤͭͤǤtrue
Ǥʤfalse֤ޥɸǤϡTMIN_INTPRIʾ塤TIPM_ENAALL
ʡ0˰ʲͤchg_ipmФͥ٤ȤͭǤ뤬
Ȱ¸ǤΥޥ뤳ȤǡTMIN_INTPRI⾮ͤͭ
뤳ȤǤͭͤϰϤ򶹤ƤϤʤʤˡ

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

ͥ٥ޥͤintpriꤹؿ

δؿϡVALID_INTPRI_CHGIPM(intpri)true֤intpriФƤ
߸ƤФ롥intpriˤǤʤͤϤ줿ưݾڤɬפ


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

ͥ٥ޥͤ򻲾Ȥ֤ؿ

ͥ٥ޥѤƥͥγߤ򤹤٤ƥޥ֤ϡ
CPUå֤ȶ̤Ǥ뤳ȤɬפǤ롥ŪˤϡCPUå
֤ˤơx_set_ipmѤƥͥγߤ򤹤٤ƥޥ
Ǥ⡤x_sense_lockfalse֤

Фơͥ٥ޥѤNMI٤Ƥγߤޥ
Ǥ硤ξ֤ߥå֤̤ǤɬפϤʤƱ
ξ֤Ǥ⤫ޤʤ

6.4.2 ׵ػߥե饰δ

åȰ¸ϡ׵ػߥե饰򥻥åȤ뵡ǽȥꥢ뵡
ǽ󶡤롥

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

intnodis_intena_intФֹȤͭͤǤ
trueǤʤfalse֤ޥ׵ػߥե饰åȡ
ꥢǤʤintnoФƤϡΥޥfalse֤褦ˤ롥

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

intnoǻꤵ줿׵饤Ф׵ػߥե饰򥻥åȤ
true֤ؿꤵ줿׵饤Фơ°ꤵ
Ƥʤˤϡfalse֤

δؿϡVALID_INTNO_DISINT(intno)trueȤʤintnoФƤΤ
ƤФ롥intnoˤǤʤͤϤ줿ưݾڤɬפʤ

dis_intӥ򥵥ݡȤTOPPERS_SUPPORT_DIS_INTޥ
ˤˤϡt_disable_intѰդƤʤФʤʤ

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

intnoǻꤵ줿׵饤Ф׵ػߥե饰򥯥ꥢ
true֤ؿꤵ줿׵饤Фơ°ꤵ
Ƥʤˤϡfalse֤

δؿϡVALID_INTNO_DISINT(intno)trueȤʤintnoФƤΤ
ƤФ롥intnoˤǤʤͤϤ줿ưݾڤɬפʤ

ena_intӥ򥵥ݡȤTOPPERS_SUPPORT_ENA_INTޥ
ˤˤϡt_enable_intѰդƤʤФʤʤ

6.4.3 ׵Υꥢ

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

intnoǻꤵ줿׵饤󤬥åȥꥬǤˡȥꥬ
׵򥯥ꥢؿintnoǻꤵ줿׵饤󤬥٥
ȥꥬǤˤϲ⤷ʤ

ASPͥΥå¸ǤϡδؿƤӽФƤʤ
åȰ¸䥷ƥॵӥǸƤӽФǽ⤤ᡤѰդ
ȤȤƤ롥

6.4.4 ׵Υץ

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

intnoǻꤵ줿׵饤Фơߤ׵ᤵƤ
trueǤʤfalse֤ؿ

ASPͥΥå¸ǤϡδؿƤӽФƤʤ
åȰ¸䥷ƥॵӥǸƤӽФǽ⤤ᡤѰդ
ȤȤƤ롥

6.4.5 ߥϥɥƬ

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

intnoǻꤵ줿׵饤ФߥϥɥƬǹԤ٤
ԤؿǹԤ٤ȤƤϡ׵饤󤬥å
ꥬǤΥȥꥬ줿׵Υꥢ󤲤롥

intnoФϿ줿ߥӥ롼ƤӽФߥϥɥ
ƬǸƤӽФ롥

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

intnoǻꤵ줿׵饤ФߥϥɥǹԤ٤
ԤؿǹԤ٤ȤƤϡߥȥIRCˤ
Ф߽νλΤ󤲤롥

intnoФϿ줿ߥӥ롼ƤӽФߥϥɥ
ǸƤӽФ롥

6.4.6 ׵饤°

(6-4-6-1) bool_t VALID_INTNO_CFGINT(INTNO intno)ʥץ

intnoCFG_INTФֹȤͭͤǤtrue
Ǥʤfalse֤ޥ׵饤°Ǥʤ
intnoФƤϡΥޥfalse֤褦ˤ롥

ASPͥΥå¸ǤϡΥޥϻȤƤʤᡤ
åȰ¸ǻȤʤʤ顤Ѱդɬפʤ

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

intnoǻꤵ줿׵饤γ°intatrǻꤵ줿̤
ꤹ롥ޤͥ٤intpriǻꤵ줿ͤꤹ롥

δؿϡɸγߴǽνѤΤߡ
¸ƤӽФ롥ߴǽν򥿡åȰ¸
ѰդǤδؿƤӽФʤˤϡδؿѰդ
ɬפϤʤ

intatrȤǤ°ϼ̤ꡥ

	TA_ENAINT		0x01	׵ػߥե饰򥯥ꥢ
	TA_EDGE			0x02	åȥꥬ

¾ˡåǳ°ɲäƤ褤å
ɲä뤿ˡʲ°̾ͽ󤵤Ƥ롥

	TA_POSEDGE				ݥƥ֥åȥꥬ
	TA_NEGEDGE				ͥƥ֥åȥꥬ
	TA_BOTHEDGE				ξåȥꥬ
	TA_LOWLEVEL				٥ȥꥬ
	TA_HIGHLEVEL			ϥ٥ȥꥬ

°̾򥿡åɲäˤϡ°ͤꤷ
target_kernel.hʤޤϡ饤󥯥롼ɤեˤ˴
롥ޤե졼ƥץ졼ȥեζkernel.tf
ǥ顼Ȥʤʤ褦ˡtarget_def.csvʤޤϡ饤󥯥롼
եˤ˴ޤᡤե졼ƥץ졼ȥեʤޤϡ
饤󥯥롼ɤեˤTARGET_INTATR롥

ꤵ줿ֹ椬CFG_INTФΤȤͭͤǤʤ䡤
γ׵饤ФǤʤ°ꤷ硤Ǥʤ
ͥ٤ꤷưݾڤɬפʤΤ褦ʥ
ϡե졼顼򸡽Ф褦ˡե졼ƥ
ץ졼ȥե򵭽ҤʤФʤʤ

6.5 ǥѥå

6.5.1 ƥȥ֥åΥǡ

(6-5-1-1) CTXB

åȰ¸ΥƥȤ¸뤿ˡTCB˻ĤȤɬ
פʥǡ¤ηCTXB롥ɸŪˤϡCTXBˤϡΥ
åݥ󥿤ȼ¹ԺƳϤǼ롥

6.5.2 ǥѥå

ǥѥåΡdispatcherˤϡå¸ľܸƤӽФ
뤳ȤϤʤͥΥåȰ¸Τ߸ƤӽФ롥
dispatcherϡƥȡCPUå֡ǥѥåľ֡
ͥ٥ޥ֤ǸƤӽФ롥

dispatcherνƤϼ̤ꡥ

----------------------------------------
void
dispatcher(void)
{
#ifdef LOG_DSP_ENTER
	log_dsp_enter(p_runtsk);
#endif /* LOG_DSP_ENTER */
  dispatcher_0:
	while ((p_runtsk = p_schedtsk) == NULL) {
		ߤĤCPUå֤ˤʤ褦
		󥿥ƥȤڤ괹  (*1)
		do {
			ߤ򤹤٤ƵĤȯԤ  (*2)
			ߵξ֤᤹ʡᥫͥγߤػߤ
		} while (!reqflg);
		reqflg = false;
		ƥȤ᤹  (*1)
		CPUå֤᤹ ... (*3)
	}
	p_runtskˤTCB饹åݥ󥿤
#ifdef LOG_DSP_LEAVE
	log_dsp_leave(p_runtsk);
#endif /* LOG_DSP_LEAVE */
	TCB¹ԺƳϤʬ  (*a)
}
----------------------------------------

ȯԤĴ֤󥿥ƥȤڤ괹Τϡδ֤˼¹
ߥϥɥǡǥѥå򤷤ʤ褦ˤ뤿Ǥ
롥λߥϥɥ餬󥿥ƥѤΥåȤ
ˤʤФʤʤ̾ϡ󥿥ƥȤڤ괹ݤ
ƥѤΥåڤ괹ƥȤ᤹ݤ
Υåڤ괹롥

åȤˤäƤϡäˡߥ졼ĶξˡŪ
ƥȤڤ괹뤳Ȥ񤷤礬롥ξˤϡ
֤˼¹Ԥߥϥɥǥǥѥå򤷤ʤ褦ʻȤ
뤳Ȥǡ󥿥ƥȤؤڴά뤳ȤǤ롥

(*1)󥿥ƥȤڤ괹ȥƥȤ᤹
ϡdo롼פǹԤäƤ褤ʥåȤˤäƤϡߤεġ
ػߤȤޤȤƽΨɤˡ

(*2)ˤơߤĤȡȯԤĽȤϡԲʬ
˹Ԥʤɬפ롥Բʬ˹Ԥʤʤ硤ߤĤľ
˳ߤꡤǥ¹Բǽ֤ˤʤȡ¹Ԥ٤
ˤ⤫餺ץåԤˤʤäƤޤ

ޤ(*2)ˤơȯԤ̿᤬ѰդƤʤ䡤
ȯԤΤԹʾˤϡߤ򤹤٤ƵĤƳߤդ
֤ˤʤäˡȯԤ˼˿ʤǤ褤ξ硤
γ¦do롼פˤäơȯԤĤȤˤʤ롥

CPUå뤿ξ㤨СCPUåγͥ٥ޥ
ѿݻƤˤϡ(*3)CPUå֤᤹ݤˡѿ
ͤ⸵äƤɬפ롥äˡѿԤδ֤˼¹Ԥ
ߥϥɥǽ񤭴ϡ᤹ͤȤɬפǤ롥

Ԥδ֤ϡp_runtskNULLʡ0ˤꤷʤФʤʤʾν
Ƥ򤽤Τޤ޼ФʤˡΤ褦ꤷʤȡߥ
ɥ餫iget_tidƤӽФݤưͤ˹פʤʤ롥

(*a)ˤơ¹ԺƳϤϡTCBǤϤʤå¸ˡ
⤢롥ξ硤μ¹Գ˥åȤäƤϤʤʤᡤ
εư㳰ɬפ롥

dispatcher򥢥֥ǵҤˤϡȥ졼ϡ
6.1.2 ȥ졼ǽؤбפǵҤˡǥǥ󥰤
ȡʤlog_dsp_enterڴΥΥåǡlog_dsp_leave
ڴΥΥåǼ¹Ԥ롥

6.5.3 ƥȤΥǥѥå

(6-5-3-1) void dispatch(void)
(6-5-3-2) OMIT_CALLTEXʥץ
(6-5-3-3) OMIT_CALL_TEXRTNʥץ

ƥȤΥǥѥådispatchˤϡƥ
ѤΥӥˤƥڴɬפˤʤäˡ
¸ΥӥؿƤӽФ롥

dispatchϡƥȡCPUå֡ǥѥåľ֡
ͥ٥ޥ֤ǸƤӽФ롥

dispatchνƤϼ̤ꡥ

----------------------------------------
void
dispatch(void)
{
	å쥸٤ƤΥ쥸򥹥å¸
	åݥ󥿤򼫥p_runtskˤTCB¸
	dispatch_r򡤼¹ԺƳϤȤƼTCB¸  (*a)
	dispatcherʬ

  dispatch_r:
	å쥸٤ƤΥ쥸򥹥å
	calltex();  (*b)
}
----------------------------------------

dispatchƤӽФ˼¹Ԥˤϡ¹ԺƳϤȤ
Ͽdispatch_räƤ롥dispatch_rˤϡdispatcherΤߤʬ
λξ֤ϡƥȡCPUå֡ǥѥåľ֡
ͥ٥ޥ֤Ǥ롥

(*b)calltexƤˡcalltexνơp_runtsk->enatextrue
ǡp_runtsk->texptn0Ǥʤˡcall_texrtnƤ֡ˤ򤳤˥
ŸΨ褤å¸calltexȤʤ
ϡOMIT_CALLTEXޥ뤳Ȥǡå¸calltex
ȤǤ롥ˡcall_texrtnȤʤΤˡ
OMIT_CALL_TEXRTNѰդƤ롥

6.5.4 ǥѥåư

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

ǥѥåưϡstart_dispatchˤϡͥ뵯ưˡ
νƤӽФ롥start_dispatchϡ꥿󤹤뤳ȤΤ
ؿǤ롥

start_dispatchϡ󥿥ƥȤǡNMI٤Ƥγߤޥ
֡ߥå֤Ʊξ֡ˤǸƤӽФ롥start_dispatch
ǡƥȤڤ괹CPUå֡ͥ٥ޥ
֤ˤʤФʤʤ

start_dispatchνƤϼ̤ꡥ

----------------------------------------
void
start_dispatch(void)
{
	ƥȤڤ괹
	CPUå֡ͥ٥ޥ֤ˤ
	dispatcher_0ʬ
}
----------------------------------------

6.5.5 ߤΥƥȤΤƤƥǥѥå

(6-5-5-1) void exit_and_dispatch(void)

ߤΥƥȤΤƤƥǥѥåexit_and_dispatchˤϡ
λ륵ӥؿƤӽФ롥exit_and_dispatchϡ
꥿󤹤뤳ȤΤʤؿǤ롥

exit_and_dispatchϡƥȡCPUå֡ǥѥå
ľ֡ͥ٥ޥ֤ǸƤӽФ롥

exit_and_dispatchνƤϼ̤ꡥ

----------------------------------------
void
exit_and_dispatch(void)
{
	dispatcherʬ
}
----------------------------------------

6.5.6 εư

(6-5-6-1) void activate_context(TCB *p_tcb)

εưactivate_contextˤϡٻ߾֤¹ԤǤ
֤ˤ˸ƤФ졤ꤵ줿TCBΥåݥ󥿤
¹ԺƳϤ򥿥ϻstart_rˤꤹ롥λǤϡ
ꤵ줿ΥåΰȤäƤϤʤʤ

ꤵ줿ǽ˼¹Ԥˤϡꤵ줿򼫥
ơ¹ԺƳϤȤϿstart_rʬƤ롥start_rˤϡ
dispatcherΤߤʬλξ֤ϡƥȡCPUå
֡ǥѥåľ֡ͥ٥ޥ֤Ǥ롥

start_rϡCPUå֤塤εưϤƤӽФ
ˡεưϤäƤˤϡext_tskƤӽФ

activate_contextstart_rνƤϼ̤ꡥ

----------------------------------------
void
activate_context(TCB *p_tcb)
{
	ꤵ줿p_tcbˤTCBΥåݥ󥿤
	start_r򡤼¹ԺƳϤȤƼTCB¸  (*a)
	return;

  start_r:
	CPUå֤ˤ
	p_runtskˤεưϤ򡤳ĥѥ᡼ȤƸƤӽФ
	ext_tskʬ ... (*c)
}
----------------------------------------

(*c)ext_tskƤˡεưϤƤӽФ֤Ϥ
ext_tskϤȤƤˡ롥

(*a)ˤơ¹ԺƳϤ򥹥å¸ˡȤˤϡ
λǥåȤäƤϤʤʤᡤν㳰ʤ
ʤʤ

6.6 ߥϥɥ

6.6.1 ߥϥɥν

ߤνˡϥץåˤä礭ۤʤ뤬褽
Ƥϼ̤ꡥ

----------------------------------------
void
<ߤν>(void)
{
	å쥸򥹥å¸
	if (ƥȤǳȯ) {
		å󥿥ƥѤΥåڤ괹
								󥿥ƥȤڤ괹
	}

	¿ųߤդ褦ˤCPUå֤ˤ
#ifdef LOG_INH_ENTER
	log_inh_enter(ߥϥɥֹ);
#endif /* LOG_INH_ENTER */
	ߥϥɥƤӽФ
#ifdef LOG_INH_LEAVE
	log_inh_leave(ߥϥɥֹ);
#endif /* LOG_INH_LEAVE */

  ret_int:
	if (ƥȤǳȯ) {
		ͥγߡʤޤϡ٤Ƥγߡˤޥ
		å򸵤ΥåᤷƥȤڤ괹
		if (reqflg) {
			reqflg = false;
			CPUå֤ˤ
			if (dspflg && p_runtsk != p_schedtsk) {
				å쥸٤ƤΥ쥸򥹥å¸
				åݥ󥿤򼫥p_runtskˤTCB¸
				ret_int_r򡤼¹ԺƳϤȤƼTCB¸  (*a)
				dispatcherʬ

			  ret_int_r:
				å쥸٤ƤΥ쥸򥹥å
			}
			calltex();  (*b)
			߽Υ꥿CPUå֤褦
		}
	}
	å쥸򥹥å
	߽Υ꥿
}
----------------------------------------

μ¹˳ߤȯνdispatcherʬ硤
Υ˼¹Ԥˤϡ¹ԺƳϤȤϿret_int_r
äƤ롥ret_int_rˤϡdispatcherΤߤʬλξ֤ϡ
ƥȡCPUå֡ǥѥåľ֡ͥ٥ޥ
֤Ǥ롥

ߤν򥢥֥ǵҤˤϡȥ졼
ϡ6.1.2 ȥ졼ǽؤбפǵҤˡǥǥ
󥰤뤳ȡ

6.6.2 ߥϥɥν

ߥ٥ȥϡɥǼ¸Ƥʤɡߥϥɥ
ѰդΨɤåȤΤˡߥϥɥ
˽뵡ѰդƤ롥

ʲΥޥϡɸγߴǽνѤΤߡ
å¸ǻȤ롥ߴǽν򥿡åȰ¸
ѰդǤΥޥȤʤˤϡΥޥ
դɬפϤʤ

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

ߥϥɥֹ椬inhnoߥϥɥδؿ̾inthdrǤߥ
ɥνΥ٥ޥINTHDR_ENTRYѤƳߥϥ
ɥ˽ˤϡΤ褦롥

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

ߥϥɥ˽ɬפʤˤϡΤ褦
ơߥϥɥδؿ̾򤽤Τޤ֤

#define INT_ENTRY(inhno, inthdr)	inthdr

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

ߥϥɥֹ椬inhnoߥϥɥδؿ̾inthdrǤߥ
ɥνޥinhno_numˤϡ֥쵭
ˡߥϥɥֹ椬ͤϤ롥ߥϥɥ˽
ɬפʤˤϡ롥

6.6.3 ߥϥɥ

(6-6-3-1) bool_t VALID_INHNO_DEFINH(INHNO inhno)ʥץ

inhnoDEF_INHФߥϥɥֹȤͭͤǤ
trueǤʤfalse֤ޥ

ASPͥΥå¸ǤϡΥޥϻȤƤʤᡤ
åȰ¸ǻȤʤʤ顤Ѱդɬפʤ

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

inhnoǻꤵ줿ߥϥɥνϤint_entryꤹ롥

δؿϡɸγߴǽνѤΤߡ
¸ƤӽФ롥ߴǽν򥿡åȰ¸
ѰդǤδؿƤӽФʤˤϡδؿѰդ
ɬפϤʤ

ꤵ줿ߥϥɥֹ椬DEF_INHФΤȤͭͤǤʤ
ưݾڤʤassertǥ顼ȤΤ˾ޤˡΤ褦
ϡե졼顼򸡽Ф褦ˡե졼
ƥץ졼ȥե򵭽ҤʤФʤʤ

6.6.4 ߴǽνѹ

(6-6-4-1) OMIT_INITIALIZE_INTERRUPTʥץ

ߴǽν򥿡åȰ¸Ѱդå¸
˴ޤޤɸγߴǽνѤʤˤϡΥ
ܥޥ롥

Υܥޥˤϡե졼ƥץ졼ȥե
ˤơOMIT_INITIALIZE_INTERRUPT1ꤹ롥

(6-6-4-2) void initialize_interrupt(void)ʥץ

OMIT_INITIALIZE_INTERRUPTޥˤϡδؿ򥿡å
¸Ѱդ롥OMIT_INITIALIZE_INTERRUPTޥ뤳Ȥˤ
뤽¾ΥǡѿޥϡδؿǻѤˤ
ѰդФ褤

6.6.5 ǥեȤγߥϥɥ

(6-6-5-1) default_int_handler(void)ʥץ

ե졼ˤߥϥɥΥơ֥ʤɤˤϡ
ߥϥɥϿʤäߥϥɥֹФơǥեȤ
ߥϥɥȤơdefault_int_handlerϿ롥

default_int_handlerϡɸΤΤ򥿡åȰ¸Ѱդ뤬桼
ѰդΤ֤褦ˡOMIT_DEFAULT_INT_HANDLERޥ
ˤϡåȰ¸ʤ褦ˤ롥ʤ桼
Ѱդ̾Τϡ_kernel_default_int_handlerȤʤ롥

6.6.6 ͥγ

ޤͥγߤˡ˴ؤơTOPPERS奫ͥ
ͽפΡ2.7.6 ͥγߤˡפ3Ĥˡ
ΤѤ뤫ꤹ롥

(a-1)ޤ(a-2)ѤͥȤ줿ߤФơ
APIˤߥϥɥϿȳ׵饤°򥵥ݡ
Ȥʤˤϡˡ򥿡åȰ¸Υ桼ޥ˥
˵Ҥ롥

(a-1)ޤ(a-2)ѤƥͥAPIˤϿ򥵥ݡȤ
䡤(b)ѤˤϡåȰ¸ˤƤ¸ɬ
롥ŪˤϡΤ褦꤬ɬפˤʤ롥

CFG_INTǻѤǤͥ٤ΥꥹȡINTPRI_CFGINT_VALIDˤˡ
ͥγߤȤʤͥ٤ޤ롥ޤCFG_INTͥ
γߤбǤ褦ˤ롥

ɬפʾˤϡDEF_INHͥγߤбǤ褦ˤ롥
̾ϡߥϥɥν˴ؤƤϡͥγ
̤ʤΤѰդɬפʤ

ͥ٥ޥˤꡤNMIʳΡ˥ͥγߤޥ
Ǥ褦ˤˤϡchg_ipmФͥ٤Ȥͭͤ
뤳ȤȽ̤ޥVALID_INTPRI_CHGIPMˤѹ롥

ʤͥγߤФơͥγ߽
ͳ˳ߥϥɥ¹Ԥˡ˴ؤƤϡTOPPERS/ASPͥ
ǽĥ塼˥󥰥ɡפΡֳߥϥɥ顿CPU㳰ϥɥľ
ƽФפ򻲾Ȥ뤳ȡ

6.7 CPU㳰ϥɥCPU㳰ȯΥƥ֤λ

6.7.1 CPU㳰ϥɥν

CPU㳰νˡϥץåˤä礭ۤʤ뤬褽
Ƥϼ̤ꡥ

----------------------------------------
void
<CPU㳰ν>(void)
{
	å쥸򥹥å¸
	if (ƥȤCPU㳰ȯ) {
		å󥿥ƥѤΥåڤ괹
								󥿥ƥȤڤ괹
	}
	CPU㳰ȯCPUå֤Ǥäɤ¸

	if (CPU㳰ȯCPUå֤Ǥä) {
		CPUå֤ˤ
	}
	else {
		¿ųߤդ褦ˤCPUå֤ˤ
	}
#ifdef LOG_EXC_ENTER
	log_exc_enter(CPU㳰ϥɥֹ);
#endif /* LOG_EXC_ENTER */
	CPU㳰ϥɥCPU㳰ξ򵭲ƤΰƬϤ
									ѥ᡼p_excinfˤȤƸƤӽФ
#ifdef LOG_EXC_LEAVE
	log_exc_leave(CPU㳰ϥɥֹ);
#endif /* LOG_EXC_LEAVE */

  ret_exc:
	if (ƥȤCPU㳰ȯ) {
		ͥγߡʤޤϡ٤Ƥγߡˤޥ
		å򸵤ΥåᤷƥȤڤ괹
		if (reqflg) {
			reqflg = false;
			CPUå֤ˤ
			if (dspflg && p_runtsk != p_schedtsk) {
				å쥸٤ƤΥ쥸򥹥å¸
				åݥ󥿤򼫥p_runtskˤTCB¸
				ret_exc_r򡤼¹ԺƳϤȤƼTCB¸  (*a)
				dispatcherʬ

			  ret_exc_r:
				å쥸٤ƤΥ쥸򥹥å
			}
			calltex();  (*b)
		}
	}
	CPU㳰Υ꥿ǡCPUå֡å֤
								CPU㳰ȯξ֤褦˽
	å쥸򥹥å
	CPU㳰Υ꥿
}
----------------------------------------

ǡreqflgtrueξνϡߤνȶ̤Ǥ뤿ᡤ
̤Υ롼Ѥ뤳ȤǤ롥̾ϡCPUå֤
褦פȡCPUå֡å֤CPU㳰ȯξ
褦˽פȤ㤤뤬reqflgtrueˤʤΤϡCPU
ȯCPUå֤ƤΤߤʤΤǡŪˤƱ
Ȥʤ롥

CPU㳰ϥɥθƽФϡCPU㳰CPUå֤ȯˤCPU
å֡CPUå֤ȯˤCPUå֤ǹԤ
ʤФʤʤȤդ뤳ȡ

CPU㳰ν򥢥֥ǵҤˤϡȥ졼
ϡ6.1.2 ȥ졼ǽؤбפǵҤˡǥǥ
󥰤뤳ȡ

6.7.2 CPU㳰ϥɥν

CPU㳰٥ȥϡɥǼ¸ƤʤɡCPU㳰ϥɥ
˽ѰդΨɤåȤΤˡCPU㳰ϥɥ
˽뵡ѰդƤ롥

ʲΥޥϡɸCPU㳰ǽνѤΤߡ
å¸ǻȤ롥CPU㳰ǽν򥿡åȰ¸
ѰդǤΥޥȤʤˤϡΥޥ
դɬפϤʤ

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

CPU㳰ϥɥֹ椬excnoCPU㳰ϥɥδؿ̾exchdrǤCPU
ϥɥνΥ٥ޥEXCHDR_ENTRYѤCPU㳰
ϥɥ˽ˤϡΤ褦롥

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

CPU㳰ϥɥ˽ɬפʤˤϡΤ褦
ơCPU㳰ϥɥδؿ̾򤽤Τޤ֤

#define EXC_ENTRY(excno, exchdr)	exchdr

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

CPU㳰ϥɥֹ椬excnoCPU㳰ϥɥδؿ̾exchdrǤCPU
ϥɥνޥexcno_numˤϡ֥쵭
ѤˡCPU㳰ϥɥֹ椬ͤϤ롥CPU㳰ϥɥ˽
ɬפʤˤϡ롥

6.7.3 CPU㳰ϥɥ

(6-7-3-1) bool_t VALID_EXCNO_DEFEXC(EXCNO excno)ʥץ

excnoDEF_EXCФCPU㳰ϥɥֹȤͭͤǤ
trueǤʤfalse֤ޥ

ASPͥΥå¸ǤϡΥޥϻȤƤʤᡤ
åȰ¸ǻȤʤʤ顤Ѱդɬפʤ

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

excnoǻꤵ줿CPU㳰ϥɥνϤexc_entryꤹ롥

δؿϡɸCPU㳰ǽνѤΤߡ
¸ƤӽФ롥CPU㳰ǽν򥿡åȰ¸
ѰդǤδؿƤӽФʤˤϡδؿѰդ
ɬפϤʤ

ꤵ줿CPU㳰ϥɥֹ椬DEF_EXCФΤȤͭͤǤʤ
ưݾڤʤassertǥ顼ȤΤ˾ޤˡΤ褦
ʥϡե졼顼򸡽Ф褦ˡե졼
ƥץ졼ȥե򵭽ҤʤФʤʤ

6.7.4 CPU㳰ǽνѹ

(6-7-4-1) OMIT_INITIALIZE_EXCEPTIONʥץ

CPU㳰ǽν򥿡åȰ¸Ѱդå¸
˴ޤޤɸγߴǽνѤʤˤϡΥ
ܥޥ롥

Υܥޥˤϡե졼ƥץ졼ȥե
ˤơOMIT_INITIALIZE_EXCEPTION1ꤹ롥

(6-7-4-2) void initialize_exception(void)ʥץ

OMIT_INITIALIZE_EXCEPTIONޥˤϡδؿ򥿡å
¸Ѱդ롥OMIT_INITIALIZE_EXCEPTIONޥ뤳Ȥˤ
뤽¾ΥǡѿޥϡδؿǻѤˤ
ѰդФ褤

6.7.5 ǥեȤCPU㳰ϥɥ

(6-7-5-1) default_exc_handler(void)ʥץ

ե졼ˤCPU㳰ϥɥΥơ֥ʤɤˤϡ
CPU㳰ϥɥϿʤäCPU㳰ϥɥֹФơǥե
CPU㳰ϥɥȤơdefault_exc_handlerϿ롥

default_exc_handlerϡɸΤΤ򥿡åȰ¸Ѱդ뤬桼
ѰդΤ֤褦ˡOMIT_DEFAULT_EXC_HANDLERޥ
ˤϡåȰ¸ʤ褦ˤ롥ʤ桼
Ѱդ̾Τϡ_kernel_default_exc_handlerȤʤ롥

6.7.6 CPU㳰ȯΥƥ֤λ

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

CPU㳰ȯΥƥ֤ͥ¹Ǥʤ
ȤǤꡤߥå֤ǤʤCPUå֤Ǥʤʥǥ
Ρ˳ͥ٥ޥ֤ǤtrueǤʤfalse
ؿCPU㳰ͥγ߽ȯˤfalse
֤

p_excinfˤϡCPU㳰ξ򵭲ƤΰƬϤϤ롥

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

CPU㳰ȯΥƥ֤ͥ¹Ǥʤ
ȤǤꡤߥå֤ǤʤCPUå֤Ǥʤtrue
Ǥʤfalse֤ؿCPU㳰ͥγ߽ȯ
ˤfalse֤

p_excinfˤϡCPU㳰ξ򵭲ƤΰƬϤϤ롥

åȤˤäƤϡߥåʤޤCPUåˤ򾮤Хإ
ɤǼ¸褦ȤȡCPU㳰ϥɥǡߥå֡ʤޤ
CPUå֡ˤȳͥ٥ޥ⤤٥ꤷ֤̤
ʤ礬롥ޤͥγ߽䥫ͥ¹
뤳ȤΤȽǤ뤳Ȥ񤷤ǡδؿfalse֤٤
֤ǤäƤ⡤ξ֤ȽǤΤˤ뤿ΥХإåɤ礭
ˤϡåǡ¦ݤtrue֤ȤƤ롥

6.8 ͥεưλȥåΰʤ

(6-8-1) ȥåץ⥸塼

ͥΥȥåץ⥸塼ϡƥΥꥻåȸ˺ǽ˼¹
ץǤ롥ȥåץ⥸塼ϡɸŪˤϡץ
¸ޤϥåװ¸ѰդʲνԤˤɬ
פϤʤŪˤϡȯĶѰդƤ륹ȥåץ⥸塼
Ѥˡʤξ硤åȰ¸mainؿѰդɬפ
䡤ץꥱѰդ礬ͤ롥

(a) ץå֤ν

ץå⡼ɡåݥ󥿡ե졼ݥץåξ
֤롥ޤNMI٤Ƥγߤޥ֡
å֤Ʊξ֡ˤȤ롥DRAMȥνʤɡ
뤿ɬפʽ򤳤ǹԤäƤ褤ʼ
hardware_init_hookǹԤäƤ褤ˡ

(b) hardware_init_hookƤӽФ

ƥΥꥻåȸ夹˹ԤɬפΤ륿åȥƥ¸ν
Ԥˡhardware_init_hookƤӽФhardware_init_hook
դƤʤϡ⤷ʤGNUȯĶǤϡ󥫥ץ
weak definitionˤꡤhardware_init_hookѰդƤʤͤ0
Ȥ뤳Ȥǡ¸Ǥ롥weak definitionεǽʤȯĶ
Ǥϡhardware_init_hookɬƤӽФȤˤ롥

hardware_init_hookϡåȰ¸ѰդΤɸǤ뤬
Υꥻåȸ夹˹ԤɬפΤɲä뤿ˡץꥱ
ѰդΤѤ⤢롥

ꥢɬפʽhardware_init_hookǹԤˤϡ
ƤӽФǥ˥뤳ȤǤʤᡤؿʥ֥롼
ˤƤӽФ˥åѤץåǤϡϤ
쥸ƸƤӽФȤäפɬפǤ롥ξ硤
hardware_init_hookCǵҤ뤳ȤϤǤʤʤ뤬򤨤ʤ

(c) bssdataν

bss򥯥ꥢdata˽ͤꤹ롥

ͥΤϡkerflgfalseʡ0ˤ˽뤳Ȱʳˡ
Υ󤬽뤳Ȥ˰¸Ƥʤᡤȥ
ץ⥸塼򥢥ץꥱѰդǡƥॵӥ䥢
ꥱ󤬤Υ󤬽뤳Ȥ˰¸Ƥʤ
ˤϡƥεư֤ṳ̂뤿ˡkerflgfalse˽
ǽʬǤ롥

(d) software_init_hookƤӽФ

ȯĶä˥饤֥ˤ˰¸ɬפʽԤˡ
software_init_hookƤӽФsoftware_init_hookѰդƤʤ
ϡ⤷ʤGNUȯĶǤϡ󥫥ץweak definition
ꡤsoftware_init_hookѰդƤʤͤ0Ȥ뤳Ȥǡ
¸Ǥ롥weak definitionεǽʤȯĶǤϡ
software_init_hookɬƤӽФȤˤ롥

software_init_hookϡåȰ¸ѰդΤɸǤ롥

(e) sta_kerʬ

sta_kerƤӽФsta_kerϡNMI٤Ƥγߤޥ
ߥå֤Ʊξ֡ˤǸƤӽФʤФʤʤsta_ker
ϥ꥿󤹤뤳Ȥʤᡤȥåץ⥸塼äƤ뤳
ȤϹͤɬפʤ

(6-8-2) void target_initialize(void)

åȰ¸νԤؿsta_kerκǽǸƤӽФ롥ץ
åסȯĶ¸ν򡤤ΰ¸ڤʬ뤳
ǽǤ롥

δؿϡޤǤ⥫ͥΥåȰ¸νԤ
ΤΤǤ롥ץꥱɬפʽϡ롼ǹ
ΤܤǤ뤬ƥΥꥻåȸ夹˹Ԥɬפˤϡ
hardware_init_hookѤ롥

(6-8-3) void call_exit_kernel(void)

󥿥ƥȤڤ괹ơexit_kernelʬؿext_ker
ƤӽФ롥exit_kernelϥ꥿󤹤뤳Ȥʤᡤδؿ
äƤ뤳ȤϹͤɬפʤ

ext_ker󥿥ƥȤڤ괹Τϡλ롼
󥿥ƥѤΥåǼ¹Ԥ뤿Ǥ롥

δؿϡߥå֤ǸƤФ뤿ᡤߥå֤
ӽФȤǤʤؿƤФʤ褦˼ʤФʤʤ

(6-8-4) void call_atexit(void)

ȯĶä˥饤֥ˤ˰¸ɬפʽλԤˡ
뽪λ˸ƤӽФؿexit_kernel顤λ롼μ¹
˸ƤӽФ롥

δؿϡatexitˤäϿ줿ؿȥǥȥ饯ƤӽФȤ
տޤƤꡤɸŪˤϡsoftware_term_hookƤӽФ
software_term_hookѰդƤʤϡ⤷ʤGNUȯĶǤϡ
󥫥ץweak definitionˤꡤsoftware_term_hookѰդ
Ƥʤͤ0Ȥ뤳Ȥǡ¸Ǥ롥weak definitionε
ǽʤȯĶǤϡsoftware_term_hookɬƤӽФȤˤ롥

δؿϡߥå֤ǸƤФ뤿ᡤߥå֤
ӽФȤǤʤؿƤФʤ褦˼ʤФʤʤ

(6-8-5) void target_exit(void)

åȰ¸νλԤؿδؿϡͥ뽪λκ
˸ƤӽФ졤꥿󤷤ƤϤʤʤץååסȯĶ
¸νλ򡤤ΰ¸ڤʬ뤳ȤǽǤ롥

δؿϡߥå֤ǸƤФ뤿ᡤߥå֤
ӽФȤǤʤؿƤФʤ褦˼ʤФʤʤ

6.9 ͥΥ塼˥

6.9.1 ӥåȥޥåץ

(6-9-1-1) OMIT_BITMAP_SEARCHʥץ
(6-9-1-2) uint_t bitmap_search(uint16_t bitmap)ʥץ

å¸ǡuint16_t͡bitmap1ΥӥåȤ⡤
Ⲽ̡ʱˤΤΤ򥵡Υӥåֹ֤ؿbitmap_search
դƤ롥ǡӥåֹϺǲ̥ӥåȤ0Ȥbitmap0ꤷ
ƤϤʤʤΤȤƤ롥

ӥåȥ̿ĥץåǤϡbitmap_search򡤥ӥåȥ̿
Ȥ褦˽ľΨɤ礬롥Τ褦ʾˤϡ
åȰ¸ǥӥåȥ̿Ȥäbitmap_search
OMIT_BITMAP_SEARCHޥ롥

ɸ饤֥˥ӥåȥ̿Ѥffs硤bitmap_search
(ffs(bitmap) - 1)Ȥ褤

(6-9-1-3) uint16_t PRIMAP_BIT(PRI pri)ʥץ

ӥåȥ̿Υդʤɤͳǡͥ٤ȥӥåȤȤб
ѹˤϡPRIMAP_BITޥ롥

6.9.2 ӥåȥե

(6-9-2-1) BIT_FIELD_UINTʥץ

8ӥåȰʲΥӥåȥեɤǡ̵ͤݻ
٤ǡǥեȤunsigned intȤʤäƤ뤬
Ȥġ¸ǡunsigned charޤunsigned shortΨ
ɤ礬롥

(6-9-2-2) BIT_FIELD_BOOLʥץ

1ӥåΥӥåȥեɤǡ֡ͤݻѤ٤ǡ
ǥեȤǤBIT_FIELD_UINTƱƤ뤬֡ͤ
뤳Ȥ뤿̤̾ȤƤ롥

(6-9-2-3) TBIT_TCB_PRIORITYʥץ

ͥ١ʤӡߥ塼ƥåĥˤ١ͥ١ˤݻ
TCBΥեɤΥӥåȿǥեȤǤ8ӥåȤƤ
ʳˡӥåȿ򤳤̾˥ޥ롥

6.10 ͥ˴ؤ뤽¾

6.10.1 󥿥ƥѤΥåΰ

(6-10-1-1) DEFAULT_ISTKSZ

DEF_ICSˤ󥿥ƥѤΥåΰ褬ꤵʤΡ
ǥեȤΥåΰΥ

(6-10-1-2) DEFAULT_ISTKʥץ

DEF_ICSˤ󥿥ƥѤΥåΰ褬ꤵʤΡ
ǥեȤΥåΰƬϡΥޥʤˤϡ
DEFAULT_ISTKSZΥåΰ褬ˤݤ롥

(6-10-1-3) STK_T *TOPPERS_ISTKPT(STK_T *istk, SIZE istksz)ʥץ

󥿥ƥѤΥåݥ󥿤νͤݻѿistkpt
ѤˡΥܥˡåΰƬϡistkˤȥ
ΰΥistkszˤ顤åݥ󥿤νͤޥ
롥

6.10.2 ٥

(6-10-2-1) TOPPERS_EMPTY_LABEL(type, symbol)ʥץ

󥯥顼ɤˡǡtypeǤѿsymbolͿ
뤿ΥޥͿȤ뤳ȤϤʤᡤɤΤ褦
ͿƤ褤

6.11 ȥ졼ǽ˴ؤ

ASPͥΥɤˤϡͥμ¹ԥȥ졼뤿
ΥޥǤ롥ǥեȤǤϡΥޥ϶
ƥȥ졼μϹԤʤΥޥŬڤ뤳
ǥȥ졼μԤȤǤ롥

6.11.1 Ǥȥ졼μȥޥ

Ǥȥ졼μȡ뤿ޥϼ
̤Ǥ롥

(a) ͥưϤȽλ

Υޥ뤳ȤǡͥưϻȽλΥȥ졼
뤳ȤǤ롥

	LOG_KER_ENTER		ͥ뤬ư򳫻Ϥľʽδλ
	LOG_KER_LEAVE		ͥνλext_kerˤƤФ줿ľʽλ
						μ¹

(b) ñ̤μ¹ԳϤȽλ

Υޥ뤳ȤǡߥϥɥINHˡߥӥ롼
ISRˡϥɥCYCˡ顼ϥɥALMˡCPU㳰ϥ
EXCˡ㳰롼TEXˤμ¹ԳȽλΥȥ졼
뤳ȤǤ롥

	LOG_<ñά>_ENTER	ñ̤μ¹Գľ
	LOG_<ñά>_LEAVE	ñ̤νλľ

ߥϥɥϡץꥱϿΤΤߤоݤȤ
ӥ롼ƤӽФ˥ͥΤоݤȤ
μ¹ԳϤȽλϡ¾ˡǼǤ뤿ᡤˡѰ
Ƥʤ

ʤߥϥɥCPU㳰ϥɥμ¹ԳϤȽλΥȥ졼
ϡåȰ¸Ǽɬפ롥ܤϡ6.1.2 ȥ졼
ǽؤбס6.6.1 ߥϥɥνס6.7.1 CPU㳰ϥ
ɥνפ򻲾Ȥ뤳ȡ

(c) ֤Ѳ

Υޥ뤳Ȥǡ֤ѲΥȥ졼
뤳ȤǤ롥¹Ծ֤ȼ¹Բǽ֤δ֤ܤϡ¾ˡ
ǼǤ뤿ᡤΥޥǤϼǤʤ

	LOG_TSKSTAT		֤Ѳ

(d) ǥѥåμ¹ԳϤȽλ

Υޥ뤳Ȥǡǥѥå㤬¹ԳϤȡλ
Υȥ졼뤳ȤǤ롥

	LOG_DSP_ENTER	ǥѥåμ¹Գ
	LOG_DSP_LEAVE	ǥѥåνλ

ǥѥåμ¹ԳϤϡ¹Ծ֤¹Բǽ֤ܤ
ߥ󥰤Ǥ뤿ᡤ¹Բǽ֤ܤ륿TCBؤΥݥ󥿤
᡼Ȥ롥դˡǥѥåνλϡ¹Բǽ֤
¹Ծ֤ܤ륿ߥ󥰤Ǥ뤿ᡤ¹Ծ֤ܤ륿TCB
Υݥ󥿤ѥ᡼Ȥ롥

ASPͥǤϡ¹ԤǤ륿ʤͥ뤬ɥ֤ˤʤ
ˤϡǥѥåαޤ롥Τᡤɥ֤ؤܤȥ
ɥ֤¾ξ֤ؤܤϡΥޥǤϼǤʤ

ʤǥѥåμ¹ԳϤȽλΥȥ졼ϡåȰ
¸Ǽɬפ롥ܤϡ6.1.2 ȥ졼ǽؤб
ȡ6.5.2 ǥѥåΡפ򻲾Ȥ뤳ȡ

(e) ӥȽи

Υޥ뤳ȤǡƥӥȽиΥȥ졼
뤳ȤǤ롥

	LOG_<ӥʸɽ>_ENTER		ӥ̾
	LOG_<ӥʸɽ>_LEAVE		ӥ̾νи

줾Υޥ̾Τѥ᡼ξܺ٤ˤĤƤϡͥΥ
ɤ򻲾Ȥ뤳ȡ

6.11.2 ȥ졼ϿΥץ륳

ȥ졼ϿˡΰȤơ˥ȥ졼Ͽ
뤿Υץ륳ɤarch/logtraceǥ쥯ȥѰդƤ롥Υ
ץ륳ɤϡƥǽƱͤΥȥ졼ǽѰդȥ졼
˵ϿȤȤˡɤ߽Фɽ뵡ǽ
¸Ƥ롥

Υץ륳ɤȤ߹ˡϼ̤Ǥ롥

(1) target_config.htrace_syssvc.hˡεҤɲä롥

	#ifdef TOPPERS_ENABLE_TRACE
	#include "logtrace/trace_config.h"
	#endif /* TOPPERS_ENABLE_TRACE */

(2) Makefile.targetˡεҤɲä롥

	ifeq ($(ENABLE_TRACE),true)
		COPTS := $(COPTS) -DTOPPERS_ENABLE_TRACE
		KERNEL_DIR := $(KERNEL_DIR) $(SRCDIR)/arch/logtrace
		KERNEL_COBJS := $(KERNEL_COBJS) trace_config.o trace_dump.o
	endif

Υץ륳ɤѤơȥ졼Ͽפˡˤ
ƤϡTOPPERS/ASPͥ 桼ޥ˥奢פΡ10.3 ȥ졼
ϿΥץ륳ɤλˡפ򻲾Ȥ뤳ȡ

ʤΥץ륳ɤǤϡǥѥåνиξܡ
ƥνϤ3ĤΥȥ졼ΤߤϿƤ롥¾Υȥ졼
Ͽˤϡtrace_config.hʤtrace_dump.cˤ
ɬפ롥

6.12 ͥΥåȰ¸ΤΥ͡൭

ͥĤƻȤؿѿʤɤ̾Τǡ֥ȥե
ΥܥɽϿƳ黲ȤǤ̾ΤϡC٥ǡƬ
"_kernel_"ޤ"_KERNEL_"Ǥ̾ΤȤʤФʤʤASP
Ǥϡɤ򥳥ѥȤݤĤĤ¸뤿ˡ͡
൭ҥեƳƤ롥

Ūˤϡ͡ह٤̾Τꥹȥåפxxx_rename.defѰդ
Υե뤫ġutils/genrenameˤˤꡤ̾Τ͡ह뤿
Υޥޤxxx_rename.hȡΥޥ뤿
xxx_unrename.h롥ġεưˡϼ̤Ǥ롥

	% genrename xxx

xxx_rename.defˤϡ͡ह٤̾Τ1Ԥ1ĵҤ롥xxxxȤ̾
ΤҤƤ硤xxx_rename.hˤϼΤ褦ʵҤ롥

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

ޤxxx_unrename.hˤϼΤ褦ʵҤ롥

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

xxx_rename.defˤϡ¾Υ͡൭ҤिˡINCLUDE
"yyy"פޤϡINCLUDE <yyy>פȤҤޤ뤳ȤǤ롥ε
Ƥ硤xxx_rename.hˤϡ#include "yyy_rename.h"פޤ
#include <yyy_rename.h>פȤҤxxx_unrename.hˤϡ#include
"yyy_unrename.h"פޤϡ#include <yyy_unrename.h>פȤҤ
롥

xxx_rename.def"#"ǻϤޤԤϥȤȤɤФ롥ޤ
Ԥ̵뤵롥

ͥΥå¸ǻȤ̾Τ͡ह뤿ˡkernel
ǥ쥯ȥˡkernel_rename.defȡkernel_rename.h
kernel_unrename.hѰդƤ롥kernel_rename.defˤϡ
INCLUDE "target"פȤҤޤޤƤꡤåȰ¸Υ͡
൭Ҥ褦ˤʤäƤ롥

åȰ¸ǤϡåȰ¸ǻȤ̾Τ͡ह뤿
ˡtarget_rename.defȡtarget_rename.h
target_unrename.hѰդ롥åȰ¸ץååס
ȯĶ¸ڤʬˤϡtarget_rename.defINCLUDEҤ졤
ץååסȯĶ¸Υ͡൭Ҥ褦ˤ롥

6.13 ޥɥ饤

6.13.1 ޥɥ饤ФΥե빽

ޥɥ饤ФȤ߹िŪAPI򵭽Ҥƥॳե졼
եtarget_timer.cfgѰդ롥Υեˤϡ
ɥ饤Ф뤿ν롼ɲáޥɥ饤Фλ
뤿νλ롼ɲá޳ߤΤγߥϥɥ
ʤޤϡߥӥ롼ɲáˡ޳ߤΤγ
׵饤°ŪAPIʤɤޤळȤˤʤ롥

ޥɥ饤ФƤӽФɬפޤإåե
target_timer.hѰդ롥ޤɬפǤСޥɥ饤Фμե
target_timer.cѰդ롥

6.13.2 ޤνλ߽

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

ޤ޳ߤŪȯؿ޳ߤ
ϡTIC_NUMETIC_DENOǻꤵ줿֤Ȱפʡ5.2 
ƥåפ򻲾ȡˡ

δؿϡtarget_timer.cfg˵ҤŪAPIˤꡤ롼
ƥͥϿ뤳ȤꤷƤ롥

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

ޤưߤ޳ߤȯʤ褦ˤؿ

δؿϡtarget_timer.cfg˵ҤŪAPIˤꡤλ롼
ȤƥͥϿ뤳ȤꤷƤ롥

(6-13-2-3) void target_timer_handler(void)
    ޤ void target_timer_isr(intptr_t exinf)

޳ߤˤ굯ư߽ץࡥ޳ߥϥɥ
ȤƼ¸ˤtarget_timer_handlerߥӥ롼Ȥ
Ƽ¸ˤtarget_timer_isr̾ΤȤ롥

δؿϡtarget_timer.cfg˵ҤŪAPIˤꡤߥϥɥ
ϳߥӥ롼ȤƥͥϿ뤳ȤꤷƤ롥

6.13.3 ǽɾѥƥλȤΤεǽ

ǽɾѥƥλȵǽget_utmˤ򥵥ݡȤˤϡ
ޥɥ饤ФǡʲΥǡؿʤɤѰդ롥

(6-13-3-1) CLOCK

ͤɽΤΥǡ

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

ޤθͤɤ߽Фɽ֤ؿͤϡ֤ηв
Ȥä뤳ȤꤷƤ롥ϡɥΥޤͤ
ΤǤˤϡδؿäͤȤʤ褦Ѵ롥

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

޳׵åؿ޳ߤ׵ᤵƤ
true׵ᤵƤʤfalse֤

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

ͤɽ1ñ̤Ѵ뤿Υޥʤޤϴؿˡ
targettimer_get_currentɤ߽Фͤ򡤥޳ȯηв
ñ: 1áˤѴ뤿Ѥ롥


ե졼ե

7.1 եȥåȰ¸ΰդ

ASPͥΥե졼ϡեεҤ˽äƥե
ӥ顼åԤե졼եˤϡ
ʲ4Ĥ롥

(a) ŪAPIơ֥

ŪAPIΰȡŪAPIΥѥ᡼ˤĤƵҤե롥Ū
APIĥʳѹɬפʤᡤå¸Ѱ
Ƥkernel/kernel_api.csvˡ

(b) ͼܥơ֥

ե졼Υѥ1ˤơѥ᡼׻Cե˽
ͤ᤿ܥʰ̤ˤϼˤ򵭽Ҥ뤿Υե롥
¸ǤϡåȤ˰¸ɬפȤʤ륷ܥ򵭽Ҥե
ѰդƤkernel/kernel_def.csvˡåȤ˰¸ɬפ
ʤ륷ܥ뤬ˤϡtargetǥ쥯ȥ֤줿target_def.csv
˵Ҥ롥

ͤ᤿ܥͤϡե졼Υѥ2ӥѥ3
ƥץ졼ȥեǻȤ뤳ȤǤ롥

(c) ѥ2Υƥץ졼ȥե

ե졼Υѥ2ϡƥץ졼ȥե˽äơͥι
եkernel_cfg.cˡإåե
kernel_cfg.hˤʤɤ롥Υƥץ졼ȥեϡå
¸ȥåȰ¸ڤʬƤ뤬¾ΥեΥå
¸ȤϵդˡåȰ¸饿å¸򥤥󥯥롼ɤ
ˤʤäƤ롥

Ūˤϡtargetǥ쥯ȥ֤줿target.tfǡɬפѿ
塤ƥץ졼ȥեΥå¸kernel/kernel.tfˤ
󥯥롼ɤ롥kernel.tfǤϡͥΥå¸ǻѤ
롥kernel.tf򥤥󥯥롼ɤ塤target.tfǤϡ
ͥΥåȰ¸ǻѤѿ롥target.tf顤
å¸åװ¸򡤳ȯĶ¸ڤʬƤ褤

(d) ѥ3Υƥץ졼ȥե

ե졼Υѥ3ϡƥץ졼ȥե˽äơŪAPIΰ
ѥ᡼ΥåԤΥƥץ졼ȥե⡤
¸ȥåȰ¸ڤʬƤꡤåȰ¸饿
å¸򥤥󥯥롼ɤˤʤäƤ롥

Ūˤϡtargetǥ쥯ȥ֤줿target_check.tfǡɬפѿ
塤ƥץ졼ȥեΥå¸
kernel/kernel_check.tfˤ򥤥󥯥롼ɤ롥kernel_check.tfǤϡ
ͥΥå¸ǽ֥å˽Ϥѥ᡼
ΥåԤkernel_check.tf򥤥󥯥롼ɤ塤target_check.tf
ǤϡåȤ˰¸åԤtarget_check.tf顤ץ
¸åװ¸򡤳ȯĶ¸ڤʬƤ褤

ʤե졼ξܺٻͤեεˡˤĤƤϡ
PDFեηۤƤTOPPERS奫ͥѥե
졼͡פӡTOPPERS奫ͥѥե졼¢ޥ
ץå͡פ򻲾Ȥ뤳ȡ

7.2 ѥ2Υƥץ졼ȥեΥåȰ¸

ʲǤϡѥ2Υƥץ졼ȥեΥåȰ¸򵭽Ҥɬ
פʻˤĤ롥

7.2.1 å¸򥤥󥯥롼ɤ٤ѿ

target.tfkernel.tf򥤥󥯥롼ɤˡѿƤ
Фʤʤ

(7-2-1) INTNO_ATTISR_VALID		ATT_ISRǻѤǤֹ
(7-2-2) INHNO_ATTISR_VALID		INTNO_ATTISR_VALIDбϥɥֹ
(7-2-3) INHNO_DEFINH_VALID		DEF_INTǻѤǤߥϥɥֹ
(7-2-4) EXCNO_DEFEXC_VALID		DEF_EXCǻѤǤCPU㳰ϥɥֹ
(7-2-5) INTNO_CFGINT_VALID		CFG_INTǻѤǤֹ
(7-2-6) INTPRI_CFGINT_VALID		CFG_INTǻѤǤͥ

APIǻѤǤֹ桿ߥϥɥֹ桿CPU㳰ϥɥֹ桿
ͥ٤ΥꥹȤ򡤳ѿ롥INHNO_ATTISR_VALIDˤϡ
INTNO_ATTISR_VALID˥ꥹȥåפֹбߥϥɥ
ֹΥꥹȤ롥

(7-2-7) TARGET_TSKATRʥץ		åΥ°
(7-2-8) TARGET_ISRATRʥץ		åISR°
(7-2-9) TARGET_INHATRʥץ		åγߥϥɥ°
(7-2-10) TARGET_INTATRʥץ	åγ°
(7-2-11) TARGET_EXCATRʥץ	åCPU㳰ϥɥ°

ƥ֥Ȥ°򡤥å˳ĥˡ륪֥
°򼨤ѿˡĥ˻ѤӥåȤ¤롥ˤ
ꡤĥ˻ѤӥåȤꤵƤˡ顼ˤʤΤɤ

(7-2-12) OMIT_INITIALIZE_INTERRUPTʥץ

ͥΥåȰ¸ˤơOMIT_INITIALIZE_INTERRUPT
ˡѿ1롥

ˤꡤINHINIBINTINIBTNUM_INHNOtnum_inhnoinhinib_table
TNUM_INTNOtnum_intnointinib_tableinitialize_interruptȡ
ߥϥɥν뤿εҡINTHDR_ENTRYޥΥ
ȡˤkernel_cfg.c롥

(7-2-13) OMIT_INITIALIZE_EXCEPTIONʥץ

ͥΥåȰ¸ˤơOMIT_INITIALIZE_EXCEPTION
ˡѿ1롥

ˤꡤEXCINIBTNUM_EXCNOtnum_excnoexcinib_table
initialize_exceptionȡCPU㳰ϥɥν뤿
εҡEXCHDR_ENTRYޥΥꥹȡˤkernel_cfg.c롥

(7-2-14) CHECK_STKSZ_ALIGNʥץ

åΰΥͤܿǤʤФʤʤˡѿ
ͤ롥ѿ뤳Ȥǡkernel.tfˤơå
ΰΥʤʤѿͤܿǤʤ˾Υ顼
å褦ˤʤ롥åɬפʤˤϡѿ
ʤ

7.2.2 å¸ѿ

kernel.tfǤϼѿ뤿ᡤkernel.tf򥤥󥯥롼ɤ
塤target.tfǤ򻲾Ȥ뤳ȤǤ롥

(7-3-1) INTNO[inhno]		inhnoбintnoѴ뤿Ϣ
(7-3-2) INHNO[intno]		intnoбinhnoѴ뤿Ϣ

7.3 ѥ3Υƥץ졼ȥեΥåȰ¸

ʲǤϡѥ3Υƥץ졼ȥեΥåȰ¸򵭽Ҥɬ
פʻˤĤ롥

target_check.tfkernel_check.tf򥤥󥯥롼ɤˡɬפ˱ơ
ѿƤʤФʤʤ

(7-3-1) CHECK_FUNC_ALIGNʥץˡؿΥ饤ñ
(7-3-2) CHECK_FUNC_NONNULLʥץ˴ؿNULLå
(7-3-3) CHECK_STACK_ALIGNʥץ	åΰΥ饤ñ
(7-3-4) CHECK_STACK_NONNULLʥץ˥åΰNULLå
(7-3-5) CHECK_MPF_ALIGNʥץ	ĹסΰΥ饤ñ
(7-3-6) CHECK_MPF_NONNULLʥץ	ĹסΰNULLå

ؿåΰ衿ĹסΰƬϤΥ饤Ȥ
åԤˤϡ줾졤CHECK_FUNC_ALIGNCHECK_STACK_ALIGN
CHECK_MPF_ALIGN򥢥饤ñ̤롥ؿåΰ衿Ĺ
סΰƬϤNULLǤʤΥåԤˤϡ줾
CHECK_FUNC_NONNULLCHECK_STACK_NONNULLCHECK_MPF_NONNULL1롥
åɬפʤˤϡѿʤ

7.4 cfg1_out.cΥ󥯤ɬפʥ֤ե

ե졼˴ؤƥåȰ¸Ѱդɬפե
ơեʳˡcfg1_out.c󥯤뤿ɬפʥ֤
ե뤬롥

ե졼Υѥ1ǤϡŪAPIѥ᡼ͤC
ѥѤƵ뤿ˡcfg1_out.c롥򥳥ѥ롤
󥯤ƥ֥ȥեݤˡȥåץ⥸塼뤫
黲Ȥ륷ܥͿɬפ롥

Ϳ뤿ˡcfg1_out.c顤åȰ¸
target_cfg1_out.h򥤥󥯥롼ɤƤ롥target_cfg1_out.hʤޤϡ
饤󥯥롼ɤեˤˤϡȥåץ⥸塼뤫黲
Ȥ륷ܥΥ֤ޤ롥ŵŪˤϡʲΤ褦
ޤɬפ롥

----------------------------------------
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;
----------------------------------------


ƥॵӥΥåȰ¸

8.0 ƥॵӥΥåȰ¸

ꥢݡȿ䥷ƥϢʤɡƥॵӥ
ꤹ뤿target_syssvc.hޤϤ饤󥯥롼ɤ
եʥץååסȯĶ¸Ѱդإåե
ʤɡˤ˴ޤ롥

ʤTOPPERSȹߥݡͥȥƥबƳȡΥե
Ƥϥݡͥȵҥե˵Ҥ뤳ȤˤʤꡤΥե
̵ʤʤޤϡ˽̾˸ߤǤ롥

8.1 ƥǽΥåȰ¸

åȰ¸󶡤٤ƥǽΤϼ̤Ǥ
롥

(8-1-1) TCNT_SYSLOG_BUFFER

ƥǽΥХåեΥޥʤ
Υǥեͤ32

(8-1-2) void target_fput_log(char_t c)

ƥ٥ϤΤʸϴؿåȰ¸ˡǡ
ʸcɽ//¸롥

δؿϡߥå֤ǸƤФ礬뤿ᡤߥå
֤ƤӽФȤǤʤؿƤФʤ褦˼ʤФʤ


٥Ϥ򥷥ꥢݡȷͳǹԤǡꥢ륤󥿥ե
饤ФȥݡȤѤʤȤ˾ޤݡȿ­ʤˤ
򤨤ѤˤϡξԤ礷ʤ褦դɬפǤ롥
ŪˤϡξԤƱǥꥢI/OǥХȤ褦ˤꥢ륤
եɥ饤Фư٥ϤԤƤ⺹٤ʤ褦
߷פ롥ޤ٥Ϥưϸ˥ꥢ륤󥿥եɥ饤
ФꥢI/OǥХȡʸǽ뤿ᡤ
ѤݡȤϡ٥ϵǽ¦ǽꥢ륤󥿥ե
ɥ饤ФǤϽʤ褦ˤȤ褤

ʤδؿΤ򡤤ɤΥե˵Ҥ뤫ˤʤ롥ƥ
ӥΥåȰ¸ˤϡɸǤϡؿ򵭽Ҥ뤿Υե
ѰդƤʤåȰ¸ѰդƤ褤㳰Ūˡ
ͥΥåȰ¸⥸塼target_config.cˤ˵ҤƤ褤

8.2 ΥåȰ¸

åȰ¸󶡤٤Τϼ̤Ǥ롥
ϡtarget_syssvc.hޤϤ饤󥯥롼ɤե
ޤ롥

(8-2-1) LOGTASK_PRIORITYʥץ

ͥ٤ޥʤΥǥեͤ3

(8-2-2) LOGTASK_STACK_SIZEʥץ

ΥåޥʤΥǥե
ͤ1024

(8-2-3) LOGTASK_PORTIDʥץ

νΥꥢݡֹ桥ʤΥǥեͤ1

(8-2-4) LOGTASK_INTERVALʥץ

ưֳ֡ñ̤ϥߥáˡʤΥǥեͤ10

(8-2-5) LOGTASK_FLUSH_WAITʥץ

ϤԤ碌ˤơԤñ̤Ȥʤ֡ñ
̤ϥߥáˡʤΥǥեͤ1

8.3 ꥢ륤󥿥եɥ饤ФΥåȰ¸

åȰ¸󶡤٤ꥢ륤󥿥եɥ饤ФΤ
ϼ̤Ǥ롥ϡ̤˻꤬ʤ¤ꡤtarget_serial.h
Ϥ饤󥯥롼ɤե˴ޤᡤɬפʥե졼
target_serial.cfg˵Ҥ롥ؿμΤɬפʾˤϡ
target_serial.cΥեѰդ롥

ꥢ륤󥿥եɥ饤ФǡåȤΥꥢI/OǥХ
¸ʬ򡤥ꥢI/OǥХɥ饤ФȸƤ֡ꥢI/OǥХ
ɥ饤Фϡ褽ITRONǥХɥ饤߷ץɥ饤PDIC
롥PDICեǡ¾Υƥˤⶦ̤˻Ȥǽ
ˤϡpdicǥ쥯ȥ֤

8.3.1 ѿǡؿ

(8-3-1-1) TNUM_PORT

ꥢ륤󥿥եɥ饤ФݡȤ륷ꥢݡȿ
ޥΥޥϡtarget_syssvc.hޤϤ饤󥯥롼ɤ
ե˴ޤ롥

(8-3-1-2) void sio_initialize(intptr_t exinf)ʥץ

ꥢI/OǥХɥ饤Фνtarget_serial.cfgˡδؿ
롼ȤϿŪAPIޤ롥

(8-3-1-3) void sio_terminate(intptr_t exinf)ʥץ

ꥢI/OǥХɥ饤Фνλtarget_serial.cfgˡδؿ
λ롼ȤϿŪAPIޤ롥

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

ꥢI/OǥХγߥӥ롼target_serial.cfgˡ
ؿߥӥ롼ȤϿŪAPIޤ롥ޤ
ŪAPIɬפʥꥢI/OǥХγֹʤɤϡtarget_serial.hǥ
롥ߥӥ롼ǤϤʤߥϥɥȤ뤳
Ǥ롥

(8-3-1-5) SIOPCB

ꥢI/Oݡȴ֥åΥǡtarget_serial.hˤϡǡ
ޤޤƤФ褤ˡ

(8-3-1-6) SIO_RDY_SNDSIO_RDY_RCV

ǽХåμֹSIO_RDY_SNDˡΥХåμ
ֹSIO_RDY_RCV˥ޥ롥ХåζػߡĤԤʤ
ӥsio_ena_cbrsio_dis_cbrˤѤ롥

8.3.2 ǥХӥ롼

ʲΥǥХӥ롼ϡʾʤȤ˥ꥢI/OݡȤ
ߤػߤ줿֤ǸƤӽФ롥ޤƥȡ󥿥
ƥȤΤǸƤӽФ⤢ʤǸƤӽФƤ
ư褦ˤʤФʤʤˡ

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

siopidǻꤵ륷ꥢI/OݡȤ򥪡ץ󤹤ؿexinfϥꥢ
I/OݡȤФĥǡХåƤֻ˥ݡȤ̤뤿
Ϥ

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

siopcbǻꤵ륷ꥢI/OݡȤ򥯥ؿ

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

siopcbǻꤵ륷ꥢI/OݡȤˡcǼʸؿ
ʸ쥸줿ˤtrueʸ
Ƥʤˡʸ쥸ʤäˤfalse֤

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

siopcbǻꤵ륷ꥢI/OݡȤʸɤؿʸƤ
硤ɤʸΥɤͤȤ֤ʸƤʤ
ˤ-1֤

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

siopcbǻꤵ륷ꥢI/OݡȤΡcbrtnǻꤵ륳Х
Ĥ롥cbrtnˤϡSIO_RDY_SNDSIO_RDY_RCVǤ롥

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

siopcbǻꤵ륷ꥢI/OݡȤΡcbrtnǻꤵ륳Х
ػߤ롥cbrtnˤϡSIO_RDY_SNDSIO_RDY_RCVǤ롥

8.3.3 Хå롼

åȰ¸ϡɬפʥߥ󥰤ǡꥢ륤󥿥եɥ饤
Υå¸˴ޤޤʲΥХå롼ƤӽФӤ
ʤФʤʤ줾ΥХåػߤƤϡ
Хå롼ƤӽФƤϤʤʤ

Хå롼ϡʾʤȤ˥ꥢI/OݡȤγߤ
ߤ줿֤ǡ󥿥ƥȤǸƤӽФexinfˤϡꥢI/O
ݡȤΥץ˻ꤵ줿ĥϤ

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

ǽХå롼󡥥ꥢI/OݡȤФʸǤ
֤ˤʤä˸ƤӽФꥢ륤󥿥եɥ饤ФϡΥ
Хå롼ǡsio_snd_chrƤӽФƼʸ뤫
٤ʸʤˤǽХåػߤ롥

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

ΥХå롼󡥥ꥢI/OݡȤʸ
ƤӽФꥢ륤󥿥եɥ饤ФϡΥХå롼
ǡɬsio_rcv_chrƤӽФƼʸФ

8.4 ͥ뵯ưåνϤΥåȰ¸

åȰ¸󶡤٤ͥ뵯ưåνϤΤ
̤Ǥ롥

(8-4-1) TARGET_NAME

åȤ̾Τ롥

(8-4-2) TARGET_COPYRIGHT

ͥ뵯ưåˡåȰ¸ɽɲä뤿
ޥ

8.5 ƥȥץΥåȰ¸

åȰ¸󶡤٤ץץपӥƥȥץ
ϼ̤Ǥ롥ϡtarget_test.hʤޤϤ
饤󥯥롼ɤեˤ˴ޤ롥

(8-5-1) STACK_SIZEʥץ

ץץपӥƥȥץΥΥå
ޥʤΥǥեͤ4096ǥեǤϥ
꤬­䡤ߥ졼Ķʤɤ礭åΰ褬ɬ
ʾˤϡåȰ¸ǤΥޥꤹ륹å
롥

(8-5-2) CPUEXC1ʥץ

ץץपӥƥȥץѤCPU㳰CPU㳰ϥ
ֹޥΥޥʤ硤CPU㳰ϥɥ
ʬץץफ롥CPU㳰ϥɥΥƥȤ򤹤
ƥȥץϥѥǤʤ

(8-5-3) RAISE_CPU_EXCEPTIONʥץ

CPUEXC1CPU㳰ȯCΥץޥ
CPUEXC1ˤɬʤФʤʤ

(8-5-4) CANNOT_RETURN_CPUEXCʥץ

åȥƥˤꡤCPU㳰ϥɥ餫꥿󤷤ˡ
μ¹Ԥ³ǤʤޥΥޥȡ
CPU㳰ϥɥΥƥȤ򤹤ƥȥץफ顤CPU㳰ϥɥ餫
꥿󤷤ν롥ץץγʬ
ưʤ

(8-5-5) LOOP_REFʥץ

ץץˤơץå®٤¬뤿Υ롼ײ
ޥʤΥǥեͤ1000000ǥե
Ǥϡͤ礭᤮Ʒ¬˻֤ꤹ䡤ͤ᤮Ʒ¬
̤ꤷʤˡåȰ¸ǤΥޥꤹ롼ײ
롥

(8-5-6) MEASURE_TWICEʥץ

ץץˤơץå®٤2ٷ¬
ޥߥ졼Ķʤɥץå®٤ưĶǡ1٤
¬ǤϷ¬̤ꤷʤ롥

(8-5-7) TASK_LOOPʥץ

ץץˤơץå®٤¬ˡǤ
롼ײꤹˡ롼ײޥ


¾

9.1 ɥ

åȰ¸Υ桼ޥ˥奢target_user.txtѰդ롥
ååסȯĶ¸Υ桼ޥ˥奢ڤʬƤ
ե뤬礭ʤˤʣΥեʬ䤷Ƥ褤
ˤϡtarget_user.txtˤΥե̾򵭽Ҥ뤳ȡ

åȰ¸Υ桼ޥ˥奢ˤϡʤȤ⼡Τ褦Ƥ
Ҥ뤳Ȥ˾ޤ

(1) бƤ륿åȥƥμࡦСֹ
	åȥϡɥʥܡˤ̾ΤбƤ빽
	åά
	å¸ΥСֹ
	ץååסȯĶ¸ιȥСֹ
	ѤPDICȥСֹ

(2) Ѥ볫ȯĶưڤʥС󡤥ץ
	ϡʥѥ顤֥顤
	ǥХåĶ

(3) åε

(3-1) ǡ˴ؤ뵬
	int_tlong_tΥ
	char_tint_least8_tvoid *intptr_tΥ
	int8_tuint8_tint64_tuint64_tint128_t
	uint128_tfloat32_tdouble64_tΥݡȤ̵ͭ

(3-2) ߽˴ؤ뵬
	ߥϥɥֹȳֹγơξԤб
	ͥ٤ʳTMIN_INTPRI͡ˡˡ
	dis_intena_intΥݡȤ̵ͭ»
	CFG_INT»ȳĥʥåǻѤǤ°
	ͥγߤΥݡȤ̵ͭˡ
	ͥγߤФDEF_INHCFG_INT򥵥ݡȤ뤫
	ͥγߤդο
	TOPPERSɸ߽ǥ뤫ΰæ

(3-3) CPU㳰˴ؤ뵬
	CPU㳰ϥɥֹγ
	xsns_xpn»

(3-4) ǽɾѥƥλȤ˴ؤ뵬
	get_utmΥݡȤ̵ͭ»

(3-5) ¾
	¾»
	¾γĥǽ

(4) ޥå
	ǥեȤΥޥåסѹˡ

(5) ޥɥ饤дϢξ
	ƥåμѹˡ
	Ѥ꥽ʥޡ

(6) ꥢ륤󥿥եɥ饤Фξ
	Ѥ꥽SIOȥ
	̿ѥ᡼ʥܡ졼ȡӥåȿѥƥ̵ͭȥåץӥåȡ

(7) ƥǽξ
	ƥ٥Ϥμ¸ˡ
	̿ѥ᡼ʥܡ졼ȡӥåȿѥƥ̵ͭȥåץӥåȡ

(8) ƥ๽ۼ

(9) åȥƥͭջ
	ƥȤ˴ޤޤ쥸ޤޤʤ쥸

(10) ΥåȤ˥ݡƥ󥰤볫ȯԸλ;

(11) ǥ쥯ȥ깽ե빽

(12) С

ޤɬפ˱ơåȰ¸߷ץtarget_design.txt
դ롥ץååסȯĶ¸˴ؤ߷ץڤʬ
褤ե뤬礭ʤˤʣΥեʬ䤷Ƥ褤
ξˤϡtarget_design.txtˤΥե̾򵭽Ҥ뤳ȡ

9.2 ѥåҥե

꡼ѥåʸ̥ѥåӴʰץѥåˤ뤿
ˡѥå˴ޤե򵭽ҤѥåҥեѰդ
롥ѥåҥե̾Τϡ̥ѥåѤMANIFESTʰץѥ
ѤE_PACKAGEȤ롥

㤨Сarch/arm_gccǥ쥯ȥ֤줿MANIFESTեѤƸ
ѥåˤϡΥޥɤ¹Ԥ롥

	% utils/makerelease arch/arm_gcc/MANIFEST

ΥޥɤˤꡤRELEASE/asp_arch_arm_gcc-<Сֹ>.tar.gz
롥ޤtarget/at91skyeye_gccǥ쥯ȥ֤줿E_PACKAGE
եѤƴʰץѥåˤϡΥޥɤ¹Ԥ
롥

	% utils/makerelease target/at91skyeye_gcc/E_PACKAGE

ΥޥɤˤꡤRELEASE/asp_at91skyeye_gcc-<Сֹ>.tar.gz
RELEASEǥ쥯ȥ꤬ʤˤϡǥ쥯ȥ꤬
ˡ

ʤmakerelease桼ƥƥϡASPͥΥե뤬֤
ǥ쥯ȥ꤬aspȤ̾ΤǤ뤳ȤꤷƤ롥ޤɸ
tarޥɤGNU tarǤ뤳ȡΤˤϡzץбƤ뤳ȡ
ꤷƤ롥

ѥåҥեˤϡѥå˴ޤե̾򡤥ѥå
ҥե뤬֤줿ǥ쥯ȥ꤫Хѥ̾ǡ1Ԥ1Ĥĵ
롥ޤɬפ˱ơʲΥǥ쥯ƥ֤ޤ롥

(a) E_PACKAGE <ʰץѥå̾>

ʰץѥå̾ꤹ롥ʰץѥåҥեE_PACKAGEˤ
Ƭ˵Ҥ롥ʰץѥå̾ϡasp_<åά>Ȥ롥㤨С
åάΤat91skyeye_gccξˤϡasp_at91skyeye_gccȤʤ롥
̥ѥåȶ̤뤿ˡʰץѥåΥե̾ˤ"target"
ޤʤ

(b) PACKAGE <̥ѥå̾>

̥ѥå̾ꤹ롥̥ѥåҥեMANIFESTˤ
Ƭ˵Ҥ롥ޤ饤󥯥롼ɤƥեƬˤ⵭
򥤥󥯥롼ɤƤ̥ѥå̾ꤹ롥åȰ
¸θ̥ѥå̾ϡ̥ѥåҥե뤬֤줿ǥ쥯
ȥХѥ"/""_"֤ʸ"asp_"θˤĤʤ
ΤȤ롥㤨С̥ѥåҥե뤬arch/arm_gcc/MANIFESTξ
ˤϡasp_arch_arm_gccȤʤ롥

(c) VERSION <Сֹ>

ѥåΥСֹꤹ롥ʰץѥåҥե뤪
̥ѥåҥե˵Ҥ롥ʰץѥåˤơС
ֹѥåդȤˤϡѥåֹ
%dateȵҤ롥

СֹͿˡˤĤƤϡTOPPERS/ASPͥ 桼
˥奢פΡ2.2 ʰץѥåפӡ2.3 ̥ѥåפ
Ȥ뤳ȡ

(d) INCLUDE <ե̾>

̤Υѥåҥե򥤥󥯥롼ɤ롥ʰץѥåҥե
뤫ϡ̥ѥåҥեΤߤ򥤥󥯥롼ɤΤ§Ȥ
롥̥ѥåҥե뤫饤󥯥롼ɤեǻꤵ
̥ѥå̾ϡ٤ưפƤʤФʤʤ


ե

10.1 åȰ¸Υե

ɸŪʥåȰ¸Υե빽ϼ̤Ǥ롥

Makefile.target		MakefileΥåȰ¸ʣϡˡ

target_stddef.h		TOPPERSt_stddef.hˤΥåȰ¸ʣ
					ϡˡץꥱȥͥξ饤󥯥롼
					ɤ롥
target_sil.h		ƥ।󥿥ե쥤sil.hˤΥåȰ
					¸ʣϡˡץꥱȥͥξ
					󥯥롼ɤ롥
target_kernel.h		ͥAPIkernel.hˤΥåȰ¸ʣϡˡ
					ץꥱȥͥξ饤󥯥롼ɤ
					롥

target_config.h		ͥΥåȰ¸Υإåեʣ
					ϡˡͥΤߤ饤󥯥롼ɤ롥
target_config.c		ͥΥåȰ¸CǵҤ
					ʬʣϡץˡ
target_support.S	ͥΥåȰ¸Υ֥ǵ
					Ҥʬʣϡץˡ
target_rename.def	ͥΥåȰ¸ΤΥ͡൭
					6.12ˡ
target_rename.h		target_rename.defե6.12ˡ
target_unrename.h	target_rename.defե6.12ˡ
target_timer.cfg	ޥɥ饤ФΥƥॳե졼ե
					6.13ˡ
target_timer.h		ޥɥ饤ФΥإåե6.13ˡͥ
					Τߤ饤󥯥롼ɤ롥
target_timer.c		ޥɥ饤Фμե6.13ᡤץˡ
ƥά.h		åȤΥϡɥ񸻡ʳߥϥɥֹ
					CPU㳰ϥɥֹ桤ǥХ쥸Ϥʤɡˤ
					ޤإåե롥ץꥱȥ
					ξ饤󥯥롼ɤʣϡץˡ

target_def.csv		ե졼ͼܥơ֥Υ
					Ȱ¸ʣϡˡ
target.tf			ե졼Υѥ2Υƥץ졼ȥե
					åȰ¸7.2ˡ
target_check.tf		ե졼Υѥ3Υƥץ졼ȥե7.3
					ˡ
target_cfg1_out.h	cfg1_out.cΥ󥯤ɬפʥ֤ե7.4
					ˡ

target_syssvc.h		ƥॵӥΥåȰ¸8.0ˡ
target_serial.cfg	ꥢɥ饤ФΥƥॳե졼ե
					8.3ˡ
target_serial.h		ꥢɥ饤ФΥإåե8.3ˡꥢ
					ɥ饤ФΤߤ饤󥯥롼ɤ롥
target_serial.c		ꥢɥ饤Фμե8.3ᡤץˡ
target_test.h		ƥȥץΥåȰ¸8.4ˡ

target_user.txt		桼ޥ˥奢9.1
target_design.txt	߷ץ9.1ᡤץ
MANIFEST			̥ѥå˴ޤեΥꥹȡ9.2ᡤ
					
E_PACKAGE			ʰץѥå˴ޤեΥꥹȡ9.2ᡤ
					

ʾ
