	
	TOPPERS/FMPͥ
		åȰ¸ ݡƥ󥰥

		бС: Release 1.0.2
		бASPͥС : Release 1.3.2
		ǽ: 2009ǯ828

ΥɥȤϡ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-2009 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 362 2009-08-28 09:26:31Z 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.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 饹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.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.6.7 ֹ桦ߥϥɥֹΥޥץåĥ
	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 ץåINDEX
		6.14.2 ޥץå
	6.15 å
		6.15.1 å
		6.15.2 åѿη
	6.16 ƥδ
	6.17 ץåֳߥɥ饤
		6.17.1 ץåֳߥɥ饤ФΥե빽
		6.17.2 ץåֳߤνλ߽
		6.17.3 ץåֳߤȯԤȥꥢ
		6.17.4 ץåߥϥɥϿ
	6.18 åȥȥ֥å
	6.19 ԥå
		6.19.1 ԥå
		6.19.2 ԥåλ
		6.19.3 ԥåϢη
		6.19.4 ԥåνǽ
	6.20 ޥ졼
		6.20.1 Υޥ졼󥵥ݡ
		6.20.2 λΥޥ졼󥵥ݡ
ե졼ե
	7.1 եȥåȰ¸ΰդ
	7.2 ѥ2Υƥץ졼ȥեΥåȰ¸
		7.2.1 å¸򥤥󥯥롼ɤ٤ѿ
		7.2.2 å¸ѿ
		7.2.3 饹ƤϢ
		7.2.4 饹Ƥʴؿ
		7.2.5 ץåΥǡ¤־
	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.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εǽϡͥѤʤˤѤǤɬפ롥Τ
ᡤԥåμȲϡͥѤץåΥ꥽
ľ뤳ȤˤäƼ¸롥ޤԥåμȲ
ߥå֤CPUå֤ǤԤɬפ롥

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

(4-6-1) SIL_LOC_SPN

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

(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 ץå

(5-7-1)TNUM_PRC   ץå

ƥΥץå롥

5.8 饹ID

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

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

(5-8-1) TCL_1   

ץå1դץåΥ饹

(5-8-2) TCL_2   

ץå2դץåΥ饹

(5-8-3) TCL_3   

ץå3դץåΥ饹

(5-8-4) TCL_4   

ץå4դץåΥ饹

(5-8-5) TCL_ADMIN_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-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å֤ǸƤӽФǽ뤿ᡤǥѥåθ
ơǥѥåʤ줿Ǥư褦ɬפʤߤ
ػߤƼ¹Ԥ뤳ȡ

6.3.4 ƥȤCPUå֤Υå

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

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

ƥ  CPUå֤ʤ true  ʳʤ 
false ֤ؿCPUå֤ǸƤӽФǽ뤿ᡤ
ѥåθơǥѥåʤ줿Ǥư褦
ɬפʤߤػߤƼ¹Ԥ뤳ȡ

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

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

󥿥ƥ  CPUå֤ʤ true  ʳʤ 
false ֤ؿCPUå֤ǸƤӽФǽ뤿ᡤ
ѥåθơǥѥåʤ줿Ǥư褦
ɬפʤߤػߤƼ¹Ԥ뤳ȡ

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

6.4 ߤ˴Ϣ륷ƥ֤δ

6.4.1 ͥ٥ޥδ

ASPͥ뤫ѹʤ

6.4.2 ׵ػߥե饰δ

׵ػߥե饰򥻥åȤ뵡ǽȥꥢ뵡ǽǤϡϤ
ֹγߤγ׵ػߥե饰򼫥ץåѹǽ
åѹǽǤʤˤϡfalse֤

6.4.3 ׵Υꥢ

ASPͥ뤫ѹʤ

6.4.4 ׵Υץ

ASPͥ뤫ѹʤ

6.4.5 ߥϥɥƬ

ASPͥ뤫ѹʤ

6.4.6 ׵饤°

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

ɸγߴǽνǤϡդץåˤơ
δؿ¹Ԥ롥affinity_mask ˤϡդǽʥץåӥå
ѥϤ롥

6.5 ǥѥå

6.5.1 ƥȥ֥åΥǡ

ASPͥ뤫ѹʤ

6.5.2 ǥѥå

ǥѥåΤǰp_runtsk/p_schedtsk/reqflgϡץå
pcb(my_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ˤǰpruntskp_schedtskϡץå
pcb(my_pcb)ݻƤΤȤ롥

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

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

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)

ASPͥ뤫ѹʤ

6.6 ߥϥɥ

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

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

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

6.6.1 ߥϥɥν

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

----------------------------------------
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 (my_pcb.reqflg) {
			my_pcb.reqflg = false;
			ץåCPUå֤ˤ
			if (my_pcb.dspflg && my_pcb.p_runtsk != my_pcb.p_schedtsk) {
				å쥸٤ƤΥ쥸򥹥å¸
				åݥ󥿤򼫥my_pcb.p_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 ˤϡդǽʥץåӥå
ѥϤ롥

6.6.4 ߴǽνѹ

ASPͥ뤫ѹʤ

6.6.5 ǥեȤγߥϥɥ

ASPͥ뤫ѹʤ

6.6.6 ͥγ

ASPͥ뤫ѹʤ

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

׵饤γֹߥϥɥֹξ16ӥåȤϡ
׵饤󤫤γ׵ϡɥŪ˼դ뤳Ȥǽ
ʥץåӥåȥѥȤɽ㤨ХץåID13Υץ
åդǽʾ0x5ˡ̥ӥåȤ0ξϥ顼Ȥʤ롥

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

6.7.1 CPU㳰ϥɥν

CPU㳰νǰreqflg/dspflg/pruntsk/p_schedtskϡץ
åpcb(my_pcb)ݻƤΤȤ롥ޤƾ֤CPU㳰ν
¹ԤƤץåΤΤоݤȤ롥

----------------------------------------
void
<CPU㳰ν>(void)
{
	å쥸򥹥å¸
	if (ƥȤCPU㳰ȯ) {
		å󥿥ƥѤΥåڤ괹
								󥿥ƥȤڤ괹
	}
	CPU㳰ȯ˥ԥåƤmy_pcb.locspnid¸

	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㳰ȯ˥ԥå̤) {
		force_unlock_spinƤӽФԥåƤв
	}
	if (ƥȤCPU㳰ȯ) {
		ץåǥͥγߡʤޤϡ٤Ƥγߡˤޥ
		å򸵤ΥåᤷƥȤڤ괹
		if (my_pcb.reqflg) {
			my_pcb.reqflg = false;
			ץåCPUå֤ˤ
			if (my_pcb.dspflg && my_pcb.p_runtsk != my_pcb.p_schedtsk) {
				å쥸٤ƤΥ쥸򥹥å¸
				åݥ󥿤򼫥my_pcb.p_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_initalizeˤƤӽФ
ȡ

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

ͥεư󥹤򼡤˼

             ޥץå                        ¾Υץå
                             (a)ϡɥν       
                             (b)hw_init_hook()θƤӽФ 
                             (c)bss/data              
               (d)sw_init_hook()θƤӽФ
               (e)target_mprc_initialize()θƤӽФ
(f)ХꥢƱ1 ---------------------------------------------------------                      
                             (g)sta_ker()θƤӽФ

(a)ϡɥν

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

(b)hw_init_hookθƤӽФ

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

(c)bss/data    

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

(d)sw_init_hook()θƤӽФ

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

(e)target_mprc_initialize()θƤӽФ

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

(f)ХꥢƱ1

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

(g)sta_kerƤӽФ

sta_ker

(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_initalize(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 ץå

6.14.1 ץåINDEX

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

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

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

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

6.14.2 ޥץå

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

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

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

(6-14-2-2) TOPPERS_MASTER_PRCID

ޥץåID򥫡ͥ붦̹ޥȤ롥

6.15 å

6.15.1 å

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

(6-15-1-1) TTYPE_KLOCK 

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

(6-15-1-2) G_LOCK   㥤ȥå

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

(6-15-1-3) P_LOCK  ץåå

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

(6-15-1-4) F_LOCK   γ٥å

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

6.15.2 åѿη

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

(6-15-2-1) GLOCK 

㥤ȥåΥåѿηåѿϥХѿ
 mp.c 롥

(6-15-2-2) TSKLOCK
(6-15-2-3) OBJLOCK

ץååڤӺγ٥åǤΥåȥ֥
åΥåѿηץååξϡåѿϥ
å֥ȥåPCB롥γ٥å
ϡåѿϡåPCB졤֥ȥ
ϡ¹ñ̰ʳΥ֥Ȥδ֥å롥

(6-15-2-4) POBJLOCK

ץååڤӺγ٥åǤΥ֥ȥåؤΥݥ
󥿷¹ñ̰ʳΥ֥Ȥγƽ֥åˡΥ֥
ȤΥ֥ȥåץåΥ֥ȥåؤΥݥ󥿤Ǽ
ѿ롥

6.15.3 åؿ

åȰ¸ϡå˥å뵡ǽ󶡤롥
ϡѤʤåεǽɬפϤʤ

Υåؿ⡤åǤfalse֤å
ʤСߤȯ̵ͭåơߤȯƤ
Сfalse֤ߤȯƤʤСåμٻߤ롥
ߤȯ̵ͭåǤʤåȤˤĤƤϡåμ
ޤǥåμ򷫤֤Ȥ1λԤη̡
Ǥʤtrue֤Τɤ餫򤹤뤳ȡ

(6-15-3-1) void x_initialize_giant_lock(GLOCK *p_giant_lock)

㥤ȥåνؿͥ뵯ư˸ƤӽФ롥

(6-15-3-6) bool_t t_acquire_giant_lock(GLOCK *p_giant_lock)
(6-15-3-7) bool_t i_acquire_giant_lock(GLOCK *p_giant_lock)
(6-15-3-8) bool_t x_acquire_giant_lock(GLOCK *p_giant_lock)

㥤ȥåΥåؿå֤ǸƤӽФ뤳
ȤϤʤƤӽФ줿ưݾڤɬפʤ
         
(6-15-3-9)  bool_t t_release_giant_lock(GLOCK *p_giant_lock)        
(6-15-3-10) bool_t i_release_giant_lock(GLOCK *p_giant_lock)        
(6-15-3-11) bool_t x_release_giant_lock(GLOCK *p_giant_lock)        

㥤ȥåΥåؿå֤ǸƤӽФ뤳
ȤϤʤƤӽФ줿ưݾڤɬפʤ

(6-15-3-12) void x_initialize_tsk_lock(TSKLOCK *p_tsk_lock)

ץåå/γ٥åǤΥåνؿ
뵯ư˼ץåΥåоݤ˸ƤӽФ롥
         
(6-15-3-13) bool_t t_acquire_tsk_lock(TSKLOCK *p_tsk_lock)
(6-15-3-14) bool_t i_acquire_tsk_lock(TSKLOCK *p_tsk_lock)
(6-15-3-15) bool_t x_acquire_tsk_lock(TSKLOCK *p_tsk_lock)

ץåå/γ٥åǤΥåμؿå
֤ǸƤӽФ뤳ȤϤʤƤӽФ줿ưݾڤɬפ
ʤ
         
(6-15-3-16) bool_t t_release_tsk_lock(TSKLOCK *p_tsk_lock)
(6-15-3-17) bool_t i_release_tsk_lock(TSKLOCK *p_tsk_lock)
(6-15-3-18) bool_t x_release_tsk_lock(TSKLOCK *p_tsk_lock)

ץåå/γ٥åǤΥåβؿå
֤ǸƤӽФ뤳ȤϤʤƤӽФ줿ưݾڤɬפ
ʤ
         
(6-15-3-19) void x_initialize_obj_lock(OBJLOCK *p_obj_lock)

ץåå/γ٥åǤΥ֥ȥåνؿ
ͥ뵯ư˸ƤӽФ롥ץååξϡץå
֥ȥåоݤ˸ƤӽФ롥γ٥åξϡ֥
Υ֥ȥåоݤ˸ƤӽФ롥
         
(6-15-3-20) bool_t t_acquire_obj_lock(OBJLOCK *p_obj_lock)
(6-15-3-21) bool_t i_acquire_obj_lock(OBJLOCK *p_obj_lock)
(6-15-3-22) bool_t x_acquire_obj_lock(OBJLOCK *p_obj_lock)

ץåå/γ٥åǤΥ֥ȥåμؿ
å֤ǸƤӽФ뤳ȤϤʤƤӽФ줿ưݾڤ
ɬפʤ
         
(6-15-3-23) bool_t t_release_obj_lock(OBJLOCK *p_obj_lock)
(6-15-3-24) bool_t i_release_obj_lock(OBJLOCK *p_obj_lock)
(6-15-3-25) bool_t x_release_obj_lock(OBJLOCK *p_obj_lock)

ץåå/γ٥åǤΥ֥ȥåβؿ
å֤ǸƤӽФ뤳ȤϤʤƤӽФ줿ưݾڤ
ɬפʤ

6.16 ƥδ

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

(6-16-1) TOPPERS_SYSTIM_GLOBAL 

Х륿ͭˤޥ

(6-16-2) TOPPERS_SYSTIM_LOCAL

륿ͭˤޥ

(6-16-3) TOPPERS_SYSTIM_PRCID

Х륿ξΥƥץåIDꡥ

6.17 ץåֳߥɥ饤

6.17.1 ץåֳߥɥ饤ФΥե빽

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

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

6.17.2 ץåֳߤνλ߽

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

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

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

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

6.17.3 ץåֳߤȯԤȥꥢ

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

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

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

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

6.17.4 ץåߥϥɥϿ

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

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

6.18 åȥȥ֥å

åȰ¸ǥץåɬפѿϡPCBƱͤ˹¤ΤȤƤ
Ȥᡤץå롥ϡե졼Υƥץ졼
եtarget.tf˹Ԥȡ

6.19 ԥå

6.19.1 ԥå

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

6.19.2 ԥåλ

(6-19-2-1) SPN_TYPE

ԥåμ¸ꤹΥޥΤ줫롥

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

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

ͥƥξˡݡȤåκޥ

6.19.3 ԥåϢη

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

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

6.19.4 ԥåνǽ

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

ԥåνؿ˸ƤӽФ롥

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

ԥåμؿϡɥԥåǤfalse
֤Ǥʤϳߤ̵ͭåơߤäƤ
true֤ߤäƤʤϡåμƻԤ롥
å֤ǸƤӽФ뤳ȤϤʤƤӽФ줿ưݾڤ
ɬפʤ

(6-19-4-5) bool_t t_try_lock_spin(SPNLOCK *p_spn_lock)
(6-19-4-6) bool_t i_try_lock_spin(SPNLOCK *p_spn_lock)
(6-19-4-7) bool_t x_try_lock_spin(SPNLOCK *p_spn_lock)

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

ԥåβؿå֤ǸƤӽФ뤳ȤϤʤƤӽ
줿ưݾڤɬפʤ

6.20 ޥ졼

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

6.20.1 Υޥ졼󥵥ݡ

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

dispatch_and_migrateνƤϼ̤

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

6.20.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.2 å¸ѿ

7.2.3 饹Ƥ

7.2.3 Ϣˤ

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

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

(7-2-3-1) CLASS_AFFINITY_INI

դץåΥץåIDꤹ롥

(7-2-3-2) CLASS_AFFINITY_MASK

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

(7-2-3-3) CLASS_OBJ_LOCK

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

7.2.4 ؿˤ

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

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

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

̤ξϡΥեޥåȤѿ롥

	TCB _kernel_tcb_$tskid$;$NL$

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

̤ξϡΥեޥåȤѿ롥

	SEMCB _kernel_semcb_$semid$;$NL$

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

̤ξϡΥեޥåȤѿ롥

	FLGCB _kernel_flgcb_$flgid$;$NL$

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

̤ξϡΥեޥåȤѿ롥

	DTQCB _kernel_dtqcb_$dtqid$;$NL$

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

̤ξϡΥեޥåȤѿ롥

	PDQCB _kernel_pdqcb_$pdqid$;$NL$

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

̤ξϡΥեޥåȤѿ롥

	MBXCB _kernel_mbxcb_$mbxid$;$NL$

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

̤ξϡΥեޥåȤѿ롥

	MPFCB _kernel_mpfcb_$mpfid$;$NL$

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

̤ξϡΥեޥåȤѿ롥

	CYCCB _kernel_cyccb_$cycid$;$NL$

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

̤ξϡΥեޥåȤѿ롥

	ALMCB _kernel_almcb_$almid$;$NL$

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

̤ξϡΥեޥåȤѿ롥

	SPNCB _kernel_spncb_$spnid$;$NL$

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

̤ξϡΥեޥåȤѿ롥

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

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

̤ξϡΥեޥåȤѿ롥

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

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

̤ξϡΥեޥåȤѿ롥

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

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

̤ξϡΥեޥåȤѿ롥

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

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

̤ξϡΥեޥåȤѿ롥

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

7.2.5 ץåΥǡ¤־

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

 1.PCB
 2.󥿥ƥѤΥå
 3.।٥ȴϢǡ
   3.1।٥ȥȥ֥å
   3.2।٥ȥҡ

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

̤ξϡΥեޥåȤѿ롥

	PCB _kernel_prc$prcid$_pcb;$NL$

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

̤ξϡΥեޥåȤѿ롥

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

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

̤ξϡΥեޥåȤѿ롥

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

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

̤ξϡΥեޥåȤѿ롥

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

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

̤ξϡΥեޥåȤѿ롥

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

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

̤ξϡΥեޥåȤѿ롥

	TEVTCB	_kernel_prc$prcid$_tevtcb;$NL$

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

̤ξϡΥեޥåȤѿ롥

	TEVTCB	_kernel_tevtcb;$NL$

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

ASPͥ뤫ѹʤ

7.4 cfg1_out.cΥ󥯤ɬפʥ֤ե

ASPͥ뤫ѹʤ


ƥॵӥΥåȰ¸

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.1 ƥϤζͭ

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

(8-1-1-1) 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.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) ޥƥ
  Х륿  륿 Υݡ̵ͭ
    ˡ

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

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

(3-9) ꥢƥ
  ǡ־ˡ

9.2 ѥåҥե

ASPͥ뤫ѹʤ

ե

10.1 åȰ¸Υե

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

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

ʾ
