	
	TOPPERS/FMPͥ
		åȰ¸ ݡƥ󥰥

		бС: Release 1.2.0
		бASPͥС : Release 1.6.0
		ǽ: 2010ǯ714

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

TOPPERS/FMPͥϡ󥰥ץåRTOSǤTOPPERS/ASP
ͥ١ȤƤ뤿ᡤ¿Υݡƥ󥰹ܤTOPPERS/ASP
ͥƱǤ롥ΤᡤTOPPERS/FMPͥݡƥ󥰤ˡ
TOPPERS/ASPͥݡƥ󥰤뤳Ȥ侩롥Υɥ
ǤϡTOPPERS/ASPͥ뤫Υݡƥ󥰤˴ؤ롥

----------------------------------------------------------------------
 TOPPERS/FMP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Flexible MultiProcessor Kernel

 Copyright (C) 2005-2010 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 774 2011-01-21 03:59:11Z ertl-honda $
----------------------------------------------------------------------

ܼ
ưƥ
̻
	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 makeoffset.cεˡ
	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֥ؿ
	4.6 ԥåǽ
	4.7 ץåIDμ
ͥAPIΥåȰ¸
	5.1 åǥݡȤ뵡ǽ
	5.2 ͥ٤ϰ
	5.3 ƥå
	5.4 ΰݤΤη
	5.5 ӥåȥѥΥӥåȿ
	5.6 ΰݤΤΥޥ
	5.7 Хϥɥ鵡ǽĥΤʥץ
	5.8 ץå
	5.9 饹ID
ͥΥåȰ¸
	6.1 ͥΥåȰ¸ζ̻
		6.1.1 ͥΥåȰ¸ι
		6.1.2 åȰ¸δؿ̿̾§
	6.2 ȥ졼ǽؤб
	6.3 ƥ֤δ
		6.3.1 ߥå֤δ
		6.3.2 ƥȤδ
		6.3.3 CPUå֤δ
		6.3.4 ƥȤ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.7.7 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 ǽɾѥƥλȤΤεǽ
	6.14 Х󥿥ޥɥ饤Сʥץ
		6.14.1 Х󥿥ޥɥ饤ФΥե빽
		6.14.2 Х󥿥ޤȳ߽
	6.15 ץå
		6.15.1 ץåINDEX
		6.15.2 ޥץå
	6.16 å
		6.16.1 å
		6.16.2 åѿη
	6.17 ƥδ
	6.18 ץåֳߥɥ饤
		6.18.1 ץåֳߥɥ饤ФΥե빽
		6.18.2 ץåֳߤνλ߽
		6.18.3 ץåֳߤȯԤȥꥢ
		6.18.4 ץåߥϥɥϿ
		6.18.5 ץåߥϥɥƤӽФξά
	6.19 ץåȥ֥å
	6.20 ԥå
		6.20.1 ԥå
		6.20.2 ԥåλ
		6.20.3 ԥåϢη
		6.20.4 ԥåνǽ
	6.21 ޥ졼
		6.21.1 Υޥ졼󥵥ݡ
		6.21.2 λΥޥ졼󥵥ݡ
ե졼եΥåȰ¸
	7.1 եȥåȰ¸ΰդ
	7.2 ѥ2Υƥץ졼ȥեΥåȰ¸
		7.2.1 å¸򥤥󥯥롼ɤ٤ѿ
		7.2.2 å¸ѿ
		7.2.3 饹Ƥ
		7.2.4 饹ƤϢ
		7.2.5 饹Ƥʴؿ
		7.2.6 ץåΥǡ¤־
	7.3 ѥ3Υƥץ졼ȥեΥåȰ¸
	7.4 cfg1_out.cΥ󥯤ɬפʥ֤ե
ƥॵӥΥåȰ¸
	8.0 ƥॵӥΥåȰ¸
	8.1 ƥǽΥåȰ¸
		8.1.1 ƥϤζͭ
	8.2 ΥåȰ¸
	8.3 ꥢ륤󥿥եɥ饤ФΥåȰ¸
		8.3.1 ѿǡؿ
		8.3.2 ǥХӥ롼
		8.3.3 Хå롼
	8.4 ͥ뵯ưåνϤΥåȰ¸
	8.5 ץץȥƥȥץΥåȰ¸
		8.5.1 ¹Իʬ۽ץ⥸塼ѥޥ
¾
	9.1 ɥ
	9.2 ѥåҥե
ե
	10.1 åȰ¸Υե

ĤƤܤASPͥ뤫ѹäս򡤡FMPͥ
ǿɲä줿ս򼨤


ưƥ

FMPͥư륷ƥϡΥƥʥץå/Х
/ˤʤФʤʤ

(0-1) ɥ쥹

ƥץåǡץǡФơƱ쥢ɥ쥹ǥ
ǽǤ뤳ȡ줾ΥץåʪŪʥ꤬ۤ
äƤƤ褤

(0-2) ͭ

ץå顤ƱΥɥ쥹ǥǽRAM뤳ȡʥ
ͥΥȥ֥åϤΰ֤롥

(0-3) ץåֳߵǽ

ǤդΥץå˳ߡʥץåֳߡˤȯǽǤ뤳

(0-4) ץå¾浡ǽ

ץå֤Ǥ¾ΤεĤȡ
   : test & set ̿ᡤ Mutexϩ

(0-4) åθĿ

ץå֤¾浡Ѥƥå2ĺǽǤ뤳ȡ2
ĤΤߤξϥ㥤ȥåΤߥݡȲǽ1+ץå
2ĺǽǤȥץåå򥵥ݡȲǽåκ
Ŀ˾¤ʤȺγ٥å⥵ݡȲǽ

(0-5) ץåID

ƥץåˡID򥽥եȥɤ߹ळȤˤ
ꡤץåȽ̲ǽǤ뤳ȡ


̻

1.1 åȰ¸ι

ASPͥ뤫ѹʤ

1.2 ̾ξͤɻ

ASPͥ뤫ѹʤ

1.3 ¿ť󥯥롼ɤɻ

ASPͥ뤫ѹʤ

1.4 ֥ȤΥإåեζ 

ASPͥ뤫ѹʤ

1.5 󥯥롼ɵҤˡ

ASPͥ뤫ѹʤ

1.6 ƥ륻νμ¸˴ؤ

ASPͥ뤫ѹʤ


ƥ๽۴ĶΥåȰ¸

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

ASPͥ뤫ѹʤ

2.2 MakefileΥåȰ¸

ASPͥ뤫ѹʤ

2.3 ȯĶ̾ȥޥ̾

ASPͥ뤫ѹʤ

2.4 ѥ륪ץȥ֥ȥե

ASPͥ뤫ѹʤ

2.5 եåȥեˡ

ASPͥ뤫ѹʤ

2.5.1 makeoffset.cεˡ

ASPͥ뤫ѹʤ

2.6 ˡ

ASPͥ뤫ѹʤ

2.7 ¸ط

ASPͥ뤫ѹʤ

2.8 ¾

ASPͥ뤫ѹʤ


TOPPERSΥåȰ¸

3.1 åȼ̥ޥ

ASPͥ뤫ѹʤ

3.2 κ͡Ǿ͡ӥåȿ

ASPͥ뤫ѹʤ

3.3 λꤵ줿κ͡Ǿ͡ޥ

ASPͥ뤫ѹʤ

3.4 λꤵ줿ưκ͡ǾͤΥޥ

ASPͥ뤫ѹʤ

3.5 ѥγĥǽΤΥޥ

ASPͥ뤫ѹʤ

3.6 ɸŪξ

ASPͥ뤫ѹʤ

3.7 Τ

ASPͥ뤫ѹʤ


ƥ।󥿥ե쥤SILˤΥåȰ¸

4.1 ߥå֤δ

ߥå֤δϥץå˹Ԥ

(4-1-1) SIL_PRE_LOC

ߥåե饰ξ֤¸뤿ѿޥץ
åΩѿѰդ롥

(4-1-2) SIL_LOC_INT()

ƤӽФץåˤơߤߥåե饰ξ֤
SIL_PRE_LOCѿ¸ߥå֤ܤޥ


(4-1-3) SIL_UNL_INT()

ƤӽФץåˤơSIL_LOC_INT()ˤäѿ¸
᤹ޥ

4.2 Ԥ

ASPͥ뤫ѹʤ

4.3 ץåΥǥ

ASPͥ뤫ѹʤ

4.4 ֥ؿ

ASPͥ뤫ѹʤ

4.5 I/O֥ؿ

ASPͥ뤫ѹʤ

4.6 ԥåǽ

SILΥåȰ¸ǤϡԥåѤץå֤¾
ǽμ¸Τᡤԥå뵡ǽȥԥåֵѤ뵡
ǽ󶡤롥

SILεǽϡͥѤʤˤѤǤɬפ롥Τ
ᡤԥåμȲϡͥѤץåΥ꥽
ľ뤳ȤˤäƼ¸롥

ԥåϥͥ뤬ѤΤȤ̤ˡƥ।󥿥ե
Ѥ˳ݤ롥Ѥ륹ԥåϡͥ뵯ư˥åȰ
¸ǽ뤳ȡ

(4-6-1) SIL_LOC_SPN

ƥ।󥿥ե쥤ѤΥԥåޥΥޥ
¸ݤˤϡ1.6ƥ륻νμ¸˴ؤ
פ˵ҤƤ˽ʤФʤʤSIL_LOC_SPNϡ
SIL_LOC_INTεǽޤ롥ʤSIL_LOC_SPN
å֤ˤʤ롥ޤSIL_LOC_INT ƱͤˡѤؿޤϥ֥å
Ƭѿ SIL_PRE_LOC 򵭽ҤʤФʤʤ

(4-6-2) SIL_UNL_SPN

ƥ।󥿥ե쥤ѤΥԥåֵѤޥΥޥ
¸ݤˤϡ1.6ƥ륻νμ¸˴ؤ
פ˵ҤƤ˽ʤФʤʤ

4.7 ץåIDμ

(4-7-1) sil_get_pid(ID *p_prcid)

ƤӽФץåΥץåID롥

ͥAPIΥåȰ¸

5.1 åǥݡȤ뵡ǽ

5.2 ͥ٤ϰ

5.3 ƥå

5.4 ΰݤΤη

5.5 ӥåȥѥΥӥåȿ

5.6 ΰݤΤΥޥ

5.7 Хϥɥ鵡ǽĥΤʥץ

FMPͥǤϡХϥɥ򥵥ݡȤʤ

5.8 ץå

(5-8-1)TNUM_PRCID   ץå

ƥΥץå롥ʤݡȤץåκ
ϡuint_t ΥӥåοȤʤ(32bitʤ32)

5.9 饹ID

饹ID롥饹IDζŪͤϥåȰ¸롥

ץץư뤿ˤϡץå˼Υޥ̾Υ
饹ɬפ롥

(5-9-1) TCL_1

ץå1դץåΥ饹
դǽץåϥƥƤΥץå

(5-9-2) TCL_2

ץå2դץåΥ饹
դǽץåϥƥƤΥץå

(5-9-3) TCL_3

ץå3դץåΥ饹
դǽץåϥƥƤΥץå

(5-9-4) TCL_4

ץå4դץåΥ饹
դǽץåϥƥƤΥץå

(5-9-5) TCL_1_ONLY

ץå1դץåΥ饹
դǽץåϥץå1Τߡ

(5-9-6) TCL_2_ONLY

ץå2դץåΥ饹
դǽץåϥץå2Τߡ

(5-9-7) TCL_3_ONLY

ץå3դץåΥ饹
դǽץåϥץå3Τߡ

(5-9-8) TCL_4_ONLY

ץå4դץåΥ饹
դǽץåϥץå4Τߡ

(5-9-9) TCL_SYSTIM_PRC 

Х륿ξΥ।٥ȥϥɥϿ륯饹
դץåȳդǽץåϡƥץå
ꤹ뤳ȡ

ͥΥåȰ¸

6.1 ͥΥåȰ¸ζ̻

6.1.1 ͥΥåȰ¸ι

(f) ץåֳߥɥ饤

ץå֤ǳߤȯ뤿Υץåֳߥɥ饤ФΥإ
ե롤ե롤ƥॳե졼ե򡤤
줾졤target_ipi.htarget_ipi.ctarget_ipi.cfg˴ޤ롥ץå
åסȯĶ¸ڤʬ뤳ȤǽǤ롥

6.1.2 åȰ¸δؿ̿̾§

ASPͥ뤫ѹʤ

6.2 ȥ졼ǽؤб

ASPͥ뤫ѹʤ

6.3 ƥ֤δ

ASPͥ뤫ѹʤ

6.3.1 ߥå֤δ

ASPͥ뤫ѹʤ

6.3.2 ƥȤδ

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

ƥȤ顤CPUå֤ǸƤӽФǽ뤿
ᡤǥѥåȥޥ졼θơǥѥåȥޥ졼
󤬤ʤ줿Ǥư褦ɬפʤߤػߤƼ
Ԥ뤳ȡ

6.3.3 CPUå֤δ

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

ƥȤ顤CPUå֤ǸƤӽФ뤿ᡤǥ
åȥޥ졼θơǥѥåȥޥ졼󤬤ʤ
줿Ǥư褦ɬפʤߤػߤƼ¹Ԥ뤳ȡ

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

ƥȤ顤CPUå֤ǸƤӽФǽ뤿
ᡤǥѥåȥޥ졼θơǥѥåȥޥ졼
󤬤ʤ줿Ǥư褦ɬפʤߤػߤƼ
Ԥ뤳ȡ

6.3.4 ƥȤCPUå֤Υå

ҤΤ褦ˡƥȤȽsense_context()ˤȡCPUå֤
Ƚ[tix]_sense_lock()ˤϡޥ졼θɬפʤ顤
ߤػߤƼ¹Ԥɬפ롥ȽؿϡƱ˸
ӽФ뤳Ȥ¿ᡤ¹ԥХإåɤθơƥȽ
CPUå֤Ƚξå륿åȰ¸δؿѰդ
롥δؿǤϡޥ졼θơɬפʤ顤ߤػߤ
Ƚꤹ롥꥿ˤϳߤ򸵤ξ֤Ȥ

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

(6-3-4-4) bool_t sense_tskctx_unl(void)

ƥ  CPUå֤ʤ true  ʳʤ 
false ֤ؿ

ƥȤ顤CPUå֤ǸƤӽФǽ뤿
ᡤǥѥåȥޥ졼θơǥѥåȥޥ졼
󤬤ʤ줿Ǥư褦ɬפʤߤػߤƼ
Ԥ뤳ȡ

(6-3-4-5) bool_t sense_intctx_unl(void)

󥿥ƥ  CPUå֤ʤ true  ʳʤ 
false ֤ؿ

ƥȤ顤CPUå֤ǸƤӽФǽ뤿
ᡤǥѥåȥޥ졼θơǥѥåȥޥ졼
󤬤ʤ줿Ǥư褦ɬפʤߤػߤƼ
Ԥ뤳ȡ

6.4 ߤ˴Ϣ륷ƥ֤δ

6.4.1 ͥ٥ޥδ

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

ƥȤ顤CPUå֤ǸƤӽФǽ뤿
ᡤǥѥåȥޥ졼θơǥѥåȥޥ졼
󤬤ʤ줿Ǥư褦ɬפʤߤػߤƼ
Ԥ뤳ȡ

6.4.2 ׵ػߥե饰δ

(6-4-2-1) bool_t VALID_INTNO_DISINT(ID prcid, INTNO intno)

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

6.4.3 ׵Υꥢ

ASPͥ뤫ѹʤ

6.4.4 ׵Υץ

ASPͥ뤫ѹʤ

6.4.5 ߥϥɥƬ

ASPͥ뤫ѹʤ

6.5 ǥѥå

6.5.1 ƥȥ֥åΥǡ

ASPͥ뤫ѹʤ

6.5.2 ǥѥå

ǥѥåΤǰp_runtsk/p_schedtsk/reqflgϡץå
pcbݻƤΤȤ롥CPUå֤ϥǥѥåΤ¹Ԥ
ƤץåоݤȤ롥

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

6.5.3 ƥȤΥǥѥå

ǥѥådispatchˤǰp_runtskp_schedtskϡץå
pcb(my_pcb)ݻƤΤȤ롥

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

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

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

6.5.4 ǥѥåư

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

ǥѥåưϡstart_dispatchˤǰCPUå֡
ͥ٥ޥϡstart_dispatch¹ԤƤץåΤΤоݤȤ
롥

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

6.5.5 ߤΥƥȤΤƤƥǥѥå

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

ASPͥ뤫ѹʤ

6.5.6 εư

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

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 ߥϥɥ

ޥץåΥϡɥߤΥפ礭Ĥʬ뤳Ȥ
Ǥ롥1ܤϡñγߥȥƤΥץåǶͭ
ꡤߤǤդΥץåǼդ뤳Ȥ륿פǡSMP
߷ȸƤ֡⤦ϡץå˳ߥȥ
ߤΥץå˸ꤵƤ륿פǡAMP߷ȸƤ֡

ֹȳߥϥɥֹȤؿˤĤƤϡ̥ӥåȥ
ɤˡ32bitξϾ16bitˤ˳ߤդץåΥ
åIDꤵ줿ͤϤ뤿ᡤɬפ˱ƥޥƤ鰷
ȡ

ߴΤδ֥åϡåȰ¸Υե졼
ƥץ졼ȥեtarget.tf롥SMPߤξϡ
ƥñδ֥åΤŪǤꡤAMPߤξϡ
ץå˴֥åΤŪǤ롥

6.6.1 ߥϥɥν

ߤνǰreqflg/dspflg/p_runtsk/p_schedtskϡץ
åpcb(my_pcb)ݻƤΤȤ롥

----------------------------------------
void
<ߤν>(void)
{
	ʤȤ⥫ͥγߤػߤ֤ˤ  (*f)
	å쥸򥹥å¸
#ifdef ץåå or γ٥å
	if (ץåPCBp_firstlock != NULL) {
		p_firstlockΥå롥
		p_firstlockNULLꡥ
		if (ץåPCBp_secondlock != NULL) {
			p_secondlockΥå롥
			p_secondlockNULLꡥ
		}
   
#endif /* ץåå or γ٥å */
	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:
	force_unlock_spinƤӽФԥåƤв
	if (ƥȤǳȯ) {
		ͥγߡʤޤϡ٤Ƥγߡˤޥ
		å򥿥ѤΥåᤷƥȤڤ괹
		if (ץåPCBreqflg == true) {
			ץåPCBreqflg = false;
			ץåCPUå֤ˤ
			if (ץåPCBdspflg 
					&& ץåPCBp_runtsk != ץåPCBp_schedtsk) {
				å쥸٤ƤΥ쥸򥹥å¸
				åݥ󥿤򼫥ʼץåPCBp_runtskˤTCB¸
				ret_int_r򡤼¹ԺƳϤȤƼTCB¸  (*a)
				dispatcherʬ

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


6.6.2 ߥϥɥν

ASPͥ뤫ѹʤ

6.6.3 ߥϥɥ

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

ɸγߴǽνǤϡդץåˤơ
δؿ¹Ԥ롥affinity_mask ˤϡդǽʥץåӥåȥ
Ϥ롥ʣΥץåưŪ˳ߤդץå
ѹǽʾϡaffinity_mask ǻꤵ줿ץåΤߤǳߤ
դ褦ˤ롥

6.6.4 ׵饤°

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

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

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

ɸγߴǽνǤϡդץåˤơ
δؿ¹Ԥ롥affinity_mask ˤϡդǽʥץåӥåȥ
Ϥ롥ʣΥץåưŪ˳ߤդץå
ѹǽʾϡaffinity_mask ǻꤵ줿ץåΤߤǳߤ
դ褦ˤ롥

6.6.5 ߴǽνѹ

ASPͥ뤫ѹʤ

6.6.6 ǥեȤγߥϥɥ

ASPͥ뤫ѹʤ

6.6.7 ͥγ

ASPͥ뤫ѹʤ

6.6.8 ֹ桦ߥϥɥֹΥޥץåĥ

ֹ˴ؤƤϡʣΥץå³줿׵饤
Ƥϡֹξ̥ӥåȤ0Ȥ1ĤΥץåΤߤ³줿
׵饤ФƤϡֹξ̥ӥå(32bitξϾ
16bit)³줿ץåIDֹޤ롥㤨СץåID 2 
ΥץåΤߤ³줿ֹ椬 3 γ׵饤32bitCPU
Ǥγֹϡ0x00020003 Ȥʤ롥

ߥϥɥֹ˴ؤƤϡ̥ӥå(32bitξϾ16bit)ˡ
γߥϥɥ¹ԤץåIDֹޤ롥㤨Сץ
ID 2 ץåǼ¹Ԥ뼱ֹ椬 4 γߥϥɥ32bitCPUǤ
ߥϥɥֹϡ0x00020004 Ȥʤ롥

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

6.7.1 CPU㳰ϥɥν

CPU㳰νǰreqflg/dspflg/p_runtsk/p_schedtskϡץ
åPCBݻƤΤȤ롥ޤƾ֤CPU㳰ν
¹ԤƤץåΤΤоݤȤ롥

----------------------------------------
void
<CPU㳰ν>(void)
{
	å쥸򥹥å¸
	if (ͥCPU㳰) {
		if (ƥȤCPU㳰ȯ) {
			å󥿥ƥѤΥåڤ괹
									󥿥ƥȤڤ괹
		}
		ƥ֡ʥƥȤϽˤCPU㳰ȯξ֤ˤ
		CPU㳰ϥɥCPU㳰ξ򵭲ƤΰƬϤ
									ѥ᡼p_excinfˤȤƸƤӽФ
		if (ƥȤCPU㳰ȯ) {
			å򥿥ѤΥåᤷƥȤڤ괹
		}
		CPU㳰Υ꥿ˡCPU㳰ȯΥƥ֤
													褦˽
	}
	else {
		if (ƥȤCPU㳰ȯ) {
			å󥿥ƥѤΥåڤ괹
									󥿥ƥȤڤ괹
		}
		CPU㳰ȯ˥ԥåƤʼץåPCBlocspnid¸
		ƥ֡ʥƥȤϽˤ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㳰ȯ˥ԥå̤) {
			force_unlock_spinƤӽФԥåƤв
		}
		if (ƥȤCPU㳰ȯ) {
			ץåǥͥγߡʤޤϡ٤Ƥγߡˤޥ
			å򥿥ѤΥåᤷƥȤڤ괹
			if (ץåPCBreqflg) {
				ץåPCBreqflg = false;
				ץåCPUå֤ˤ
				if (ץåPCBdspflg 
					&& ץåPCBp_runtsk != ץåPCBp_schedtsk) {
					å쥸٤ƤΥ쥸򥹥å¸
					åݥ󥿤򼫥ʼץåPCBp_runtskˤTCB¸
					ret_exc_r򡤼¹ԺƳϤȤƼTCB¸  (*a)
					dispatcherʬ

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

6.7.2 CPU㳰ϥɥν

ASPͥ뤫ѹʤ

6.7.3 CPU㳰ϥɥ

ASPͥ뤫ѹʤ

6.7.4 CPU㳰ǽνѹ

ASPͥ뤫ѹʤ

6.7.5 ǥեȤCPU㳰ϥɥ

ASPͥ뤫ѹʤ

6.7.6 CPU㳰ȯΥƥ֤λ

ASPͥ뤫ѹʤ

6.7.7 CPU㳰ϥɥֹΥޥץåĥ

ۤʤץåȯCPU㳰ϡۤʤCPU㳰ǤȰᡤƱ
CPU㳰ǤäƤ⡤ۤʤץåCPU㳰ˤϰۤʤCPU㳰
ϥɥֹͿץåCPU㳰ϥɥϿ롥

CPU㳰ϥɥֹξ̥ӥåȥեɡ32bitξϾ16bitˤ
ץåȤƥץåIDɽ̥ӥåȥեɡ32bit
ϲ16bitˤץåCPU㳰̤뤿Ѥ롥㤨С
ץåID 2 CPU㳰μֹ椬 4 32bitCPU㳰ϥɥֹ 
0x00020004 Ȥʤ롥

6.8 ͥεưλȥåΰʤ

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

ȥåץ⥸塼ǤϡץåΥ⡼䥹åݥ
ȤäƥΥץ饤١ȤϳƥǹԤͭ
bssΥꥢȡdataνȤäͭ
νϲǽʸ¤ޥץåǹԤ̥꥽ν
ȤƤνѤCؿtarget_mprc_initializeˤƤӽ
ȡ

ޥץåʳϡޥץåˤ붦ͭ꥽ν
νλԤ碌롥ޥץåˤ붦ͭ꥽ν
λ塤ƥץåsta_kerƤӽФ

ͥεư󥹤򼡤˼

             ޥץå                        ¾Υץå
                             (a)ϡɥν       
                             (b)hardware_init_hook()θƤӽФ 
                             (c)bss/data              
               (d)software_init_hook()θƤӽФ
               (e)target_mprc_initialize()θƤӽФ
(f)ХꥢƱ1 ---------------------------------------------------------
                             (g)sta_ker()θƤӽФ
(h)ХꥢƱ2 ---------------------------------------------------------
                    Х롼ʥޥץåΤߡ
(i)ХꥢƱ3 ---------------------------------------------------------
                    롼ʳƥץå
(j)ХꥢƱ4 ---------------------------------------------------------
                    (k)ͥư򳫻

(a)ϡɥν

ƥΥꥻåȸ夹˳ƥץåǹԤɬפΤԤ

(b)hardware_init_hookθƤӽФ

ƥΥꥻåȸ夹˹ԤɬפΤ륿åȥƥ¸ν
ԤSMPפΥϡɥǤϡޥץåΤ߼¹Ԥ
ΤŪǤ롥ץ饤١ȥ꥽¸ߤϤ줾Υץ
ǽ롥

(c)bss/data    

Cư뤿ΡνԤޥץåΤ߹
ΤŪǤ롥ץ饤١ȥϡ줾Υץåǽ
롥

(d)software_init_hook()θƤӽФ

ȯĶä˥饤֥ˤ˰¸ɬפʽԤŪˤϡ
ޥץåΤߤǹԤ

(e)target_mprc_initialize()θƤӽФ

ޥץåǻ˽ɬפϡɥ롥
target_initialize()ɬפʥϡɥνꤷƤ롥

(f)ХꥢƱ1

sta_ker()ƤӽФ˥ȥåץ⥸塼ǥХꥢƱԤ

(g)sta_kerƤӽФ

sta_kerƤӽФåȰ¸ν䥪֥ȤνԤ

(h)ХꥢƱ2

Х롼ƤӽФƱθ塤ޥץåǥ
Х롼ƤӽФ

(i)ХꥢƱ3

Х롼νλ塤ƥץåǥ롼
ƤӽФƱ

(j)ХꥢƱ4

ƤΥץåǤΥ롼μ¹ԤԤ碌뤿Ʊ


(m)ͥư򳫻

ǥѥåƤӽФƥͥư򳫻Ϥ롥

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

ASPͥ뤫ѹʤ

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

ASPͥ뤫ѹʤ

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

ASPͥ뤫ѹʤ

(6-8-5) void target_mprc_initialize(void)

sta_kerƤӽФ˥ޥץåǻ˽ɬפϡ
뤿δؿ

(6-8-6) OMIT_BARRIER_SYNC

ͥư/λѤΥХꥢƱδؿ줿
ʪǤϤʤ¸ѰդؿѤ롥

(6-8-7) void barrier_sync(uint_t phase);

ͥư/λѤΥХꥢƱδؿOMIT_BARRIER_SYNC
ơåȰ¸ǥХꥢƱδؿˤλͤ
롥phaseƱΥեꤵ롥

(6-8-8) ͥνλ

ͥνλ󥹤򼡤˼ext_ker()ƤӽФ줿ץå
¾ΥץåФƽλ׵ᤷƥƥΤ򥷥åȥ
󤵤롥

         ץåǤext_ker()ƤӽФ
          ͥư֤ư֤
            (a)¾Υץåؤ
                                  ¾ΥץåǤext_ker()ƤӽФ
                                   ͥư֤ư֤
                      (b)exit_kernel()ƤӽФ
(c)ХꥢƱ1 ---------------------------------------------------------
                  뽪λ롼ʳƥץå
(d)ХꥢƱ2 ---------------------------------------------------------
                Х뽪λ롼ʥޥץåΤߡ
(e)ХꥢƱ3 ---------------------------------------------------------
                     (f)target_exit()θƤӽФ

(a)¾Υץåؤ

ɸǤϡѰդƤǥѥå׵ѤΥץåֳ
ήѤؿѤ롥åȰ¸ϡҤΥޥ
Ф褤

(b)exit_kernel()ƤӽФ

󥿥ƥȤڤؤexit_kernel()ƤӽФ

(c)ХꥢƱ1

ƤΥץåǤνλγϤƱ뤿ᡤexit_kernel()
Ʊ롥

(d)ХꥢƱ2

ƥץåǤΥ뽪λ롼μ¹ԤνλԤ碌롥

(e)ХꥢƱ3

ޥץåˤ륰Х뽪λ롼μ¹ԤνλԤ
롥

(f)target_exit()θƤӽФ

target_exit()˸ƤӽФơλ򽪤餻롥


(6-8-9) λϢδؿ

åȰ¸Ǥϡͥ뽪λ׵ؿɬפʤСѰդ롥
ХꥢƱؿ˴ؤƤϡưƱؿѤ뤿ᡤλѤ
ѰդɬפϤʤ

(6-8-9-1) OMIT_KER_REQ_ON_IPI

¾ΥץåФ륫ͥ뽪λ׵ǥѥå׵ѤΥץ
åֳߥϥɥǷѤʤ롥

(6-8-9-2) void ext_ker_request(void)

¾ΥץåФ륫ͥ뽪λ׵ǥѥå׵ѤΥץ
åֳߥϥɥǷѤʤˡåȰ¸Ѱդ롥
ͥ뽪λؿext_ker()ˤǸƤӽФ롥

6.9 ͥΥ塼˥

6.9.1 ӥåȥޥåץ

ASPͥ뤫ѹʤ

6.9.2 ӥåȥե

ASPͥ뤫ѹʤ

6.10 ͥ˴ؤ뤽¾

6.10.1 󥿥ƥѤΥåΰ

(6-10-1-1) DEFAULT_PRC<ץåID>_ISTKSZ

DEF_ICSˤ󥿥ƥѤΥåΰ褬ꤵʤΡ
ǥեȤΥåΰΥʥХȿˡץå롥

(6-10-1-2) DEFAULT_PRC<ץåID>_ISTKʥץ

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

6.10.2 ٥

ASPͥ뤫ѹʤ

6.11 ȥ졼ǽ˴ؤ

6.11.1 Ǥȥ졼μȥޥ

(f) ޥ졼

Υޥ뤳Ȥǡޥ졼󤷤Υȥ졼
뤳ȤǤ롥

	LOG_TSKMIG(p_tcb, src_id, dest_id)	ޥ졼

6.11.2 ȥ졼ϿΥץ륳

ASPͥ뤫ѹʤ

6.12 ͥΥåȰ¸ΤΥ͡൭

ASPͥ뤫ѹʤ

6.13 ޥɥ饤

6.13.1 ޥɥ饤ФΥե빽

ASPͥ뤫ѹʤ

6.13.2 ޤνλ߽

ASPͥ뤫ѹʤ

6.13.2 ޤνλ߽

ASPͥ뤫ѹʤ

6.13.3 ǽɾѥƥλȤΤεǽ

FMPͥǤϡҤ륿ξϡͥ붦
get_utm򥵥ݡȤ뤬Х륿ǤϥݡȤʤ
ΤᡤХ륿ǡget_utm򥵥ݡȤϡ
åȰ¸Ѱդ뤳ȡ

6.14 Х󥿥ޥɥ饤Сʥץ

FMPͥǤϥХ󥿥ޤ򥵥ݡȤʤ

6.15 ץå

6.15.1 ץåINDEX

ץåINDEXϡ0Ϣ³ֹġΥץå˳դ
ǤꡤͥǻѤ롥ɤΥץåˤɤINDEXդ
ϡåȰ¸Ƿ롥

åȰ¸ϡ¹ΥץåΥץåINDEXȽ̤뵡ǽ
󶡤롥

(6-15-1-1) uint_t x_prc_index(void)

ñ̤¹ԤƤץåINDEX֤ؿϡɥλ
ĥץå(HW-ID)ΤIDץåINDEX֤
HW-ID0Ϣ³ͤǤʤˤϡδؿŬڤѴ롥

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

6.15.2 ޥץå

ƥ1ĤΥץå򼨤ޥץåϡ֥
ȽԤɤΥץåޥץåȤ뤫ϡ
åȰ¸Ƿꤹ롥åȰ¸Ǥϡ¹Υץåޥ
åȽ̤뵡ǽ󶡤롥

(6-15-2-1) bool_t x_sense_mprc(void)

ñ̤¹ԤƤץåޥץåʤtrueޥ
åǤʤfalse֤ؿ

(6-15-2-2) TOPPERS_MASTER_PRCID

ޥץåID򥫡ͥ붦̹ޥȤ롥

6.16 å

6.16.1 å

åȰ¸Ǥϡåñ̤ΰ㤤ˤ3ΥåΤ
Ĥ򤹤롥åθĿ˾¤ϡγ٥å
򤹤뤳ȤϤǤʤ

(6-16-1-1) TTYPE_KLOCK 

åꤹޥǽϰʲΥåΤΤ
줫Ǥ롥

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

(6-16-1-2) G_KLOCK   㥤ȥå

㥤ȥåͭˤޥ㥤ȥåϡ
1ĤΥåѤ٤ƤΥƥॳ뤬¾Ū˼¹Ԥ
롥

(6-16-1-3) P_KLOCK  ץåå

ץååͭˤޥץå˥åȥ
֥ȥåѤץå x 2 ĤΥåɬסۤ
ץå˳դƤ¹ñ̤ؤΥƥॳƱ˼¹
ǽޤۤʤ륪֥ȥåץå˳դƤ륪
ȤؤΥ ƥॳƱ˼¹Բǽ

(6-16-1-4) F_KLOCK   γ٥å

γ٥åͭˤޥץå˥å֥
˥֥ȥåѤץå + ¹ñ̤Ȥ
ʤ֥ȤοΥåɬפȤʤ롥ۤʤץå˳դ
Ƥ¹ñ̤ؤΥƥॳƱ˼¹Բǽޤۤʤ륪
ȤФ륷ƥॳƱ˼¹ԲǽǤ롥

6.16.2 åѿη

åȰ¸ϡå˥åѿη롥ʤ
ʤåˤĤƤɬפϤʤ

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

(6-16-2-1) LOCK 

åѿηtarget_pcb.hޤϤ饤󥯥롼ɤե
ʥץååסȯĶ¸Ѱդإåեʤɡˤ
ޤ롥

㥤ȥåϡåѿϥХѿȤ mp.c 
롥

ץååξϡåѿȥ֥ȥåѿ
ϥå֥ȥåPCB롥

γ٥åξϡåѿϡåPCB
졤֥ȥåϡ¹ñ̰ʳΥ֥Ȥδ֥å
롥¹ñ̰ʳΥ֥Ȥγƽ֥åˡΥ
ȤΥ֥ȥåץåΥ֥ȥåؤΥݥ
Ǽѿ롥

6.16.3 åؿ

åȰ¸ϡå˥å뵡ǽ󶡤롥
ϡѤʤåεǽɬפϤʤƥå
ؿбɽʲ˼

                                     G_KLOCK  P_KLOCK  F_KLOCK
x_initialize_giant_lock()              
x_initialize_tsk_lock()                                
x_initialize_obj_lock()                                
t_acquire_lock()                                     
i_acquire_lock()                                     
t_acquire_nested_lock()                                
i_acquire_nested_lock()                                
x_release_lock()                                     
x_acquire_lock_without_preemption()                  

(6-16-3-1) void x_initialize_giant_lock(LOCK *p_giant_lock)

㥤ȥåνؿͥ뵯ư˥ޥץå
ƤӽФ롥

(6-16-3-2) void x_initialize_tsk_lock(LOCK *p_tsk_lock)

ץåå/γ٥åǤΥåνؿ
뵯ư˼ץåΥåоݤ˸ƤӽФ롥

(6-16-3-3) void x_initialize_obj_lock(LOCK *p_obj_lock)

ץåå/γ٥åǤΥ֥ȥåνؿ
ͥ뵯ư˸ƤӽФ롥ץååξϡץå
֥ȥåоݤ˸ƤӽФ롥γ٥åξϡ֥
Υ֥ȥåоݤ˸ƤӽФ롥

(6-16-3-4) void t_acquire_lock(LOCK *p_lock);
(6-16-3-5) void i_acquire_lock(LOCK *p_lock);

1ܤΥåؿCPUå֤ǸƤӽФ롥p_lockФƥ
μߡåǤХ꥿󡥥åǤ
СöߤĤػߤơåμߤ롥

(6-16-3-6) bool_t t_acquire_nested_lock(LOCK *p_lock);
(6-16-3-7) bool_t i_acquire_nested_lock(LOCK *p_lock);

2ܤΥåؿCPUå֤ǸƤӽФ롥p_lockФƥ
μߡåǤfalse꥿󡥥å
ǤʤСöߤĤػߤơץåPCB
p_firstlockå롥p_firstlockNULLʤtrue֤
p_firstlockNULLǤʤʤ顤åμߤ롥

(6-16-3-8) void x_release_lock(LOCK *p_lock)

åؿCPUå֤ǸƤӽФ롥p_lockΥå롥

(6-16-3-9) void x_acquire_lock_without_preemption(LOCK *p_lock)

ߤĤʤåؿCPUå֤ǸƤӽФ롥p_lock
μߡǤХ꥿󤹤롥

6.17 ƥδ

ƥδȤƤϡץå˸̤˥ޤĥ
륿ȡƥǰĤΥޤѤ륰Х륿2
򥵥ݡȤ롥Х륿Ǥϡåϥ㥤
åΤߤ򥵥ݡȤ롥

(6-17-1) TOPPERS_SYSTIM_GLOBAL 

Х륿ͭˤޥ

(6-17-2) TOPPERS_SYSTIM_LOCAL

륿ͭˤޥ

(6-17-3) TOPPERS_SYSTIM_PRCID

Х륿ξΥƥץåIDꡥ

6.18 ץåֳߥɥ饤

6.18.1 ץåֳߥɥ饤ФΥե빽

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

ץåֳߥɥ饤ФƤӽФɬפޤإåե
target_ipi.hѰդ롥ޤɬפǤСץåֳߥ
饤Фμեtarget_ipi.cѰդ롥

6.18.2 ץåֳߤνλ߽

(6-18-2-1) void target_ipi_initialize(intptr_t exinf)

ץåֳ߽ץåֳȯԲǽȤؿ
ؿϡtarget_ipi.cfg ˵ҤŪAPIˤꡤ롼Ȥ
ͥϿ뤳ȤꤷƤ롥ɬפȤʤϡѰդɬ
Ϥʤ

(6-18-2-2) void target_ipi_terminate(intptr_t exinf)

ץåֳߤߤץåֳߤȯʤ褦ˤ
ؿδؿϡtarget_ipi.cfg ˵ҤŪAPIˤꡤλ
ȤƥͥϿ뤳ȤꤷƤ롥ɬפȤʤϡ
ѰդɬפϤʤ

6.18.3 ץåֳߤȯԤȥꥢ

(6-18-3-1) void target_ipi_raise(uint_t prcid)

ץåֳߤȯԤؿˤϳȯΥץåID
ꤵ롥

(6-18-3-2) void target_ipi_clear(void)

ץåֳߤ򥯥ꥢؿץåֳߤդץ
åǵưץåֳߥϥɥǸƤӽФ롥

6.18.4 ץåߥϥɥϿ

ǤϡץåֳߤǸƤӽФߥϥɥ 
ipi_handler() ѰդƤ롥

δؿϡtarget_ipi.cfg˵ҤŪAPIˤꡤߥϥɥ
ϳߥӥ롼ȤƥͥϿ뤳ȤꤷƤ롥
ʤ׵ػߥե饰Ĥ褦Ͽ뤳ȡ

6.18.5 ץåߥϥɥƤӽФξά

åȰ¸κŬȤơץåֳ߼դˡ嵭γ
ߥϥɥƤӽФץåreqflgtrueȤơߤ
и(ret_int)ƤӽФȤǽǤ롥

6.19 ץåȥ֥å

åȰ¸ǥץåɬפѿϡåȰ¸Υץå
ȥ֥åTPCBˤȤƤޤȤᡤPCBǥץå
롥TPCBϡtarget_pcb.hޤϤ饤󥯥롼ɤե
ʥץååסȯĶ¸Ѱդإåեʤɡ
˴ޤ롥

target_pcb.hޤϤ饤󥯥롼ɤեˤϡʲƤ
ޤɬפ롥

  ѤPCBtypedef
    typedef struct processor_control_block PCB
  TPCB
  (6-14-1-1) uint_t x_prc_index(void) 
  6.16.1 å λ
  6.16.2 åѿη

(6-19-1) OMIT_TARGET_PCB

åȰ¸Υץåȥ֥åɬפǤʤ
롥

(6-19-2) OMIT_GET_MY_P_PCB

Ƥ뼫ץåΥץåȥ֥åؤ
ݥ󥿤뤿δؿPCB* get_my_p_pcb(void)ˤѤʤ
롥ϡåȰ¸ǡget_my_p_pcb() 
ɬפ롥

(6-19-3) OMIT_GET_MY_P_TPCB

Ƥ뼫ץåΥץå¸Υåȥȥ
֥åؤΥݥ󥿤뤿δؿTPCB* get_my_p_tpcb(void)
Ѥʤ롥ϡåȰ¸ǡ
get_my_p_tpcb() ɬפ롥

6.20 ԥå

6.20.1 ԥå

ͥ륪֥ȤΥԥåμ¸ȤƤϡԥå
ȤȥϡɥΥԥå11бͥƥȡ
֥ȥåˤꡤŪ˥ԥå¸륨ߥ졼
2򥵥ݡȤ롥

6.20.2 ԥåλ

(6-19-2-1) TTYPE_SPN

ԥåμ¸ꤹΥޥΤ줫롥

(6-19-2-2) NATIVE_SPN   ͥƥλ
(6-19-2-3) EMULATE_SPN  ߥ졼λ

(6-19-2-4) TMAX_NATIVE_SPN  åκ

ͥƥξˡݡȤåκޥ

6.20.3 ԥåϢη

(6-19-3-1)   SPNLOCK   åѿη

ͥƥξΡϡɥԥåѤåѿη

6.20.4 ԥåνǽ

ͥƥξϡåȰ¸ǥԥåΡ
ǽ󶡤ɬפ롥
     
(6-19-4-1) void x_initialize_spin(ID spnid, SPNLOCK *p_spn_lock)

ԥåνؿ˸ƤӽФ롥

(6-19-4-2) void t_lock_spin(SPNLOCK *p_spn_lock)
(6-19-4-3) void i_lock_spin(SPNLOCK *p_spn_lock)

ԥåμؿCPUå֤ǸƤӽФ롥ϡɥ
åߡǤХ꥿󤹤롥Ǥʤϡ
öߤĤ塤Ƥӳߤػߤ˥ϡɥԥå
ߤ롥ԥå֤ǸƤӽФ뤳ȤϤʤƤӽФ
줿ưݾڤɬפʤ

(6-19-4-4) bool_t x_try_lock_spin(SPNLOCK *p_spn_lock)

ԥåμλԴؿCPUå֤ǸƤӽФ롥ϡɥ
ԥåǤfalse֤Ǥʤϡtrue
ԥå֤ǸƤӽФ뤳ȤϤʤƤӽФ줿ư
ݾڤɬפʤ
       
(6-19-4-5)  void x_unlock_spin(SPNLOCK *spn_lock)

ԥåβؿCPUå֡ԥåֵѤ
ǸƤӽФ뤳ȤϤʤƤӽФ줿ưݾڤɬפʤ

6.21 ޥ졼

åȰ¸ϡޥ졼򥵥ݡȤ뤿ᡤ
Υޥ졼󥵥ݡȴؿλΥޥ졼󥵥ݡ
ؿ롥

6.21.1 Υޥ졼󥵥ݡ

Υޥ졼󥵥ݡȡdispatch_and_migrateˤϡ
ƥȤ鼫Υޥ졼˸ƤӽФ롥CPUå
ġưȰưΥå֤ǡޥ졼Υץ
åID˸ƤӽФ롥

dispatch_and_migrateνƤϼ̤

----------------------------------------
void
dispatch_and_migrate(ID prcid)
{
	å쥸٤ƤΥ쥸򥹥å¸
	åݥ󥿤򼫥ʼץåPCBp_runtskˤTCB¸
	dispatch_r򡤼¹ԺƳϤȤƼTCB¸ 
	å󥿥ƥƥѤΥåڤؤ
	migrate_self(prcid)
}

6.21.2 λΥޥ졼󥵥ݡ

λΥޥ졼󥵥ݡȴؿexit_and_migrateˡ
ƥȤǡext_tsk() ƤӽФ̡塼󥰤Ƥޥ
졼¹Ԥݤ˸ƤӽФ롥CPUåġưȰ
ưΥå֤ǡޥ졼ΥץåID
ƤӽФ롥

exit_and_migrateνƤϼ̤ꡥ

----------------------------------------
void
exit_and_migrate(ID prcid)
{
	å󥿥ƥƥѤΥåڤؤ
	exit_and_migrate_self(prcid)
}


ե졼ե

7.1 եȥåȰ¸ΰդ

ASPͥ뤫ѹʤ

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

7.2.1 å¸򥤥󥯥롼ɤ٤ѿ

(7-2-21)TARGET_CHECK_ATT_ISRʥץ

åȰ¸ATT_ISRΥ饹դΥåԤ
TARGET_CHECK_ATT_ISR ˤϡATT_ISRΥֹ椬ѥ᡼Ȥ
롥

intnoǻꤷ׵饤³줿ץåνפǤ
νξˡƤӽФ롥ñץåorץåפξ
ϡ¸б뤿ᡤƤӽФʤ


7.2.2 å¸ѿ

7.2.3 饹Ƥ

åȰ¸Υѥ2Υƥץ졼ȥեǤϡå¸
򥤥󥯥롼ɤ˥饹˰ʲλɬפ롥

(7-2-3-1) NUM_CLASS

饹οꤹ롥

7.2.4 饹ƤϢ

åȰ¸Υѥ2Υƥץ졼ȥեǤϡå¸
򥤥󥯥롼ɤ˥饹˰ʲλϢȤɬ
롥Ϣźˤϡ饹IDꤹ롥

  1.ñ̤νդץå
  2.ñ̤γդǽץå
  3.֥ȥåץåλʥץååξ

(7-2-4-1) CLASS_AFFINITY_INI

դץåΥץåIDꤹ롥

(7-2-4-2) CLASS_AFFINITY_MASK

ޥ졼ǽʥץåޥǻꤹ롥LSBˡץ
åIDֹ"1","2","3"...б롥ޥ졼ǽʾϡ
ӥåȤ1˻ꤹ롥

(7-2-4-3) CLASS_OBJ_LOCK

ץååξ硤ƥ֥ȤΥ֥ȥåȤƻ
ѤץåΥץåIDꤹ롥

7.2.5 饹Ƥʴؿ

ʲ˼֥ȴ֥å֤椹뤿ᡤåȰ
¸Υѥ2Υƥץ졼ȥեˤơ ͥιե
kernel_cfg.c )ѿؿѰդ롥ʤ
δؿʤϡäֻԤʤѿ롥
оݤΥ֥ȤIDֹǤ롥ѿ¿ϡ
ʤХֲǽǤ롥åϥץ饤
١ȥֲǽǤ롥

  1.ͥ륪֥ȤΥȥ֥å־
  2.ͥ륪֥ȤΥȥ֥åʳΥΰʥ
    åǡ塼סХåեΰ־

(7-2-5-1)  GENERATE_TCB(tskid)   ֥åؿ

̤ξϡΥեޥåȤѿ롥

	TCB _kernel_tcb_$tskid$;$NL$

(7-2-5-2)  GENERATE_SEMCB(semid) ޥե֥åؿ

̤ξϡΥեޥåȤѿ롥

	SEMCB _kernel_semcb_$semid$;$NL$

(7-2-5-3)  GENERATE_FLGCB(flgid) ٥ȥե饰֥åؿ

̤ξϡΥեޥåȤѿ롥

	FLGCB _kernel_flgcb_$flgid$;$NL$

(7-2-5-4)  GENERATE_DTQCB(dtqid) ǡ塼֥åؿ

̤ξϡΥեޥåȤѿ롥

	DTQCB _kernel_dtqcb_$dtqid$;$NL$

(7-2-5-5)  GENERATE_PDQCB(pdqid) ͥ٥ǡ塼֥åؿ

̤ξϡΥեޥåȤѿ롥

	PDQCB _kernel_pdqcb_$pdqid$;$NL$

(7-2-5-6)  GENERATE_MBXCB(mbxid) ᡼ܥå֥åؿ

̤ξϡΥեޥåȤѿ롥

	MBXCB _kernel_mbxcb_$mbxid$;$NL$

(7-2-5-7)  GENERATE_MPFCB(mpfid) Ĺ֥å֥åؿ

̤ξϡΥեޥåȤѿ롥

	MPFCB _kernel_mpfcb_$mpfid$;$NL$

(7-2-5-8)  GENERATE_CYCCB(cycid) ϥɥ֥åؿ

̤ξϡΥեޥåȤѿ롥

	CYCCB _kernel_cyccb_$cycid$;$NL$

(7-2-5-9)  GENERATE_ALMCB(almid) 顼ϥɥ֥åؿ

̤ξϡΥեޥåȤѿ롥

	ALMCB _kernel_almcb_$almid$;$NL$

(7-2-5-10) GENERATE_SPNCB(spnid) ԥå֥åؿ

̤ξϡΥեޥåȤѿ롥

	SPNCB _kernel_spncb_$spnid$;$NL$

(7-2-5-11) GENERATE_TSKSTK(tskid) åؿ

̤ξϡΥեޥåȤѿ롥

	static STK_T _kernel_stack_$tskid$[COUNT_STK_T($TSK.STKSZ[tskid]$)];$NL$

(7-2-5-12) GENERATE_DTQMB(dtqid)  ǡ塼ΰؿ

̤ξϡΥեޥåȤѿ롥

	static intptr_t _kernel_dtqmb_$dtqid$[$DTQ.DTQCNT[dtqid]$];$NL$

(7-2-5-13) GENERATE_PDQMB(pdqid)  ͥ٥ǡ塼ΰؿ

̤ξϡΥեޥåȤѿ롥

	static PDQMB _kernel_pdqmb_$pdqid$[$PDQ.PDQCNT[pdqid]$];$NL$

(7-2-5-14) GENERATE_MPF_T(mpfid)  Ĺ֡Хåեؿ

̤ξϡΥեޥåȤѿ롥

	static MPF_T _kernel_mpf_$mpfid$[($MPF.BLKCNT[mpfid]$) * COUNT_MPF_T($MPF.BLKSZ[mpfid]$)];$NL$

(7-2-5-15) GENERATE_MPFMB(mpfid)  Ĺסΰؿ

̤ξϡΥեޥåȤѿ롥

	static MPFMB _kernel_mpfmb_$mpfid$[$MPF.BLKCNT[mpfid]$];$NL$

7.2.6 ץåΥǡ¤־

åȰ¸Υѥ2Υƥץ졼ȥեǤϡå¸
򥤥󥯥롼ɤˡͥιեkernel_cfg.c 
)륫ͥǥץåɬפȤʤʲΥǡ
¤ФơλΤδؿ롥ʤδؿ
ʤϡäֻԤʤѿ롥

 1.PCB
   ¾ץå饢ǽΰ֤뤳ȡ
 2.󥿥ƥѤΥå
    ץåΤߥǤΰֲǽ
 3.।٥ȴϢǡ   
   3.1।٥ȥȥ֥å
    ¾ץå饢ǽΰ֤뤳ȡ
   3.2।٥ȥҡ
    ¾ץå饢ǽΰ֤뤳ȡ

(7-2-6-1) GENERATE_PCB(prcid) ץåȥ֥åؿ

̤ξϡΥեޥåȤѿ롥

	PCB _kernel_prc$prcid$_pcb;$NL$

(7-2-6-2) GENERATE_ISTACK(prcid) 󥿥ƥѥåؿ

̤ξϡΥեޥåȤѿ롥

	static STK_T	_kernel_prc$prcid$_istack[COUNT_STK_T(DEFAULT_PRC$prcid$_ISTKSZ)];$NL$

(7-2-6-3) GENERATE_ISTACK_ICS(prcid, icsid) ICSѻ󥿥ƥѥåؿ

̤ξϡΥեޥåȤѿ롥

	static STK_T	_kernel_prc$prcid$_istack[COUNT_STK_T($ICS.ISTKSZ[icsid]$)];$NL$

(7-2-6-4) GENERATE_TMEVTN_HEAP(prcid) ।٥ȥҡפؿ

̤ξϡΥեޥåȤѿ롥

	TMEVTN	_kernel_prc$prcid$_tmevt_heap[TNUM_TSKID + TNUM_CYCID + TNUM_ALMID];$NL$

(7-2-6-5) GENERATE_TMEVTN_HEAP_SYSTIM_GLOBAL() Х륿Υ।٥ȥҡפؿ

̤ξϡΥեޥåȤѿ롥

	TMEVTN	_kernel_tmevt_heap[TNUM_TSKID + TNUM_CYCID + TNUM_ALMID];$NL$

(7-2-6-6) GENERATE_GENERATE_TEVTCB(prcid) ।٥ȥȥ֥åؿ

̤ξϡΥեޥåȤѿ롥

	TEVTCB	_kernel_prc$prcid$_tevtcb;$NL$

(7-2-6-7) GENERATE_GENERATE_TEVTCB_SYSTIM_GLOBAL(prcid) Х륿Υ।٥ȥȥ֥åؿ

̤ξϡΥեޥåȤѿ롥

	TEVTCB	_kernel_tevtcb;$NL$

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

ASPͥ뤫ѹʤ

7.4 cfg1_out.cΥ󥯤ɬפʥ֤ե

FMPͥǤϡtarget_cfg1_out.hʤޤϡ饤󥯥롼ɤ
եˤˡŵŪˤϡʲΤ褦ޤɬפ롥

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

void hardware_init_hook(void)
{
}

void software_init_hook(void)
{
}

void _kernel_target_mprc_initialize(void)
{
}

STK_T *const _kernel_istk_table[TNUM_PRCID];

const SIZE _kernel_istksz_table[TNUM_PRCID];

STK_T *const	_kernel_istkpt_table[TNUM_PRCID];
----------------------------------------

ƥॵӥΥåȰ¸

8.0 ƥॵӥΥåȰ¸
  
ASPͥ뤫ѹʤ

8.1 ƥǽΥåȰ¸
   
(8-1-3) SEC_SYSLOG        G_SYSLOGΥƥǽѿ֥ޥʥץ
(8-1-4) SEC_PRC1_SYSLOG   ץå1ѤΥƥǽѿ֥ޥʥץ
(8-1-5) SEC_PRC2_SYSLOG   ץå2ѤΥƥǽѿ֥ޥʥץ
(8-1-6) SEC_PRC3_SYSLOG   ץå3ѤΥƥǽѿ֥ޥʥץ
(8-1-7) SEC_PRC4_SYSLOG   ץå4ѤΥƥǽѿ֥ޥʥץ

ƥǽѤѿ־ʥˤλ
ˡ롥־椷ʤɬפϤʤGNUĶ
ϡΤ褦Ф褤

#define SEC_LOGTASK(type, variable) \
			type variable __attribute__((section("<̾>"),nocommon))

(8-1-8)  LOGTASK_PORTID_PRC1  ץå1ѤΥƥѤΥꥢݡֹ ʥǥե 1
(8-1-9)  LOGTASK_PORTID_PRC2  ץå2ѤΥƥѤΥꥢݡֹ ʥǥե 2
(8-1-10) LOGTASK_PORTID_PRC3  ץå3ѤΥƥѤΥꥢݡֹ ʥǥե 3
(8-1-11) LOGTASK_PORTID_PRC4  ץå4ѤΥƥѤΥꥢݡֹ ʥǥե 4

ƥϤ륷ꥢݡֹ롥
ʤϡǥեͤѤ롥

8.1.1 ƥϤζͭ

FMPͥǤϡƥץå˥ꥢݡȤץå
ǥƥϤ򤷤ϡΥץåλĥꥢݡȤ˽
Ϥ빽ɸȤƤ롥ʤ顤åȤˤäƤϥꥢ
ݡȤοץå꾯ʤ礬롥Τ褦ʾˡ1ĤΥ
ꥢݡȤʣΥץåǶͭ뤳ȤǽǤ롥

(8-1-1-1) G_SYSLOG

ƥʣΥץåǶͭ뤿Υޥ1
Ȥʤꡤץå1ǤΤư롥ϡ桼ץ
MakefileˤԤ롥

(8-1-1-2) LOGTASK_PORTID_G_SYSLOG  ƥϤζͭΥƥѤ
                                   ꥢݡֹ ʥǥե 1

ƥϤζͭ˥ƥϤ륷ꥢ
ֹ롥ʤϡǥեͤѤ롥

8.2 ΥåȰ¸

(8-2-6)  SEC_LOGTASK        G_SYSLOGΥѿ֥ޥʥץ
(8-2-7)  SEC_PRC1_LOGTASK   ץå1ѤΥѿ֥ޥʥץ
(8-2-8)  SEC_PRC2_LOGTASK   ץå2ѤΥѿ֥ޥʥץ
(8-2-9)  SEC_PRC3_LOGTASK   ץå3ѤΥѿ֥ޥʥץ
(8-2-10) SEC_PRC4_LOGTASK   ץå4ѤΥѿ֥ޥʥץ

Ѥѿ־ʥˤλˡ
롥־椷ʤɬפϤʤ

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

ASPͥ뤫ѹʤ

8.3.1 ѿǡؿ

(8-3-1-5) SEC_SERIAL1   ץå1ѥꥢɥ饤ѿ֥ޥʥץ
(8-3-1-6) SEC_SERIAL2   ץå2ѥꥢɥ饤ѿ֥ޥʥץ
(8-3-1-7) SEC_SERIAL3   ץå3ѥꥢɥ饤ѿ֥ޥʥץ
(8-3-1-8) SEC_SERIAL4   ץå4ѥꥢɥ饤ѿ֥ޥʥץ

ꥢ륤󥿥եɥ饤ФѤѿ־ʥ
ˤλˡ롥־椷ʤɬפϤ


8.3.2 ǥХӥ롼

ASPͥ뤫ѹʤ

8.3.3 Хå롼

ASPͥ뤫ѹʤ

8.3.2 ǥХӥ롼

ASPͥ뤫ѹʤ

8.4 ͥ뵯ưåνϤΥåȰ¸

ASPͥ뤫ѹʤ

8.5 ץץȥƥȥץΥåȰ¸

(8-5-2) CPUEXC1ʥץ

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

(8-5-9) CPUEXC2-4ʥץ

ץå2ץå4ѤCPU㳰ϥɥֹޥ

8.5.1 ¹Իʬ۽ץ⥸塼ѥޥ

¹Իʬ۽ץ⥸塼ϡ֤Ǥ get_utm() ѤƦsec
η¬Ԥ륿ξϡget_utm()ϥץå˰
ʤ륿ޤѤƻַ¬ԤΤᡤץå٤֤
¬Ǥʤץå٤λ֤¬ϡץ
֤ǶͭǽʥϡɥޤѰդơʲΥޥ롥

(8-5-8) HISTTIM

¹Իʬ۽ץ⥸塼ǻַ¬̤Ǽѿηꤹ롥

(8-5-9) HIST_GET_TIM   

롼ꤹޥHIST_GET_TIM ϡ¬γϤȽλ
ߥ󥰤ǸƤӽФ졤HISTTIM ѿΥݥ󥿤ȤϤ롥

(8-5-10) HIST_CONV_TIM  

Ѵ롼ꤹޥ¹Իʬ۽ץ⥸塼ϡ
ͤκʬǼ HISTTIM ѿΥݥ󥿤 HIST_CONV_TIM 
ƤӽФᡤHIST_GET_TIM ֤ͤѴɬפʾϡ
HIST_CONV_TIM ǹԤ

(8-5-11) CPU<CPU ID>_PERF_PRE_HOOK

¬Υեå롼бץåǸƤӽФ롥¬˰ƶ
ͿߤζػνƤӽФ褦ꤹ롥

(8-5-12) CPU<CPU ID>_PERF_POST_HOOK

¬Υեå롼бץåǸƤӽФɬפ롥¬
Υեå롼ߤߤενƤӽФ褦ꤹ롥


¾

9.1 ɥ

(1) бƤ륿åȥƥμࡦСֹ
	ݡȤƤץå
   
(3-4) ǽɾѥƥλȤ˴ؤ뵬
	¹Իʬ۽ץ⥸塼ѤΥޤ˴ؤ

(3-6) Хϥɥ鵡ǽĥΥݡȤ˴ؤ뵬

FMPͥǤϡХϥɥϥݡȤʤ

(3-8) ޥƥ
  Х륿  륿 Υݡ̵ͭ
    ˡ

(3-9) OSΥåƥ
  㥤ȥå  ץåå  γ٥å 
    Υݡ̵ͭˡ

(3-10) ԥåƥ
  ͥƥ  ߥ졼 Υݡ̵ͭˡ
    ͥƥ ξκ

(3-11) ꥢƥ
  ǡ־ˡ

9.2 ѥåҥե

ASPͥ뤫ѹʤ

ե

10.1 åȰ¸Υե

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

target_ipi.cfg	ץåֳߥϥɥɥ饤ФΥƥॳե
				졼ե6.18ˡ
target_ipi.h	ץåֳߥϥɥɥ饤ФΥإåե6.18ˡ
				ͥΤߤ饤󥯥롼ɤ롥
target_ipi.c	ץåֳߥϥɥɥ饤Фμե
				6.18ᡤץˡ
target_pcb.h	¸Υץåȥ֥åΥإåե
				6.19ˡ

ʾ
