
		TOPPERS/ASPͥ
		ǽĥ塼˥󥰥

		бС: Release 1.3.2
		ǽ: 2008ǯ81

ΥɥȤϡTOPPERS/ASPͥ򡤵ǽĥ塼˥󥰤뤿
ˡʤޤϥҥȡˤΤǤ롥

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

 Copyright (C) 2005-2008 by Embedded and Real-Time Systems Laboratory
             Graduate School of Information Science, Nagoya Univ., JAPAN
 
 嵭Ԥϡʲ(1)(4)ξ˸¤ꡤܥեȥ
 ܥեȥѤΤޤࡥʲƱˤѡʣ
 ѡۡʰʲѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
 (1) ܥեȥ򥽡ɤηѤˤϡ嵭
     ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
     ˴ޤޤƤ뤳ȡ
 (2) ܥեȥ򡤥饤֥ʤɡ¾Υեȥȯ˻
     ѤǤǺۤˤϡۤȼɥȡ
     ԥޥ˥奢ʤɡˤˡ嵭ɽѾ浪Ӳ
     ̵ݾڵǺܤ뤳ȡ
 (3) ܥեȥ򡤵Ȥ߹ʤɡ¾Υեȥȯ˻
     ѤǤʤǺۤˤϡΤ줫ξ
     ȡ
   (a) ۤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
       ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
   (b) ۤη֤̤ˡˤäơTOPPERSץȤ
       𤹤뤳ȡ
 (4) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
     ⡤嵭ԤTOPPERSץȤդ뤳ȡ
     ޤܥեȥΥ桼ޤϥɥ桼Τʤ
     ͳ˴Ťᤫ⡤嵭ԤTOPPERSץȤ
     դ뤳ȡ
 
 ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥ
 TOPPERSץȤϡܥեȥ˴ؤơλŪ
 ФŬޤơʤݾڤԤʤޤܥեȥ
 ѤˤľŪޤϴŪʤ»˴ؤƤ⡤
 Ǥʤ
 
 @(#) $Id: extension.txt 1222 2008-08-03 11:45:39Z ertl-hiro $
----------------------------------------------------------------------

ܼ

顼åξά
ƥåμѹ
üŪΥ쥸ΰ
ߥ塼ƥåǽ
ͥ٤ϰϤγĥ
ߥϥɥ顿CPU㳰ϥɥľܸƽФ


顼åξά

ӥΥХإåɤ︺뤿ˡŪʥ顼Υå
ά礬롥ASPͥˤƤϡŪʥ顼ΥåϤ
CHECKޥѤƹԤäƤ뤿ᡤkernel/check.hCHECKޥ
뤳ȤǡŪʥ顼Υåά뤳ȤǤ롥

㤨СIDΥåάˤϡCHECK_TSKIDޥ
CHECK_TSKID_SELFޥ򡤼Τ褦˽Ф褤

#define CHECK_TSKID(tskid)			((void)(tskid))
#define CHECK_TSKID_SELF(tskid)		((void)(tskid))

Υޥˤˡ⤢뤬ѥ᡼ѤΤ뼰
񤫤ƤǽͤȡѤΤ뼰Ͻ񤯤٤ǤϤʤ
Ƥ륳ɤäƤǽʤȤϸʤˡ
Ǥ롥ѤΤʤǤСŬˤäƺ뤳Ȥ
뤿ᡤ¹ԻΨˤϱƶʤȴԤǤ롥Ŭˤä
ʤˤϡѤΤ뼰񤫤ƤʤȤǧǡ
ޥˤƤ褤


ƥåμѹ

ASPͥǤϡͥإƥå򶡵뤹1ߥäɸ
ȤʤäƤ뤬®ʥץåǤ1ߥ˳ߤ륪Хإ
ɤˤʤ礬롥ǡץꥱɬפȤ
ƤˤϡƥåμĹ뤳Ȥǡץåν
٤㸺ˡ롥

ƥåμͿϥåȰ¸Ǥ뤿ᡤ줬ѹǤ
뤫ɤϡåȰ¸Υޥɥ饤ФμĴ٤ɬפ롥
ɸŪˤϡtarget_kernel.hʤޤϤ饤󥯥롼ɤե
ƤTIC_NUMETIC_DENO񤭴뤳ȤǡѹǤ褦
˼Ƥ롥


üŪΥ쥸ΰ

FPU쥸DSP쥸ʤɤüŪΥ쥸ʰʲü쥸
ĥץåǤϡ쥸ΰˤĤ礭3Ĥˡͤ
롥

(1) ü쥸򥿥ΥƥȤ˴ޤʤ

1ĤΥΤߤü쥸Ѥˤϡü쥸򥿥
ƥȤ˴ޤɬפʤͥǴɬפʤ

(2) ü쥸򥿥ΥƥȤ˴ޤ

ʣΥü쥸Ѥˤϡü쥸򥿥Υ
ƥȤ˴ޤˡǤñǤ롥Τˤϡǥѥ
ȳߥϥɥ/CPU㳰ϥɥνǡü쥸¸/
륳ɤɲäɬפ롥ºݤ¸/ϡå쥸
ȤʳΥ쥸ǰۤʤ뤿ᡤդɬפǤ롥

(3) ü쥸򥳥ƥȤ˴ޤ뤫ɤ򥿥˻ꤹ

ü쥸Ѥ륿ȻѤʤǡ٤ƤΥ
ΥƥȤü쥸ޤˡǤϥХإåɤˤ
ˤϡü쥸򥳥ƥȤ˴ޤ뤫ɤ򥿥˻
ˡͭϤǤ롥¸ˡϼ̤Ǥ롥

ޤü쥸򥳥ƥȤ˴ޤ뤫ɤꤹ륿°
ߤ롥㤨СFPU쥸ǤС°TA_FPUߤ롥
ǥѥåǤϡ°򸫤ơ°ꤵƤü
¸/롥

ϡɥŪü쥸ǥ֥Ǥˤϡ°
ꤵƤʤڤ괹ü쥸ǥ֥뤹
ȡäü쥸Ȥä򸡽ФǤ롥

ˡߥϥɥISRϥɥ顤顼ϥɥޤˤ
CPU㳰ϥɥü쥸Ѥˤϡνñ̤ˤ
ü쥸Ѥ뤫ɤ°ߤˡͤ롥

ǡʤޤ¾νñ̡ˤü쥸Ѥ뤫ɤϡ
ѥ饤֥˰¸礬뤿ᡤդɬפǤ롥㤨
Сư黻ޤޤʤץǤäƤ⡤ѥ餬
ǽ⤤ȽǤСư̿礬롥


ߥ塼ƥåǽĥѥå

ASPͥˡߥ塼ƥåǽɲä뤿γĥѥåѰդ
Ƥ롥ͥٵž椹뤿λȤߤȤơͥپ¥ץ
ȥTA_CEILING°Υߥ塼ƥåˤΤߤ򥵥ݡȤͥٷѾ
ȥTA_INHERIT°Υߥ塼ƥåˤϥݡȤƤʤ

ĥѥåϡextension/mutexǥ쥯ȥ֤Ƥ롥ĥѥå
ѤˤϡUNIXǤСASPͥΥեΥȥå
ǥ쥯ȥǡ

	% cp -r extension/mutex/* .

¹Ԥ롥λΡʳĥΡ˥եϾ񤭤Ƥޤ
ᡤĥʤͥѤˤϡ̤Υǥ쥯ȥ˥
եŸơΥޥɤ¹Ԥ뤳ȡޤʣγĥѥå
Ȥˤϡ餬ͤǽΤǡդɬפǤ롥

ߥ塼ƥåǽγĥѥåǤϡTOPPERS_SUPPORT_MUTEX
kernel.hƤΤǡѤƳĥѥåѤƤ
뤫ɤȽ̤뤳ȤǤ롥


ͥٳĥѥå

ͥ٤256ʳ˳ĥ뤿γĥѥåѰդƤ롥
γĥѥåϡͥ٤˲äơǡͥ١åͥ
١ߥӥ롼ͥ٤256ʳ˳ĥ롥

ĥѥåϡextension/pri_levelǥ쥯ȥ֤Ƥ롥ĥѥ
λˡϡߥ塼ƥåǽƱͤǤ롥

ͥ٤ϰϤγĥѥåǤϡTOPPERS_SUPPORT_PRI_LEVEL
kernel.hƤΤǡѤƳĥѥåѤƤ
뤫ɤȽ̤뤳ȤǤ롥


ߥϥɥ顿CPU㳰ϥɥľܸƽФ

ϡɥǥ٥ơ֥ĥץåˤơͥν
ͳˡ桼Ѱդߥϥɥ顿CPU㳰ϥɥƤ
ФˡɲäˤϡʲΤ褦ʲ¤ԤȤ褤

ǰ

ͥγߤˤϡͥμ¹ˤػߤʤȤյ
ȡͥνͳ˳ߥϥɥ¹ԤǤȤ
յ2Ĥΰյ롥

TOPPERS奫ͥͤǤϡͥγߤԤΰյΤ
¸ΤȰ֤Ť롥

Ԥΰյ¸Ȥߡʤͥνͳ
˳ߥϥɥ¹ԤȤߤˤĤƤϡͥγߤȤ
̤Ѱդ뤳ȤǤ롥ΥɥȤǤϡλȤߤ򡤳ߥ
ɥ顿CPU㳰ϥɥľܸƽФȸƤ֡

ʤߥϥɥ顿CPU㳰ϥɥľܸƽФϡϡɥǥ٥
ơ֥ʤץåǤϰյ㤤

TA_DIRECT°Ƴ

ߥϥɥ顿CPU㳰ϥɥľܸƽФꤹ뤿ˡߥϥ
ɥ°CPU㳰ϥɥ°ˡTA_DIRECT°Ƴ롥ߥ
ɥˤƤϡTA_NONKERNEL°ꤵƤߥϥɥФ
ƤΤߡTA_DIRECT°ꤹ뤳ȤǤ롥

ͥνս

ͥνսȤơTA_DIRECTͤinclude/kernel.h뤳
˲äơե졼եkernel/kernel_def.csv
kernel/kernel.tfˤʲΤ褦˽ɬפ롥

ޤTA_DIRECTͤ򥳥ե졼Фˡkernel_def.csv
˼ιԤɲä롥

TA_DIRECT,TA_DIRECT

kernel.tfϡΤ褦˽롥ޤߥϥɥ°Υ顼
ˤĤƤϡΤ褦˽롥

	$IF (INH.INHATR[inhno] & ~(TA_NONKERNEL|TA_DIRECT|ALT(TARGET_INHATR,0))) != 0$

ޤߥϥɥν뤿εҡINTHDR_ENTRYΥ
ȡˤʬϡΤ褦˽롥

$FOREACH inhno INH.ORDER_LIST$
	$IF (INH.INHATR[inhno] & TA_DIRECT) == 0$
		INTHDR_ENTRY($INH.INHNO[inhno]$, $INH.INTHDR[inhno]$)$NL$
	$END$
$END$

ޤߥϥɥ֥åʬϡΤ褦˽
롥

const INHINIB _kernel_inhinib_table[TNUM_INHNO] = {$NL$
$JOINEACH inhno INH.ORDER_LIST ",\n"$
	$IF (INH.INHATR[inhno] & TA_DIRECT) == 0$
		$TAB${ ($INH.INHNO[inhno]$), ($INH.INHATR[inhno]$), (FP)(INT_ENTRY($INH.INHNO[inhno]$, $INH.INTHDR[inhno]$)) }
	$ELSE$
		$TAB${ ($INH.INHNO[inhno]$), ($INH.INHATR[inhno]$), (FP)($INH.INTHDR[inhno]$) }
	$END$
$END$$NL$
};$NL$

ˡTA_NONKERNELꤵƤ餺TA_DIRECTΤߤꤵƤ
˥顼𤹤ɲä٤Ǥ롥

CPU㳰ϥɥˤĤƤ⡤ƱͤνԤ

åȰ¸Ǥб

å¸åȰ¸νΤߤǤб
뤳ȤǽǤ롥ŪˤϡTA_DIRECTͤtarget_kernel.h
뤳Ȥ˲äơե졼եΥåȰ¸
target_dev.csvtarget.tfˤɬפ롥

ޤtarget_dev.csvˡTA_DIRECT˴ؤԤɲä롥ߥϥɥ°
Υ顼åˤĤƤϡTARGET_INHATRTA_DIRECT뤳Ȥǡ
TA_DIRECT顼ˤʤʤ褦ˤ롥

ߥϥɥν뤿εҤȳߥϥɥ
åˤĤƤϡOMIT_INITILIZE_INTERRUPTѤɸ
Τ޻ߤåȰ¸֤Ф褤CPU㳰ϥ
ɥˤĤƤ⡤ƱͤǤ롥

ʾ
