
		TOPPERS/ASPͥ
		߷ץ

		бС: Release 1.3.2
		ǽ: 2008ǯ614ʺ

ΥɥȤϡ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$
----------------------------------------------------------------------

ܼ

TOPPERS/ASPͥμ߷
CHECKޥgotoʸλ
ext_tskext_ker֤
ͥΥǡ¤ФvolatileˤĤ
㥹Ȥȼٹå
ͥ٥ǡ塼ǽ
ǽɾѥƥﻲȵǽ


TOPPERS/ASPͥμ߷

TOPPERS/ASPͥʰʲASPͥˤϡTOPPERS奫ͥδ
Ȥʤꥢ륿५ͥǤ롥TOPPERS奫ͥͤ߷ˤȡ
ASPͥŬоΰ߷ˤˤĤƤϡTOPPERS奫ͥ
ͽ˽Ҥ٤Ƥ롥

ʲǤϡASPͥμ߷ˤˤĤƽҤ٤뤬߷ˤȤ
ϢƤꡤΤʬΥǤʤʬ⤢롥

TOPPERS/ASPͥμ߷פԤˤꡤˤꤹ롥

(1) ɤɤߤ䤹¤䤹Ż뤹

ɤɤߤ䤹Ȥϡץ󥽡եȥʼ
ǺǤפǤ롥ɤ򤷤Ƥ뵻ѼԤ
뤳Ȥǡȯ뤳ȤǤݡ⽼¤뤳
Ǥ롥ޤɤɤߤ䤹Ȥϡץ߷פ
뤳Ȥ̣ƤꡤˤĤʤ롥ˡѼԶΤ
ζȤ⡤ɤɤߤ䤹ȤϽפȤʤ롥

¤䤹Ȥϡƥ׵ˤ碌塼˥󥰤Ԥ䤹
Ȥ̣Ƥꡤ碌γȯٱ礹Ǥ롥ޤASP
ͥפȤTOPPERS奫ͥ륷꡼ȯƤǤ⡤¤
䤹ȤɬܤξǤ롥

(2) åȥƥؤΥݡƥ󥰤ưפʹ¤Ȥ

ȹߥƥˤ¿ͤʥϡɥѤ뤿ᡤưפ˥ݡ
ƥ󥰤Ǥ뤳ȤϽפǤ롥Τˡ¹ǽθĤ
ϡɥݲåȥƥ˰¸ʬȰ¸ʤ
ʬΤʬΥ롥ޤȯĶʥѥʤɡˤ˰¸ʬ
ΤʬΥ롥

(3) ڤưפʹ¤Ȥ

ݤ뤿ˡڤưפʹ¤Ȥ롥

ŪˤϡӥΤۤȤΤ߶ػߤǼ¹Ԥ뤳ȤȤ
ӥνǳߤĤʤι¤ϡɤߤ䤹
¤䤹ɤˤ뤿ˤͭǤ롥ˤ߱
ˤʤ뤬ˤä륢ץꥱϾǤꡤ
򤨤ʤΤȹͤ롥

ޤ拾ѥˤꥳե졼Ǥս䤹ȡ
٤ʺŬǤǡڤ٤ȹ礻뤳Ȥ顤ե
졼Ǥսɬ׺¤Ȥ롥

(4) ¹ǽȥ̤θ

嵭ˤǡ⤤¹ǽȾ̤ãǤ
褦ʼԤ¹ǽ夵ݤˤϡʿǽθ⡤
ǽθŻ뤹롥

ɤɤߤ䤹Ż뤹ȸäƤ⡤¹ǽΰ르ꥺ
°פ˺Ѥ뤳ȤϤ⤤¹ǽãǤ륢르ꥺ
롥åȥƥؤΥݡƥ󥰤ưפˤ뤿
ʬCǼƤꡤ٤Ƥ򥢥֥ǵҤ
٤Ƽ¹ǽΤϤ򤨤ʤ

̤ˤĤƤϡRAMλ̤︺뤳Ȥ˽֤߷פ
嵭ˤӼ¹ǽȤΥȥ졼ɥդθ꤮ޤǤ
︺ϹԤʤ

(5) ӥƥθ

͡ʵϤΥƥŬѤǤ륹ӥƥä¤Ȥ롥
ˡϤʥƥŬѤݤˡѤʤǽ򥫡ͥ뤬äƤ
뤳Ȥˤ̤äǾ¤ˤʤ褦θ롥

Ūˤϡץꥱȥͥ1ĤΥɥ⥸塼˥󥯤
ˡ1󥯥ǥˤꤷͥؿñ̤ǥ饤֥경ơ
ѤؿΤߤ󥯤빽¤Ȥ롥ϰΥե졼
Ǥ뤬ˡϡ拾ѥˤ륳ե졼
Ȥϰ㤤ڹͿƶ

ޤŪ˻ѤRAMΰ򸺤餷å֤ϤǤ¤
å֤


CHECKޥgotoʸλ

ASPͥμˤƤϡӥŪʥ顼å
ˡ̾Τ"CHECK_"ǻϤޤϢΥޥʤCHECKޥ
ˤѤƤ롥

CHECKޥˤgotoʸޤǤ뤬MISRA-CʤɤΥǥ
롼ǤgotoʸλѤػߤƤꡤgotoʸȤ٤ǤϤʤȤ
¿ޤޥgotoʸѤ뤳ȤǤȤ
ո⤢롥

ǤϡgotoʸޤCHECKޥѤ߷װտޤȤѤ
Ƥ褤CHECKޥλѤˤ꥽եȥο꤬뤳
ȤʤȤڤ롥

ʤASPͥΥͥΤμǤϡCHECKޥʳgotoʸ
ƤսϤʤʰΥƥॵӥǤϡʳˡgotoʸ
ѤƤˡ

CHECKޥȤλˡ

kernel/check.hˤϡ25ĤCHECKޥƤ뤬⼡Υ
Ƥ롥XXXXXˤϡå顼μɽ
ʸ롥

----------------------------------------
#define CHECK_XXXXX(<ġ>) {				\
	if (<顼>) {						\
		ercd = <顼>;				\
		goto error_exit;					\
	}										\
}
----------------------------------------

CHECKޥϡ¿ΥӥνؿǡΤ褦˻
ѤƤ롥

----------------------------------------
ER
<ӥ̾>(ġ)
{
	<ѿ>
	ER		ercd;

	LOG_XXX_YYY_ENTER(ġ);
	CHECK_XXXXX(ġ);
	CHECK_YYYYY(ġ);

	<ӥ>

  error_exit:
	LOG_XXX_YYY_LEAVE(ġ);
	return(ercd);
}
----------------------------------------

ǤϡCHECKޥ2ĻѤƤ뤬1ĤΤ߻ѤƤ⤢
С3İʾѤƤ⤢롥ޤʣCHECKޥδ֤ˡ
ѿؤʸ⤢㤨Сter_tskνؿˡ

߷װտ

CHECKޥѤտޤϡۤȤɤΥӥɬפŪ顼
Υåɤѥ󲽤ɤδʷ餵ݤĤȤɤߤ
夵ȤȤˡҥߥβǽ򸺤餹ȤǤ롥

ʤߤˡCHECKޥѤʤ硤˼ӥν
ϡΤ褦˵Ҥ뤳Ȥˤʤ롥

----------------------------------------
ER
<ӥ̾>(ġ)
{
	<ѿ>
	ER		ercd;

	LOG_XXX_YYY_ENTER(ġ);
	if (<XXXXXΥ顼>) {
		ercd = <XXXXXΥ顼>;
	}
	else {
		if (<YYYYYΥ顼>) {
			ercd = <YYYYYΥ顼>;
		}
		else {

			<ӥ>

		}
	}
	LOG_XXX_YYY_LEAVE(ġ);
	return(ercd);
}
----------------------------------------

CHECKޥƤΤäƤȤβǤϡΥɤ
ɤߤ䤹Τ餫Ǥ롥

ʤΤ褦CHECKޥˤϡgotoʸλѤԲǤ롥

CHECKޥѤƤ褤

CHECKޥϡξ褦˻ѤʤФʤʤ

(1) CHECKޥϡӥؿƬʬǡӥ
ΥФ塤ƥ륻ޤǤˡؿ
Υȥåץ٥Ѥ롥

(2) ӥؿʬǡƥ륻ȴ
塤ӥиΥФˡؿΥȥåץ٥ˡ
error_exit٥֤

뤳Ȥʤ

Τ褦ˡgotoʸѤƤ⡤եȥο꤬
ȤʤȤĥˤϡ⤽⡤MISRA-CʤɤΥǥ󥰥롼
gotoʸλѤػߤƤ뺬򡤸ȡgotoʸλѤˤ꥽
ȥο꤬ǽΤͳ餫ˤɬפ롥

MISRA-CΥɥȤǤϡgotoʸλѤػߤ뺬ˤĤƤޤ
ˤʤäƤ餺ǤϤκ򼡤Τ褦˿¬롥

ή줬ʣˤʤꡤץΰտޤɤߤˤʤʤ롤
ѥåƥץˤʤˡ

CHECKޥξˤϡgotoʸ򥨥顼ȯζæФѤƤꡤ
error_exitȤʤɡץΰտޤ餫Ǥ롥Τ
gotoʸ򥨥顼ζæФѤˤϡgotoʸλѤ
ػߤ뺬ˤʤꤦ롥

gotoʸǶæФ뤳Ȥˤꡤæл˹ԤʤФʤʤ
Ф뤪줬롥

ˤĤƤ⡤CHECKޥ嵭λѾƻȤ¤ϡ
æл˹ԤʤФʤʤϤʤCHECKޥλѤˤ꥽ե
ο꤬뤳ȤϤʤ

뤳ȤʤȤڤ⤦1ˡϡǥ󥰥롼
פʤץबǥ󥰥롼˹פץ
뤳Ȥ򼨤ˡǤ롥

Ǥˡ߷װտޡפǽҤ٤褦ˡCHECKޥѤץϡ
gotoʸѤʤʥץ˽񤭴뤳ȤǤ뤬
ŪˤϡΤȤ롥

elseʤifʸthenκǸˡifʸ겼ˤˤꡤifʸ
Ʊ֥åƱؤΥ٥ʬgotoʸˤϡifʸ
٥δ֤ʸelseˤ뤳ȤˤꡤgotoʸȤʤʥץ
˽񤭴뤳ȤǤ롥

ȤơgotoʸȤäΥץͤ롥

----------------------------------------
	{
		/* ifʸʸ */
		if (....) {
			/* thenʸ */
			goto <٥>;
		}
		/* ifʸȥ٥δ֤ʸ */
	  <٥>:
		/* ٥ʸ */
	}
----------------------------------------

ΥץϡgotoʸȤʤΥץǤ롥

----------------------------------------
	{
		/* ifʸʸ */
		if (....) {
			/* thenʸ */
		}
		else {
			/* ifʸȥ٥δ֤ʸ */
		}
		/* ٥ʸ */
	}
----------------------------------------

ξ˹פgotoʸʣˤϡˤgotoʸ˾嵭
ˡˤäƽ񤭴뤳ȤǡgotoʸȤʤʥץ˽
뤳ȤǤ롥

CHECKޥλˡϡ嵭gotoʸλˡ˹פ뤿ᡤgotoʸ
Ѥʤʥץ˽񤭴뤳ȤǤ롥äơCHECK
ˤ뤳ȤϤʤ


ext_tskext_ker֤

ITRON4.0ͤǤϡext_tskϥ꥿󤹤뤳ȤΤʤӥȤʤ
Ƥ뤬TOPPERS奫ͥˤƤϡΥӥ֤ͤ
ERѹ󥿥ƥȤƤФ줿ˤϡE_CTX顼
ͤȤƥ꥿󤹤뤳ȤȤ롥

λͤФ뤤ĤаƤƤʲͳǺѤʤ

JSPͥΤ褦ˡβǽ򸡽Фʤ¹Ԥ³ˡϡ
Ż뤹륷ƥǤ˾ޤʤ
뤹륷ƥǤϡβǽ򸡽Ф顤˥ꥫХ򤹤٤
Ǥ롥

ASPͥƤΥͥ󤵤ˡϡץꥱ¦
ǲ;ϤʤȤ̣˾ޤʤ

θߴݤĤˡvoidȤޤޡ󥿥ƥȤ
ƤФ줿ˤϥ꥿󤹤Ȥˡϡͥλѹ˵
ˤʤȤ̣˾ޤʤޤ¾Υ顼ɡ㤨
E_NOSPTˤ֤;ϤʤƤ롥

CPU㳰ƤӽФȤˤˡϡͥΤ
ƺѤʤäǰCPU㳰Ƴ⡤ӥ
뤬顼֤˸ƤФOSEK/VDX OSͤΥ顼եå
뵡ǽƳͭ⤤Ȼפ뤿Ǥ롥

ѹˤꡤˡCPUå֤ǥѥåػ߾֤ext_tsk
ƤФ줿ˤ⥨顼꥿󤹤ˡͤ뤬Υᥤ롼
󤫤Υ꥿ext_tskˤʤʤᡤѤʤޤ¾
ñ̤Υ꥿ˡ礵̣⤢㤨Сߥϥ
餫CPUå֤Τޤޥ꥿󤷤ΰˡ

ˤ碌ơext_kerˤĤƤ⡤֤ͤERѹ롥ASPͥ
Ǥϡext_ker顼֤ȤϤʤHRPͥǤϡE_OACV顼
֤礬롥

ʤITRON4.0ͤǤϡexd_tsk꥿󤹤뤳ȤΤʤӥ
ȤʤäƤ뤬TOPPERS奫ͥǤϡexd_tskϥݡȤƤʤ


ͥΥǡ¤ФvolatileˤĤơʥƥ륻
νμ¸˴ؤ

ͥΥǡ¤ϡ¹Լ¹Ԥ¾νñ̡ʳߥϥɥ
ˤ⥢ǽ뤿ᡤvolatileɬפǤϤ
ȹͤ롥ºݡƥ륻ǥͥѿɤॳ
ɤѥκŬˤꥯƥ륻󳰤˰ư졤
Ȥʤä𤵤Ƥ롥

ͥΤ٤ƤΥǡ¤volatileĤˡϡǤϤ
뤬Ŭ޻ߤ뤿ˡͥΥǽˤϰƶͿ
롥ASPͥǤϡˡvolatileɬʤȤ
롥

ASPͥˤƤϡ¹Լ¹Ԥ¾νñ̤񤭴ǽ
Τǡ¤ϡ٤ơCPUå֤ޤߥå֤ˤ
륯ƥ륻ǥƤ롥ƥ륻
ǤΥǡ¤ΥѥκŬˤꥯƥ륻
󳰤˰ưʤ褦ˤˤϡѥФơƥ륻
νˤꡤΥǡ¤Ѥǽ뤳
ȤΤ餻Ф褤

Ūˤϡƥ륻νؿˤäƼ¸С
Τ褦ʺŬ޻ߤ뤳ȤǤ롥ASPͥ¿Υ
åȰ¸ˤơƥ륻νϥޥ䥤
ؿˤƤꡤΤ褦ʺŬ޻ߤǤʤ

ǡƥ륻ν¸ˤϡ
ǡ¤Ѥǽ뤳Ȥ򡤲餫ˡǥѥ
餻ʤФʤʤȤߤ롥GNUȯĶǤϡΤ줫
ˡǤȤǤ롥

(a) ƥ륻νΤޤϽܼŪʬ
	ʶŪˤϡ߶ػߡĤˤʥ饤Ǥʤ̾
	δؿˤ¸롥

(b) ƥ륻νܼŪʬ򥤥饤󥢥
	ˤäƼ¸ƤˤϡΥ饤󥢥֥clobber
	ꥹȤ"memory"ɲä롥

(c) ƥ륻νܼŪʬޥ䥤饤
	ؿƽФǼ¸Ƥˤϡƥ륻
	κǸȽФƬˡAsm("":::"memory")ȤҤ롥

ʤŬѤ륯ƥ륻νϡʲΤ
ΤǤ롥

	SIL_LOC_INT
	SIL_UNL_INT
	t_lock_cpu, i_lock_cpu, x_lock_cpu
	t_unlock_cpu, i_unlock_cpu, x_unlock_cpu


㥹Ȥȼٹå

GCC-O2ץĤƥѥ뤷ˡͥΥ
οսǡηٹåФGCCΥСˤˡ

warning: dereferencing type-punned pointer will break strict-aliasing rules

ϡGCC-O2ץĤȡѥ餬Cstrict
aliasing ruleȤ뤿Ǥ롥ѥstrict aliasing rule
ŬѤʤˤϡGCCΥץ-fno-strict-aliasingꤹ
褤ˤꡤٹå޻ߤ뤬strict aliasing rule
ȤŬϹԤʤʤ롥

ASPͥ˼ˤƤϡstrict aliasing ruleȤŬԤ
Ƥ褯ηٹå̵뤷Ƥ⺹٤ʤʲǤϡη
å̵뤷Ƥ⺹٤ʤͳҤ٤롥

ٹåФȤơsemaphore.cμιԤˤĤƸƤ롥

	wobj_make_wait((WOBJCB *) p_semcb, (WINFO_WOBJ *) &winfo_sem);

ηٹåθϡľŪˤϡ&winfo_sem(WINFO_WOBJ *)˥
ȤƤ뤳ȤǤ뤬ܼŪʸϡΥɤCstrict
aliasing rule˽ʤʸθˤʤǽꡤΥ롼˰¸
Ŭä̤ǽ뤳ȤǤ롥

Cstrict aliasing ruleϡߴΤʤۤʤ뷿̤ơХ
פΰ򥢥ʸѤƤϤʤʤȤΤǤ
ʻѤο񤤤̤ˤʤˡΥǤϡ(WINFO_SEM
*)Υݥ󥿷ͳ(WINFO_WOBJ *)Υݥ󥿷ͳǡХåפ
ΰ򥢥ʸѤƤϤʤʤȤˤʤ롥ޤ
åθˤʤäƤϤʤ(SEMCB *)Υݥ󥿷ͳ
(WOBJCB *)Υݥ󥿷ͳǡХåפΰ򥢥
ʸѤƤϤʤʤ

ASPͥμˤƤϡsemaphore.cδؿˤƤϡ(SEMCB *)
(WINFO_SEM *)Υݥ󥿤ѤƤꡤ(WOBJCB *)
(WINFO_WOBJ *)Υݥ󥿷ͳǥΰ򥢥뤳ȤϤʤ
ƤӽФwait.cδؿˤƤϡ(WOBJCB *)
(WINFO_WOBJ *)Υݥ󥿤ѤƤꡤ(SEMCB *)(WINFO_SEM
*)Υݥ󥿷ͳǥΰ򥢥뤳ȤϤʤ

strict aliasing rule˽ʤʸϡΥ롼˰¸
Ŭä̤ǽ뤳ȤǤ뤬ۤʤ륳ѥ
ñ̤ޤǺŬԤ뤳ȤϤʤᡤˤ꤬뤳
ȤϤʤȸȤǤ롥

Ʊϡ¾Υեeventflag.cdataqueue.cpridataq.c
mailbox.cmempfix.cηٹåˤĤƤ⡤ΤޤƤϤޤ롥


ͥ٥ǡ塼ǽ

Ƴηа

API

CRE_PDQ(ID pdqid, { ATR pdqatr, uint_t pdqcnt, PRI maxdpri, void *pdqmb });
ER snd_pdq(ID pdqid, intptr_t data, PRI datapri);
ER psnd_pdq(ID pdqid, intptr_t data, PRI datapri);
ER ipsnd_pdq(ID pdqid, intptr_t data, PRI datapri);
ER tsnd_pdq(ID pdqid, intptr_t data, PRI datapri, TMO tmout);
ER rcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri);
ER prcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri);
ER trcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri, TMO tmout);
ER ini_pdq(ID pdqid);
ER ref_pdq(ID pdqid, T_RPDQ *pk_rpdq);



̤


ǽɾѥƥﻲȵǽ

ɬȻ

ASPͥˤϡASPͥư륿ASPͥ뼫Ȥǽ
¬뤿ˡƥ٤ι⤤ǽɾѥƥɤ
Фǽ򥵥ݡȤ롥ǽɾѥƥϡޥñ̤ɽ
뤬ºݤ٤ϥåȰ¸Ǥ롥

εǽѤƤץμ¹Ի֤¬ˤϡμ¹ľ
¹ľǽɾѥƥɤ߽Фκ롥Τᡤ
ǽɾѥƥϾͤѤǽɾѥƥ
ͤѤ뤳ȤꤷƤʤ

API

ǽɾѥƥﻲȵǽǤϡΥǡѤ롥

	SYSUTM		ǽɾѥƥ̵ñ̤ϥޥá
				32ӥåȰʾ

SYSUTMϡå¸ˤulong_tʤʤunsigned
longˤƤꡤΥϡ32ӥåȰʾǡå
Ǥ롥

ǽɾѥƥ郎SYSUTMɽǤϰϤĶʤĤޤꡤ
Хե˾硤ǽɾѥƥ0롥ɾоݥץ
μ¹ǽɾѥƥκˤϡ¬֤
SYSUTMɽǤϰϤǤ¤ꡤ0뤳Ȥ̤˹θɬפϤ


SYSUTM32ӥåȤξ硤ǽɾѥƥ71ʬǥХե
롥Τᡤεǽ71ʬ֤ۤ¬˻Ȥäư
ڤʤ

ǽɾѥƥﻲȵǽΤΥӥλͤˤĤƤϡ
TOPPERS奫ͥͽפΡ4.6.1 ƥפ
Ȥ뤳ȡ



ޥñ̤Ǽ뤿ˡŪʥƥå򶡵뤹
ޤθ͡ʥޤϥȥåפΤȲꤹˤɤ߽Ф
ޥñ̤˴ͤˡߤΥƥʥߥñ̤ɽ
ˤ1000ܤͤäΤǽɾѥƥȤ롥
ߤΥƥ1000ܤݤˡХեȯǽ뤬
̵뤷Ƥޤʤ

ƥθͤȥޤθͤӤ֤ɤ߽Ф
ưפǤϤʤξͤɤ߽ФȡɽФδ֤˥ޤХ
Ƴ׵᤬ȯˡϥХե͡⤦
ϥХեͤɤǤޤäǽɾѥƥ
Ƥޤ

褹ˡϤĤͤ뤬ɤˡѤη
ˤꡤ׵ꤷ

(1) ¿ΥåȥƥǼ¸Ǥ뤳ȡ

(2) ӥμ¹Ի֤ǽʸ¤Ȥʤ뤳ȡȡ
    ˤäƥӥμ¹Ի֤礭ưʤȡ

(3) ӥβǽʸ¤Ʊߥ󥰤λ֤ȡ
    ȡˤäƻɤ߼륿ߥ󥰤ưʤȡ

(4) ĴɬפΤѥ᡼Ǿ¤Ȥ뤳ȡ

׵ˡȤơˡѤ뤳Ȥˤ

ޤNMI٤Ƥγߤػߤ֤ǡƥθ͡
ޤθ͡1ܡˡ޳׵̵ͭޤθ͡2ܡ
򡤤νɤ߽ФߤػߤƤ뤿ᡤδ֤˥ƥ
ͤѲ뤳ȤϤʤƥθͤɤ߽Ф֤Ϥɤ
褤ޤޤθͤ2ܤɽФϡ޳׵᤬ä
ˤΤɬפȤʤ뤬(2)׵ᤫ顤޳׵̵ͭˤ餺
߽ФȤȤ롥

ͤɤ߽Ф塤߶ػߤνԤޤ
޳׵᤬ʤäˤϡƥθͤȡ1ܤɤ
ޤθͤϰӤͤǤ뤳ȤݾڤǤ뤿ᡤͤ
ǽɾѥƥθͤ롥

˥޳׵᤬äˤϡ1ܤɤޤθͤ
޳׵ȯ͡ʥХե͡ˤǤȡȯ
ʥХե͡ˤǤξβǽͤ롥Τɤ
ξǤä2ܤɤޤθͤȤäơΤ褦˷
롥2ܤͤϡ޳׵ȯ͡ʥХե͡ˤǤ
뤳ȤݾڤǤ뤿ᡤ1ܤͤ2ܤͤ礭ˤϡ
֤˥ХեäΤȿ¬Ǥ롥Ĥޤꡤ1ܤͤϥХե
ͤȤȤˤʤꡤƥθͤȰӤͤǤȤ
ǽɾѥƥθͤ롥դˡ1ܤͤ2ܤͤƱ
꾮ˤϡ1ܤͤϥХեͤǤȿ¬Ǥ
롥ξˤϡΥƥåΥƥᡤͤ1
ͤӤͤǤȤǽɾѥƥθͤ롥

ǡ޳׵᤬äˤϡ2ܤɤޤθͤ
Ѥˡͤ뤬(3)׵ʤʤ뤿˺Ѥʤä
ޤJSPͥƱͤˡϡ(4)׵ʤ˺Ѥʤ


ǡֿ¬ǤפȤΤϡο¬Ωʤʤ륱뤿
Ǥ롥ο¬Ωʤʤ륱ϡ2Ĥξʬʬ
뤳ȤǤ롥

(a) 1ܤͤХեͤǤˤ⤫餺1ܤͤ2
    ͤ礭ʤ

Τ褦ʥϡ޳ߤ׵ᤵƤˤ⤫餺ӥ
ʤ֤Ĺ³ޤθͤ1ܤɤǤ2ܤ
ޤǤδ֤Ĺ֤ä̡δ֤ˡʺ١˥Хեȯ
˵롥Ĥޤꡤ޳ߤӥʤ֤
ƥåμĹʤäǤ롥Τ褦ʾˤϡƥ
ιԤʤʤ롥

(b) 1ܤͤХեͤǤˤ⤫餺1ܤͤ2
    ͤƱ⾮ʤ

Τ褦ʥϡޤθͤ1ܤɤǤ2ܤɤޤǤ
֤ˡޤۤ1ʬȥåפ˵롥ξ⡤
޳ߤػߤƤ֤ƥåμĹä
ˤʤꡤƥιԤʤʤ롥

Υ⡤޳ߤĹֶػߤƤ롤޳ߤ
ͥ٤ι⤤߽Ĺ³Ƽ¹Ԥ줿ߥ졼Ķ
ˤƥߥ졼ΥץĹ֥塼뤵ʤäʤɤ
ͳǡƥιԤʤ롥Ǥξ
򡤥ӥѾջࡥ

ºݤΥɤˤƤϡƥθͤѿݻƤʤ
ʾ̷current_timeݻƤ뤬̷ݻѿ
ˡΥƥåΥƥѤƷ׻Ƥ롥Τᡤ
ޤθͤХեͤǤȽǤƤϡ
ƥåμ֤򡤵᤿ǽɾѥƥ狼鸺롥
ˤꡤӥμ¹Ի֤ư뤳Ȥˤʤ뤬ifʸ
ʥѥκŬꤹȡͤθ1ʤΤǡưϤ鷺
Ǥ롥

ΥӥϡǤդξ֤ƤӽФȤǤ뤿ᡤSIL
ߥåǽѤơӥΥƥ륻
롥

ʾ
