
		TOPPERS/ASPͥ
		åȰ¸ ݡƥ󥰥

		бС: Release 1.9.2
		ǽ: 2014ǯ1117

ΥɥȤϡTOPPERS/ASP̤ͥݡȤΥåȥ
˥ݡƥ󥰤뤿ɬפȤʤ륿åȰ¸μˡ
ΤǤ롥

----------------------------------------------------------------------
 TOPPERS/ASP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Advanced Standard Profile Kernel

 Copyright (C) 2005-2013 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$
----------------------------------------------------------------------

ܼ

̻
	1.1 åȰ¸ι
	1.2 ̾ξͤɻ
	1.3 ¿ť󥯥롼ɤɻ
	1.4 ֥ȤΥإåեζ 
	1.5 󥯥롼ɵҤˡ
	1.6 ƥ륻νμ¸˴ؤ
ƥ๽۴ĶΥåȰ¸
	2.1 åάΤȥåȰ¸Υǥ쥯ȥ
	2.2 MakefileΥåȰ¸
	2.3 ȯĶ̾ȥޥ̾
	2.4 ѥ륪ץȥ֥ȥե
	2.5 եåȥեˡ
		2.5.1 ե졼Ѥˡ
		2.5.2 makeoffset.cgenoffsetѤˡ
	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 ΰݤΤΥޥ
	5.7 Хϥɥ鵡ǽĥΤʥץ
ͥΥåȰ¸
	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.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.6.7 ͥγ
		6.6.8 ߥӥ롼
	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.10.3 󥿥ƥѤΥåΰ
		6.10.4 ٥
	6.11 ȥ졼ǽ˴ؤ
		6.11.1 Ǥȥ졼μȥޥ
		6.11.2 ȥ졼ϿΥץ륳
	6.12 ͥΥåȰ¸ΤΥ͡൭
	6.13 ޥɥ饤
		6.13.1 ޥɥ饤ФΥե빽
		6.13.2 ޤνλ߽
		6.13.3 ǽɾѥƥλȤΤεǽ
	6.14 Х󥿥ޥɥ饤Сʥץ
		6.14.1 Х󥿥ޥɥ饤ФΥե빽
		6.14.2 Х󥿥ޤȳ߽
	6.15 ưŪʥץ
		6.15.1 TLSFѤ⥸塼
ե졼եΥåȰ¸
	7.1 եȥåȰ¸ΰդ
	7.2 ѥ2Υƥץ졼ȥեΥåȰ¸
		7.2.1 å¸򥤥󥯥롼ɤ٤ѿ
		7.2.2 å¸ѿ
	7.3 ѥ3Υƥץ졼ȥեΥåȰ¸
		7.3.1 å¸򥤥󥯥롼ɤ٤ѿ
		7.3.2 åȰ¸ǹԤ٤顼å
	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 ץץȥƥȥץΥåȰ¸
	8.6 ¹Իʬ۽ץ⥸塼ΥåȰ¸
¾
	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 ƥ륻νμ¸˴ؤ

ͥѤ륯ƥ륻ν¸ˤϡ
2Ĥξ褦˼ʤФʤʤ

(1-6-1) ȴǤϡߤζػߡĤλƤʤ
Фʤʤ㤨С߶ػߡ̿¹ԤƤºݤ˳ߤ
ػߡĤޤǲ̿ᤫٱ䤹ץåξˤϡ
NOP̿ʤɤˡǡȴǤϡߤػߡ
Ĥ줿֤ˤʤäƤ뤳ȤݾڤʤФʤʤ

(1-6-2) Υǡ¤Ѥǽ뤳Ȥ򡤲餫
ˡǥѥΤ餻ʤФʤʤ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/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)
----------------------------------------

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

ѥǡٹåФ뤳ȤɤʤʳǤϡ
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󥯤ݤŬѤ륪ץ
äˤϡ˼ѿ롥

ʤLDFLAGSϡcfg1_out.c󥯤ݤˤŬѤʤᡤLDFLAGS
ץǡcfg1_out.c󥯤ݤˤɬפʤΤϡ
CFG1_OUT_LDFLAGSˤɬפ롥

(2-4-17) CFG_ASMOBJS		֥ǵҤ줿ƥॳե
							졼ΤΥ֥
(2-4-18) CFG_COBJS			CǵҤ줿ƥॳե졼
							ΤΥ֥

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

(2-4-19) CFG2_OUT_SRCS

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

(2-4-20) OMIT_WARNING_ALL
(2-4-21) OMIT_OPTIMIZATION

ץMakefileǤϡѥФ륪ץˡ-Wall -g -O2
ɲä롥-WallɲäʤˤϡMakefileΥåȰ¸
OMIT_WARNING_ALL"true"롥-O2ɲäʤˤϡ
MakefileΥåȰ¸OMIT_OPTIMIZATION"true"롥

2.5 եåȥեˡ

֥ǵҤץफ顤Cι¤Τ˥
ˤϡ¤ΤγƥեɤΥեåͤ򻲾Ȥ뤳ȤɬפǤ롥
ASPͥǤϡɬפʥեåͤƥեɸǤoffset.h
뤿λȤߤѰդƤ롥

λȤߤѤ뤳Ȥǡ㤨СTCBtexptnեɤΥեå
TCB_texptn˥ޥ뤳Ȥ䡤TCBΥƥȥ֥å
tskctxbˤ˴ޤޤpcեɤΥեåͤTCB_pc˥ޥ
ȤǤ롥ޤTCBenatexեɤΥեå͡ӥåȰ֡
ӥåȥޥ򡤤줾TCB_enatexTCB_enatex_bitTCB_enatex_mask˥
뤳ȤǤ롥

offset.h뤿λȤߤȤơǤϡե졼
Ѥˡȡmakeoffset.cgenoffsetѤˡѰդƤ롥Ԥ
ˡϡGNUȯĶˤбƤʤȤ顤ΥСǤϡ
ԤˡΥݡȤײǤ롥˥ݡƥ󥰤ˤϡ
ԤˡѤ뤳Ȥ侩롥

λȤߤǥեåȥեǤʤˤϡoffset.h򥿡
åȰ¸ѰդMakefileΥåȰ¸OMIT_MAKEOFFSET
"true"롥

ĥѥåˤϡTCB˥եɤɲäΤ뤿ᡤTCB
ΥեɤΥեåͤѲ롥offset.hǤ⡤
åȰ¸ѰդǤ⡤ĥѥåб뤿ˤϡ
Ȥθɬפ롥

2.5.1 ե졼Ѥˡ

ե졼Υѥ1cfg1_out.c򥳥ѥ뤷
֥ȥե뤫顤ե졼ˤäoffset.h
ˡǤ롥ˡѤ뤿ˤϡåȰ¸ǥեåȥե
ѥƥץ졼ȥեѰդtarget_cfg1_out.hʤޤϡ
饤󥯥롼ɤեˤtarget_def.csvʤޤϡƱ
ĥեˤ˵Ҥɲäɬפ롥ʤΥե򿷤
Ѱդݤ佤ݤˤϡoffset.hƤ뤳Ȥ
ǧ٤Ǥ롥

եåȥեѥƥץ졼ȥեϡåȰ¸ǡ
target_offset.tfʤޤϡץå¸åװ¸Ѱդ뤽
եˤѰդ롥ޤMakefileΥåȰ¸ǡ
Τ褦ˡOFFSET_TF˥եåȥեѥƥץ졼ȥեΥե
̾롥

----------------------------------------
# եåȥեΤ
OFFSET_TF = $(TARGETDIR)/target_offset.tf
----------------------------------------

եåȥեѥƥץ졼ȥեˤϡʲƤ򵭽Ҥ롥

(1) ɸƥץ졼ȥեΥ󥯥롼

եåȥեѤɸƥץ졼ȥեkernel/genoffset.tf
򥤥󥯥롼ɤ롥ɸƥץ졼ȥեˤϡʲѤDEFINE
DEFINE_BITؿʤɤޤޤƤ롥

----------------------------------------
$ ɸƥץ졼ȥեΥ󥯥롼
$INCLUDE "kernel/genoffset.tf"$
----------------------------------------

(2) եåͤΥޥ

DEFINEؿѤơեåͤΥޥ롥㤨СTCB
ƥȥ֥åtskctxbˤ˴ޤޤpcեɤΥեå
ͤTCB_pc˥ޥˤϡΤ褦˵Ҥ롥

----------------------------------------
$ եåͤΥޥ
$DEFINE("TCB_pc", offsetof_TCB_pc)$
----------------------------------------

ǡDEFINEؿ1ѥ᡼ϥޥ륷ܥ롤2ѥ᡼
ϡեåͤݻ륳ե졼ѿǤ롥

ޤե졼եåͤݻѿʾǤ
offsetof_TCB_pcˤͤꤹ뤿ˡtarget_def.csvʤޤϡƱ
ĥեˤ˼Τ褦ʹԤɲä롥

----------------------------------------
offsetof_TCB_pc,"offsetof(TCB,tskctxb.pc)"
----------------------------------------

ƥ֥Ȥν֥åΥå¸Υեɤ
եåͤ뤿εҤϡkernel/kernel_def.csv˴ޤޤƤ롥
kernel/kernel_def.csv˴ޤޤƤ뵭Ҥϡtarget_def.csvʤޤϡƱ
ĥեˤɲäɬפϤʤ

(3) ӥåȥեåΥޥ

DEFINE_BITؿѤơӥåȤΥեå͡ӥåȰ֡ӥåȥޥ
Υޥ롥㤨СTCBenatexեɤΥեå͡
ӥåȰ֡ӥåȥޥ򡤤줾TCB_enatexTCB_enatex_bit
TCB_enatex_mask˥ޥˤϡΤ褦˵Ҥ롥

----------------------------------------
$DEFINE_BIT("TCB_enatex", sizeof_TCB, "B")$
----------------------------------------

ǡDEFINE_BITؿ1ѥ᡼ϥޥ륷ܥʤƬ
ʬˡ2ѥ᡼Ϲ¤ΤΥǤ롥3ѥ᡼ˤϡӥåȤ
եåȡӥåȰ֡ӥåȥޥ8ӥåñ̡ʥХñ̡ˤǵ
ˤ"B"16ӥåñ̤ǵˤ"H"32ӥåñ̤ǵ
ˤ"W"ꤹ롥ʤӥåȰ֤ϡLSB0Ȥ͡ʥӥåȥ
륨ǥˤ롥

ޤtarget_cfg1_out.hʤޤϡ饤󥯥롼ɤեˤˡ
ӥåȥեå뤿ι¤Τѿɲä롥ι¤
Τѿϡ̾Τޥ륷ܥDEFINE_BITؿ1ѥ᡼
ȤоݤΥӥåȤΤߤ1ǡ¾Τ٤ƤΥӥåȤ0ˤʤ褦˽
롥ޤconstҤղä롥㤨СTCBenatexեɤΥӥ
ȥեåˤϡΤ褦ɲätskctxbν
ͤϡåȰ¸ʤΤդ뤳ȡˡ

----------------------------------------
const TCB	TCB_enatex = {
	{ NULL, NULL },			/* task_queue */
	NULL,					/* p_tinib */
	0U,						/* tstat */
#ifdef TOPPERS_SUPPORT_MUTEX
	0U,						/* bpriority */
#endif /* TOPPERS_SUPPORT_MUTEX */
	0U,						/* priority */
	false,					/* acqeue */
	false,					/* wupque */
	true,					/* enatex */
	0U,						/* texptn */
	NULL,					/* p_winifo */
#ifdef TOPPERS_SUPPORT_MUTEX
	{ NULL, NULL },			/* mutex_queue */
#endif /* TOPPERS_SUPPORT_MUTEX */
#ifdef TOPPERS_SUPPORT_OVRHDR
	0U,						/* leftotm */
#endif /* TOPPERS_SUPPORT_OVRHDR */
	{ NULL, NULL }			/* tskctxb */
};
----------------------------------------

ˡե졼¤ΤΥʾǤsizeof_TCBˤ
ͤꤹ뤿ˡtarget_def.csvʤޤϡƱĥե
˼Τ褦ʹԤɲä롥

----------------------------------------
sizeof_TCB,sizeof(TCB)
----------------------------------------

Ҥ̤ꡤkernel/kernel_def.csv˴ޤޤƤ뵭Ҥϡ
target_def.csvʤޤϡƱĥեˤɲäɬפϤʤ

Ǹˡtarget_cfg1_out.hʤޤϡ饤󥯥롼ɤե
ˡoffset.hȤߤưƤ뤳Ȥǧ뤿μ
εҤɲä롥

----------------------------------------
const uint8_t	MAGIC_1 = 0x12;
const uint16_t	MAGIC_2 = 0x1234;
const uint32_t	MAGIC_4 = 0x12345678;
----------------------------------------

2.5.2 makeoffset.cgenoffsetѤˡ

makeoffset.cϡɤΥեåͤoffset.h뤫ꤹե
ǡåȰ¸Ѱդ롥genoffsetϡmakeoffset.c򥳥ѥ
륢֥꥽ե뤫顤offset.h륹ץ
Ǥ롥genoffsetϡGNUȯĶˤΤбƤ롥

makeoffset.c򵭽Ҥˤϡ¸ΥåȰ¸˴ޤޤ
makeoffset.cΤƻǤ롥ɸŪmakeoffset.cϡʲ6
ʬǹƤ롥ʤmakeoffset.c򿷤˵Ҥݤˤϡ
offset.hƤ뤳Ȥǧ٤Ǥ롥

(1) ɬפʥեΥ󥯥롼

եåͤ᤿եɤޤ๽¤Τإåե
󥯥롼ɤ롥TCBΥեɤΥեåͤ᤿ˤϡ
3ԤޤФ褤

#include "kernel_impl.h"
#include "task.h"
#include "sil.h"

(2) եåͽѥޥ

¤ΥեɤΥեåͤ뤿Ѥޥ
OFFSET_DEFOFFSET_DEF2ˤΥޥϡɬ
ʤ

(3) եåͽѴؿ

¤ΥեɤΥեåͤ뤿δؿ
makeoffsetˤեåͤΥޥե
ˡΤ줫Υޥ򵭽Ҥ롥

(2-5-2-1) OFFSET_DEF(TYPE, FIELD)

TYPE˹¤ΤΥǡ̾FIELDˤι¤Υեɤꤹȡ
TYPE_FIELDȤ̾ΥܥˡΥեɤΥեåͤޥ
뵭Ҥ롥

(2-5-2-2) OFFSET_DEF2(TYPE, FIELD, FIELDNAME)

TYPE˹¤ΤΥǡ̾FIELDˤι¤Υեɤꤹȡ
TYPE_FIELDNAMEȤ̾ΥܥˡΥեɤΥեåͤ
뵭Ҥ롥¤Τ˴ޤޤ빽¤ΥեɤΥ
åͤ᤿ˤϡΥޥѤ롥

(4) ǥ򻲾Ȥ뤿δؿ

SIL줿ǥ򻲾Ȥ뤿δؿsil_endianˤ
δؿϡɬפʤ

(5) ӥåȥեåͽϤΤλ

ͤäѿФơѥ餬륢֥̿
Ȥ뤿ѿBIT_REF_4BIT_REF_2BIT_REF_1ˤ
ϡۤȤɤξ˽ɬפʤuint8_tΥݡȤ
ƤʤåȤǤϡBIT_REF_1Ϻɬפ롥ޤݥ
󥿤64ӥåȤΥåǤϡBIT_REF_8ɲäʤФʤ
Ȼפ롥

(6) ӥåȥեåͽѿ

ӥåȤΥեå͡ӥåȰ֡ӥåȥޥ뤿Υǡ
ӥåȥեˡʲ
ѿ롥

¤ΤΥǡ̾TYPEι¤Υӥåȥե̾FIELDξ
ˡǡTYPEǡѿ̾BIT_xy_TYPE_FIELDѿ롥ޤ
ѿоݤΥӥåȤΤߤ1ǡ¾Τ٤ƤΥӥåȤ0ˤʤ褦˽
롥ǡxϥǥꤹʸǡBʥӥåǥ
ˤޤLʥȥ륨ǥˤꤹ롥ޤyˤϡӥåȤΥե
ȡӥåȰ֡ӥåȥޥ8ӥåñ̡ʥХñ̡ˤǵ
B16ӥåñ̤ǵˤH32ӥåñ̤ǵˤW
ꤹ롥

ˤꡤTYPE_FIELDȤ̾ΥܥˤΥӥåȤΥեåȡ
TYPE_FIELD_bitȤ̾Υܥ˥ӥåȰ֡TYPE_FIELD_maskȤ̾
Υܥ˥ӥåȥޥޥ뵭Ҥ롥ʤӥå
֤ϡLSB0Ȥ͡ʥӥåȥȥ륨ǥˤ롥

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
󥯤ʤ褦ˡLDFLAGSCFG1_OUT_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) $(MAKEDEP_OPTS) \
		-O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend

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

ޤGNUȯĶǡѥɸ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)
CFG1_OUT_LDFLAGS := -nostdlib $(CFG1_OUT_LDFLAGS)
LIBS := $(LIBS) -lgcc
----------------------------------------

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

(2-6-6) HIDDEN_OBJS				ꤷʤƤ󥯤⥸塼̾

ɥ⥸塼˥󥯤٤⥸塼򡤥󥫤Фѥ᡼
Ϥʤ󥫥ץˡ㤨СGNUȯĶΥ󥫥ץȤ
STARTUPȤäơ˵ҤˤϡΥ֥ȥե̾
START_OBJSޤEND_OBJSǤϤʤHIDDEN_OBJSФ륳
ѥ롼Ȱ¸ط롼롥HIDDEN_OBJS
塼ϡ󥫤Фѥ᡼Ͻ롥LDFLAGS
CFG1_OUT_LDFLAGSLIBSˤĤƤϡSTART_OBJSޤEND_OBJSѤ
ƱͤǤ롥

㤨Сȥåץ⥸塼Υե뤬start.Sǡstart.o
󥯤뤳Ȥ󥫥ץ˵Ҥˤϡ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) $(MAKEDEP_OPTS) \
		-O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend

# 󥫤Ф륪ץ
LDFLAGS := -nostdlib $(LDFLAGS)
CFG1_OUT_LDFLAGS := -nostdlib $(CFG1_OUT_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ޤϤ饤󥯥롼ɤեʥץå
סȯĶ¸Ѱդإåեʤɡˤ˴ޤ롥

SILΥӥϡǤդΥƥ֤ǸƤӽФȤǤ롥Τ
ᡤSILΥåȰ¸δؿϡǤդΥƥ֤ǸƤӽФ褦
ʤФʤʤ

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 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"³Ϥϡ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_TARGET_SUPPORT_DIS_INT		dis_int򥵥ݡȤ
(5-1-2) TOPPERS_TARGET_SUPPORT_ENA_INT		ena_int򥵥ݡȤ
(5-1-3) TOPPERS_TARGET_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ŬڤǤʤ
Ȱ¸ѰդˤϡΥܥŬڤͤ˥ޥ롥

5.7 Хϥɥ鵡ǽĥΤʥץ

Хϥɥ鵡ǽĥѥå򥵥ݡȤʻѤǤ褦ˤ
˾ˤϡ3Ĥ»ܤ뤳ȤɬפǤ롥

Ԥ
Ϥ˼ǡTOPPERS_SUPPORT_OVRHDRޥƤ
ˤΤͭȤʤ륳ɤ롥
Х󥿥ޥɥ饤ФѰդ롥Х󥿥ޥɥ饤ФˤĤ
ϡ6.14 Х󥿥ޥɥ饤Сפ򻲾Ȥ뤳ȡ

(5-7-1) TOPPERS_TARGET_SUPPORT_OVRHDR

Хϥɥ鵡ǽĥѥå򥵥ݡȤˤϡΥ
ޥ롥

(5-7-2) TMAX_OVRTIMʥץ󡤥ǥեȤULONG_MAX

ץå֤ȤƥХ󥿥ޤǤ͡ñ̤ϥޥ
áˤ˥ޥ롥


ͥΥåȰ¸

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˴ޤ롥ץååסȯĶ¸ڤʬ
뤳ȤǽǤ롥

ޤХϥɥ鵡ǽĥѥå򥵥ݡȤˤϡ
Хϥɥưcall_ovrhdrƤӽФˤΥХ󥿥
ɥ饤Ф⡤Ʊե˴ޤ롥

ʤξϤ˼ǡTOPPERS_SUPPORT_OVRHDRޥ
ˤΤͭȤʤ륳ɤϡХϥɥ鵡ǽĥѥå
򥵥ݡȤʤˤϡɬפʤ

(e) ե졼ե

ե졼եΥåȰ¸target_def.csv
target.tftarget_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ƤӽФϡȥ졼SIL
ӥȡcall_exit_kernelΤߤǤ롥Τᡤ
call_exit_kernelƤӽФΤơͥΥåȰ¸
ؿߥå֤ǸƤӽФϹͤɬפʤ

6.3.2 ƥȤδ

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

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

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

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

¹νñ̤ƥȤǼ¹ԤƤˤfalse
ƥȤǼ¹ԤƤˤtrue֤ؿδؿϡ
CPUå֤ǤCPUå֤ǤƤӽФ褦˼ʤФ
ʤ

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ꤹؿ

δؿϡCPUå֤ǤCPUå֤ǤƤӽФ褦
Τ˾ޤx_set_ipmt_set_ipmϡå¸
CPUå֤ǸƤӽФȤϤʤᡤCPUå֤ǸƤ
Ф줿ưݾڤɬפʤi_set_ipmϡCPUå֤Ǥ
CPUå֤ǤƤӽФ褦˼ʤФʤʤ

ޤδؿϡ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_get_ipmt_get_ipmϡå¸
CPUå֤ǸƤӽФȤϤʤᡤCPUå֤ǸƤ
Ф줿ưݾڤɬפʤi_get_ipmϡCPUå֤Ǥ
CPUå֤ǤƤӽФ褦˼ʤФʤʤ

ͥ٥ޥѤƥͥγߤ򤹤٤ƥޥ֤ϡ
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֤

δؿϡå¸CPUå֤ǸƤӽФȤϤ
ᡤCPUå֤ǸƤӽФ줿ưݾڤɬפʤ
åȰ¸CPUå֤ǸƤӽФˤϡݾڤ
ɬפ롥

ޤδؿϡ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֤

δؿϡå¸CPUå֤ǸƤӽФȤϤ
ᡤCPUå֤ǸƤӽФ줿ưݾڤɬפʤ
åȰ¸CPUå֤ǸƤӽФˤϡݾڤ
ɬפ롥

ޤδؿϡ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ФϿ줿ߥӥ롼ƤӽФߥϥɥ
ƬǸƤӽФ롥ΤᤳδؿϡߥϥɥƬ̾
CPUå֡ˤǸƤӽФ褦˼ʤФʤʤ

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

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

intnoФϿ줿ߥӥ롼ƤӽФߥϥɥ
ǸƤӽФ롥Τᤳδؿϡߥϥɥ̾
CPUå֡ˤǸƤӽФ褦˼ʤФʤʤ

åȤˤäƤϡIRCФ߽νλΤԤˡ٤
γߤػߤʤФʤʤ礬롥ξˤϡδؿ
ǳߤػߤξ֤Τޤޡߥϥɥ餫꥿󤹤롥
ߥϥɥ餫Υ꥿ˤϡ߶ػߤΤ§Ǥ뤬
ߥϥɥνиǸ᤹ԤΤǺ٤ʤϤǤ롥
ߥϥɥνиǺ٤ʤˤʤäƤ뤳Ȥ
ǧ٤Ǥ롥

6.5 ǥѥå

6.5.1 ƥȥ֥åȥƥȥ֥å

(6-5-1-1) TSKCTXB

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

(6-5-1-2) USE_TSKINICTXBʥץ
(6-5-1-3) TSKINICTXBʥץ

åȰ¸ξ򥿥֥åTINIBˤ줿䡤
TINIBΥåΰΥƬϤλ򥿡åȰ¸ѹ
ˤϡUSE_TSKINICTXBޥTINIB˻ĤȤɬפʥǡ
¤ηTSKINICTXB롥

USE_TSKINICTXBޥȡTINIB˥åΰȥƬ
Ϥޤޤʤʤ뤿ᡤTSKINICTXB˻ɬפ롥
ޤե졼Υѥ2Υƥץ졼ȥեΥå¸
ǡTSKINICTXBν뤿GENERATE_TSKINICTXB򡤥ѥ
3Υƥץ졼ȥեΥå¸ǡTINIB饹åΰ
ƬϤФGET_STK_TSKINICTXBɬפ롥

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ƤӽФݤưͤ˹פʤʤ롥

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

6.5.3 ƥȤΥǥѥå

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

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

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

dispatchνƤϼ̤ꡥ

----------------------------------------
void
dispatch(void)
{
#ifdef TOPPERS_SUPPORT_OVRHDR
	ovrtimer_stop();					/* Х󥿥ޤ */
#endif /* TOPPERS_SUPPORT_OVRHDR */
	å쥸(*)٤ƤΥ쥸򥹥å¸
	åݥ󥿤򼫥p_runtskˤTCB¸
	dispatch_r򡤼¹ԺƳϤȤƼTCB¸  (*a)
	dispatcherʬ

  dispatch_r:
	å쥸٤ƤΥ쥸򥹥å
#ifdef TOPPERS_SUPPORT_OVRHDR
	ovrtimer_start();					/* Х󥿥ޤư */
#endif /* TOPPERS_SUPPORT_OVRHDR */
	calltex();  (*b)
}
----------------------------------------

ǥå쥸(*)ȤϡؿƽФˤ¸ʤ쥸
ȤǤ롥ɬפʾˤϡؿƤӽФ¦¸ʤФʤʤ
ᡤcaller saved registerȸƤФ⤢롥

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

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

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ˤϡٻ߾֤¹ԤǤ
֤ˤ˸ƤФ졤p_tcbǻꤵ줿оݥˤ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:
#ifdef TOPPERS_SUPPORT_OVRHDR
	ovrtimer_start();					/* Х󥿥ޤư */
#endif /* TOPPERS_SUPPORT_OVRHDR */
	CPUå֤ˤ
	p_runtskˤεưϤ򡤳ĥѥ᡼ȤƸƤӽФ
	ext_tskʬ ... (*c)
}
----------------------------------------

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

ǡεưˤоݥΥåΰȤäƤϤʤ
ʤͳϡ̤ꡥ󥿥ĥѥåˤơʣ󥿥
åΰͭƤˡεưǤϡΥ
ȥåΰͭƤ륿åΰѤƤǽ
뤿Ǥ롥

Υݡƥ󥰥ɤǤϡμ¹ԺƳϤTCB¸Ƥ
(*a)򥹥å¸ˡͤ뤬εưǥ
åΰ褬ȤʤȤ顤εư㳰ʤ
ʤʤ㤨СεưˤƤTCBΥåݥ󥿤
͡㤨0ˤꤷƤǥѥåΤTCBΥå
󥿤ͤξˤstart_rʬstart_rˤƥåݥ
󥿤ˡͤ롥

6.6 ߥϥɥ

6.6.1 ߥϥɥν

ͥγߤνˡϡץåˤä礭ۤ
뤬褽νƤϼ̤ꡥ

----------------------------------------
void
<ߤν>(void)
{
	ʤȤ⥫ͥγߤػߤ֤ˤ  (*f)
	å쥸򥹥å¸
	if (ƥȤǳȯ) {
#ifdef TOPPERS_SUPPORT_OVRHDR
		ovrtimer_stop();				/* Х󥿥ޤ */
#endif /* TOPPERS_SUPPORT_OVRHDR */
		å󥿥ƥѤΥåڤ괹
								󥿥ƥȤڤ괹
	}
	ͥ٥ޥ򡤼դ׵γͥ٤ꤷ
				CPUå֤ˤʼդߤ
				ͥ٤ι⤤ߤդ褦ˤˡ (*i)


#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 (ƥȤǳȯ) {
		ʾʤȤ˥ͥγߤػߤ֤ˤ  (*d)
		å򥿥ѤΥåᤷƥȤڤ괹
																 (*g)
		if (reqflg) {
			reqflg = false;
			CPUå֤ˤ  (*e)
			ͥ٥ޥ֡TIPM_ENAALLˤꤹ  (*h)
			if (dspflg && p_runtsk != p_schedtsk) {
				å쥸٤ƤΥ쥸򥹥å¸
				åݥ󥿤򼫥p_runtskˤTCB¸
				ret_int_r򡤼¹ԺƳϤȤƼTCB¸  (*a)
				dispatcherʬ

			  ret_int_r:
				å쥸٤ƤΥ쥸򥹥å
			}
#ifdef TOPPERS_SUPPORT_OVRHDR
			ovrtimer_start();			/* Х󥿥ޤư */
#endif /* TOPPERS_SUPPORT_OVRHDR */
			calltex();  (*b)
		}
#ifdef TOPPERS_SUPPORT_OVRHDR
		else {
			ovrtimer_start();			/* Х󥿥ޤư */
		}
#endif /* TOPPERS_SUPPORT_OVRHDR */
	}
	߽Υ꥿ˡͥ٥ޥ
									߽ͤ褦˽
	߽Υ꥿ˡCPUå֤褦˽
	å쥸򥹥å
	߽Υ꥿
}
----------------------------------------

ߤμդˤꡤåݥ󥿤ڤ괹餺٤Ƥγߤ
ػߤʤץåǤϡ(*f)ˤơʤȤ⥫ͥγ
ߤػߤ롥ͳϼ̤Ǥ롥

ߤˤơå󥿥ƥѤΥå
ڤ괹¿ųߤȯȡΥåΰ褬Ѥ롥
嵭Τ褦ʥץåǤϡåڴˡǳͥ٤
ʿʬ¿ųߤȯ뤳ȤɤȤϤǤƥΥå
ΰݤݤˡʬ򸫹ǳݤʤФʤʤƥ
åΰʤ٤뤿ˤϡåʤ٤Ѥʤ
ˡ¿ųߤػߤΤ˾ޤΤᡤå쥸
å¸ˡߤػߤ롥ߤζػ߽ɬ
פʺ¤Υ쥸ˤĤƤϡߤζػߤΩäƥå¸
ɬפ롥

ƱͤΤȤϡͥγߤˤƤϤޤ롥ʤͥ
γߤˤĤƤ⡤åʤ٤Ѥʤ˶ػߤΤ
˾ޤΤȤ顤ͥγߤѤˤϡ(*f)
ˤơ٤Ƥγߤػߤ֤ˤΤ˾ޤȤˤʤ롥
ǡͥγߤζػ߻֤Ĺʤȡͥγ
ߤα㲼뤿ᡤ桼դ¥ɬפ롥ޤ
γ߽ˤƤ⡤󥿥ƥѤΥåʤޤ
ϡͥγ߽ѤΥåˤڤ괹뤳Ȥ˾ޤ
ϥͥδɳǤ롥

(*i)˴ޤޤͥ٥ޥꤹϡץåϡɥ
Ǽ¸Ƥ¿

(*d)ˤƤϡͥγߤػߤǡCPUå֤ˤ
ɬפϤʤ㤨СCPUå֤Ǥ뤳Ȥ򼨤ѿѰդƤ
ˤϡ(*d)λǤϤѿCPUå֤򼨤ͤѹɬפϤ
(*e)ˤѹФ褤

(*g)ˤƥƥȤڤ괹ϡ߽Υ꥿
ˤꥹåȥƥȤץåǤϡreqflgtrue
ˤΤ߹ԤФ褤reqflgfalseλϡ󥿥ƥȤΤޤ޽
³߽Υ꥿ǥƥȤ뤳Ȥˤʤ롥

(*e)ˤCPUå֤ˤΤϡdispatcherʬݤȡ(*b)ˤ
calltexʤޤϡŸˤcall_texrtnˤƤӽФݤˡ
CPUå֤ˤʤäƤɬפ뤿Ǥ롥

(*h)ν¹ԤΤϡ߽˳ͥ٥ޥ
֡TIPM_ENAALLˤǤä˸¤졤ǳͥ٥ޥ
֤ꤹΤϡ߽᤹ͤΤǤ롥Ǥν
ԤΤϡdispatcherʬݤȡ(*b)ˤcalltexʤޤϡ
Ÿˤcall_texrtnˤƤӽФݤˤϡͥ٥ޥ
֤ˤʤäƤɬפ뤿Ǥ롥

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

ߤν򥢥֥ǵҤˤϡȥ졼
ϡ6.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ꤹ롥

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

δؿϡå¸ΥͥƤӽФ뤿ᡤ
ͥνNMI٤ƤγߤޥƤˤ
ӽФ褦˼Ф褤

ꤵ줿ߥϥɥֹ椬DEF_INHФΤȤͭͤǤʤ
ưݾڤɬפʤassertǥ顼ȤΤ˾ޤˡ
ϡե졼ѥ2Υƥץ졼ȥեΥåȰ¸
INHNO_DEFINH_VALIDѤƥ顼򸡽Ф뤿Ǥ롥

6.6.4 ׵饤°

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

intnoֹȤͭͤǤtrueǤʤ
false֤ޥCFG_INTˤϡ٤Ƥγֹꤹ뤳ȤǤ
뤿ᡤΥޥϡintnoͭͤξˤtrueintno̵ͤ
ˤfalse֤褦ˤ롥

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

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

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

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

δؿϡå¸ΥͥƤӽФ뤿ᡤ
ͥνNMI٤ƤγߤޥƤˤ
ӽФ褦˼Ф褤

intatrȤǤ°ϼ̤ꡥ

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

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

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

°̾򥿡åɲäˤϡ°ͤꤷ
target_kernel.hʤޤϡ饤󥯥롼ɤեˤ˴
롥ޤե졼ƥץ졼ȥե뤫黲ȤǤ褦ˡ
target_def.csvʤޤϡƱĥեˤ˴ޤᡤե
졼ƥץ졼ȥեΥå¸ǥ顼Ȥʤʤ褦ˡ
target.tfʤޤϡ饤󥯥롼ɤեˤTARGET_INTATR
ꤹ롥

ꤵ줿ֹ椬ͭͤǤʤ䡤γ׵饤Ф
Ǥʤ°ꤷ硤Ǥʤͥ٤ꤷ
ưݾڤɬפʤassertǥ顼ȤΤ˾ޤˡ
褦ʥϡե졼ǥ顼򸡽Ф٤Ǥ롥ե
졼ƥץ졼ȥեΥå¸ϡѥ2Υƥץ졼
ȥեΥåȰ¸INTNO_CFGINT_VALID
TARGET_INTATRINTPRI_CFGINT_VALIDѤƥ顼򸡽Ф뤬ɸγ
°TA_ENAINTTA_EDGEˤǤʤ䡤Ǥʤ°
ͥ٤׵饤ˤäưۤʤˤϡե졼
ƥץ졼ȥեΥåȰ¸ǸФʤФʤʤ

6.6.5 ߴǽνѹ

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

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

ΥܥޥȡINHINIBINTINIBinitialize_interrupt
ͥΥå¸롥ޤ
TNUM_INHNOtnum_inhnoinhinib_tableTNUM_INTNOtnum_intno
intinib_tableȡߥϥɥν뤿ε
INTHDR_ENTRYޥΥꥹȡˤե졼Υѥ2Υƥץ졼
ȥեΥå¸ˤäkernel_cfg.cʤʤ롥
ե졼Υѥ2Υƥץ졼ȥեΥåȰ¸
ǡUSE_INHINIB_TABLEUSE_INTINIB_TABLEꤹ뤳Ȥǡΰ
ʬkernel_cfg.c뤳ȤǽǤ롥

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

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

6.6.6 ǥեȤγߥϥɥ

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

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

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

6.6.7 ͥγ

ͥγߥϥɥϡͥγ߽ͳ
˼¹ԤΤܤǤ롥

٤ƤγߤƱɥ쥹ʬץåǤϡͥ
γ߽ͳ˥ͥγߥϥɥ
Ԥ뤳ȤǤʤᡤ߽Τʤ٤ᤤߥ󥰤ǡ
ͥγߤǤ뤫Ƚ̤Ƥʬɬפ롥
ŪˤϡͥγߤνǤϡХϥɥ
ߤưϤԤäƤϤʤʤޤreqflgåڴ
䥿㳰롼θƽФԤɬפʤˡNMIν
Ǥϡȥ졼log_inh_enterlog_inh_leaveˤ
ӽФƤϤʤʤ

ͥγߥϥɥ¹Ԥݤˡͥγ߽
ΰʬͳˤϡCPU㳰ǽϸ餹ȤȤ
ˡCPU㳰򵯤ǽˤϡβǽ򥿡åȰ¸
桼ޥ˥奢˵ܤʤФʤʤ

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

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

(a-1)ޤ(a-2)ѤƥͥAPIˤߥϥɥϿ
׵饤°򥵥ݡȤ䡤(b)Ѥˤϡ
åȰ¸ˤƤ¸ɬפ롥

ͥγߤФơDEF_INHˤߥϥɥϿ򥵥ݡ
Ȥˤϡ꤬ɬפˤʤ롥

TARGET_INHATRˡTA_NONKERNELꤹ롥

(a-1)ޤ(a-2)ѤˤϡINHNO_DEFINH_VALIDˡͥ
Ȥߤбߥϥɥֹޤ롥ޤ
VALID_INHNO_DEFINH򡤥ͥȤߥϥɥֹͭ
ͤȽꤹ褦ˤ롥

(a-1)ޤ(a-2)ѤˤϡINHNO_FIX_KERNEL˥ͥ
ߥϥɥֹΥꥹȤINHNO_FIX_NONKERNEL˥ͥ
ȤߥϥɥֹΥꥹꤹ롥

DEF_INHͥγߤбǤ褦ˤ롥ɸγߴ
ǽνѤˤϡx_define_inh򥫡ͥγ
ߤб롥

ɬפʾˤϡTA_NONKERNEL°ꤵ줿ߥϥɥ򥫡ͥ
Ȱ褦ˡͥγ߽롥ɸγ
ߴǽνѤ硤ͥγߤФ
ϡͥγ߽ץꥱϿ
ߥϥɥľܸƤӽФ褦ˡå¸ˤꤵ
뤿ᡤåȰ¸Ǥбɬפʤ

ͥγߤФơCFG_INTˤ׵饤°
򥵥ݡȤˤϡ꤬ɬפˤʤ롥

(a-1)ޤ(a-2)ѤˤϡINTNO_CFGINT_VALIDˡͥ
Ȥߤбֹޤ롥ޤVALID_INTNO_CFGINT
򡤥ͥȤֹͭͤȽꤹ褦ˤ롥

(a-1)ޤ(a-2)ѤˤϡINTNO_FIX_KERNEL˥ͥ
ֹΥꥹȤINTNO_FIX_NONKERNEL˥ͥȤ
ֹΥꥹꤹ롥

INTPRI_CFGINT_VALIDˡͥγߤȤʤͥ٤ޤ롥

CFG_INTͥγߤбǤ褦ˤ롥ɸγߴ
ǽνѤˤϡx_config_int򥫡ͥγ
ߤб롥

chg_ipmˤꡤNMIʳΡ˥ͥγߤޥǤ褦
ˤϡ꤬ɬפˤʤ롥

VALID_INTPRI_CHGIPM򡤥ͥγߤȤʤͥ٤ͭͤ
Ƚꤹ褦ˤ롥

t_set_ipm򡤥ͥγߤȤʤͥ٤򰷤褦ˤ롥

6.6.8 ߥӥ롼

(6-6-8-1) bool_t VALID_INTNO_CREISR(INTNO intno)

intnoacre_isrФֹȤͭͤǤtrue
Ǥʤfalse֤ޥưŪǽĥѥåѤʤ
ˤϡɬפʤ

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

6.7.1 CPU㳰ϥɥν

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

----------------------------------------
void
<CPU㳰ν>(void)
{
	å쥸򥹥å¸
	if (ͥCPU㳰) {
		if (ƥȤCPU㳰ȯ) {
			å󥿥ƥѤΥåڤ괹
									󥿥ƥȤڤ괹  (*j)
		}
		ƥ֡ʥƥȤϽˤCPU㳰ȯξ֤ˤ
		CPU㳰ϥɥCPU㳰ξ򵭲ƤΰƬϤ
									ѥ᡼p_excinfˤȤƸƤӽФ
		if (ƥȤCPU㳰ȯ) {
			å򥿥ѤΥåᤷ
									ƥȤڤ괹  (*j)
		}
		CPU㳰Υ꥿ˡCPU㳰ȯΥƥ֤
													褦˽
	}
	else {
		if (ƥȤCPU㳰ȯ) {
			ʾʤȤ˥ͥγߤػߤ֤ˤ
#ifdef TOPPERS_SUPPORT_OVRHDR
			ovrtimer_stop();			/* Х󥿥ޤ */
#endif /* TOPPERS_SUPPORT_OVRHDR */
			å󥿥ƥѤΥåڤ괹
									󥿥ƥȤڤ괹
		}
		ͥ٥ޥCPU㳰ȯͤꤷ
				CPUå֤ˤ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㳰ȯ) {
			ʾʤȤ˥ͥγߤػߤ֤ˤ  (*d)
			å򥿥ѤΥåᤷƥȤڤ괹
																	 (*g)
			if (reqflg) {
				reqflg = false;
				CPUå֤ˤ  (*e)
				if (dspflg && p_runtsk != p_schedtsk) {
					å쥸٤ƤΥ쥸򥹥å¸
					åݥ󥿤򼫥p_runtskˤTCB¸
					ret_exc_r򡤼¹ԺƳϤȤƼTCB¸
																	 (*a)
					dispatcherʬ

				  ret_exc_r:
					å쥸٤ƤΥ쥸
												å
				}
#ifdef TOPPERS_SUPPORT_OVRHDR
				ovrtimer_start();		/* Х󥿥ޤư */
#endif /* TOPPERS_SUPPORT_OVRHDR */
				calltex();  (*b)
			}
#ifdef TOPPERS_SUPPORT_OVRHDR
			else {
				ovrtimer_start();		/* Х󥿥ޤư */
			}
#endif /* TOPPERS_SUPPORT_OVRHDR */
		}
		CPU㳰Υ꥿ˡCPUå֤褦˽
	}
	å쥸򥹥å
	CPU㳰Υ꥿
}
----------------------------------------

CPU㳰ϥɥϡ󥳥ƥȤڤ괹뤳ȤƤϡCPU㳰ȯ
Ʊƥ֤ǸƤӽФʤФʤʤ㤨СCPU㳰CPU
å֤ȯˤCPUå֡CPUå֤ȯ
ˤCPUå֤ǡCPU㳰ϥɥƤӽФʤФʤʤ
CPUå֤ȯCPU㳰ϡͥCPU㳰Ȥʤ뤿ᡤ
ͥCPU㳰ϥɥˤĤƤϡCPUå֤ǸƤӽФȤ
ʤ롥

åȤˤäƤϡͥCPU㳰ΤȽꤹΤ񤷤
礬롥Τ褦ʾˤϡͥ٥ޥǤʤ֤
ȯCPU㳰򡤥ͥCPU㳰ȰäƤپ㤬ʤϡ
ͥ٥ޥǤʤˤϡxsns_dpnxsns_xpnȤtrue
֤ᡤץꥱ󤫤ϥͥCPU㳰ȶ̤Ǥʤ
Ǥ롥

ŪˤϡߥåʤޤCPUåˤ򾮤ХإåɤǼ¸
褦ȤȡCPU㳰ϥɥǡߥå֡ʤޤCPU
֡ˤȳͥ٥ޥ⤤٥ꤷ֤̤Ǥʤ
礬롥ޤͥγ߽䥫ͥ¹Ǥ뤳
ΤȽǤ뤳Ȥ񤷤礬롥

ͥCPU㳰ϥɥƤֻˡ(*j)ˤơå
ƥѤΥåڤ괹󥿥ƥȤڤ괹
Ƥ뤬ڴϥåǾʤƤɤϡͥ
CPU㳰ϡͥΥƥ륻ȯǽ
뤿ᡤڤ괹Ȥϸ¤ʤǤ롥ޤͥ
γߥϥɥƤֻΥƥȤ䥹åϥåȰ¸
ΤǡͥCPU㳰ϥɥ⤽Ʊͤ˰äɤȹͤ
뤿Ǥ롥

ΥɤǤϡͥCPU㳰Фơȥ졼
log_exc_enterlog_exc_leaveˤƤӽФƤʤߥ
֤NMIνCPU㳰ȯСƤӽФƤ⤫
ޤʤߥå֤NMIνȯCPU㳰ξˤϡ
ȥ졼ƤӽФƤϤʤʤ

CPU㳰ϥɥ¹Ԥݤ˷ͳʬǤϡCPU㳰ǽ
ϸ餹ȤȤˡCPU㳰򵯤ǽ㤨Сå
쥸򥹥å¸ˡХ顼ʤɤCPU㳰ȯǽ
ͤˤˤϡβǽ򥿡åȰ¸Υ桼ޥ˥奢
˵ܤʤФʤʤ

ret_excʹߤνϡߤνret_intʹߤνȤۤƱ
뤿ᡤåȤˤäƤϡ̤Υ롼Ѥ뤳ȤǤǽ
롥

CPU㳰ν򥢥֥ǵҤˤϡȥ졼
ϡ6.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㳰ǽν򥿡åȰ¸
ѰդǤδؿƤӽФʤˤϡδؿѰդ
ɬפϤʤ

δؿϡå¸ΥͥƤӽФ뤿ᡤ
ͥνNMI٤ƤγߤޥƤˤ
ӽФ褦˼Ф褤

ꤵ줿CPU㳰ϥɥֹ椬DEF_EXCФΤȤͭͤǤʤ
ưݾڤɬפʤassertǥ顼ȤΤ˾ޤˡ
ϡե졼ѥ2Υƥץ졼ȥեΥåȰ¸
EXCNO_DEFEXC_VALIDѤƥ顼򸡽Ф뤿Ǥ롥

6.7.4 CPU㳰ǽνѹ

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

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

ΥܥޥȡEXCINIBinitialize_exception
ͥΥå¸롥ޤTNUM_EXCNO
tnum_excnoexcinib_tableȡCPU㳰ϥɥν
뤿εҡEXCHDR_ENTRYޥΥꥹȡˤ򡤥ե졼Υ
2Υƥץ졼ȥեΥå¸ˤäkernel_cfg.c
ʤʤ롥

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

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

6.7.5 ǥեȤCPU㳰ϥɥ

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

ե졼ˤ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֤ؿ

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

CPU㳰ͥγ߽ȯˤfalse֤ʤ
ФʤʤȤդ뤳ȡ

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ϥ꥿󤹤뤳Ȥʤᡤδؿ
äƤ뤳ȤϹͤɬפʤ

󥿥ƥȤڤ괹Τϡλ롼󥿥
ƥѤΥåǼ¹Ԥ뤿Ǥ롥λ롼򥿥Ѥ
åǼ¹ԤȡƥΥåΰΥꤹݤˡ
λ롼󤬻Ѥ륹åΰθʤФʤʤˤϡ
λ롼󤬻Ѥ륹åΰ褬礭˳ƥΥå
ΰ̵̤礭ʤФʤʤȤ˲äơտޤʤå
СեȯǽȤ꤬롥

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

(6-8-4) void target_exit(void)

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

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

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

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) TARGET_TSKATRʥץ	åΥ°
(6-10-1-2) TARGET_ISRATRʥץ	åISR°
(6-10-1-3) TARGET_INHATRʥץ	åγߥϥɥ°
(6-10-1-4) TARGET_INTATRʥץ	åγ°
(6-10-1-5) TARGET_EXCATRʥץ	åCPU㳰ϥɥ°

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

ʤTOPPERS奫ͥͽǤϡߥӥ롼ISR
°򥿡åǳĥǤͤȤϤʤäƤʤ

6.10.2 顼åˡλ

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

åǡΥåκǾͤꤹˤϡ
ѿ򥹥åκǾͤ롥

(6-10-2-2) TARGET_MIN_ISTKSZʥץ

åǡ󥿥ƥȤΥåκǾͤꤹ
ˤϡѿ򥹥åκǾͤ롥

(6-10-2-3) CHECK_STKSZ_ALIGNʥץ

åΰΥ͡ʥ饤ñ̡ˤܿǤʤФʤʤ
ˡѿ򥢥饤ñ̤롥ѿ뤳Ȥǡ
kernel.tfacre_tskưŪǽĥѥåΤߡˤˤơ
ΰΥʤʤѿͤܿǤʤ˾Υ
顼å褦ˤʤ롥åɬפʤˤϡѿ
ʤ

(6-10-2-4) CHECK_FUNC_ALIGNʥץ	ñ̤Υ饤ñ
(6-10-2-5) CHECK_FUNC_NONNULLʥץ	ñ̤NULLå
(6-10-2-6) CHECK_STACK_ALIGNʥץ	åΰΥ饤ñ
(6-10-2-7) CHECK_STACK_NONNULLʥץ˥åΰNULLå
(6-10-2-8) CHECK_MPF_ALIGNʥץ	ĹסΰΥ饤ñ
(6-10-2-9) CHECK_MPF_NONNULLʥץ˸ĹסΰNULLå

ñ̡åΰ衿ĹסΰƬϤ͡ʥ
ñ̡ˤܿǤʤФʤʤˡ줾졤CHECK_FUNC_ALIGN
CHECK_STACK_ALIGNCHECK_MPF_ALIGN򥢥饤ñ̤롥ñ̡
åΰ衿ĹסΰƬϤNULLǤʤΥå
Ԥˤϡ줾CHECK_FUNC_NONNULLCHECK_STACK_NONNULL
CHECK_MPF_NONNULL롥

(6-10-2-10) CHECK_MB_ALIGNʥץ	ΰΥ饤ñ

ͥδΰʶŪˤϡǡ塼ΰ衤ͥ٥ǡ
塼ΰ衤ĹסΰˤƬϤ͡ʥ饤
ñ̡ˤܿǤʤФʤʤˡѿ򥢥饤ñ̤
롥ưŪǽĥѥåѤʤˤϡɬפʤ

6.10.3 󥿥ƥѤΥåΰ

(6-10-3-1) DEFAULT_ISTKSZ

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

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

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

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

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

6.10.4 ٥

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

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

ǥեȤǤϡsymbolǷtypeǥ0Ƥ롥
0󤬥顼ȤʤʤѥGCCϤ˳ˤѤ
ˤϡåȰ¸ɬפϤʤ

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.2 ȥ졼
ǽؤбס6.6.1 ߥϥɥνס6.7.1 CPU㳰ϥ
νפ򻲾Ȥ뤳ȡ

(c) ֤Ѳ

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

	LOG_TSKSTAT		֤Ѳ

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

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

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

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

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

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

(e) ӥȽи

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

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

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

6.11.2 ȥ졼ϿΥץ륳

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

Υץ륳ɤȤ߹ˡϼ̤Ǥ롥

(1) target_config.htarget_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

(3) ȥåץ⥸塼ǡbssΥꥢάƤ
    ˤϡtrace_modeTRACE_STOPʡ0ˤ˽륳ɤɲä롥
    ϡȥ졼ǽ˽񤭹ޤȥ졼
    ̵뤹뤿Ǥ롥

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

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

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̾ΤȤ롥å¸
signal_timeƤӽФ

target_timer_handlerϡɸŪˤϼΤ褦롥

----------------------------------------
void
target_timer_handler(void)
{
	i_begin_int(<޳ߤγֹ>);
	signal_time();
	i_end_int(<޳ߤγֹ>);
}
----------------------------------------

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

6.13.3 ǽɾѥƥλȤΤεǽ

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

(6-13-3-1) OMIT_GET_UTMʥץ

å¸get_utmμѤåȰ¸get_utm
ѰդˤϡΥܥޥ롥Υܥޥ
硤ʲΥǡؿʤɤѰդɬפϤʤ

(6-13-3-2) CLOCK

ͤɽΤΥǡ

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

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

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

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

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

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

6.14 Х󥿥ޥɥ饤Сʥץ

Х󥿥ޥɥ饤ФϡХϥɥư뤿Υޤ
ɥ饤ФǤ롥Хϥɥ鵡ǽĥѥå򥵥ݡȤʤ
ˤϡХ󥿥ޥɥ饤ФѰդɬפϤʤ

6.14.1 Х󥿥ޥɥ饤ФΥե빽

Х󥿥ޥɥ饤Фϡޥɥ饤ФƱե˵Ҥ롥
Х󥿥ޥɥ饤ФΤεҤϡTOPPERS_SUPPORT_OVRHDRޥ
ƤˤΤͭˤʤ褦ˤ롥

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

ޤХ󥿥ޥɥ饤ФƤӽФɬפ
target_timer.hˡХ󥿥ޥɥ饤Фμtarget_timer.c
˵Ҥ롥

ХϥɥϡΥХФԤΤǤ뤿
ᡤХ󥿥޳ߤγͥ٤ϡߤǺͥ٤
ʬǤ롥Х󥿥޳ߤγͥ٤⤤ͤ
ꤷʤȤϸʤᡤХ󥿥޳ߤγͥ
٤ѹˡ򡤥åȰ¸Υ桼ޥ˥奢˵ܤ
Ǥ롥

6.14.2 Х󥿥ޤȳ߽

(6-14-2-1) void target_ovrtimer_initialize(intptr_t exinf)

Х󥿥ޤνԤޤưϤϹԤʤ

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

(6-14-2-2) void target_ovrtimer_terminate(intptr_t exinf)

Х󥿥ޤߤХ󥿥޳ߤȯʤ褦ˤ
롥

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

(6-14-2-3) void target_ovrtimer_start(OVRTIM ovrtim)

Х󥿥ޤˡĤovrtimꤷưϤ롥ovrtimñ
ϥޥäȤ롥

(6-14-2-4) OVRTIM target_ovrtimer_stop(void)

Х󥿥ޤߤޤλĤ֤ɤ߽Ф⤷Ĥ֤
0ʤޤϤ̤ˤˤʤäƤˤϡ1֤ޤХ󥿥
ޤγߤ򥯥ꥢ롥

(6-14-2-5) OVRTIM target_ovrtimer_get_current(void)

Х󥿥ޤλĤ֤ɤ߽Ф⤷Ĥ֤0ʤޤϤ̤
ˤʤäƤˤϡ0֤Х󥿥ޤγߤϥꥢ


(6-14-2-6) void target_ovrtimer_handler(void)
    ޤ void target_ovrtimer_isr(intptr_t exinf)

Х󥿥޳ߤˤ굯ư߽ץࡥߥϥ
ɥȤƼ¸ˤtarget_ovrtimer_handlerߥӥ롼
ȤƼ¸ˤtarget_ovrtimer_isr̾ΤȤ롥å
¸call_ovrhdrƤӽФ

target_timer_handlerϡɸŪˤϼΤ褦롥

----------------------------------------
void
target_ovrtimer_handler(void)
{
	i_begin_int(<Х󥿥޳ߤγֹ>);
	Х󥿥޳׵Υꥢɬפʤ
	call_ovrhdr();
	i_end_int(<Х󥿥޳ߤγֹ>);
}
----------------------------------------

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

(6-14-2-7) OMIT_OVRTIMER_START
(6-14-2-8) OMIT_OVRTIMER_STOP

åȰ¸ƤӽФovrtimer_startovrtimer_stop򡤥֥
ΥŸCδؿפˤʤˤϡ줾졤
OMIT_OVRTIMER_STARTOMIT_OVRTIMER_STOPޥ롥

6.15 ưŪʥץ

ưŪǽĥѥåѤˤϡͥǤưŪ
ˡɬפ롥

ưŪǽĥѥåΥå¸ǤϡΰƬ
˳ơ줿ΰѤʤ⥸塼
ΤߤƤ롥ǥեȤǤϡΥ⥸塼뤬Ѥ
롥

ܳŪưŪԤˤϡåȰ¸ޤϥ桼
¦ǡʲδؿ⥸塼Ѱդɬפ롥

(6-15-1) OMIT_KMM_ALLOCONLYʥץ

å¸Υ⥸塼ѤåȰ¸
ϥ桼¦ѰդˤϡΥܥޥ롥

(6-15-2) void initialize_kmm(void)ʥץ

⥸塼ؿͥγդΰ
ƬϤϡ줾kmmszkmmˤäƻȤǤ롥

(6-15-3) void *kernel_malloc(SIZE size)ʥץ

sizeǻꤵ줿ΥΰդƬϤ֤ؿ
դ뤳ȤǤʤˤϡNULL֤

(6-15-4) void kernel_free(void *ptr)ʥץ

ptrǻꤵ줿ΰؿ

6.15.1 TLSFѤ⥸塼

ץ󥽡Υդ饤֥ǤTLSFѤưŪ
¸ˤϡOMIT_KMM_ALLOCONLYޥʲδؿC
쥽ե˴ޤФ褤

----------------------------------------
#include "tlsf.h"

static bool_t	tlsf_initialized = false;

void
initialize_kmm(void)
{
	if (init_memory_pool(kmmsz, kmm) >= 0) {
		tlsf_initialized = true;
	}
}

void *
kernel_malloc(SIZE size)
{
	if (tlsf_initialized) {
		return(malloc_ex(size, kmm));
	}
	else {
		return(NULL);
	}
}

void
kernel_free(void *ptr)
{
	if (tlsf_initialized) {
		free_ex(ptr, kmm);
	}
}
----------------------------------------


ե졼եΥåȰ¸

7.1 եȥåȰ¸ΰդ

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

(a) ŪAPIơ֥

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

(b) ͼܥơ֥

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

åȤ˰¸ɬפȤʤ륷ܥ뤬ˤϡtargetǥ쥯
֤줿target_def.csv˵Ҥ롥target_def.csv˵Ҥͤ
뤳ȤǤ륷ܥϡkernel/kernel_int.hӤ饤󥯥롼
ɤեƤʤФʤʤkernel_int.hϡ
target_stddef.htarget_kernel.htarget_config.hʴŪˡ˥󥯥롼
ɤƤ뤿ᡤΥե뤪Ӥ饤󥯥롼ɤե
륿åȰ¸Υܥϡ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-1) INTNO_ATTISR_VALID	ATT_ISRǻѤǤֹ
(7-2-1-2) INHNO_ATTISR_VALID	INTNO_ATTISR_VALIDбϥɥֹ
(7-2-1-3) INHNO_DEFINH_VALID	DEF_INTǻѤǤߥϥɥֹ
(7-2-1-4) EXCNO_DEFEXC_VALID	DEF_EXCǻѤǤCPU㳰ϥɥֹ
(7-2-1-5) INTNO_CFGINT_VALID	CFG_INTǻѤǤֹ
(7-2-1-6) INTPRI_CFGINT_VALID	CFG_INTǻѤǤͥ

APIǻѤǤֹ桿ߥϥɥֹ桿CPU㳰ϥɥֹ桿
ͥ٤ΥꥹȤ򡤳ѿ롥INHNO_ATTISR_VALIDˤϡ
INTNO_ATTISR_VALID˥ꥹȥåפֹбߥϥɥ
ֹΥꥹȤ롥CFG_INTˤϡ٤Ƥγֹꤹ뤳Ȥ
Ǥ뤿ᡤINTNO_CFGINT_VALIDˤϡͭʳֹ򤹤٤ƥꥹȥ
פ롥

(7-2-1-7) INTNO_FIX_KERNELʥץ	ͥ˸ꤵƤ
											ֹ
(7-2-1-8) INHNO_FIX_KERNELʥץ	ͥ˸ꤵƤ
		 									ߥϥɥֹ
(7-2-1-9) INHNO_FIX_NONKERNELʥץ	ͥ˸ꤵƤ
											ֹ
(7-2-1-10) INHNO_FIX_NONKERNELʥץ˥ͥ˸ꤵƤ
		 									ߥϥɥֹ

ͥޤϥͥ˸ꤵƤߤˤϡ
γֹȳߥϥɥֹΥꥹȤ򡤳ѿ롥

(7-2-1-11) USE_INHINIB_TABLEʥץ

OMIT_INITIALIZE_INTERRUPTߥϥɥνɬפʾ
kernel_cfg.cˤϡѿ1ꤹ롥Ūˤϡ
TNUM_INHNOtnum_inhnoinhinib_tableȡߥϥɥν
뤿εҡINTHDR_ENTRYޥΥꥹȡˤå
¸ˤä롥

(7-2-1-12) USE_INTINIB_TABLEʥץ

OMIT_INITIALIZE_INTERRUPT׵饤νɬפ
kernel_cfg.cˤϡѿ1ꤹ롥Ū
ϡTNUM_INTNOtnum_intnointinib_tableå¸
ä롥

(7-2-1-13) GENERATE_TSKINICTXBʥץ

USE_TSKINICTXBޥ硤TSKINICTXBν뤿
ƥץ졼ȥեؿGENERATE_TSKINICTXB롥
GENERATE_TSKINICTXBˤϡIDѥ᡼ȤϤ롥

(7-2-1-14) ALLOC_STACKʥץ

åΰˡǥեȤѹˤϡåΰ
뤿Υƥץ졼ȥեؿALLOC_STACK롥
ALLOC_STACKˤϡåΰѿ̾ȴݤΥѥ᡼Ȥ
ϤΤǡåΰ륳ɤ礭˴ݤ᤿
ɽʸ֤

7.2.2 å¸ѿ

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

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

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

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

7.3.1 å¸򥤥󥯥롼ɤ٤ѿ

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

(7-3-1-1) GET_STK_TSKINICTXBʥץ

USE_TSKINICTXBޥ硤TINIB饹åΰƬϤ
ФΥƥץ졼ȥեؿGET_STK_TSKINICTXB롥
GET_STK_TSKINICTXBˤϡ֥åTINIBˤƬϤѥ᡼
ȤϤ롥CHECK_STACK_ALIGNCHECK_STACK_NONNULLȤʤ
ˤϡGET_STK_TSKINICTXBɬפϤʤ

(7-3-1-2) LMA.ORDER_LISTʥץ
(7-3-1-3) LMA.START_DATA[lmano]ʥץ
(7-3-1-4) LMA.END_DATA[lmano]ʥץ
(7-3-1-5) LMA.START_IDATA[lmano]ʥץ

ѥ3Υƥץ졼ȥեΥåȰ¸data󤫤ǡ
䡤rodataRAM֤ʥ桼ޥ˥奢
Ρ11.8 rodataRAM֤פ򻲾ȡˤˤϡΥ
Ƥ֥ɥ쥹ROMΥɥ쥹LMAȸƤ֡ˤ饢
ɥ쥹RAMΥɥ쥹VMAȸƤ֡ˤ˥ԡɬפ롥

ΥԡϡLMA.ORDER_LISTˡԡ륻ֹlmanoˤΥ
ȡֹǤդͿƤ褤ˡLMA.START_DATA[lmano]˥ԡ륻
Υɥ쥹ƬΥ٥롤LMA.END_DATA[lmano]Υ
롤LMA.START_IDATA[lmano]ˤ֥ɥ쥹ƬΥ٥ꤹ뤳
Ȥǡѥ3Υƥץ졼ȥեΥå¸Ǽ»ܤ롥

㤨Сԡ륻Υɥ쥹ƬΥ٥뤬
"__data_start"Υ٥뤬"__data_end"֥ɥ쥹ƬΥ
٥뤬"__idata_start"ξˤϡѥ3Υƥץ졼ȥեΥ
Ȱ¸˰ʲεҤޤ롥

----------------------------------------
$LMA.ORDER_LIST = { 1 }$
$LMA.START_DATA[1] = "__data_start"$
$LMA.END_DATA[1] = "__data_end"$
$LMA.START_IDATA[1] = "__idata_start"$
----------------------------------------


7.3.2 åȰ¸ǹԤ٤顼å

ʲƬϤϡå¸ơ֥˽Ϥʤ
ᡤѥ3Υå¸kernel_check.tfˤǤϡץγ
ϤȤʤΥ顼åʤΤᡤå
¸ǥ顼åԤɬפ롥

ߥӥ롼ƬϡATT_ISRisr
ߥϥɥƬϡDEF_INHinthdr
CPU㳰ϥɥƬϡDEF_EXCexchdr
롼ƬϡATT_INIinirtn
λ롼ƬϡATT_TERterrtn

åȰ¸ˤƤ⡤Υ顼åԤȤ
¤ʤᡤ桼ޥ˥奢Ρ1.5 Τפˤϡ
Ȱ¸ǤΥ顼ФʤȤݤ򵭺ܤƤ롥

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

ޤե졼Ѥƥեåȥեoffset.hˤ
ˤϡΤεҤtarget_cfg1_out.hʤޤϡ饤󥯥롼
ɤեˤɲäɬפ롥ܤϡ2.5.1 ե
졼Ѥˡפ򻲾Ȥ뤳ȡ


ƥॵӥΥåȰ¸

8.0 ƥॵӥΥåȰ¸

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

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

8.1 ƥǽΥåȰ¸

ƥǽѤǡȥåץ⥸塼bss
ΥꥢάƤˤϡsyslog_logmasksyslog_lowmask_not
0˽륳ɤɲä롥ϡƥǽ
˽Ϥ줿٥ϵǽѤƽϤ뤿Ǥ롥

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

(8-1-1) TCNT_SYSLOG_BUFFER

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

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

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

δؿϡꥨȥȤ˼ʤФʤʤδؿ¾
椬ɬפʾˤϡSILѤߥå֤ˤ뤳ȡޤ
ߥå֤ǸƤФ礬뤿ᡤߥå֤ƤӽФ
ȤǤʤؿƤФʤ褦˼ʤФʤʤ

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

ʤδؿΤ򡤤ɤΥե˵Ҥ뤫ˤʤ롥ƥ
ӥΥåȰ¸ˤϡɸǤϡؿ򵭽Ҥ뤿Υե
ѰդƤʤåȰ¸ѰդƤ褤㳰Ūˡ
ͥΥåȰ¸⥸塼target_config.cˤ˵ҤƤ褤
ξ硤target_fput_log򡤥͡൭ҡtarget_rename.defʤɡˤ˴
ƤϤʤʤ

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 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) TASK_PORTIDʥץ

ץץˤơޥʸɤ߹ॷꥢݡֹ
ޥʤΥǥեͤ1

(8-5-6) LOOP_REFʥץ

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

(8-5-7) MEASURE_TWICEʥץ

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

(8-5-8) TASK_LOOPʥץ

ץץˤơץå®٤¬ˡǤ
롼ײꤹˡ롼ײޥ롼Τμ
Ի֤0.4٤ˤʤ褦ʥ롼ײ򡤤Υޥ롥

8.6 ¹Իʬ۽ץ⥸塼ΥåȰ¸

¹Իʬ۽ץ⥸塼򥿡åȰ¸ѹˡ
åȰ¸󶡤٤¹Իʬ۽ץ⥸塼Τϼ
Ǥ롥ϡtarget_test.hʤޤϤ饤󥯥롼ɤ
եˤ˴ޤ롥¾ˡåȰ¸ɬפʽ
ˤ⡤åȰ¸˴ޤ롥

(8-6-1) HISTTIMʥץ

¹Իַ¬ѤλΥǡޥʤΥǥե
ȤSYSUTM

(8-6-2) void HIST_GET_TIM(HISTTIM *p_time)ʥץ

¹Իַ¬Ѥθ߻*p_time˼ޥ
ʤΥǥեȤget_utm

(8-6-3) uint_t HIST_CONV_TIM(HISTTIM time)ʥץ

¹Իַ¬Ѥλκʻ֡ˤ򡤼¹Իʬ۽ѤͤѴ
ޥ郎äХեζ̤Ĥ
ʤˤϡǾ̥ӥåȤ1͡INT_MAX礭͡ˤ֤
ʤΥǥեȤϡtimeuint_t˥㥹Ȥ

(8-6-4) void HIST_BM_HOOK(void)ʥץ

¹Իַ¬ľ˹Ԥ٤ޥåΥѡե
롤ХꥢԤˤϡΥޥ롥
ʤΥǥեȤϡνˤʤ롥


¾

9.1 ɥ

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

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

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

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

(3) åε

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

(3-2) ߽˴ؤ뵬
	ߥϥɥֹȳֹγơξԤб
	ͥ٤ʳTMIN_INTPRI͡
	dis_intena_intΥݡȤ̵ͭ»
	CFG_INT»ȳĥʥåǻѤǤ°
	TOPPERSɸ߽ǥ뤫Τ¾ΰæ
	ǥեȤγߥϥɥdefault_int_handlerˤ̵ͭȽ

(3-3) ͥγߤ˴ؤ뵬
	TMIN_INTPRIϸ꤫Ǥ뤫ˡ
	NMIʳ˥ͥγߤߤ뤫ߤ褦ˤ뤫
	ͥγߤˡ
	ͥγߤФDEF_INHCFG_INT򥵥ݡȤ뤫
	ͥγߥϥɥ餬¹ԳϤΥƥ֤
	ƥ
	ߥϥɥνλ˹Ԥ
	ͥγߥϥɥεˡ
	ͥγ߽ǵǽΤCPU㳰

(3-4) CPU㳰˴ؤ뵬
	CPU㳰ϥɥֹγ
	ͥ٥ޥTMIN_INTPRIƱ⤤ͤꤷ
	֤ȯCPU㳰򡤥ͥCPU㳰Ȱ
	ͥCPU㳰ǵǽΤCPU㳰
	ǥեȤCPU㳰ϥɥdefault_exc_handlerˤ̵ͭȽ

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

(3-6) ĥѥå˴ؤ뵬
	ƳĥѥåΥݡȤ̵ͭ
		- ߥ塼ƥåǽĥѥå
		- Хϥɥ鵡ǽĥѥå
		- ͥٳĥѥå
		- 󥿥ĥѥå
		- ưŪǽĥѥå
	Хϥɥ鵡ǽĥѥå򥵥ݡȤˡץ
	֤˻Ǥͤκ͡TMAX_OVRTIM͡
	ưŪǽĥѥå򥵥ݡȤˡưŪ
	ˡ

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

(4) ͥεưλ˴ؤ
	ѰդƤ륹ȥåץ⥸塼ν
	ȥåץ⥸塼뤫hardware_init_hookƤӽФƤ
	ˤϡhardware_init_hook򥢥ץꥱѰդκ
	ˡ»ʤ
	ͥλο

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

(6) ޥɥ饤дϢξ
	ƥåμѹˡ
	Ѥ꥽ʥޡ
	޳ߤγͥ٤ѹˡ
	Х󥿥޳ߤγͥ٤ѹˡ

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

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

(9) ƥ๽ۼ

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

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

(12) ǥ쥯ȥ깽ե빽

(13) С

ޤɬפ˱ơåȰ¸߷ץ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Ȥ̾ΤǤ뤳ȤꤷƤʰۤʤ̾Τξ
ǤѥåϺǤ뤬ѥåŸŸǥ
쥯ȥ꤬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_offset.tf	եåȥեѥƥץ졼ȥե2.5.1ᡤ
					ץ

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ᡤ
					

ʾ
