
		TOPPERS/FMPͥ
		ե졼

		бС: Release 1.0.2
		ǽ: 2009ǯ427

ΥɥȤϡTOPPERS/FMPͥΥե졼ɸŪ
٤եƤˤĤƲ⤷ΤǤ롥åȰ¸
ƤˤĤƤϡΥɥȤϰϳǤ롥

TOPPERS/FMPͥΥե졼ϡTOPPERS/ASPͥΥ
졼ȶ̤Ǥ뤿ᡤܥɥȤǤϡTOPPERS/FMPͥ
ͭλˤĤƤΤ߲⤹롥Τᡤ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: configurator.txt 348 2009-08-24 08:10:29Z ertl-honda $
----------------------------------------------------------------------

ܼ

եμ
ŪAPI
饹λ
ͥ빽إåեkernel_cfg.h
ͥ빽եkernel_cfg.c
	(1) ʬ
	(2) 󥯥롼ɥǥ쥯ƥ֡#includeˤν
	(3-1) ȥ졼ޥΥǥե
	(3-2) ֥ȤIDֹݻѿ
	(3-3) ץå˴ؤ
	(4) ƥͥ륪֥Ȥ˴ؤ
	(5) ߤ˴ؤ
	(6) CPU㳰˴ؤ
	(7) 󥿥ƥѤΥåΰ˴ؤ
	(8) ।٥ȴ˴ؤ
	(9) ƥ⥸塼νؿ
	(10) 롼μ¹Դؿ
	(11) λ롼μ¹Դؿ

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

եμ

ASPͥ뤫ѹʤ

ŪAPI

FMPͥΥե졼ŪAPIϼ̤ꡥ

(3) Ʊ̿ǽ
	CRE_SPN(ID spnid, { ATR spnatr })


饹λ

FMPͥǤϡͥ륪֥ȤϤ줫1ĤΥ饹˽°뤳
Ȥ顤֥ȤϿԤŪAPIϡΤ褦˥饹ΰϤߤ
˵Ҥ롥

CLASS(<clsid>) {
	Υ饹°륪֥ȤϿʤ
}

clsidϡѥ᡼Ȥ롥

ͥ빽إåեkernel_cfg.h

ͥ빽إåեkernel_cfg.hˤˤϡ
롥

(1) ʬ

ASPͥ뤫ѹʤ

(2) ֥ȿ

ͥ뤬ݡȤ륪֥Ȥοޥץץåǥ
쥯ƥ֡#defineˤ롥ŪˤϡΤ褦ʵҤ롥

#define TNUM_SPNID	<ԥåο>

(3) ֥ȤIDֹ

ASPͥ뤫ѹʤ


ͥ빽եkernel_cfg.c

(1) ʬ

ASPͥ뤫ѹʤ

(2) 󥯥롼ɥǥ쥯ƥ֡#includeˤν

ASPͥ뤫ѹʤ

(3-1) ȥ졼ޥΥǥե

ASPͥ뤫ѹʤ

(3-2) ֥ȤIDֹݻѿ

ASPͥ뤫ѹʤ

(3-3) ץå˴ؤ

(a) ȥ֥å

ץå˥ץåȥ֥å(Processor Control Block)
롥ŪˤϡץåIDxפȤȥץå
˼Τ褦ʹԤ롥

PCB _kernel_prcX_pcb;

åȰ¸Υե졼ƥץ졼ȥեǡؿ
GENERATE_PCB뤳ȤˤꡤǤդΥեޥåȤѹǤ뤿ᡤ
ǽǤ롥

(b) ץåȥ֥åؤΥơ֥

ƥץåΥץåIDѤƤΥץåΥץåȥ
֥åإ뤿Υơ֥롥Ūˤϼ
褦ʹԤ롥

PCB* const _kernel_p_pcb_table[TNUM_PRC] = {
	&_kernel_prc1_pcb,
	&_kernel_prc2_pcb,
	...
};

(4) ƥͥ륪֥Ȥ˴ؤ

ASPͥ뤫ѹʤ

(a) Υ֥IDѿ

ASPͥ뤫ѹʤ

(b) ֥Ȥɬפʥΰ

֥ȤˤäƤϡ֥Ȥɬפʥΰ롥
Ūˤϡ֥ι롥

(c) ֥Ȥν֥å

ASPͥ뤫ѹʤ

(d) ֥ȤΥȥ֥å

֥ȤΥȥ֥å롥ŪˤϡŪ
ˤϡ֥ȤξάXXXxxxפȤ֥Ȥ̾
yyyפȤȡ֥˼Τ褦ʹԤ롥

XXXCB _kernel_xxxcb_<֥̾1>;

(e) ֥ȤΥȥ֥åؤΥơ֥

ƥ֥ȤΥ֥IDѤƤΥ֥ȤΥȥ
åإ뤿Υơ֥롥Ūˤϥ֥
ȤξάXXXxxxפȤȡΤ褦ʹԤ롥

XXXCB* const _kernel_p_xxx_table[TNUM_XXX] = {
	&_kernel_xxxcb_<֥̾1>,
	&_kernel_xxxcb_<֥̾2>,
	...
};

(4-1) ˴ؤ

ASPͥ뤫ѹʤ

(4-1-1) ɬפʥΰ

ɬפʥΰȤơΥåΰ褬롥stkNULL
ξˤϡ륿ˡꤵ줿Υåΰݤ
롥Ūˤϡ嵭ŪAPIФơ롥

stkNULLξΤ
static STK_T _kernel_stack_<̾>[COUNT_STK_T(stksz)];

åȰ¸Υե졼ƥץ졼ȥեǡؿ
GENERATE_TSKSTK뤳ȤˤꡤǤդΥեޥåȤѹǤ뤿
ᡤǽǤ롥

(4-1-2) ν

֥å륿νϡηȤ롥

	{ (tskatr), (intptr_t)(exinf), (task), INT_PRIORITY(itskpri),
							(stksz), (stk), (texatr), (texrtn),
							(iaffinity), (affinity_mask) }

iaffinityϽդץå, affinity_maskϳդǽץå
롥

(4-1-3) ơ֥

ASPͥ뤫ѹʤ

(4-1-4) 顼

˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
CRE_TSK饹ΰϤߤ˵ҤƤʤE_RSATR

(4-2) ޥե˴ؤ

ASPͥ뤫ѹʤ

(4-2-1) ޥեν

ޥե֥å륻ޥեνϡηȤ
롥

	{ (sematr), (isemcnt), (maxsem),  (p_obj_lock) }

p_obj_lockϡ֥ȥåؤΥݥ󥿤Ǥꡤץåå
ξΤͭǤ롥

(4-2-2) 顼

ޥե˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
CRE_SEM饹ΰϤߤ˵ҤƤʤE_RSATR

(4-3) ٥ȥե饰˴ؤ

ASPͥ뤫ѹʤ

(4-3-1) ٥ȥե饰ν

	{ (flgatr), (p_obj_lock), (iflgptn) }

p_obj_lockϡ֥ȥåؤΥݥ󥿤Ǥꡤץåå
ξΤͭǤ롥

(4-3-2) 顼

٥ȥե饰˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
CRE_FLG饹ΰϤߤ˵ҤƤʤE_RSATR

(4-4) ǡ塼˴ؤ

ASPͥ뤫ѹʤ

(4-4-1) ǡ塼ɬפʥΰ

ǡ塼ɬפʥΰȤơǡ塼ΰ褬롥
ǡ塼ˡɬפʥΥǡ塼ΰ롥
Ūˤϡ嵭ŪAPIФơ롥

static intptr_t _kernel_dtqmb_<ǡ塼̾>[dtqcnt];

åȰ¸Υե졼ƥץ졼ȥեǡؿ
GENERATE_DTQMB뤳ȤˤꡤǤդΥեޥåȤѹǤ뤿ᡤ
ǽǤ롥

(4-4-2) ǡ塼ν

ǡ塼֥åǡ塼νϡ
Ȥ롥

	{ (dtqatr), (p_obj_lock), (dtqcnt), (_kernel_dtqmb_<ǡ塼̾>) }

ǡdtqcnt0ξˤϡ_kernel_dtqmb_<ǡ塼̾>夨ơ
NULLѤ롥

p_obj_lockϡ֥ȥåؤΥݥ󥿤Ǥꡤץåå
ξΤͭǤ롥

(4-4-3) 顼

ǡ塼˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
CRE_DTQ饹ΰϤߤ˵ҤƤʤE_RSATR

(4-5) ͥ٥ǡ塼˴ؤ

ASPͥ뤫ѹʤ

(4-5-1) ͥ٥ǡ塼ɬפʥΰ

ͥ٥ǡ塼ɬפʥΰȤơͥ٥ǡ塼ΰ
롥ͥ٥ǡ塼ˡɬפʥͥ٥ǡ
ΰ롥Ūˤϡ嵭ŪAPIФơ
롥

static PDQMB _kernel_pdqmb_<ͥ٥ǡ塼̾>[pdqcnt];

åȰ¸Υե졼ƥץ졼ȥեǡؿ
GENERATE_PDTQMB뤳ȤˤꡤǤդΥեޥåȤѹǤ뤿
ᡤǽǤ롥

(4-5-2) ͥ٥ǡ塼ν

ͥ٥ǡ塼֥åͥ٥ǡ塼ν
ϡηȤ롥

	{ (pdqatr), (p_obj_lock), (pdqcnt), (maxdpri), (_kernel_pdqmb_<ͥ٥ǡ塼̾>) }

ǡpdqcnt0ξˤϡ_kernel_pdqmb_<ͥ٥ǡ塼̾>夨
ơNULLѤ롥

p_obj_lockϡ֥ȥåؤΥݥ󥿤Ǥꡤץåå
ξΤͭǤ롥

(4-5-3) 顼

ͥ٥ǡ塼˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
CRE_PDQ饹ΰϤߤ˵ҤƤʤE_RSATR

(4-6) ᡼ܥå˴ؤ

ASPͥ뤫ѹʤ

(4-6-1) ᡼ܥåν

᡼ܥå֥å᡼ܥåνϡ
ηȤ롥

	{ (mbxatr), (p_obj_lock), (maxmpri) }

p_obj_lockϡ֥ȥåؤΥݥ󥿤Ǥꡤץåå
ξΤͭǤ롥

(4-6-2) 顼

᡼ܥå˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
CRE_PDQ饹ΰϤߤ˵ҤƤʤE_RSATR

(4-7) Ĺס˴ؤ

ASPͥ뤫ѹʤ

(4-7-1) Ĺסɬפʥΰ

ĹסɬפʥΰȤơĹסΰȸ
Ĺסΰ褬롥Ĺסˡɬפ
θĹסΰmpfNULLξΤߡˤȸĹ
ΰݤ롥Ūˤϡ嵭ŪAPIФơ
롥

mpfNULLξΤ
static MPF_T _kernel_mpf_<Ĺס̾>[(blkcnt) * COUNT_MPF_T(blksz)];

åȰ¸Υե졼ƥץ졼ȥեǡؿ
GENERATE_MPF_T뤳ȤˤꡤǤդΥեޥåȤѹǤ뤿ᡤ
ǽǤ롥

ɬ
static MPFMB _kernel_mpfmb_<Ĺס̾>[blkcnt];

åȰ¸Υե졼ƥץ졼ȥեǡؿ
GENERATE_MPFMB뤳ȤˤꡤǤդΥեޥåȤѹǤ뤿ᡤ
ǽǤ롥

(4-7-2) Ĺסν

Ĺס֥åĹסν
ϡηȤ롥

	{ (mpfatr), (p_obj_lock), (blkcnt), ROUND_MPF_T(blksz), mpf,
						(_kernel_mpfmb_<Ĺס̾>) }

ǡmpfNULLξˤϡmpf夨ơ_kernel_mpf_<Ĺס
̾>Ѥ롥

p_obj_lockϡ֥ȥåؤΥݥ󥿤Ǥꡤץåå
ξΤͭǤ롥

(4-7-3) 顼

Ĺס˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
CRE_MPF饹ΰϤߤ˵ҤƤʤE_RSATR

(4-8) ϥɥ˴ؤ

ASPͥ뤫ѹʤ

(4-8-1) ϥɥν

ϥɥ֥åϥɥνϡ
Ȥ롥

	{ (cycatr), (intptr_t)(exinf), (cychdr), (cyctim), (cycphs),
							 (iaffinity), (affinity_mask) }

iaffinityϽդץå, affinity_maskϳդǽץå
ꡤ륿ξΤ߽Ϥ롥

(4-8-2) 顼

ϥɥ˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
CRE_CYC饹ΰϤߤ˵ҤƤʤE_RSATR

(4-9) 顼ϥɥ˴ؤ

ASPͥ뤫ѹʤ

(4-9-1) 顼ϥɥν

顼ϥɥ֥å륢顼ϥɥν
ϡηȤ롥

	{ (almatr), (exinf), (almhdr), (iaffinity), (affinity_mask) }

iaffinityϽդץå, affinity_maskϳդǽץå
ꡤ륿ξΤ߽Ϥ롥

(4-9-2) 顼

顼ϥɥ˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
CRE_ALM饹ΰϤߤ˵ҤƤʤE_RSATR

(4-10) ԥå˴ؤ

ԥåξάϡSPNspnפǤ롥ʲǤϡƥॳե
졼ե˼ŪAPIޤޤƤ٤
ĤƽҤ٤롥ʤԥåɬפʥΰϤʤ

CRE_SPN(ID spnid, {spnatr});

(4-10-1) ԥåν

ԥå֥å륹ԥåνϡ
Ȥ롥

	{ (spnatr), (p_obj_lock) }

p_obj_lockϡ֥ȥåؤΥݥ󥿤Ǥꡤԥå
ߥ졼ĥץååξΤͭǤ롥

(4-10-2) 顼

ԥå˴ؤ륨顼ϼ̤Ǥ롥

ե졼ΤФ
ƱspnidФCRE_SPNʣE_OBJ

ѥ2ǸФ
CRE_SPN饹ΰϤߤ˵ҤƤʤE_RSATR
դǽʥϡɥԥåϡɥʤE_NOID
  (ͥƥ֥ԥåξ)

sematrʡTA_TPRIϡˤǤʤE_RSATR
(0 <= isemcnt && isemcnt <= maxsem)ǤʤE_PAR
(1 <= maxsem && maxsem <= TMAX_MAXSEM)ǤʤE_PAR

(5) ߤ˴ؤ

ASPͥ뤫ѹʤ

(5-1) ׵饤˴ؤ

ASPͥ뤫ѹʤ

(5-1-1) ꤹ׵饤ο

ASPͥ뤫ѹʤ

(5-1-2) ׵饤֥å

γ׵饤νϡηȤ롥

	{ (intno), (intatr), (intpri), (iaffinity), (affinity_mask) }

iaffinityϽդץå, affinity_maskϳդǽץå
롥

(5-1-3) 顼

׵饤˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
intnoCFG_INTФֹȤʤE_PAR
  intnoξ̥ӥåȤǻꤷ߲ǽץåȥ饹ǻꤵ
    Ƥդǽץå̷⤹硥
CFG_INT饹ΰϤߤ˵ҤƤʤE_RSATR
бDEF_INH/ATT_ISRȰۤʤ륯饹°E_RSATR

(5-2) ߥӥ롼˴ؤ

(5-2-1) ߥϥɥ

ASPͥ뤫ѹʤ

(5-2-2) ߥϥɥ

ASPͥ뤫ѹʤ

(5-2-3) 顼

ߥӥ롼˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
intnoATT_ISRФֹȤʤE_PAR
  intnoξ̥ӥåȤǻꤷ߲ǽץåȥ饹ǻꤵ
    Ƥդǽץå̷⤹硥
ATT_ISR饹ΰϤߤ˵ҤƤʤE_RSATR
бCFG_INTȰۤʤ륯饹°E_RSATR

(5-3) ߥϥɥ˴ؤ

ASPͥ뤫ѹʤ

(5-3-2) ߥϥɥν

ASPͥ뤫ѹʤ

(5-3-3) ߥϥɥ֥å

γߥϥɥνϡηȤ롥

	{ (inhno), (inhatr), (FP)(INT_ENTRY(inhno, inthdr)), (iaffinity), (affinity_mask) }

iaffinityϽդץå, affinity_maskϳդǽץå
롥

(5-3-4) 顼

ߥϥɥ˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
intnoDEF_INHФֹȤʤE_PAR
  intnoξ̥ӥåȤǻꤷ߲ǽץåȥ饹ǻꤵ
    Ƥդǽץå̷⤹硥
ATT_ISR饹ΰϤߤ˵ҤƤʤE_RSATR
бCFG_INTȰۤʤ륯饹°E_RSATR

(6) CPU㳰˴ؤ

ASPͥ뤫ѹʤ

(6-1) CPU㳰ϥɥο

ASPͥ뤫ѹʤ

(6-2) CPU㳰ϥɥν

ASPͥ뤫ѹʤ

(6-3) CPU㳰ϥɥ֥å

ASPͥ뤫ѹʤ

(6-4) 顼

CPU㳰ϥɥ˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
DEF_EXC饹ΰϤߤ˵ҤƤʤE_RSATR

(7) 󥿥ƥѤΥåΰ˴ؤ

ASPͥ뤫ѹʤ

(7-1) DEF_ICSʤ

ƥॳե졼եˡŪAPIDEF_ICSפޤޤ
ʤˤϡץåIDxפȤȥץå˼Τ褦ʹ
롥

#ifdef DEFAULT_PRCx_ISTK
#define TOPPERS_PRCx_ISTKSZ		DEFAULT_PRCx_ISTKSZ
#define TOPPERS_PRCx_ISTK		DEFAULT_PRCx_ISTK
#else /* DEFAULT_ISTK */
static STK_T				_kernel_prcx_istack[COUNT_STK_T(DEFAULT_PRCx_ISTKSZ)];
#define TOPPERS_PRCx_ISTKSZ	ROUND_STK_T(DEFAULT_PRCx_ISTKSZ)
#define TOPPERS_PRCx_ISTK	_kernel_prcx_istack
#endif /* DEFAULT_ISTK */

_kernel_prcx_istack ˴ؤƤϡåȰ¸Υե졼
ץ졼ȥեǡؿGENERATE_ISTACK뤳ȤˤꡤǤդ
եޥåȤѹǤ뤿ᡤǽǤ롥

(7-2) DEF_ICS

istkNULLξˤϡꤵ줿󥿥ƥѤΥ
ΰݤ󥿥ƥѤΥåΰν
롥Ūˤϡ嵭ŪAPIФơץåIDxפȤȡ
ιԤ롥

static STK_T				_kernel_prcx_istack[COUNT_STK_T(istksz)];
#define TOPPERS_PRCx_ISTKSZ	ROUND_STK_T(istksz)
#define TOPPERS_PRCx_ISTK	_kernel_istack

_kernel_prcx_istack ˴ؤƤϡåȰ¸Υե졼
ץ졼ȥեǡؿGENERATE_ISTACK_ICS뤳ȤˤꡤǤ
դΥեޥåȤѹǤ뤿ᡤǽǤ롥

istkNULLǤʤˤϡ󥿥ƥѤΥåΰν
򡤥ץåIDxפȤȡη롥

#define TOPPERS_PRCx_ISTKSZ		(istksz)
#define TOPPERS_PRCx_ISTK		(istk)

(7-3) ѿ

DEF_ICS̵ͭˤ餺롥x/yפϡץåID


const SIZE		_kernel_istksz_table[TNUM_PRC] = {
	TOPPERS_PRCx_ISTKSZ,
	TOPPERS_PRCy_ISTKSZ,
	...
};

STK_T *const	_kernel_istk_table[TNUM_PRC] = {
	TOPPERS_PRCx_ISTK,
	TOPPERS_PRCy_ISTK,
	...
}

#ifdef TOPPERS_ISTKPT
STK_T *const	_kernel_istkpt_table[TNUM_PRC] = {
	TOPPERS_ISTKPT(TOPPERS_PRCx_ISTK, TOPPERS_PRCx_ISTKSZ),
	TOPPERS_ISTKPT(TOPPERS_PRCy_ISTK, TOPPERS_PRCy_ISTKSZ),
	...
}
#endif /* TOPPERS_ISTKPT */

(7-4) 顼

󥿥ƥѤΥåΰ˴ؤ륨顼ϼ̤Ǥ롥

ѥ2ǸФ
1ĤΥץåФŪAPIDEF_ICSפʣE_OBJ

(8) ।٥ȴ˴ؤ

।٥ȴ˴Ϣơ롥

(a)Х륿

TMEVTN	_kernel_tmevt_heap[TNUM_TSKID + TNUM_CYCID + TNUM_ALMID];

(b)륿

ץåˡʲ롥xפϥץåID򼨤

TMEVTN	_kernel_prcx_tmevt_heap[TNUM_TSKID + TNUM_CYCID + TNUM_ALMID];

åȰ¸Υե졼ƥץ졼ȥեǡؿ
GENERATE_TMEVTN_HEAP뤳ȤˤꡤǤդΥեޥåȤѹǤ
뤿ᡤǽǤ롥

ޤ嵭ؤΥΤΥơ֥롥x/yפϥץ
åID򼨤

TEVTCB* const _kernel_p_tevtcb_table[TNUM_PRC] = {
	 &_kernel_prcx_tevtcb,
	 &_kernel_prcy_tevtcb,
	...
};

(9) ƥ⥸塼νؿ

ASPͥ뤫ѹʤ

(10) 롼μ¹Դؿ

롼ϡ饹°ʤХ롼ȥ饹°
롼ʬ롥

ATT_INI({ TA_NULL, 0, timer_initialize });

CLASS(1){
	ATT_INI({ TA_NULL, CONSOLE_PORTID1, serial_initialize });
}

CLASS(2){
	ATT_INI({ TA_NULL, CONSOLE_PORTID2, serial_initialize });
}

Ȥ3ĤŪAPIνǵҤ줿ؿϼ̤Ǥ
롥饹ID1,2νդץåIDϤ줾1,2Ǥ롥

void
_kernel_call_global_inirtn(void)
{
	(timer_initialize)((intptr_t)(0));
}

void
_kernel_call_inirtn(void)
{
	if (x_prc_index() == INDEX_PRC(1)) {
		(serial_initialize)((intptr_t)(CONSOLE_PORTID1));
	}
	if (x_prc_index() == INDEX_PRC(2)) {
		(serial_initialize)((intptr_t)(CONSOLE_PORTID2));
	}
}

(10-1) 顼

ASPͥ뤫ѹʤ

(11) λ롼μ¹Դؿ

λ롼ϡ饹°ʤХ뽪λ롼ȡ
°롼ʬ롥

ATT_TER({ TA_NULL, 0, timer_terminate });

CLASS(1){
	ATT_TER({ TA_NULL, CONSOLE_PORTID1, serial_terminate });
}

CLASS(2){
	ATT_TER({ TA_NULL, CONSOLE_PORTID1, serial_terminate });
}

Ȥ3ĤŪAPIνǵҤ줿ؿϼ̤Ǥ
롥

void
_kernel_call_global_terrtn(void)
{
	(timer_terminate)((intptr_t)(0));
}

void
_kernel_call_local_terrtn(void)
{
	if (x_prc_index() == INDEX_PRC(1)) {
		(serial_terminate)((intptr_t)(CONSOLE_PORTID1));
	}

	if (x_prc_index() == INDEX_PRC(2)) {
		(serial_terminate)((intptr_t)(CONSOLE_PORTID2));
	}
}

(11-1) 顼

ASPͥ뤫ѹʤ

ʾ
