Ignore:
Timestamp:
Jun 10, 2015, 8:40:31 PM (9 years ago)
Author:
coas-nagasima
Message:

SHIFT_JISのコードにcharsetプロパティを付けた

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uKadecot/trunk/ssp/kernel/kernel.tf

    • Property svn:mime-type changed from text/plain to text/plain; charset=SHIFT_JIS
    r101 r107  
    1010$               Nagoya Municipal Industrial Research Institute, JAPAN
    1111$
    12 $  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì (1)`(4) ‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    13 $  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü•ÏE
    14 $  Ä”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    15 $  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ìŒ 
    16 $      •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[ƒX
    17 $      ƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    18 $  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    19 $      ‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    20 ƒƒ“ƒgi—˜—pŽÒƒ}
    21 $      ƒjƒ
    22 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•Û
    23 $      Ø‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    24 $  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    25 $      ‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±‚ƁD
    26 $    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    27 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    28 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ì
    29 $        Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    30 $    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É•ñ
    31 $        ‚·‚邱‚ƁD
    32 $  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹ŠQ
    33 $      ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD‚Ü‚½C
    34 $      –{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝—R‚ÉŠî‚Ã
    35 $      ‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    36 $
    37 $  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨‚æ
    38 $  ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·
    39 $  ‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p
    40 $  ‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚ð•‰
    41 $  ‚í‚È‚¢D
     12$  上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
     13$  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
     14$  再配布(以下,利用と呼ぶ)することを無償で許諾する.
     15$  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
     16$      表示,この利用条件および下記の無保証規定が,そのままの形でソース
     17$      コード中に含まれていること.
     18$  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
     19$      できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
     20$      ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
     21$      証規定を掲載すること.
     22$  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
     23$      できない形で再配布する場合には,次のいずれかの条件を満たすこと.
     24$    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
     25$        権表示,この利用条件および下記の無保証規定を掲載すること.
     26$    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
     27$        告すること.
     28$  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
     29$      からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
     30$      本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
     31$      く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     32$
     33$  本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
     34$  びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
     35$  る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
     36$  により直接的または間接的に生じたいかなる損害に関しても,その責任を負
     37$  わない.
    4238$
    4339$ ======================================================================
    4440
    45 $ ƒƒOo—Í
    46 $   Žw’肵‚½”‚¾‚¯s“ª‚Ƀ^ƒu‚ð‚‚¯‚Ä•\Ž¦‚·‚éD
    47 $   ƒR[ƒh‹y‚яo—͂̉“ǐ«‚ð‹“‚°‚邽‚ß‚ÉŽg‚¤D
    48 $     ˆø” : ARGV[1] : s“ª‚É‘}“ü‚·‚éƒ^ƒu‚̐”
    49 $     •Ô’l : ‹ó•¶Žš—ñ
    50 $     ’ˆÓ : RESULT‚𑀍삵‚Ä‚¢‚邽‚߁C‘¼‚̊֐”‚̏o—Í‚ð•Û‘¶‚·‚é‘O‚ɌĂяo‚·‚Ə㏑‚«‚³‚ê‚éD
     41$ ログ出力
     42$   指定した数だけ行頭にタブをつけて表示する.
     43$   コード及び出力の可読性を挙げるために使う.
     44$     引数 : ARGV[1] : 行頭に挿入するタブの数
     45$     返値 : 空文字列
     46$     注意 : RESULTを操作しているため,他の関数の出力を保存する前に呼び出すと上書きされる.
    5147$
    5248$FUNCTION LOG$
     
    5652
    5753$ =====================================================================
    58 $ ˆ—‘O‚̃`ƒFƒbƒN
     54$ 処理前のチェック
    5955$ =====================================================================
    6056
    61 $ ƒ^ƒXƒN‚ª1ŒÂˆÈã‘¶Ý‚·‚邱‚Ƃ̃`ƒFƒbƒN
     57$ タスクが1個以上存在することのチェック
    6258$IF !LENGTH(TSK.ID_LIST)$
    6359        $ERROR$$FORMAT("no task is registered")$$END$
     
    6561
    6662$ =====================================================================
    67 $ kernel_cfg.h ‚̐¶¬
     63$ kernel_cfg.h の生成
    6864$ =====================================================================
    6965
     
    8177$NL$
    8278
    83 $ // ƒ^ƒXƒNID‚ð‹N“®—Dæ“x(tskapri)‚̍‚‚¢‡‚É reallocate_tskapri ‚ÖŠ„‚è“–‚āC
    84 $ // ’è‹`‚ð kernel_cfg.h ‚֏o—Í‚·‚éD
     79$ // タスクIDを起動優先度(tskapri)の高い順に reallocate_tskapri へ割り当て,
     80$ // 定義を kernel_cfg.h へ出力する.
    8581$tsk_apriorder_list={}$
    8682$tsk_epri_list={}$
     
    9187        #define $TSK.TSKID[id]$ $tsk_index$$NL$
    9288
    93 $       DEF_EPR ‚Å’è‹`‚³‚ê‚Ä‚¢‚È‚¢ƒ^ƒXƒN‚ÌŽÀsŽž—Dæ“x‚ªC‹N“®—Dæ“x‚Æ“¯‚¶‚É‚È‚é‚悤‚É‚·‚éD
     89$       DEF_EPR で定義されていないタスクの実行時優先度が,起動優先度と同じになるようにする.
    9490        $tsk_epri_list = APPEND(tsk_epri_list, ALT(TSK.EXEPRI[TSK.TSKID[id]], TSK.ATSKPRI[TSK.TSKID[id]]))$
    9591        $tsk_index = tsk_index + 1$
     
    111107
    112108$ =====================================================================
    113 $ kernel_cfg.c‚̐¶¬
     109$ kernel_cfg.cの生成
    114110$ =====================================================================
    115111
     
    126122
    127123$ ---------------------------------------------------------------------
    128 ƒCƒ“ƒNƒ‹[ƒhƒfƒBƒŒƒNƒeƒBƒui#includej
     124インクルードディレクティブ(#include)
    129125$ ---------------------------------------------------------------------
    130126/*$NL$
     
    136132
    137133$ ---------------------------------------------------------------------
    138 ƒIƒuƒWƒFƒNƒg‚ÌID”ԍ†‚ð•ÛŽ‚·‚é•Ï”
     134オブジェクトのID番号を保持する変数
    139135$ ---------------------------------------------------------------------
    140136$IF USE_EXTERNAL_ID$
     
    161157
    162158$ ---------------------------------------------------------------------
    163 ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     159トレースログマクロのデフォルト定義
    164160$ ---------------------------------------------------------------------
    165161/*$NL$
     
    178174
    179175$ ---------------------------------------------------------------------
    180 $  ƒ^ƒXƒN‚ÉŠÖ‚·‚éo—Í
    181 $ ---------------------------------------------------------------------
    182 
    183 $
    184 $ ŽÀsŽž—Dæ“x‚̃Rƒ“ƒtƒBƒMƒ
    185 ƒŒ[ƒVƒ‡ƒ“‚ɐ¬Œ÷‚µ‚½‚©‚Ç‚¤‚©
    186 $
    187 $ DEF_EPR ˆ—’†‚ɃGƒ‰[‚ª”­¶‚µ‚½ê‡C‚±‚̕ϐ”‚ª0‚É‚È‚éD
    188 $ DEF_EPR ˆ—’†‚ɃGƒ‰[‚ª”­¶‚µ‚½‚©‚Ç‚¤‚©‚ð”»’f‚µ‚Ä
    189 $ “Á’菈—‚ÌŽÀs‚ðƒuƒƒbƒN‚·‚邽‚ß‚ÉŽg—p‚·‚éD
     176$  タスクに関する出力
     177$ ---------------------------------------------------------------------
     178
     179$
     180$ 実行時優先度のコンフィギュレーションに成功したかどうか
     181$
     182$ DEF_EPR 処理中にエラーが発生した場合,この変数が0になる.
     183$ DEF_EPR 処理中にエラーが発生したかどうかを判断して
     184$ 特定処理の実行をブロックするために使用する.
    190185$
    191186$configurated_defepr_successfully = 1$
     
    196191$NL$
    197192
    198 $ ƒ^ƒXƒNID”ԍ†‚̍őå’l
     193$ タスクID番号の最大値
    199194const ID _kernel_tmax_tskid = (TMIN_TSKID + TNUM_TSKID - 1);$NL$
    200195$NL$
    201196
    202 $ ready_primap ‚̏‰Šú’l
     197$ ready_primap の初期値
    203198$init_rdypmap = 0$
    204199$tsk_index = 1$
    205200
    206 $ ƒ^ƒXƒN‘®«D
     201$ タスク属性.
    207202const ATR       _kernel_tinib_tskatr[TNUM_TSKID]    = {
    208203$JOINEACH tskid tsk_apriorder_list ","$
    209 $       // TA_ACT , TA_RSTR ‚Ü‚½‚Í TA_NULL ‚Å‚ ‚éiE_RSATRj
     204$       // TA_ACT , TA_RSTR または TA_NULL である(E_RSATR)
    210205        $IF (TSK.TSKATR[tskid] & ~(TA_ACT | TA_RSTR | ALT(TARGET_TSKATR,0))) != 0$
    211206                $ERROR TSK.TEXT_LINE[tskid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "tskatr", TSK.TSKATR[tskid], tskid, "CRE_TSK")$$END$
     
    223218const uint_t$TAB$_kernel_init_rdypmap = $init_rdypmap$U;$NL$
    224219
    225 $ Šg’£î•ñ(exinf)D ƒGƒ‰[‚̓Rƒ“ƒpƒCƒ‹Žž‚Ü‚½‚̓AƒvƒŠ‚̃eƒXƒg‚ÅŒŸo‚·‚邽‚߁C‚±‚±‚Å‚Í‚µ‚È‚¢D
     220$ 拡張情報(exinf). エラーはコンパイル時またはアプリのテストで検出するため,ここではしない.
    226221const intptr_t  _kernel_tinib_exinf[TNUM_TSKID]     = {
    227222$JOINEACH tskid tsk_apriorder_list ","$
     
    230225};$NL$
    231226
    232 $ ‹N“®”Ô’n(task)DƒGƒ‰[‚̓Rƒ“ƒpƒCƒ‹Žž‚Ü‚½‚̓AƒvƒŠ‚̃eƒXƒg‚ÅŒŸo‚·‚邽‚߁C‚±‚±‚Å‚Í‚µ‚È‚¢D
     227$ 起動番地(task).エラーはコンパイル時またはアプリのテストで検出するため,ここではしない.
    233228const TASK      _kernel_tinib_task[TNUM_TSKID]      = {
    234229$JOINEACH tskid tsk_apriorder_list ","$
     
    237232};$NL$
    238233
    239 $ ‹N“®—Dæ“x(atskpri)D
     234$ 起動優先度(atskpri).
    240235$FOREACH tskid tsk_apriorder_list$
    241 $       // atskpri ‚Í TMIN_TPRI ˆÈãCTMAX_TPRI ˆÈ‰º‚Å‚ ‚éDiE_PARj
     236$       // atskpri は TMIN_TPRI 以上,TMAX_TPRI 以下である.(E_PAR)
    242237        $IF !(TMIN_TPRI <= TSK.ATSKPRI[tskid] && TSK.ATSKPRI[tskid] <= TMAX_TPRI)$
    243238                $ERROR TSK.TEXT_LINE[tskid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "atskpri", TSK.ATSKPRI[tskid], tskid, "CRE_TSK")$$END$
    244239        $END$
    245240
    246 $       // atskpri ‚͏d•¡‚ª‚È‚¢DiE_PARj
     241$       // atskpri は重複がない.(E_PAR)
    247242        $FOREACH tskid2 tsk_apriorder_list$
    248243                $IF tskid != tskid2 && TSK.ATSKPRI[tskid] == TSK.ATSKPRI[tskid2] $
     
    252247$END$
    253248
    254 $ ŽÀsŽž—Dæ“x(exepri)D
     249$ 実行時優先度(exepri).
    255250const uint_t    _kernel_tinib_epriority[TNUM_TSKID] = {
    256251$epri_allocated = 0$
     
    259254        $epri = AT(tsk_epri_list, tsk_index)$
    260255
    261 $       // exepri ‚Í TMIN_TPRI ˆÈã‚©‚ TMAX_TPRI ˆÈ‰º‚Å‚ ‚éD(E_PAR)
     256$       // exepri は TMIN_TPRI 以上かつ TMAX_TPRI 以下である.(E_PAR)
    262257        $IF TMIN_TPRI > epri || TMAX_TPRI < epri$
    263258                $configurated_defepr_successfully = 0$
     
    265260        $END$
    266261
    267 $       // exepri ‚Í atskpri ˆÈ‰º‚Ì’l‚ð‚à‚Â(—Dæ“x‚Æ‚µ‚Ä‚Í“¯‚¶‚©‚»‚ê‚æ‚荂‚¢)D(E_ILUSE)
     262$       // exepri は atskpri 以下の値をもつ(優先度としては同じかそれより高い).(E_ILUSE)
    268263        $IF epri <= TMAX_TPRI && epri > TSK.ATSKPRI[tskid]$
    269264                $configurated_defepr_successfully = 0$
     
    271266        $END$
    272267
    273 $       // exepri ‚Ì“à•”•\Œ»‚ðŒˆ’è‚µ reallocate_tskepri ‚ÉŠi”[D
     268$       // exepri の内部表現を決定し reallocate_tskepri に格納.
    274269        $FOREACH tskid2 tsk_apriorder_list $
    275270                $IF epri_allocated != 1 && epri <= TSK.ATSKPRI[tskid2]$
     
    285280
    286281$
    287 $ // —Dæ“xŠ„‚è“–‚ÄŒ‹‰Ê‚ðo—Í
     282$ // 優先度割り当て結果を出力
    288283$
    289284/*$NL$
     
    295290
    296291$
    297 ƒ^ƒXƒN‚̍őåƒXƒ^ƒbƒNŽg—p—Ê‚ÌŒvŽZ
    298 $
    299 
    300 $ ƒXƒ^ƒbƒNƒTƒCƒY‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
     292タスクの最大スタック使用量の計算
     293$
     294
     295$ スタックサイズに関するエラーチェック
    301296$FOREACH tskid TSK.ID_LIST$
    302 $       // stksz‚ª0‚©Cƒ^[ƒQƒbƒg’è‹`‚̍ŏ¬’liTARGET_MIN_STKSZj‚æ‚è‚à¬‚³‚¢ê‡iE_PARj
     297$       // stkszが0か,ターゲット定義の最小値(TARGET_MIN_STKSZ)よりも小さい場合(E_PAR)
    303298        $IF TSK.STKSZ[tskid] == 0 || (LENGTH(TARGET_MIN_STKSZ) &&
    304299                                                                                TSK.STKSZ[tskid] < TARGET_MIN_STKSZ)$
     
    308303
    309304
    310 $ ŠÖ”’è‹`
    311 $
    312 $
    313 $ ŠÖ”1: ‹N“®Žž—Dæ“x‚Ì’á‚¢‡‚Ƀ\[ƒeƒBƒ“ƒO‚·‚邽‚ß‚Ì”äŠrŠÖ”
     305$ 関数定義
     306$
     307$
     308$ 関数1: 起動時優先度の低い順にソーティングするための比較関数
    314309$
    315310$FUNCTION compare_tskapri_rev$
     
    318313
    319314$
    320 $ ŠÖ”2: Žw’肵‚½ƒ^ƒXƒN‚ɑ΂·‚éƒXƒ^ƒbƒNŽg—p—ʂ̍őå‚ðŒvŽZ‚·‚éŠÖ”
    321 $    ˆø” : ARGV[1] : ƒ^ƒXƒNID(“à•”•\Œ», ‹N“®Žž—Dæ“x‚Ì“à•”•\Œ»‚É“™‚µ‚¢)
    322 $    •Ô’l : RESULT  : “–ŠYƒ^ƒXƒN‚ɑ΂·‚éƒXƒ^ƒbƒNŽg—p—ʂ̍őå’lD
    323 $                     ‚±‚Ì’l‚́C“–ŠYƒ^ƒXƒN‚ÌŽÀsŠJŽn‚©‚çI—¹‚Ü‚Å‚ÌŠÔ‚É
    324 $                     ‚»‚̃^ƒXƒN‚ɑ΂·‚éƒvƒŠƒGƒ“ƒvƒg‚ðl—¶‚µ‚ăXƒ^ƒbƒNŽg—p—Ê‚ð
    325 $                     ŒvŽZ‚µ‚½ê‡‚ɁC‰Â”\«‚Ì‚ ‚é‘g‚ݍ‡‚킹‚Ì’†‚ōőå‚Æ‚È‚é’l‚ð•Ô‚·D
     315$ 関数2: 指定したタスクに対するスタック使用量の最大を計算する関数
     316$    引数 : ARGV[1] : タスクID(内部表現, 起動時優先度の内部表現に等しい)
     317$    返値 : RESULT  : 当該タスクに対するスタック使用量の最大値.
     318$                     この値は,当該タスクの実行開始から終了までの間に
     319$                     そのタスクに対するプリエンプトを考慮してスタック使用量を
     320$                     計算した場合に,可能性のある組み合わせの中で最大となる値を返す.
    326321$
    327322$nest_level = 0$
    328323$
    329324$FUNCTION calc_stksz$
    330 $       // •Ï”ƒŠƒXƒg
     325$       // 変数リスト
    331326        $nest_level = nest_level + 1$
    332327        $arg[nest_level] = ARGV[1]$
    333328        $calculated_stack_size = 0$
    334329
    335 $       // ˆ—ŠJŽn
     330$       // 処理開始
    336331$SPC$* $LOG(nest_level-1)$Calculation start (Task ID = $arg[nest_level]$, StackSize[$arg[nest_level]$]=$TSK.STKSZ[arg[nest_level]]$)$NL$
    337332
    338 $       // Žw’肵‚½ƒ^ƒXƒNID ‚̃Xƒ^ƒbƒNŒvŽZ‚ªŠ®—¹‚µ‚Ä‚¢‚é‚©
     333$       // 指定したタスクID のスタック計算が完了しているか
    339334        $IF     LENGTH(done[arg[nest_level]]) == 0$
    340335
    341336$SPC$* $LOG(nest_level)$Task list with higher priority than $arg[nest_level]$ = $higher_pri_tsklist[arg[nest_level]]$$NL$
    342337
    343 $               // (1) Š®—¹‚µ‚Ä‚¢‚È‚¢ê‡
    344 $               // •Ï”‚̏‰Šú‰»
     338$               // (1) 完了していない場合
     339$               // 変数の初期化
    345340                $max_stksz[arg[nest_level]] = 0$
    346341                $higher_pri_maxstksz[arg[nest_level]] = 0$
    347342
    348 $               // “–ŠYƒ^ƒXƒNID ‚ÌŽÀsŽž—Dæ“x‚æ‚荂‚¢‹N“®—Dæ“x‚ðŽ‚Âƒ^ƒXƒN‚ª‘¶Ý‚·‚éê‡
     343$               // 当該タスクID の実行時優先度より高い起動優先度を持つタスクが存在する場合
    349344                $IF LENGTH(higher_pri_tsklist[arg[nest_level]]) > 0$
    350 $                       // ‚»‚ꂼ‚ê‚̍‚—Dæ“xƒ^ƒXƒN‚ɑ΂µ
     345$                       // それぞれの高優先度タスクに対し
    351346                        $FOREACH id higher_pri_tsklist[arg[nest_level]]$
    352 $                               // Ä‹AŒÄo‚·‚é‚ƕϐ”‚ªã‘‚«‚³‚ê‚邽‚߁C•Û‘¶‚µ‚Ä‚¨‚­
     347$                               // 再帰呼出すると変数が上書きされるため,保存しておく
    353348                                $id_saved[nest_level] = id$
    354 $                               // ƒXƒ^ƒbƒNŒvŽZ‚ðŽÀs‚·‚é
     349$                               // スタック計算を実行する
    355350                                $calculated_stack_size = calc_stksz(id_saved[nest_level])$
    356 $                               // •Û‘¶‚µ‚½•Ï”‚𕜋A
     351$                               // 保存した変数を復帰
    357352                                $id = id_saved[nest_level]$
    358353
    359354                                $IF higher_pri_maxstksz[arg[nest_level]] < calculated_stack_size$
    360 $                                       // ‹L‰¯‚µ‚Ä‚¨‚­
     355$                                       // 記憶しておく
    361356                                        $higher_pri_maxstksz[arg[nest_level]] = calculated_stack_size$
    362357                                $END$
     
    366361$SPC$* $LOG(nest_level)$higher_pri_maxstksz[$arg[nest_level]$] = $higher_pri_maxstksz[arg[nest_level]]$$NL$
    367362
    368 $               // ‚—Dæ“xƒ^ƒXƒN‚̃Xƒ^ƒbƒNŽg—p—ʂɁC“–ŠYƒ^ƒXƒN‚ÌŽg—p—Ê‚ð‰ÁŽZ‚·‚é
     363$               // 高優先度タスクのスタック使用量に,当該タスクの使用量を加算する
    369364                $max_stksz[arg[nest_level]] = higher_pri_maxstksz[arg[nest_level]] + TSK.STKSZ[arg[nest_level]]$
    370365
    371366$SPC$* $LOG(nest_level)$DONE(max_stksz[$arg[nest_level]$] = $max_stksz[arg[nest_level]]$)$NL$
    372367
    373 $               // “–ŠYƒ^ƒXƒNID‚ɑ΂µ‚Ä‚ÍŒvŽZ‚ðÏ‚Ü‚¹‚½‚Æ‚¢‚¤‹L˜^‚ðŽc‚µ‚Ä‚¨‚­
     368$               // 当該タスクIDに対しては計算を済ませたという記録を残しておく
    374369                $done[arg[nest_level]] = 1$
    375370
    376371        $ELSE$
    377 $               // (2) ŒvŽZ‚ªŠù‚ÉŠ®—¹‚µ‚Ä‚¢‚éê‡CŒvŽZ‚ðƒXƒLƒbƒv‚·‚éD
     372$               // (2) 計算が既に完了している場合,計算をスキップする.
    378373
    379374$SPC$* $LOG(nest_level)$SKIP(max_stksz[$arg[nest_level]$] = $max_stksz[arg[nest_level]]$)$NL$
    380375        $END$
    381376
    382 $       // Œ©Ï‚à‚è‚̍őå’l‚ð•Ô‚·
     377$       // 見積もりの最大値を返す
    383378        $RESULT = max_stksz[arg[nest_level]]$
    384379        $nest_level = nest_level - 1$
     
    386381
    387382$
    388 $ ŠÖ”’è‹`‚±‚±‚܂ŁC‚±‚±‚©‚çƒXƒ^ƒbƒNŒvŽZˆ—‚ÌŠJŽn
    389 $
    390 
    391 $
    392 $ ‚Ü‚¸‚͖؍\‘¢‚̃f[ƒ^\‘¢ì¬
     383$ 関数定義ここまで,ここからスタック計算処理の開始
     384$
     385
     386$
     387$ まずは木構造のデータ構造作成
    393388$
    394389$FOREACH id LSORT(tsk_apriorder_list, "compare_tskapri_rev")$
    395390
    396 $       // Šeƒ^ƒXƒN–ˆ‚ɁC‚»‚ÌŽÀsŽž—Dæ“x‚æ‚è‚à‚‚¢‹N“®Žž—Dæ“x‚ðŽ‚Âƒ^ƒXƒN‚̃ŠƒXƒg‚ðì‚éD
    397 $       // ‚»‚ê‚̓vƒŠƒGƒ“ƒvƒg‚³‚ê‚é‰Â”\«‚Ì‚ ‚éƒ^ƒXƒN‚̈ꗗ‚Æ‚È‚éD
     391$       // 各タスク毎に,その実行時優先度よりも高い起動時優先度を持つタスクのリストを作る.
     392$       // それはプリエンプトされる可能性のあるタスクの一覧となる.
    398393        $FOREACH id2 LSORT(tsk_apriorder_list, "compare_tskapri_rev")$
    399394                $IF reallocate_tskepri[id] > reallocate_tskapri[id2]$
     
    402397        $END$
    403398
    404 $       // ƒvƒŠƒGƒ“ƒvƒg‚·‚éE‚³‚ê‚éŠÖŒW‚ðŽ¦‚·–؍\‘¢‚̍ª(root)‚Æ‚È‚éƒ^ƒXƒN‚Ì’TõD
    405 $       //   ‘Ώۃ^ƒXƒN(id)‚Ì‹N“®Žž—Dæ“x(reallocate_tskapri[id])‚æ‚è’á‚¢
    406 $       //   (’l‚Æ‚µ‚Ä‚Í‘å‚«‚¢)‹N“®Žž—Dæ“x‚ð‚à‚ƒ^ƒXƒN‚Ì higher_pri_tsklist ‚ɁC
    407 $       //   ‘Ώۃ^ƒXƒN(id) ‚ªŠÜ‚Ü‚ê‚È‚¯‚ê‚΁Cª‚Æ‚È‚éD
     399$       // プリエンプトする・される関係を示す木構造の根(root)となるタスクの探索.
     400$       //   対象タスク(id)の起動時優先度(reallocate_tskapri[id])より低い
     401$       //   (値としては大きい)起動時優先度をもつタスクの higher_pri_tsklist に,
     402$       //   対象タスク(id) が含まれなければ,根となる.
    408403        $is_root = 1$
    409404        $FOREACH id2 LSORT(tsk_apriorder_list, "compare_tskapri_rev")$
     
    414409                $END$
    415410        $END$
    416 $       // ª(root)‚Æ‚È‚éƒ^ƒXƒN‚È‚ç‚΁CƒŠƒXƒg‚֒ljÁ
     411$       // 根(root)となるタスクならば,リストへ追加
    417412        $IF is_root == 1$
    418413                $root_apri = APPEND(root_apri, id)$
     
    421416
    422417$
    423 $ o—ÍŠJŽn
     418$ 出力開始
    424419$
    425420
     
    428423$SPC$* $NL$
    429424
    430 $ // ª‚Æ‚È‚éŠeƒ^ƒXƒN‚ɑ΂µ‚āC‚»‚̍őåƒ^ƒXƒNŽg—p—Ê‚ðŒvŽZ‚µCƒŠƒXƒg‚֒ljÁ‚·‚éD
     425$ // 根となる各タスクに対して,その最大タスク使用量を計算し,リストへ追加する.
    431426$FOREACH root_id root_apri$
    432427        $stksz_estimated = APPEND(stksz_estimated, calc_stksz(root_id))$
    433428$END$
    434429
    435 $ // ƒ^ƒXƒN‚̃Xƒ^ƒbƒNŽg—p—ʂ̍őå’l‚ðŒˆ’è
    436 $ // ƒŠƒXƒg’†‚Ì—v‘f‚̍őå’l‚ªƒ^ƒXƒN‚̍őåƒXƒ^ƒbƒNŽg—p—Ê‚Æ‚È‚éD
     430$ // タスクのスタック使用量の最大値を決定
     431$ // リスト中の要素の最大値がタスクの最大スタック使用量となる.
    437432$max_tsk_stksz = 0$
    438433$FOREACH size stksz_estimated$
     
    442437$END$
    443438
    444 $ // Šm”F
     439$ // 確認
    445440$SPC$* List of Estimated Total Stack Sizes of Tasks = $stksz_estimated$$NL$
    446441$SPC$* Estimated Maximum Total Stack Size of Tasks = $max_tsk_stksz$$NL$
     
    449444
    450445
    451 $ ‘S‚Ă̏ˆ—’PˆÊ‚̃Xƒ^ƒbƒN‚Í‹¤—L‚³‚ê‚éD
    452 $ ‚»‚Ì‚½‚߁CƒXƒ^ƒbƒNƒTƒCƒY‚ÉŠÖ‚·‚éƒ`ƒFƒbƒN‚Í
    453 $ ‹¤—LƒXƒ^ƒbƒNÝ’è‚Ì‚Æ‚±‚ë‚ł܂Ƃ߂čs‚¤D
    454 
    455 $ ƒXƒ^ƒbƒN‚̐擪”Ô’n(stk)D
     446$ 全ての処理単位のスタックは共有される.
     447$ そのため,スタックサイズに関するチェックは
     448$ 共有スタック設定のところでまとめて行う.
     449
     450$ スタックの先頭番地(stk).
    456451$FOREACH tskid tsk_apriorder_list$
    457 $       // í‚É NULL ‚Å‚ ‚éD(E_PAR)
     452$       // 常に NULL である.(E_PAR)
    458453        $IF !EQ(TSK.STK[tskid], "NULL")$
    459454                $ERROR TSK.TEXT_LINE[tskid]$E_PAR: $FORMAT(("'%1%' of %2% must be NULL."), "stk", "CRE_TSK")$$END$
     
    462457
    463458$ ---------------------------------------------------------------------
    464 ƒCƒxƒ“ƒgƒtƒ‰ƒO
     459イベントフラグ
    465460$ ---------------------------------------------------------------------
    466461/*$NL$
     
    469464$NL$
    470465
    471 $ ƒGƒ“ƒgƒŠ‚ª (UINT8_MAX - TMIN_FLGID)ŒÂ‚æ‚葽‚¢ê‡‚́CƒGƒ‰[‚Æ‚·‚é --> Œ»Žž“_‚ł̓Rƒƒ“ƒgƒAƒEƒg
     466$ エントリが (UINT8_MAX - TMIN_FLGID)個より多い場合は,エラーとする --> 現時点ではコメントアウト
    472467$ $IF LENGTH(ALM.ORDER_LIST) > (UINT8_MAX - TMIN_FLGID)$
    473468$       $ERROR$$FORMAT("The number of CRE_FLG must be equal to or less than (UINT8_MAX - TMIN_FLGID).")$$END$
    474469$ $END$
    475470
    476 $ ƒCƒxƒ“ƒgƒtƒ‰ƒOID”ԍ†‚̍őå’l
     471$ イベントフラグID番号の最大値
    477472const ID _kernel_tmax_flgid = (TMIN_FLGID + TNUM_FLGID - 1);$NL$
    478473$NL$
    479474
    480 $       // iflgptn‚ªFLGPTN‚ÉŠi”[‚Å‚«‚È‚¢ê‡iE_PARj
     475$       // iflgptnがFLGPTNに格納できない場合(E_PAR)
    481476$FOREACH flgid FLG.ORDER_LIST$
    482477        $IF (FLG.IFLGPTN[flgid] & ~((1 << TBIT_FLGPTN) - 1)) != 0$
     
    485480$END$
    486481
    487 $ ƒCƒxƒ“ƒgƒtƒ‰ƒO‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     482$ イベントフラグ初期化ブロックの生成
    488483$IF LENGTH(FLG.ID_LIST)$
    489484
    490 $       ƒCƒxƒ“ƒgƒtƒ‰ƒO‘®«
     485$       イベントフラグ属性
    491486        const ATR _kernel_flginib_atr[TNUM_FLGID] = {
    492487                $JOINEACH flgid FLG.ORDER_LIST ","$
    493 $                       // flgatr‚ªimTA_CLRnj‚Å‚È‚¢ê‡iE_RSATRj
     488$                       // flgatrが([TA_CLR])でない場合(E_RSATR)
    494489                        $IF (FLG.FLGATR[flgid] & ~(TA_CLR)) != 0$
    495490                                $ERROR FLG.TEXT_LINE[flgid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "flgatr", FLG.FLGATR[flgid], flgid, "CRE_FLG")$$END$
     
    499494        };$NL$
    500495       
    501 $       ƒCƒxƒ“ƒgƒtƒ‰ƒOƒpƒ^[ƒ“‚̏‰Šú’l
     496$       イベントフラグパターンの初期値
    502497        const FLGPTN _kernel_flginib_iflgptn[TNUM_FLGID] = {
    503498                $JOINEACH flgid FLG.ORDER_LIST ","$
     
    506501        };$NL$
    507502
    508 $       // ƒCƒxƒ“ƒgƒtƒ‰ƒO‚ÌŒ»Ý‚̃tƒ‰ƒOƒpƒ^[ƒ“‚ðŠi”[‚·‚é•Ï”
     503$       // イベントフラグの現在のフラグパターンを格納する変数
    509504        FLGPTN _kernel_flgcb_flgptn[TNUM_FLGID];$NL$
    510505$ELSE$
     
    516511
    517512$ ---------------------------------------------------------------------
    518 $  ƒf[ƒ^ƒLƒ
    519 [
     513$  データキュー
    520514$ ---------------------------------------------------------------------
    521515/*$NL$
     
    524518$NL$
    525519
    526 $ ƒf[ƒ^ƒLƒ
    527 [ID”ԍ†‚̍őå’l
     520$ データキューID番号の最大値
    528521const ID _kernel_tmax_dtqid = (TMIN_DTQID + TNUM_DTQID - 1);$NL$
    529522$NL$
     
    531524$IF LENGTH(DTQ.ID_LIST)$
    532525        $FOREACH dtqid DTQ.ORDER_LIST$
    533 $               // dtqatr‚ª TA_NULL ‚Å‚È‚¢ê‡iE_RSATRj
     526$               // dtqatrが TA_NULL でない場合(E_RSATR)
    534527                $IF (DTQ.DTQATR[dtqid] != TA_NULL) $
    535528                        $ERROR DTQ.TEXT_LINE[dtqid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqatr", DTQ.DTQATR[dtqid], dtqid, "CRE_DTQ")$$END$
    536529                $END$
    537530
    538 $               // dtqmb‚ªNULL‚Å‚È‚¢ê‡iE_NOSPTj
     531$               // dtqmbがNULLでない場合(E_NOSPT)
    539532                $IF !EQ(DTQ.DTQMB[dtqid], "NULL")$
    540533                        $ERROR DTQ.TEXT_LINE[dtqid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqmb", DTQ.DTQMB[dtqid], dtqid, "CRE_DTQ")$$END$
    541534                $END$
    542535
    543 $               // dtqcnt‚ª0‚Å‚ ‚éê‡
     536$               // dtqcntが0である場合
    544537                $IF EQ(+DTQ.DTQCNT[dtqid], 0)$
    545538                        $ERROR DTQ.TEXT_LINE[dtqid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqmb", DTQ.DTQCNT[dtqid], dtqid, "CRE_DTQ")$$END$
     
    547540                               
    548541
    549 $               // ƒf[ƒ^ƒLƒ
    550 [—̈æ
     542$               // データキュー領域
    551543                $IF DTQ.DTQCNT[dtqid]$
    552544                        static intptr_t _kernel_dtqmb_$dtqid$[$DTQ.DTQCNT[dtqid]$];$NL$
     
    554546        $END$
    555547
    556 $       // ƒf[ƒ^ƒLƒ
    557 [‰Šú‰»ƒuƒƒbƒN‚̐¶¬(‘®«)
     548$       // データキュー初期化ブロックの生成(属性)
    558549        const ATR _kernel_dtqinib_atr[TNUM_DTQID] = {
    559550                $JOINEACH dtqid DTQ.ORDER_LIST ",\n"$
     
    563554        $NL$
    564555
    565 $       // ƒf[ƒ^ƒLƒ
    566 [‰Šú‰»ƒuƒƒbƒN‚̐¶¬(ƒTƒCƒY)
     556$       // データキュー初期化ブロックの生成(サイズ)
    567557        const uint8_t _kernel_dtqinib_size[TNUM_DTQID] = {
    568558                $JOINEACH dtqid DTQ.ORDER_LIST ",\n"$
     
    572562        $NL$
    573563
    574 $       // ƒf[ƒ^ƒLƒ
    575 [‰Šú‰»ƒuƒƒbƒN‚̐¶¬(ŠÇ——̈æ)
     564$       // データキュー初期化ブロックの生成(管理領域)
    576565        intptr_t * const _kernel_dtqinib_data[TNUM_DTQID] = {
    577566                $JOINEACH dtqid DTQ.ORDER_LIST ",\n"$
     
    581570        $NL$
    582571
    583 $       // ƒf[ƒ^ƒLƒ
    584 [ƒRƒ“ƒgƒ[ƒ‹ƒuƒƒbƒN
     572$       // データキューコントロールブロック
    585573        uint8_t _kernel_dtqcb_count[TNUM_DTQID];$NL$
    586574        uint8_t _kernel_dtqcb_head[TNUM_DTQID];$NL$
     
    598586
    599587$ ---------------------------------------------------------------------
    600 Š„ž‚ÝŠÇ—‹@”\
     588割込み管理機能
    601589$ ---------------------------------------------------------------------
    602590/*$NL$
     
    605593$NL$
    606594
    607 $ // INTNO_ATTISR_VALID ‚Ì—v‘f‚ªd•¡‚µ‚Ä‚¢‚È‚¢‚©‚Ç‚¤‚©‚̃`ƒFƒbƒN
     595$ // INTNO_ATTISR_VALID の要素が重複していないかどうかのチェック
    608596$i = 0$
    609597$FOREACH intno INTNO_ATTISR_VALID$
     
    618606$END$
    619607
    620 $ // INHNO_ATTISR_VALID ‚Ì—v‘f‚ªd•¡‚µ‚Ä‚¢‚È‚¢‚©‚Ç‚¤‚©‚̃`ƒFƒbƒN
     608$ // INHNO_ATTISR_VALID の要素が重複していないかどうかのチェック
    621609$i = 0$
    622610$FOREACH intno INHNO_ATTISR_VALID$
     
    632620
    633621
    634 $ // ATT_ISR ‚ÅŽg—p‰Â”\‚ÈŠ„ž‚ݔԍ†‚ƁC‚»‚ê‚ɑΉž‚·‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†‚̐”‚ª“¯‚¶‚©‚Ç‚¤‚©
    635 $ // ŠeƒŠƒXƒg‚Ì—v‘f‚͏d•¡‚µ‚Ä‚¢‚È‚¢‚±‚Æ‚ð‘O’ñ‚Æ‚µ‚Ä‚¢‚éD
     622$ // ATT_ISR で使用可能な割込み番号と,それに対応する割込みハンドラ番号の数が同じかどうか
     623$ // 各リストの要素は重複していないことを前提としている.
    636624$IF LENGTH(INTNO_ATTISR_VALID) != LENGTH(INHNO_ATTISR_VALID)$
    637625        $ERROR$length of `INTNO_ATTISR_VALID' is different from length of `INHNO_ATTISR_VALID'$END$
     
    639627
    640628
    641 $ // Š„ž‚ݔԍ†‚ÆŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚Ì•ÏŠ·ƒe[ƒuƒ‹‚̍쐬
    642 $ //  Š„ž‚ݔԍ†‚̃ŠƒXƒg‚ÆŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚̃ŠƒXƒg‚͑Ήž‚·‚é—v‘f‚ª“¯‚¶‡”Ô‚Å
    643 $ //  Œ»‚ê‚é‚悤‚É•À‚ׂç‚ê‚Ä‚¢‚邱‚Æ‚ð‘O’ñ‚Æ‚·‚éD
     629$ // 割込み番号と割込みハンドラ番号の変換テーブルの作成
     630$ //  割込み番号のリストと割込みハンドラ番号のリストは対応する要素が同じ順番で
     631$ //  現れるように並べられていることを前提とする.
    644632$i = 0$
    645633$FOREACH intno INTNO_ATTISR_VALID$
    646634
    647 $       // INTNO_ATTISR_VALID ‚ÉŠÜ‚Ü‚ê‚é’l‚Í INTNO_CFGINT_VALID ‚É‚àŠÜ‚Ü‚ê‚é‚ׂ«‚Å‚ ‚éD
    648 $       // INTNO_ATTISR_VALID ‚Í INTNO_CFGINT_VALID ‚Ì•”•ªW‡‚É‚È‚é‚Í‚¸D
     635$       // INTNO_ATTISR_VALID に含まれる値は INTNO_CFGINT_VALID にも含まれるべきである.
     636$       // INTNO_ATTISR_VALID は INTNO_CFGINT_VALID の部分集合になるはず.
    649637        $IF LENGTH(FIND(INTNO_CFGINT_VALID, intno)) == 0$
    650638                $ERROR$all elements of `INTNO_ATTISR_VALID' must be included in `INTNO_CFGINT_VALID'$END$
     
    658646
    659647
    660 $ // INTNO_CFGINT_VALID ‚Ì—v‘f‚ª INTNO_VALID ‚ÉŠÜ‚Ü‚ê‚é‚©‚Ç‚¤‚©‚̃`ƒFƒbƒN
    661 $ // INTNO_CFGINT_VALID ‚Í INTNO_VALID ‚Ì•”•ªW‡‚É‚È‚é‚Í‚¸D
     648$ // INTNO_CFGINT_VALID の要素が INTNO_VALID に含まれるかどうかのチェック
     649$ // INTNO_CFGINT_VALID は INTNO_VALID の部分集合になるはず.
    662650$FOREACH intno INTNO_CFGINT_VALID$
    663651        $IF LENGTH(FIND(INTNO_VALID, intno)) == 0$
     
    667655
    668656
    669 $ // INHNO_ATTISR_VALID ‚Ì—v‘f‚ª INHNO_VALID ‚ÉŠÜ‚Ü‚ê‚é‚©‚Ç‚¤‚©‚̃`ƒFƒbƒN
    670 $ // INHNO_ATTISR_VALID ‚Í INHNO_VALID ‚Ì•”•ªW‡‚É‚È‚é‚Í‚¸D
     657$ // INHNO_ATTISR_VALID の要素が INHNO_VALID に含まれるかどうかのチェック
     658$ // INHNO_ATTISR_VALID は INHNO_VALID の部分集合になるはず.
    671659$FOREACH inhno INHNO_ATTISR_VALID$
    672660        $IF LENGTH(FIND(INHNO_VALID, inhno)) == 0$
     
    676664
    677665
    678 $ // Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
     666$ // 割込み要求ラインに関するエラーチェック
    679667$i = 0$
    680668$FOREACH intno INT.ORDER_LIST$
    681 $       // intno‚ªCFG_INT‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
     669$       // intnoがCFG_INTに対する割込み番号として正しくない場合(E_PAR)
    682670        $IF !LENGTH(FIND(INTNO_CFGINT_VALID, INT.INTNO[intno]))$
    683671                $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", INT.INTNO[intno], "CFG_INT")$$END$
    684672        $END$
    685673
    686 $       // intno‚ªCFG_INT‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
     674$       // intnoがCFG_INTによって設定済みの場合(E_OBJ)
    687675        $j = 0$
    688676        $FOREACH intno2 INT.ORDER_LIST$
     
    693681        $END$
    694682
    695 $       // intatr‚ª TA_ENAINT, TA_EDGE, ‚Ü‚½‚Í‚»‚Ì‘¼ƒ^[ƒQƒbƒg‚Å—˜—p‰Â”\‚È‘®«‚Ì‚¢‚¸‚ê‚Å‚à‚È‚¢ê‡iE_RSATRj
     683$       // intatrが TA_ENAINT, TA_EDGE, またはその他ターゲットで利用可能な属性のいずれでもない場合(E_RSATR)
    696684        $IF (INT.INTATR[intno] & ~(TA_ENAINT|TA_EDGE|ALT(TARGET_INTATR,0))) != 0$
    697685                $ERROR INT.TEXT_LINE[intno]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "intatr", INT.INTATR[intno], "intno", INT.INTNO[intno], "CFG_INT")$$END$
    698686        $END$
    699687
    700 $       // intpri‚ªCFG_INT‚ɑ΂·‚銄ž‚Ý—Dæ“x‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
     688$       // intpriがCFG_INTに対する割込み優先度として正しくない場合(E_PAR)
    701689        $IF !LENGTH(FIND(INTPRI_CFGINT_VALID, INT.INTPRI[intno]))$
    702690                $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intpri", INT.INTPRI[intno], "CFG_INT")$$END$
    703691        $END$
    704692
    705 $       // ƒJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚Ý‚Æ‚µ‚ČŒ肳‚ê‚Ä‚¢‚銄ž‚݂ɁCTMIN_INTPRI ‚æ‚è‚à¬‚³‚¢’l‚ªŽw’肳‚ꂽê‡iE_OBJj
     693$       // カーネル管理の割込みとして固定されている割込みに,TMIN_INTPRI よりも小さい値が指定された場合(E_OBJ)
    706694        $IF LENGTH(FIND(INTNO_FIX_KERNEL, intno))$
    707695                $IF INT.INTPRI[intno] < TMIN_INTPRI$
     
    710698        $END$
    711699
    712 $       // ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚Æ‚µ‚ČŒ肳‚ê‚Ä‚¢‚銄ž‚݂ɁCTMIN_INTPRI ‚æ‚è‚à¬‚³‚¢’l‚ªŽw’肳‚ê‚È‚©‚Á‚½ê‡iE_OBJj
     700$       // カーネル管理外の割込みとして固定されている割込みに,TMIN_INTPRI よりも小さい値が指定されなかった場合(E_OBJ)
    713701        $IF LENGTH(FIND(INTNO_FIX_NONKERNEL, intno))$
    714702                $IF INT.INTPRI[intno] >= TMIN_INTPRI$
     
    720708
    721709
    722 $ Š„ž‚݃nƒ“ƒhƒ‰‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
     710$ 割込みハンドラに関するエラーチェック
    723711$i = 0$
    724712$FOREACH inhno INH.ORDER_LIST$
    725 $       // Š„ž‚݃nƒ“ƒhƒ‰”ԍ†(inhno)‚ª³‚µ‚­‚È‚¢ê‡iE_PARj
     713$       // 割込みハンドラ番号(inhno)が正しくない場合(E_PAR)
    726714        $IF !LENGTH(FIND(INHNO_DEFINH_VALID, INH.INHNO[inhno]))$
    727715                $ERROR INH.TEXT_LINE[inhno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "inhno", INH.INHNO[inhno], "DEF_INH")$$END$
    728716        $END$
    729717
    730 $       // “¯‚¶Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚ɑ΂·‚éDEF_INH‚ª•¡”‘¶Ý‚·‚éê‡iE_OBJj
     718$       // 同じ割込みハンドラ番号に対するDEF_INHが複数存在する場合(E_OBJ)
    731719        $j = 0$
    732720        $FOREACH inhno2 INH.ORDER_LIST$
     
    737725        $END$
    738726
    739 $       // Š„ž‚݃nƒ“ƒhƒ‰‘®«(inhatr) ‚ª TA_NULL, TA_NONKERNEL, ‹y‚Ñ‚»‚Ì‘¼ƒ^[ƒQƒbƒgˆË‘¶‚Å—˜—p‰Â”\‚È‘®«‚Ì‚¢‚¸‚ê‚Å‚à‚È‚¢iE_RSATRj
     727$       // 割込みハンドラ属性(inhatr) が TA_NULL, TA_NONKERNEL, 及びその他ターゲット依存で利用可能な属性のいずれでもない(E_RSATR)
    740728        $IF (INH.INHATR[inhno] & ~(TA_NONKERNEL|ALT(TARGET_INHATR,0))) != 0$
    741729                $ERROR INH.TEXT_LINE[inhno]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "inhatr", INH.INHATR[inhno], "inhno", INH.INHNO[inhno], "DEF_INH")$$END$
    742730        $END$
    743731
    744 $       // ƒJ[ƒlƒ‹ŠÇ—‚ɌŒ肳‚ê‚Ä‚¢‚銄ž‚݃nƒ“ƒhƒ‰‚ɁCTA_NONKERNEL ‘®«‚ªÝ’肳‚ê‚Ä‚¢‚éiE_RSATRj
     732$       // カーネル管理に固定されている割込みハンドラに,TA_NONKERNEL 属性が設定されている(E_RSATR)
    745733        $IF LENGTH(FIND(INHNO_FIX_KERNEL, inhno))$
    746734                $IF (INH.INHATR[inhno] & TA_NONKERNEL) != 0$
     
    749737        $END$
    750738
    751 $       // ƒJ[ƒlƒ‹ŠÇ—ŠO‚ɌŒ肳‚ê‚Ä‚¢‚銄ž‚݃nƒ“ƒhƒ‰‚ɁCTA_NONKERNEL ‘®«‚ªÝ’肳‚ê‚Ä‚¢‚È‚¢iE_RSATRj
     739$       // カーネル管理外に固定されている割込みハンドラに,TA_NONKERNEL 属性が設定されていない(E_RSATR)
    752740        $IF LENGTH(FIND(INHNO_FIX_NONKERNEL, inhno))$
    753741                $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
     
    757745
    758746
    759 $       // Š„ž‚ݔԍ†‚Æ1‘Î1‘Ήž‚·‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†(ATT_ISR‚ÅŽw’è‰Â”\‚ÈŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†)‚́CˆÈ‰º‚̃`ƒFƒbƒN‚às‚¤D
    760 $       // INHNO_ATTISR_VALID ‚ÉŠÜ‚Ü‚ê‚È‚¢Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚̓`ƒFƒbƒN‚³‚ê‚È‚¢‚±‚Æ‚É‚È‚éD
     747$       // 割込み番号と1対1対応する割込みハンドラ番号(ATT_ISRで指定可能な割込みハンドラ番号)は,以下のチェックも行う.
     748$       // INHNO_ATTISR_VALID に含まれない割込みハンドラ番号はチェックされないことになる.
    761749        $IF LENGTH(INTNO[INH.INHNO[inhno]]) > 0$
    762750                $intno = INTNO[INH.INHNO[inhno]]$
    763751
    764 $               // Š„ž‚݃nƒ“ƒhƒ‰“o˜^æ‚ÌŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ª‘®«Ý’肳‚ê‚Ä‚¢‚È‚¢(CFG_INT‚ª‚È‚¢)iE_OBJj
     752$               // 割込みハンドラ登録先の割込み要求ラインが属性設定されていない(CFG_INTがない)(E_OBJ)
    765753                $IF !LENGTH(INT.INTNO[intno])$
    766754                        $ERROR INH.TEXT_LINE[inhno]$E_OBJ: $FORMAT(_("%1% `%2%\' corresponding to %3% `%4%\' is not configured with %5%"), "intno", INT.INTNO[intno], "inhno", INH.INHNO[inhno], "CFG_INT")$$END$
    767755                $ELSE$
    768756                        $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
    769 $                               // inhatr‚ÉTA_NONKERNEL‚ªŽw’肳‚ê‚Ä‚¨‚炸Cinhno‚ɑΉž
    770 $                               // ‚·‚éintno‚ɑ΂µ‚ÄCFG_INT‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ª
    771 $                               // TMIN_INTPRI‚æ‚è‚à¬‚³‚¢ê‡iE_OBJj
     757$                               // inhatrにTA_NONKERNELが指定されておらず,inhnoに対応
     758$                               // するintnoに対してCFG_INTで設定された割込み優先度が
     759$                               // TMIN_INTPRIよりも小さい場合(E_OBJ)
    772760                                $IF INT.INTPRI[intno] < TMIN_INTPRI$
    773761                                        $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' configured for %3% `%4%\' is higher than %5%"), "intpri", INT.INTPRI[intno], "inhno", INH.INHNO[inhno], "TMIN_INTPRI")$$END$
    774762                                $END$
    775763                        $ELSE$
    776 $                               // inhatr‚ÉTA_NONKERNEL‚ªŽw’肳‚ê‚Ä‚¨‚èCinhno‚ɑΉž
    777 $                               // ‚·‚éintno‚ɑ΂µ‚ÄCFG_INT‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ª
    778 $                               // TMIN_INTPRIˆÈã‚Å‚ ‚éê‡iE_OBJj
     764$                               // inhatrにTA_NONKERNELが指定されており,inhnoに対応
     765$                               // するintnoに対してCFG_INTで設定された割込み優先度が
     766$                               // TMIN_INTPRI以上である場合(E_OBJ)
    779767                                $IF INT.INTPRI[intno] >= TMIN_INTPRI$
    780768                                        $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' configured for %3% `%4%\' is lower than or equal to %5%"), "intpri", INT.INTPRI[intno], "inhno", INH.INHNO[inhno], "TMIN_INTPRI")$$END$
     
    786774$END$
    787775
    788 $ Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“iISRj‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN‚ÆŠ„ž‚݃nƒ“ƒhƒ‰‚̐¶¬
     776$ 割込みサービスルーチン(ISR)に関するエラーチェックと割込みハンドラの生成
    789777$FOREACH order ISR.ORDER_LIST$
    790 $       // isratr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
     778$       // isratrが(TA_NULL)でない場合(E_RSATR)
    791779        $IF (ISR.ISRATR[order] & ~ALT(TARGET_ISRATR,0)) != 0$
    792780                $ERROR ISR.TEXT_LINE[order]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "isratr", ISR.ISRATR[order], "isr", ISR.ISR[order], "ATT_ISR")$$END$
    793781        $END$
    794782
    795 $       // intno‚ªATT_ISR‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
     783$       // intnoがATT_ISRに対する割込み番号として正しくない場合(E_PAR)
    796784        $IF !LENGTH(FIND(INTNO_ATTISR_VALID, ISR.INTNO[order]))$
    797785                $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", ISR.INTNO[order], "ATT_ISR")$$END$
    798786        $END$
    799787
    800 $       // (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)‚Å‚È‚¢ê‡iE_PARj
     788$       // (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)でない場合(E_PAR)
    801789        $IF !(TMIN_ISRPRI <= ISR.ISRPRI[order] && ISR.ISRPRI[order] <= TMAX_ISRPRI)$
    802790                $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "isrpri", ISR.ISRPRI[order], "ATT_ISR")$$END$
     
    808796        $inhno = INHNO[intno]$
    809797
    810 $       // Š„ž‚ݔԍ†intno‚ɑ΂µ‚Ä“o˜^‚³‚ꂽISR‚̃ŠƒXƒg‚̍쐬
     798$       // 割込み番号intnoに対して登録されたISRのリストの作成
    811799        $isr_order_list = {}$
    812800        $FOREACH order ISR.ORDER_LIST$
     
    817805        $END$
    818806
    819 $       // Š„ž‚ݔԍ†intno‚ɑ΂µ‚Ä“o˜^‚³‚ꂽISR‚ª‘¶Ý‚·‚éê‡
     807$       // 割込み番号intnoに対して登録されたISRが存在する場合
    820808        $IF LENGTH(isr_order_list) > 0$
    821 $               // intno‚ɑΉž‚·‚éinhno‚ɑ΂µ‚ÄDEF_INH‚ª‚ ‚éê‡iE_OBJj
     809$               // intnoに対応するinhnoに対してDEF_INHがある場合(E_OBJ)
    822810                $IF LENGTH(INH.INHNO[inhno])$
    823811                        $ERROR ISR.TEXT_LINE[order_for_error]$E_OBJ: $FORMAT(_("%1% `%2%\' in %3% is duplicated with %4% `%5%\'"), "intno", ISR.INTNO[order_for_error], "ATT_ISR", "inhno", INH.INHNO[inhno])$$END$
    824812                $END$
    825813
    826 $               // intno‚ɑ΂·‚éCFG_INT‚ª‚È‚¢ê‡iE_OBJj
     814$               // intnoに対するCFG_INTがない場合(E_OBJ)
    827815                $IF !LENGTH(INT.INTNO[intno])$
    828816                        $ERROR ISR.TEXT_LINE[order_for_error]$E_OBJ: $FORMAT(_("%1% `%2%\' is not configured with %3%"), "intno", ISR.INTNO[order_for_error], "CFG_INT")$$END$
    829817                $ELSE$
    830 $                       // intno‚ɑ΂µ‚ÄCFG_INT‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ªTMIN_INTPRI
    831 $                       // ‚æ‚è‚à¬‚³‚¢ê‡iE_OBJj
     818$                       // intnoに対してCFG_INTで設定された割込み優先度がTMIN_INTPRI
     819$                       // よりも小さい場合(E_OBJ)
    832820                        $IF INT.INTPRI[intno] < TMIN_INTPRI$
    833821                                $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' configured for %3% `%4%\' is higher than %5%"), "intpri", INT.INTPRI[intno], "intno", ISR.INTNO[order_for_error], "TMIN_INTPRI")$$END$
     
    841829                $INH.ORDER_LIST = APPEND(INH.ORDER_LIST, inhno)$
    842830
    843 $               // ISR—p‚ÌŠ„ž‚݃nƒ“ƒhƒ‰
     831$               // ISR用の割込みハンドラ
    844832                void$NL$
    845833                _kernel_inthdr_$intno$(void)$NL$
     
    853841                        $TAB$i_begin_int($intno$);$NL$
    854842                $END$
    855 $               // ISR‚ð—Dæ“x‡‚ɌĂяo‚·
     843$               // ISRを優先度順に呼び出す
    856844                $JOINEACH order SORT(isr_order_list, "ISR.ISRPRI") "\tif (i_sense_lock()) {\n\t\ti_unlock_cpu();\n\t}\n\ti_set_ipm(saved_ipm);\n"$
    857845                        $TAB$LOG_ISR_ENTER($intno$);$NL$
     
    866854
    867855$
    868 $ Š„ž‚ÝŠÇ—‹@”\‚Ì‚½‚ß‚Ì•W€“I‚ȏ‰Šú‰»î•ñ‚̐¶¬
    869 $
    870 $ Š„ž‚݃nƒ“ƒhƒ‰‚̏‰Šú‰»‚É•K—v‚ȏî•ñ
     856$ 割込み管理機能のための標準的な初期化情報の生成
     857$
     858$ 割込みハンドラの初期化に必要な情報
    871859$IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INHINIB_TABLE,0)$
    872860
    873 $ Š„ž‚݃nƒ“ƒhƒ‰”
     861$ 割込みハンドラ数
    874862#define TNUM_INHNO      $LENGTH(INH.ORDER_LIST)$$NL$
    875863const uint_t _kernel_tnum_inhno = TNUM_INHNO;$NL$
     
    879867$END$
    880868
    881 $ Š„ž‚݃nƒ“ƒhƒ‰‰Šú‰»ƒe[ƒuƒ‹
     869$ 割込みハンドラ初期化テーブル
    882870$IF LENGTH(INH.ORDER_LIST)$
    883871        const INHNO _kernel_inhinib_inhno[TNUM_INHNO] = {
     
    905893$END$
    906894
    907 $ Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚̏‰Šú‰»‚É•K—v‚ȏî•ñ
     895$ 割込み要求ラインの初期化に必要な情報
    908896$IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INTINIB_TABLE,0)$
    909897
    910 $ Š„ž‚Ý—v‹ƒ‰ƒCƒ“”
     898$ 割込み要求ライン数
    911899#define TNUM_INTNO      $LENGTH(INT.ORDER_LIST)$$NL$
    912900const uint_t _kernel_tnum_intno = TNUM_INTNO;$NL$
    913901$NL$
    914902
    915 $ Š„ž‚Ý—v‹ƒ‰ƒCƒ“‰Šú‰»ƒe[ƒuƒ‹
     903$ 割込み要求ライン初期化テーブル
    916904$IF LENGTH(INT.ORDER_LIST)$
    917905        const INTNO _kernel_intinib_intno[TNUM_INTNO] = {
     
    941929
    942930$ ---------------------------------------------------------------------
    943 $  CPU—áŠOƒnƒ“ƒhƒ‰
     931$  CPU例外ハンドラ
    944932$ ---------------------------------------------------------------------
    945933/*$NL$
     
    948936$NL$
    949937
    950 $ // EXCNO_DEFEXC_VALID ‚Ì—v‘f‚ª EXCNO_VALID ‚ÉŠÜ‚Ü‚ê‚é‚©‚Ç‚¤‚©‚̃`ƒFƒbƒN
    951 $ // EXCNO_DEFEXC_VALID ‚Í EXCNO_VALID ‚Ì•”•ªW‡‚É‚È‚é‚Í‚¸D
     938$ // EXCNO_DEFEXC_VALID の要素が EXCNO_VALID に含まれるかどうかのチェック
     939$ // EXCNO_DEFEXC_VALID は EXCNO_VALID の部分集合になるはず.
    952940$FOREACH excno EXCNO_DEFEXC_VALID$
    953941        $IF LENGTH(FIND(EXCNO_VALID, excno)) == 0$
     
    957945
    958946
    959 $ CPU—áŠOƒnƒ“ƒhƒ‰‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
     947$ CPU例外ハンドラに関するエラーチェック
    960948$i = 0$
    961949$FOREACH excno EXC.ORDER_LIST$
    962 $       // excno‚ªDEF_EXC‚ɑ΂·‚éCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
     950$       // excnoがDEF_EXCに対するCPU例外ハンドラ番号として正しくない場合(E_PAR)
    963951        $IF !LENGTH(FIND(EXCNO_DEFEXC_VALID, EXC.EXCNO[excno]))$
    964952                $ERROR EXC.TEXT_LINE[excno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$
    965953        $END$
    966954
    967 $       // excno‚ªDEF_EXC‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
     955$       // excnoがDEF_EXCによって設定済みの場合(E_OBJ)
    968956        $j = 0$
    969957        $FOREACH excno2 EXC.ORDER_LIST$
     
    974962        $END$
    975963
    976 $       // excatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
     964$       // excatrが(TA_NULL)でない場合(E_RSATR)
    977965        $IF (EXC.EXCATR[excno] & ~ALT(TARGET_EXCATR,0)) != 0$
    978966                $ERROR EXC.TEXT_LINE[excno]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "excatr", EXC.EXCATR[excno], "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$
     
    981969$END$
    982970
    983 $ CPU—áŠOƒnƒ“ƒhƒ‰‚Ì‚½‚ß‚Ì•W€“I‚ȏ‰Šú‰»î•ñ‚̐¶¬
     971$ CPU例外ハンドラのための標準的な初期化情報の生成
    984972$IF !ALT(OMIT_INITIALIZE_EXCEPTION,0)$
    985973
    986 $ CPU—áŠOƒnƒ“ƒhƒ‰”
     974$ CPU例外ハンドラ数
    987975#define TNUM_EXCNO      $LENGTH(EXC.ORDER_LIST)$$NL$
    988976const uint_t _kernel_tnum_excno = TNUM_EXCNO;$NL$
     
    992980$END$
    993981
    994 $ CPU—áŠOƒnƒ“ƒhƒ‰‰Šú‰»ƒe[ƒuƒ‹
     982$ CPU例外ハンドラ初期化テーブル
    995983$IF LENGTH(EXC.ORDER_LIST)$
    996984        const EXCNO _kernel_excinib_excno[TNUM_EXCNO] = {
     
    10211009
    10221010$ ---------------------------------------------------------------------
    1023 ŽüŠúƒnƒ“ƒhƒ‰
     1011周期ハンドラ
    10241012$ ---------------------------------------------------------------------
    10251013
     
    10291017$NL$
    10301018
    1031 $ ŽüŠúƒnƒ“ƒhƒ‰ID”ԍ†‚̍őå’l
     1019$ 周期ハンドラID番号の最大値
    10321020const ID _kernel_tmax_cycid = (TMIN_CYCID + TNUM_CYCID - 1);$NL$
    10331021
    1034 $ ŽüŠúƒnƒ“ƒhƒ‰‚̃^ƒCƒ€ƒCƒxƒ“ƒgIDƒIƒtƒZƒbƒg
    1035 $ ŽüŠúƒnƒ“ƒhƒ‰‚̃^ƒCƒ€ƒCƒxƒ“ƒgID‚Í0‚©‚çŠJŽn
     1022$ 周期ハンドラのタイムイベントIDオフセット
     1023$ 周期ハンドラのタイムイベントIDは0から開始
    10361024const uint_t _kernel_cycevtid_offset = 0;$NL$
    10371025$NL$
    10381026
    1039 $ ƒGƒ“ƒgƒŠ‚ª TMAX_MAXCYC(kernel.h) ŒÂ‚æ‚葽‚¢ê‡‚́CƒGƒ‰[‚Æ‚·‚é
     1027$ エントリが TMAX_MAXCYC(kernel.h) 個より多い場合は,エラーとする
    10401028$IF LENGTH(CYC.ORDER_LIST) > TMAX_MAXCYC$
    10411029        $ERROR$$FORMAT(_("The number of CRE_CYC must be equal to or less than %1%."), +VALUE("TMAX_MAXCYC", TMAX_MAXCYC))$$END$
     
    10431031
    10441032$IF LENGTH(CYC.ORDER_LIST)$
    1045 $       ŽüŠúƒnƒ“ƒhƒ‰‘®«
     1033$       周期ハンドラ属性
    10461034        $CYCACT = 0$
    10471035        $FOREACH cycid CYC.ORDER_LIST$
    1048 $               // ŽüŠúƒnƒ“ƒhƒ‰‘®«(cycatr) ‚ª TA_NULL, TA_STA ‚Ì‚¢‚¸‚ê‚Å‚à‚È‚¢iE_RSATRj
     1036$               // 周期ハンドラ属性(cycatr) が TA_NULL, TA_STA のいずれでもない(E_RSATR)
    10491037                $IF (CYC.CYCATR[cycid] & ~TA_STA) != 0$
    10501038                        $ERROR CYC.TEXT_LINE[cycid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cycatr", CYC.CYCATR[cycid], cycid, "CRE_CYC")$$END$
     
    10571045        const uint16_t _kernel_cycinib_cycact = $CYCACT$;$NL$
    10581046
    1059 $       ŽüŠúƒnƒ“ƒhƒ‰Šg’£î•ñ
     1047$       周期ハンドラ拡張情報
    10601048        const intptr_t _kernel_cycinib_exinf[TNUM_CYCID] = {
    10611049        $JOINEACH cycid CYC.ORDER_LIST ","$
     
    10641052        };$NL$
    10651053
    1066 $       ŽüŠúƒnƒ“ƒhƒ‰ƒAƒhƒŒƒX
     1054$       周期ハンドラアドレス
    10671055        const CYCHDR _kernel_cycinib_cychdr[TNUM_CYCID] = {
    10681056        $JOINEACH cycid CYC.ORDER_LIST ","$
     
    10711059        };$NL$
    10721060
    1073 $       ŽüŠúƒnƒ“ƒhƒ‰ŽüŠú
     1061$       周期ハンドラ周期
    10741062        const RELTIM _kernel_cycinib_cyctim[TNUM_CYCID] = {
    10751063        $JOINEACH cycid CYC.ORDER_LIST ","$
    1076 $               // cyctim ‚Í 0 ‚æ‚è‘å‚«‚­CTMAX_RELTIM ˆÈ‰º‚Å‚ ‚éD(E_PAR)
     1064$               // cyctim は 0 より大きく,TMAX_RELTIM 以下である.(E_PAR)
    10771065                $IF CYC.CYCTIM[cycid] <= 0 || TMAX_RELTIM < CYC.CYCTIM[cycid] $
    10781066                        $ERROR CYC.TEXT_LINE[cycid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cyctim", CYC.CYCTIM[cycid], cycid, "CRE_CYC")$$END$
     
    10831071        };$NL$
    10841072
    1085 $       ŽüŠúƒnƒ“ƒhƒ‰ˆÊ‘Š
     1073$       周期ハンドラ位相
    10861074        const RELTIM _kernel_cycinib_cycphs[TNUM_CYCID] = {
    10871075        $JOINEACH cycid CYC.ORDER_LIST ","$
    1088 $               // cycphs ‚Í 0 ˆÈãCTMAX_RELTIM ˆÈ‰º‚Å‚ ‚éD(E_PAR)
     1076$               // cycphs は 0 以上,TMAX_RELTIM 以下である.(E_PAR)
    10891077                $IF CYC.CYCPHS[cycid] < 0 || TMAX_RELTIM < CYC.CYCPHS[cycid] $
    10901078                        $ERROR CYC.TEXT_LINE[cycid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cycphs", CYC.CYCPHS[cycid], cycid, "CRE_CYC")$$END$
    10911079                $END$
    10921080
    1093 $               // ˆÊ‘Š‚ª0‚©‚C‘®«‚ª TA_STA ‚̏ꍇ‚ÍŒx
     1081$               // 位相が0かつ,属性が TA_STA の場合は警告
    10941082                $IF CYC.CYCPHS[cycid] == 0 && (CYC.CYCATR[cycid] & TA_STA) != 0$
    10951083                        $WARNING CYC.TEXT_LINE[cycid]$$FORMAT(_("%1% is not recommended when %2% is set to %3% in %4%"), "cycphs==0", "TA_STA", "cycatr", "CRE_CYC")$$END$
     
    11011089        $NL$
    11021090
    1103 $       ŽüŠúƒnƒ“ƒhƒ‰‚ÌŽŸ‰ñ‹N“®Žž
     1091$       周期ハンドラの次回起動時刻
    11041092EVTTIM _kernel_cyccb_evttim[TNUM_CYCID];$NL$
    11051093
     
    11131101$END$
    11141102
    1115 $       ŽüŠúƒnƒ“ƒhƒ‰“®ìó‘Ô
     1103$       周期ハンドラ動作状態
    11161104uint16_t _kernel_cyccb_cycact;$NL$
    11171105
     
    11201108
    11211109$ ---------------------------------------------------------------------
    1122 ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰
     1110アラームハンドラ
    11231111$ ---------------------------------------------------------------------
    11241112
     
    11281116$NL$
    11291117
    1130 $ ƒGƒ“ƒgƒŠ‚ª TMAX_MAXALM(kernel.h) ŒÂ‚æ‚葽‚¢ê‡‚́CƒGƒ‰[‚Æ‚·‚é
     1118$ エントリが TMAX_MAXALM(kernel.h) 個より多い場合は,エラーとする
    11311119$IF LENGTH(ALM.ORDER_LIST) > TMAX_MAXALM$
    11321120        $ERROR$$FORMAT(_("The number of CRE_ALM must be equal to or less than %1%."), +VALUE("TMAX_MAXALM",TMAX_MAXALM))$$END$
    11331121$END$
    11341122
    1135 $ ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̍őåID’l
     1123$ アラームハンドラの最大ID値
    11361124const ID _kernel_tmax_almid = (TMIN_ALMID + TNUM_ALMID - 1);$NL$
    11371125
    1138 $ ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̃^ƒCƒ€ƒCƒxƒ“ƒgIDƒIƒtƒZƒbƒg
     1126$ アラームハンドラのタイムイベントIDオフセット
    11391127const uint_t _kernel_almevtid_offset = $LENGTH(CYC.ORDER_LIST)$;$NL$
    11401128$NL$
    11411129
    11421130$FOREACH almid ALM.ORDER_LIST$
    1143 $       // almatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
     1131$       // almatrが(TA_NULL)でない場合(E_RSATR)
    11441132        $IF ALM.ALMATR[almid] != 0$
    11451133                $ERROR ALM.TEXT_LINE[almid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "almatr", ALM.ALMATR[almid], almid, "CRE_ALM")$$END$
     
    11481136
    11491137$IF LENGTH(ALM.ORDER_LIST)$
    1150 $       ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰æ“ª”Ô’n
     1138$       アラームハンドラ先頭番地
    11511139        const ALMHDR _kernel_alminib_almhdr[TNUM_ALMID] = {
    11521140        $JOINEACH almid ALM.ORDER_LIST ","$
     
    11551143        };$NL$
    11561144
    1157 $       ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰Šg’£î•ñ
     1145$       アラームハンドラ拡張情報
    11581146        const intptr_t _kernel_alminib_exinf[TNUM_ALMID] = {
    11591147        $JOINEACH almid ALM.ORDER_LIST ","$
     
    11681156$END$
    11691157
    1170 $ ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ó‘Ô
     1158$ アラームハンドラ状態
    11711159uint16_t _kernel_almcb_almact;$NL$
    11721160$NL$
     
    11741162
    11751163$ ---------------------------------------------------------------------
    1176 ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—
     1164タイムイベント管理
    11771165$ ---------------------------------------------------------------------
    11781166
     
    11871175$NL$
    11881176
    1189 $ ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚̃TƒCƒY
     1177$ タイムイベントブロックのサイズ
    11901178const uint_t _kernel_tnum_tmevt_queue = TNUM_TMEVT;$NL$$NL$
    11911179
    11921180$IF TNUM_TMEVT != 0$
    1193 $       ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒLƒ
    1194 [
     1181$       タイムイベントキュー
    11951182        QUEUE _kernel_tmevt_queue[TNUM_TMEVT+1];$NL$
    1196 $       ƒ^ƒCƒ€ƒCƒxƒ“ƒgŽžŠÔ
     1183$       タイムイベント時間
    11971184        EVTTIM _kernel_tmevt_time[TNUM_TMEVT];$NL$
    1198 $       ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚̃R[ƒ‹ƒoƒbƒN
     1185$       タイムイベントのコールバック
    11991186        CBACK _kernel_tmevt_callback[TNUM_TMEVT];$NL$
    1200 $       ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒR[ƒ‹ƒoƒbƒN‚̈ø”
     1187$       タイムイベントコールバックの引数
    12011188        uintptr_t _kernel_tmevt_arg[TNUM_TMEVT];$NL$
    12021189        $NL$$NL$
     
    12101197
    12111198$ ---------------------------------------------------------------------
    1212 ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pƒXƒ^ƒbƒN—̈æ
     1199非タスクコンテキスト用スタック領域
    12131200$ ---------------------------------------------------------------------
    12141201/*$NL$
     
    12161203$SPC$*/$NL$$NL$
    12171204
    1218 $ // •Ï”’è‹`
    1219 $ // ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pƒXƒ^ƒbƒN—̈æ‚̃TƒCƒY
     1205$ // 変数定義
     1206$ // 非タスクコンテキスト用スタック領域のサイズ
    12201207$interrupt_context_stksz = 0$
    12211208
    1222 $ // DEF_ICS ‚̃Gƒ“ƒgƒŠ‚ª‘¶Ý‚·‚é‚©?
     1209$ // DEF_ICS のエントリが存在するか?
    12231210$IF !LENGTH(ICS.ORDER_LIST)$
    1224 $       // ‚È‚¢ê‡DƒTƒCƒY‚ÍŠù’è’l (DEFAULT_ISTKSZ) ‚ðŽg‚¤
     1211$       // ない場合.サイズは既定値 (DEFAULT_ISTKSZ) を使う
    12251212        #define TOPPERS_ISTKSZ          DEFAULT_ISTKSZ$NL$$NL$
    12261213        $interrupt_context_stksz = DEFAULT_ISTKSZ$
    12271214$ELSE$
    1228 $       // DEF_ICS ‚̃Gƒ“ƒgƒŠ‚ª‚ ‚éê‡
    1229 
    1230 $
    1231 $       // ƒGƒ‰[ƒ`ƒFƒbƒN
    1232 $
    1233 $       // Ã“IAPIuDEF_ICSv‚ª•¡”‚ ‚éiE_OBJj
     1215$       // DEF_ICS のエントリがある場合
     1216
     1217$
     1218$       // エラーチェック
     1219$
     1220$       // 静的API「DEF_ICS」が複数ある(E_OBJ)
    12341221        $IF LENGTH(ICS.ORDER_LIST) > 1$
    12351222                $ERROR$E_OBJ: $FORMAT(_("too many %1%"), "DEF_ICS")$$END$
    12361223        $END$
    1237 $       // DEF_ICS ‚Å0‚ðŽw’肵‚½ê‡(E_PAR)
     1224$       // DEF_ICS で0を指定した場合(E_PAR)
    12381225        $IF ICS.ISTKSZ[1] == 0$
    12391226                $ERROR ICS.TEXT_LINE[1]$E_PAR: $FORMAT(_("%1% in %2% is 0"), "istksz", "DEF_ICS")$$END$
    12401227        $END$
    1241 $       // í‚É NULL ‚Å‚ ‚éD(E_PAR)
     1228$       // 常に NULL である.(E_PAR)
    12421229        $IF !EQ(ICS.ISTK[1], "NULL")$
    12431230                $ERROR ICS.TEXT_LINE[1]$E_PAR: $FORMAT(("'%1%' of %2% must be NULL."), "istk", "DEF_ICS")$$END$
     
    12511238
    12521239$ ---------------------------------------------------------------------
    1253 $  ‹¤—LƒXƒ^ƒbƒN—̈æ
    1254 $      SSP‚Å‚Í‚·‚ׂĂ̏ˆ—’PˆÊ‚̃Xƒ^ƒbƒN‚ð‹¤—L‚·‚邽‚߁C
    1255 $      ‚±‚±‚ŃVƒXƒeƒ€‘S‘̂̃Xƒ^ƒbƒN—̈æ‚ðŠm•Û‚·‚éD
    1256 $ ---------------------------------------------------------------------
    1257 
    1258 $
    1259 $ ‹¤—LƒXƒ^ƒbƒN‚̃Rƒ“ƒtƒBƒMƒ
    1260 ƒŒ[ƒVƒ‡ƒ“‚ɐ¬Œ÷‚µ‚½‚©‚Ç‚¤‚©
    1261 $
    1262 $ DEF_STK ˆ—’†‚ɃGƒ‰[‚ª”­¶‚µ‚½ê‡C‚±‚̕ϐ”‚ª0‚É‚È‚éD
    1263 $ DEF_STK ˆ—’†‚ɃGƒ‰[‚ª”­¶‚µ‚½‚©‚Ç‚¤‚©‚ð”»’f‚µ‚Ä
    1264 $ “Á’菈—‚ÌŽÀs‚ðƒuƒƒbƒN‚·‚邽‚ß‚ÉŽg—p‚·‚éD
     1240$  共有スタック領域
     1241$      SSPではすべての処理単位のスタックを共有するため,
     1242$      ここでシステム全体のスタック領域を確保する.
     1243$ ---------------------------------------------------------------------
     1244
     1245$
     1246$ 共有スタックのコンフィギュレーションに成功したかどうか
     1247$
     1248$ DEF_STK 処理中にエラーが発生した場合,この変数が0になる.
     1249$ DEF_STK 処理中にエラーが発生したかどうかを判断して
     1250$ 特定処理の実行をブロックするために使用する.
    12651251$
    12661252$configurated_defstk_successfully = 1$
     
    12711257$NL$
    12721258
    1273 $ // •Ï”’è‹`
    1274 $ // Š„‚è“–‚Ä‚ç‚ꂽ‹¤—LƒXƒ^ƒbƒN—̈æ‚̃TƒCƒY
     1259$ // 変数定義
     1260$ // 割り当てられた共有スタック領域のサイズ
    12751261$allocated_stack_size = 0$
    12761262
    1277 $ // DEF_STK ‚̃Gƒ“ƒgƒŠ‚ª‘¶Ý‚·‚é‚©?
     1263$ // DEF_STK のエントリが存在するか?
    12781264$IF !LENGTH(STK.ORDER_LIST)$
    1279 $       // (1) DEF_STK ‚̃Gƒ“ƒgƒŠ‚ª‚È‚¢ê‡
     1265$       // (1) DEF_STK のエントリがない場合
    12801266        static STK_T                    _kernel_stack[COUNT_STK_T(TOPPERS_TSTKSZ+TOPPERS_ISTKSZ)];$NL$
    12811267        #define TOPPERS_STK             _kernel_stack$NL$
     
    12851271        $allocated_stack_size = max_tsk_stksz + interrupt_context_stksz$
    12861272$ELSE$
    1287 $       // (2) DEF_STK ‚̃Gƒ“ƒgƒŠ‚ª‚ ‚éê‡
    1288 
    1289 $       // ƒGƒ‰[ƒ`ƒFƒbƒN
    1290 $       // Ã“IAPIuDEF_STKv‚ª•¡”‚ ‚éiE_OBJj
     1273$       // (2) DEF_STK のエントリがある場合
     1274
     1275$       // エラーチェック
     1276$       // 静的API「DEF_STK」が複数ある(E_OBJ)
    12911277        $IF LENGTH(STK.ORDER_LIST) > 1$
    12921278                $configurated_defstk_successfully = 0$
    12931279                $ERROR$E_OBJ: $FORMAT(_("too many %1%"), "DEF_STK")$$END$
    12941280        $END$
    1295 $       // DEF_STK ‚Ì stksz ‚Å 0 ‚ðŽw’肵‚½ê‡(E_PAR)
     1281$       // DEF_STK の stksz で 0 を指定した場合(E_PAR)
    12961282        $IF STK.STKSZ[1] == 0$
    12971283                $configurated_defstk_successfully = 0$
     
    13001286
    13011287        $IF EQ(STK.STK[1], "NULL")$
    1302 $               // stk ‚ª NULL ‚̏ꍇCƒXƒ^ƒbƒN—̈æ‚ðŽ©“®Š„•t‚¯
     1288$               // stk が NULL の場合,スタック領域を自動割付け
    13031289                static STK_T                    _kernel_stack[COUNT_STK_T($STK.STKSZ[1]$)];$NL$
    13041290                #define TOPPERS_STK             _kernel_stack$NL$
    13051291                #define TOPPERS_STKSZ           ROUND_STK_T($STK.STKSZ[1]$)$NL$
    13061292        $ELSE$
    1307 $               // stk ‚ª NULL ˆÈŠO‚̏ꍇiƒAƒvƒŠ‘¤‚ŃXƒ^ƒbƒN—̈æ‚ð—pˆÓ‚·‚éê‡j
    1308 
    1309 $               // stksz‚ªƒ^[ƒQƒbƒg–ˆ‚É’è‚Ü‚éƒAƒ‰ƒCƒƒ“ƒgƒTƒCƒY‚Ì”{”‚ɃAƒ‰ƒCƒƒ“ƒg‚³‚ê‚Ä‚¢‚È‚¢ê‡iE_PARj
     1293$               // stk が NULL 以外の場合(アプリ側でスタック領域を用意する場合)
     1294
     1295$               // stkszがターゲット毎に定まるアライメントサイズの倍数にアライメントされていない場合(E_PAR)
    13101296                $IF LENGTH(CHECK_STKSZ_ALIGN) && (STK.STKSZ[1] & (CHECK_STKSZ_ALIGN - 1))$
    13111297                        $configurated_defstk_successfully = 0$
     
    13211307$NL$
    13221308
    1323 $ ‹¤—LƒXƒ^ƒbƒN—p‚̃Xƒ^ƒbƒN—̈æ
     1309$ 共有スタック用のスタック領域
    13241310const SIZE              _kernel_stksz = TOPPERS_STKSZ;$NL$
    13251311STK_T *const    _kernel_stk = TOPPERS_STK;$NL$
     
    13311317
    13321318$
    1333 $ // —Dæ“xŠ„‚è“–‚Ä‚¨‚æ‚уXƒ^ƒbƒNÝ’è‚ÉŠÖ‚·‚錋‰Ê‚ð•W€o—Í‚Ö•\Ž¦
     1319$ // 優先度割り当ておよびスタック設定に関する結果を標準出力へ表示
    13341320$
    13351321$IF configurated_defepr_successfully == 1 && configurated_defstk_successfully == 1$
     
    13471333        $TAB$Specified interrupt stack size = $interrupt_context_stksz$(value=$FORMAT("%d",+interrupt_context_stksz)$)$NL$
    13481334        $TAB$Allocated total stack size = $allocated_stack_size$(value=$FORMAT("%d",+allocated_stack_size)$)$NL$
    1349 $       // ƒTƒCƒY‚̃`ƒFƒbƒNDƒXƒ^ƒbƒNƒTƒCƒY‚̐„’è’l‚ªŽÀÛ‚ÉŠ„“–‚Ä‚ç‚ꂽƒTƒCƒY‚æ‚è‘å‚«‚¢ê‡CŒx‚·‚éD
     1335$       // サイズのチェック.スタックサイズの推定値が実際に割当てられたサイズより大きい場合,警告する.
    13501336        $IF (max_tsk_stksz+interrupt_context_stksz) > allocated_stack_size$
    13511337                $TAB$!!!WARNING!!!: Estimated stack size is more than the allocated stack size.$NL$
     
    13551341$END$
    13561342$
    1357 $ // o—͐æ‚ðŒ³‚É–ß‚µ‚Ä‚¨‚­
     1343$ // 出力先を元に戻しておく
    13581344$
    13591345$FILE "kernel_cfg.c"$
     
    13611347
    13621348$ ---------------------------------------------------------------------
    1363 $  Šeƒ‚ƒWƒ
    1364 [ƒ‹‚̏‰Šú‰»ŠÖ”
     1349$  各モジュールの初期化関数
    13651350$ ---------------------------------------------------------------------
    13661351/*$NL$
     
    13931378
    13941379$ ---------------------------------------------------------------------
    1395 ‰Šú‰»ƒ‹[ƒ`ƒ“‚ÌŽÀsŠÖ”
     1380初期化ルーチンの実行関数
    13961381$ ---------------------------------------------------------------------
    13971382/*$NL$
     
    14031388{$NL$
    14041389$FOREACH order INI.ORDER_LIST$
    1405 $       // iniatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
     1390$       // iniatrが(TA_NULL)でない場合(E_RSATR)
    14061391        $IF INI.INIATR[order] != 0$
    14071392                $ERROR INI.TEXT_LINE[order]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "iniatr", INI.INIATR[order], "inirtn", INI.INIRTN[order], "ATT_INI")$$END$
     
    14131398
    14141399$ ---------------------------------------------------------------------
    1415 I—¹ˆ—ƒ‹[ƒ`ƒ“‚ÌŽÀsŠÖ”
     1400終了処理ルーチンの実行関数
    14161401$ ---------------------------------------------------------------------
    14171402/*$NL$
     
    14231408{$NL$
    14241409$FOREACH rorder TER.RORDER_LIST$
    1425 $       // teratr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
     1410$       // teratrが(TA_NULL)でない場合(E_RSATR)
    14261411        $IF TER.TERATR[rorder] != 0$
    14271412                $ERROR TER.TEXT_LINE[rorder]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "teratr", TER.TERATR[rorder], "terrtn", TER.TERRTN[rorder], "ATT_TER")$$END$
Note: See TracChangeset for help on using the changeset viewer.