Ignore:
Timestamp:
Jun 2, 2015, 3:39:53 PM (9 years ago)
Author:
nmir-saito
Message:

ファイルの mime-type 変更

Location:
ssp_qb_r5f100le_cs/trunk/doc
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • ssp_qb_r5f100le_cs/trunk/doc/configurator.txt

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11
    2                 TOPPERS/SSPƒJ[ƒlƒ‹
    3                 ƒRƒ“ƒtƒBƒMƒ
    4 ƒŒ[ƒ^Žd—l
    5 
    6                 ‘Ήžƒo[ƒWƒ‡ƒ“: Release 1.3.0
    7                 ÅIXV: 2014”N 5ŒŽ 19“ú
    8 
    9 ‚±‚̃hƒLƒ
    10 ƒƒ“ƒg‚́CTOPPERS/SSPƒJ[ƒlƒ‹‚̃Rƒ“ƒtƒBƒMƒ
    11 ƒŒ[ƒ^‚ª•W€“I‚ɐ¶
    12 ¬‚·‚ׂ«ƒtƒ@ƒCƒ‹‚Ì“à—e‚ɂ‚¢‚ĉðà‚µ‚½‚à‚Ì‚Å‚ ‚éDƒ^[ƒQƒbƒgˆË‘¶‚ɐ¶¬
    13 ‚·‚é“à—e‚ɂ‚¢‚ẮC‚±‚̃hƒLƒ
    14 ƒƒ“ƒg‚͈̔͊O‚Å‚ ‚éD
     2                TOPPERS/SSPカーネル
     3                コンフィギュレータ仕様
     4
     5                対応バージョン: Release 1.3.0
     6                最終更新: 2014年 5月 19日
     7
     8このドキュメントは,TOPPERS/SSPカーネルのコンフィギュレータが標準的に生
     9成すべきファイルの内容について解説したものである.ターゲット依存に生成
     10する内容については,このドキュメントの範囲外である.
    1511
    1612----------------------------------------------------------------------
     
    2420             Nagoya Municipal Industrial Research Institute, JAPAN
    2521
    26  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    27  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    28  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    29  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    30      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    31      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    32  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    33      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    34 ƒƒ“ƒgi—˜—p
    35      ŽÒƒ}ƒjƒ
    36 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    37      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    38  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    39      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    40      ‚ƁD
    41    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    42 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    43 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    44        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    45    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    46        •ñ‚·‚邱‚ƁD
    47  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    48      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    49      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    50      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    51      –Ɛӂ·‚邱‚ƁD
     22 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     23 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     24 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     25 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     26     権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     27     スコード中に含まれていること.
     28 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     29     用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     30     者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     31     の無保証規定を掲載すること.
     32 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     33     用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     34     と.
     35   (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     36       作権表示,この利用条件および下記の無保証規定を掲載すること.
     37   (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     38       報告すること.
     39 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     40     害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     41     また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     42     由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     43     免責すること.
    5244 
    53  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    54  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    55  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    56  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    57  ‚̐ӔC‚𕉂í‚È‚¢D
     45 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     46 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     47 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     48 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     49 の責任を負わない.
    5850 
    5951 $Id: configurator.txt 659 2015-05-19 09:45:26Z nmir-saito $
    6052----------------------------------------------------------------------
    6153
    62 ›–ÚŽŸ
    63 
    64 E¶¬‚·‚éƒtƒ@ƒCƒ‹‚ÌŽí—Þ
    65 EÃ“IAPIˆê——
    66 EƒJ[ƒlƒ‹\¬E‰Šú‰»ƒwƒbƒ_ƒtƒ@ƒCƒ‹ikernel_cfg.hj
    67         (1) ŒÅ’萶¬•”•ª
    68         (2) ƒIƒuƒWƒFƒNƒg”‚Ì’è‹`
    69         (3) ƒIƒuƒWƒFƒNƒg‚ÌID”ԍ†‚Ì’è‹`
    70 EƒJ[ƒlƒ‹\¬E‰Šú‰»ƒtƒ@ƒCƒ‹ikernel_cfg.cj
    71         (1) ŒÅ’萶¬•”•ª
    72         (2) ƒCƒ“ƒNƒ‹[ƒhƒfƒBƒŒƒNƒeƒBƒui#includej‚̏ˆ—
    73         (3) ƒIƒuƒWƒFƒNƒg‚ÌID”ԍ†‚ð•ÛŽ‚·‚é•Ï”‚Ì’è‹`
    74         (4) ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
    75         (5) ŠeƒJ[ƒlƒ‹ƒIƒuƒWƒFƒNƒg‚ÉŠÖ‚·‚é’è‹`
    76                 (5-1) ƒ^ƒXƒN‚ÉŠÖ‚·‚é’è‹`
    77                 (5-2) ƒCƒxƒ“ƒgƒtƒ‰ƒO‚ÉŠÖ‚·‚é’è‹`
    78                 (5-3) ƒf[ƒ^ƒLƒ
    79 [‚ÉŠÖ‚·‚é’è‹`
    80                 (5-4) ŽüŠúƒnƒ“ƒhƒ‰‚ÉŠÖ‚·‚é’è‹`
    81                 (5-5) ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ÉŠÖ‚·‚é’è‹`
    82         (6) Š„ž‚Ý‚ÉŠÖ‚·‚é’è‹`
    83                 (6-1) Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ÉŠÖ‚·‚é’è‹`
    84                 (6-2) Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ÉŠÖ‚·‚é’è‹`
    85                 (6-3) Š„ž‚݃nƒ“ƒhƒ‰‚ÉŠÖ‚·‚é’è‹`
    86         (7) CPU—áŠO‚ÉŠÖ‚·‚é’è‹`
    87         (8) ‹¤—LƒXƒ^ƒbƒN—̈æ‚ÉŠÖ‚·‚é’è‹`
    88         (9) ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—‚ÉŠÖ‚·‚é’è‹`
    89         (10)Šeƒ‚ƒWƒ
    90 [ƒ‹‚̏‰Šú‰»ŠÖ”‚Ì’è‹`
    91         (11)‰Šú‰»ƒ‹[ƒ`ƒ“‚ÌŽÀsŠÖ”‚Ì’è‹`
    92         (12)I—¹ˆ—ƒ‹[ƒ`ƒ“‚ÌŽÀsŠÖ”‚Ì’è‹`
    93 
    94 ›¶¬‚·‚éƒtƒ@ƒCƒ‹‚ÌŽí—Þ
    95 
    96 SSPƒJ[ƒlƒ‹‚̃Rƒ“ƒtƒBƒMƒ
    97 ƒŒ[ƒ^‚́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    98 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒC
    99 ƒ‹‚ðˆ—‚µ‚āCƒJ[ƒlƒ‹\¬E‰Šú‰»ƒtƒ@ƒCƒ‹ikernel_cfg.cj‚ƍ\¬E‰Šú
    100 ‰»ƒwƒbƒ_ƒtƒ@ƒCƒ‹ikernel_cfg.hj‚𐶐¬‚·‚éD‚Ü‚½CƒRƒ“ƒtƒBƒMƒ
    101 ƒŒ[ƒ^‚Ì
    102 ˆ—‚Ì“r’†‚ɁC•K—v‚È’†ŠÔƒtƒ@ƒCƒ‹‚𐶐¬‚·‚éD
    103 
    104 
    105 ›Ã“IAPIˆê——
    106 
    107 SSPƒJ[ƒlƒ‹‚̃Rƒ“ƒtƒBƒMƒ
    108 ƒŒ[ƒ^‚ªˆ—‚·‚éÃ“IAPI‚ÍŽŸ‚Ì’Ê‚èD
    109 
    110 (1) ƒ^ƒXƒNŠÇ—‹@”\
     54○目次
     55
     56・生成するファイルの種類
     57・静的API一覧
     58・カーネル構成・初期化ヘッダファイル(kernel_cfg.h)
     59        (1) 固定生成部分
     60        (2) オブジェクト数の定義
     61        (3) オブジェクトのID番号の定義
     62・カーネル構成・初期化ファイル(kernel_cfg.c)
     63        (1) 固定生成部分
     64        (2) インクルードディレクティブ(#include)の処理
     65        (3) オブジェクトのID番号を保持する変数の定義
     66        (4) トレースログマクロのデフォルト定義
     67        (5) 各カーネルオブジェクトに関する定義
     68                (5-1) タスクに関する定義
     69                (5-2) イベントフラグに関する定義
     70                (5-3) データキューに関する定義
     71                (5-4) 周期ハンドラに関する定義
     72                (5-5) アラームハンドラに関する定義
     73        (6) 割込みに関する定義
     74                (6-1) 割込み要求ラインに関する定義
     75                (6-2) 割込みサービスルーチンに関する定義
     76                (6-3) 割込みハンドラに関する定義
     77        (7) CPU例外に関する定義
     78        (8) 共有スタック領域に関する定義
     79        (9) タイムイベント管理に関する定義
     80        (10)各モジュールの初期化関数の定義
     81        (11)初期化ルーチンの実行関数の定義
     82        (12)終了処理ルーチンの実行関数の定義
     83
     84○生成するファイルの種類
     85
     86SSPカーネルのコンフィギュレータは,システムコンフィギュレーションファイ
     87ルを処理して,カーネル構成・初期化ファイル(kernel_cfg.c)と構成・初期
     88化ヘッダファイル(kernel_cfg.h)を生成する.また,コンフィギュレータの
     89処理の途中に,必要な中間ファイルを生成する.
     90
     91
     92○静的API一覧
     93
     94SSPカーネルのコンフィギュレータが処理する静的APIは次の通り.
     95
     96(1) タスク管理機能
    11197        CRE_TSK(ID tskid, { ATR tskatr, intptr_t exinf, TASK task,
    11298                                                PRI itskpri, SIZE stksz, STK_T *stk })
    11399        DEF_EPR (ID tskid, { PRI exepri })
    114100
    115 (2) “¯ŠúE’ʐM‹@”\
     101(2) 同期・通信機能
    116102        CRE_FLG(ID flgid, { ATR flgatr, FLGPTN iflgptn })
    117103        CRE_DTQ(ID dtqid, { ATR dtqatr, uint_t dtqcnt, void *dtqmb })
    118104
    119 ¦ dtqmb ‚ª NULL ‚Å‚È‚¢ê‡‚̓Tƒ|[ƒg‚µ‚È‚¢D
    120 
    121 (3) ŽžŠÔŠÇ—‹@”\
     105※ dtqmb が NULL でない場合はサポートしない.
     106
     107(3) 時間管理機能
    122108        CRE_CYC(ID cycid, { ATR cycatr, intptr_t exinf, CYCHDR cychdr,
    123109                                                RELTIM cyctim, RELTIM cycphs })
    124110        CRE_ALM(ID almid, { ATR almatr, intptr_t exinf, ALMHDR almhdr })
    125111
    126 (4) Š„ž‚ÝŠÇ—‹@”\
     112(4) 割込み管理機能
    127113        CFG_INT(INTNO intno, { ATR intatr, PRI intpri })
    128114        ATT_ISR({ ATR isratr, intptr_t exinf, INTNO intno, ISR isr, PRI isrpri })
    129115        DEF_INH(INHNO inhno, { ATR inhatr, INTHDR inthdr })
    130116
    131 (5) CPU—áŠOŠÇ—‹@”\
     117(5) CPU例外管理機能
    132118        DEF_EXC(EXCNO excno, { ATR excatr, EXCHDR exchdr })
    133119
    134 (6) ƒVƒXƒeƒ€\¬ŠÇ—‹@”\
     120(6) システム構成管理機能
    135121        DEF_ICS({ SIZE istksz, STK_T *istk })
    136122        DEF_STK({ SIZE stksz, STK_T *stk })
     
    138124        ATT_TER({ ATR teratr, intptr_t exinf, TERRTN terrtn })
    139125
    140 ‚±‚ê‚ç‚̐ÓIAPI‚̃pƒ‰ƒ[ƒ^‚Ì“àCIDŒ^‚̃pƒ‰ƒ[ƒ^‚̓IƒuƒWƒFƒNƒgŽ¯•Ê–¼C
    141 ƒ|ƒCƒ“ƒ^Œ^iTASKCCYCHDRCALMHDRCISRCINTHDRCEXCHDRCINIRTNCTERRTNC
    142 STK_T *j‚¨‚æ‚Ñ intptr_t Œ^‚̃pƒ‰ƒ[ƒ^‚͈ê”ʒ萔Ž®ƒpƒ‰ƒ[ƒ^‚Æ‚·‚éD
    143 ‚»‚Ì‘¼‚̃pƒ‰ƒ[ƒ^‚́C®”’萔Ž®ƒpƒ‰ƒ[ƒ^‚Æ‚·‚éD
    144 
    145 
    146 ›ƒJ[ƒlƒ‹\¬E‰Šú‰»ƒwƒbƒ_ƒtƒ@ƒCƒ‹ikernel_cfg.hj
    147 
    148 ƒJ[ƒlƒ‹\¬E‰Šú‰»ƒwƒbƒ_ƒtƒ@ƒCƒ‹ikernel_cfg.hj‚ɂ́CŽŸ‚Ì’è‹`‚𐶐¬‚·‚éD
    149 
    150 (1) ŒÅ’萶¬•”•ª
    151 
    152 kernel_cfg.h‚ª•¡”‰ñƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚é‚Ì‚ð–h‚®‚½‚ß‚Ì‹Lq‚𐶐¬‚·‚éD‹ï
    153 ‘Ì“I‚ɂ́Cƒtƒ@ƒCƒ‹‚̐擪‚ÉŽŸ‚̍s‚𐶐¬‚·‚éD
     126これらの静的APIのパラメータの内,ID型のパラメータはオブジェクト識別名,
     127ポインタ型(TASK,CYCHDR,ALMHDR,ISR,INTHDR,EXCHDR,INIRTN,TERRTN,
     128STK_T *)および intptr_t 型のパラメータは一般定数式パラメータとする.
     129その他のパラメータは,整数定数式パラメータとする.
     130
     131
     132○カーネル構成・初期化ヘッダファイル(kernel_cfg.h)
     133
     134カーネル構成・初期化ヘッダファイル(kernel_cfg.h)には,次の定義を生成する.
     135
     136(1) 固定生成部分
     137
     138kernel_cfg.hが複数回インクルードされるのを防ぐための記述を生成する.具
     139体的には,ファイルの先頭に次の行を生成する.
    154140
    155141#ifndef TOPPERS_KERNEL_CFG_H
    156142#define TOPPERS_KERNEL_CFG_H
    157143
    158 ‚Ü‚½Cƒtƒ@ƒCƒ‹‚Ì––”ö‚ÉŽŸ‚̍s‚𐶐¬‚·‚éD
     144また,ファイルの末尾に次の行を生成する.
    159145
    160146#endif  /* TOPPERS_KERNEL_CFG_H */
    161147
    162 (2) ƒIƒuƒWƒFƒNƒg”‚Ì’è‹`
    163 
    164 ƒJ[ƒlƒ‹‚ªƒTƒ|[ƒg‚·‚éƒIƒuƒWƒFƒNƒg‚̐”‚ðƒ}ƒNƒ’è‹`‚·‚éƒvƒŠƒvƒƒZƒbƒTƒfƒB
    165 ƒŒƒNƒeƒBƒui#definej‚𐶐¬‚·‚éD‹ï‘Ì“I‚ɂ́CŽŸ‚̂悤‚È‹Lq‚𐶐¬‚·‚éD
    166 
    167 #define TNUM_TSKID      <ƒ^ƒXƒN‚̐”>
    168 #define TNUM_FLGID      <ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̐”>
    169 #define TNUM_DTQID      <ƒf[ƒ^ƒLƒ
    170 [‚̐”>
    171 #define TNUM_CYCID      <ŽüŠúƒnƒ“ƒhƒ‰‚̐”>
    172 #define TNUM_ALMID      <ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̐”>
    173 
    174 (3) ƒIƒuƒWƒFƒNƒg‚ÌID”ԍ†‚Ì’è‹`
    175 
    176 ƒRƒ“ƒtƒBƒMƒ
    177 ƒŒ[ƒ^‚ªID”ԍ†‚ðŠ„‚è•t‚¯‚½ƒIƒuƒWƒFƒNƒg‚Ì–¼‘O‚ðCŠ„‚è•t‚¯‚½
    178 ID”ԍ†‚Ƀ}ƒNƒ’è‹`‚·‚éƒvƒŠƒvƒƒZƒbƒTƒfƒBƒŒƒNƒeƒBƒui#definej‚𐶐¬‚·‚éD
    179 —Ⴆ‚΁CŽŸ‚̂悤‚È‹Lq‚𐶐¬‚·‚éD
     148(2) オブジェクト数の定義
     149
     150カーネルがサポートするオブジェクトの数をマクロ定義するプリプロセッサディ
     151レクティブ(#define)を生成する.具体的には,次のような記述を生成する.
     152
     153#define TNUM_TSKID      <タスクの数>
     154#define TNUM_FLGID      <イベントフラグの数>
     155#define TNUM_DTQID      <データキューの数>
     156#define TNUM_CYCID      <周期ハンドラの数>
     157#define TNUM_ALMID      <アラームハンドラの数>
     158
     159(3) オブジェクトのID番号の定義
     160
     161コンフィギュレータがID番号を割り付けたオブジェクトの名前を,割り付けた
     162ID番号にマクロ定義するプリプロセッサディレクティブ(#define)を生成する.
     163例えば,次のような記述を生成する.
    180164
    181165#define TASK1   1
     
    184168
    185169**************************************************************************
    186 SSPƒJ[ƒlƒ‹‚̏ꍇCCRE_TSK ‚É‚¨‚¯‚é‹N“®Žž—Dæ“x‚̍‚‚¢i’l‚Æ‚µ‚Ă͏¬‚³‚¢j
    187 ‡”ԂɁC1‚©‚ç˜A‘±‚µ‚½’l‚ªID”ԍ†‚Æ‚µ‚Ä‚»‚ꂼ‚ê‚̃^ƒXƒN‚ÉŠ„‚è“–‚Ä‚ç‚ê‚éD
     170SSPカーネルの場合,CRE_TSK における起動時優先度の高い(値としては小さい)
     171順番に,1から連続した値がID番号としてそれぞれのタスクに割り当てられる.
    188172**************************************************************************
    189173
    190174
    191 ›ƒJ[ƒlƒ‹\¬E‰Šú‰»ƒtƒ@ƒCƒ‹ikernel_cfg.cj
    192 
    193 (1) ŒÅ’萶¬•”•ª
    194 
    195 kernel_cfg.c—p‚̃wƒbƒ_ƒtƒ@ƒCƒ‹‚ÆIDŽ©“®Š„•t‚¯Œ‹‰Êƒtƒ@ƒCƒ‹‚ðƒCƒ“ƒNƒ‹[ƒh
    196 ‚·‚éƒvƒŠƒvƒƒZƒbƒTƒfƒBƒŒƒNƒeƒBƒui#includej‚𐶐¬‚·‚éD‹ï‘Ì“I‚ɂ́CŽŸ
    197 ‚̍s‚𐶐¬‚·‚éD
     175○カーネル構成・初期化ファイル(kernel_cfg.c)
     176
     177(1) 固定生成部分
     178
     179kernel_cfg.c用のヘッダファイルとID自動割付け結果ファイルをインクルード
     180するプリプロセッサディレクティブ(#include)を生成する.具体的には,次
     181の行を生成する.
    198182
    199183#include "kernel/kernel_int.h"
    200184#include "kernel_cfg.h"
    201185
    202 (2) ƒCƒ“ƒNƒ‹[ƒhƒfƒBƒŒƒNƒeƒBƒui#includej‚̏ˆ—
    203 
    204 ƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    205 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ÉŠÜ‚Ü‚ê‚éCŒ¾ŒêƒvƒŠƒvƒƒZƒbƒT‚̃C
    206 ƒ“ƒNƒ‹[ƒhƒfƒBƒŒƒNƒeƒBƒui#includej‚Æ“¯ˆê‚̃fƒBƒŒƒNƒeƒBƒui#includej
    207 ‚𐶐¬‚·‚éD—Ⴆ‚΁C
     186(2) インクルードディレクティブ(#include)の処理
     187
     188システムコンフィギュレーションファイルに含まれるC言語プリプロセッサのイ
     189ンクルードディレクティブ(#include)と同一のディレクティブ(#include)
     190を生成する.例えば,
    208191
    209192#include "sample1.h"
    210193
    211 ‚Æ‚¢‚¤ƒCƒ“ƒNƒ‹[ƒhƒfƒBƒŒƒNƒeƒBƒu‚ɑ΂µ‚āC
     194というインクルードディレクティブに対して,
    212195
    213196#include "sample1.h"
    214197
    215 ‚Æ‚¢‚¤ƒfƒBƒŒƒNƒeƒBƒu‚𐶐¬‚·‚éD¶¬‚·‚éƒfƒBƒŒƒNƒeƒBƒu‚̏‡˜‚́CƒVƒXƒe
    216 ƒ€ƒRƒ“ƒtƒBƒMƒ
    217 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹’†‚ł̃Cƒ“ƒNƒ‹[ƒhƒfƒBƒŒƒNƒeƒBƒu‚̏‡˜
    218 ‚Ɉê’v‚³‚¹‚éD
    219 
    220 (3) ƒIƒuƒWƒFƒNƒg‚ÌID”ԍ†‚ð•ÛŽ‚·‚é•Ï”‚Ì’è‹`
    221 
    222 ƒRƒ“ƒtƒBƒMƒ
    223 ƒŒ[ƒ^‚ɑ΂·‚éƒIƒvƒVƒ‡ƒ“Žw’èi--external-idj‚É‚æ‚èCƒRƒ“ƒtƒB
    224 ƒMƒ
    225 ƒŒ[ƒ^‚͕ϐ”‚𐶐¬‚·‚éD•Ï”–¼‚Í ID ”ԍ†‚ðŠ„‚è•t‚¯‚½ƒIƒuƒWƒFƒNƒg–¼
    226 ‚Ì––”ö‚É "_id" ‚ð•t‰Á‚µ‚½–¼Ì‚Æ‚·‚éD•Ï”‚ÌŒ^‚́Cconst‘®«‚ð•t‰Á‚µ‚½IDŒ^
    227 ‚Æ‚µC•Ï”‚Ì’l‚ÍŠ„‚è•t‚¯‚½ID”ԍ†‚Æ‚·‚éD—Ⴆ‚΁CŽŸ‚̂悤‚È‹Lq‚𐶐¬‚·‚éD
     198というディレクティブを生成する.生成するディレクティブの順序は,システ
     199ムコンフィギュレーションファイル中でのインクルードディレクティブの順序
     200に一致させる.
     201
     202(3) オブジェクトのID番号を保持する変数の定義
     203
     204コンフィギュレータに対するオプション指定(--external-id)により,コンフィ
     205ギュレータは変数を生成する.変数名は ID 番号を割り付けたオブジェクト名
     206の末尾に "_id" を付加した名称とする.変数の型は,const属性を付加したID型
     207とし,変数の値は割り付けたID番号とする.例えば,次のような記述を生成する.
    228208
    229209const ID TASK1_id = 1;
     
    231211const ID ALM1_id = 1;
    232212
    233 (4) ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
    234 
    235 kernel_cfg.c‚Ì’†‚ÅŽg—p‚·‚éƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`‚𐶐¬‚·‚éD
    236 ‹ï‘Ì“I‚ɂ́CŽŸ‚̍s‚𐶐¬‚·‚éD
     213(4) トレースログマクロのデフォルト定義
     214
     215kernel_cfg.cの中で使用するトレースログマクロのデフォルト定義を生成する.
     216具体的には,次の行を生成する.
    237217
    238218#ifndef LOG_ISR_ENTER
     
    245225
    246226
    247 (5) ŠeƒJ[ƒlƒ‹ƒIƒuƒWƒFƒNƒg‚ÉŠÖ‚·‚é’è‹`
    248 
    249 ƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    250 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹’†‚ɁCƒIƒuƒWƒFƒNƒg‚𐶐¬‚·‚éÃ“I
    251 APIuCRE_XXXv‚ªŠÜ‚Ü‚ê‚éŠeƒJ[ƒlƒ‹ƒIƒuƒWƒFƒNƒg‚ÉŠÖ‚µ‚āCƒIƒuƒWƒFƒNƒg¶
    252 ¬‚Ì‚½‚ß‚Ì’è‹`‚𐶐¬‚·‚éD
    253 
    254 ƒRƒ“ƒtƒBƒMƒ
    255 ƒŒ[ƒ^‚́C“¯‚¶Ží—ނ̃IƒuƒWƒFƒNƒg‚𐶐¬‚·‚éÃ“IAPI‚ðW‚߁CŠe
    256 ƒIƒuƒWƒFƒNƒg‚ÉID”ԍ†‚ðŠ„‚è•t‚¯‚éDID”ԍ†‚́C‘¼‚̃IƒuƒWƒFƒNƒg‚ÌID”ԍ†‚Æ
    257 d•¡‚ª‚È‚­CID”ԍ†‚ª˜A‘±‚·‚é‚悤‚ÉŠ„‚è•t‚¯‚éD
    258 
    259 ƒRƒ“ƒtƒBƒMƒ
    260 ƒŒ[ƒ^‚́CƒIƒuƒWƒFƒNƒg‚ÉŠ„‚è•t‚¯‚éID”ԍ†‚ðŽw’è‚·‚邽‚ß‚Ì
    261 ƒIƒvƒVƒ‡ƒ“i--id-input-filej•À‚Ñ‚É ID”ԍ†‚ðŠ„‚è•t‚¯‚½ƒIƒuƒWƒFƒNƒg‚Ì–¼‘O
    262 ‚¨‚æ‚ÑŠ„‚è•t‚¯‚½ID”ԍ†‚Ì‘g‚ðƒtƒ@ƒCƒ‹‚ɏo—Í‚·‚邽‚߂̃IƒvƒVƒ‡ƒ“
    263 i--id-output-filej‚ðŽ‚ÂD‚µ‚©‚µCSSPƒJ[ƒlƒ‹‚Å‚Í‚±‚ê‚ç‚̃IƒvƒVƒ‡ƒ“‚Ì
    264 Žg—p‚ðŒ´‘¥‚Æ‚µ‚Ä ***‹ÖŽ~*** ‚·‚éi——R‚ÍŒãqjD
     227(5) 各カーネルオブジェクトに関する定義
     228
     229システムコンフィギュレーションファイル中に,オブジェクトを生成する静的
     230API「CRE_XXX」が含まれる各カーネルオブジェクトに関して,オブジェクト生
     231成のための定義を生成する.
     232
     233コンフィギュレータは,同じ種類のオブジェクトを生成する静的APIを集め,各
     234オブジェクトにID番号を割り付ける.ID番号は,他のオブジェクトのID番号と
     235重複がなく,ID番号が連続するように割り付ける.
     236
     237コンフィギュレータは,オブジェクトに割り付けるID番号を指定するための
     238オプション(--id-input-file)並びに ID番号を割り付けたオブジェクトの名前
     239および割り付けたID番号の組をファイルに出力するためのオプション
     240(--id-output-file)を持つ.しかし,SSPカーネルではこれらのオプションの
     241使用を原則として ***禁止*** する(理由は後述).
    265242
    266243**************************************************************************
    267 y——Rz
    268 SSPƒJ[ƒlƒ‹‚̏ꍇCuƒ^ƒXƒNID‚̏ꍇ‚ÉŒÀ‚èvƒRƒ“ƒtƒBƒMƒ
    269 ƒŒ[ƒ^‚Í
    270 --id-input-file ‚ÌŽw’è“à—e‚𖳎‹‚·‚éD‚»‚ê‚́CCRE_TSK‚ÅŽw’肵‚½‹N“®Žž—Dæ
    271 “x‚̐ݒè’l‚ª—Dæ‚³‚ê‚邽‚ß‚Å‚ ‚éD‚Ü‚½C--id-output-file ‚ÅŽw’肵‚½ƒtƒ@ƒC
    272 ƒ‹‚ւ̏o—Í“à—e‚à --id-input-file ‚ÅŽw’肵‚½ƒ^ƒXƒNID‚Ì’l‚ª‚»‚̂܂܏o—Í‚³‚ê
    273 ‚éD‚»‚̏o—Í“à—e‚Í kernel_cfg.h ‚֏o—Í‚³‚ê‚éƒ^ƒXƒNID‚Ì’l‚Æ‚Í–³ŠÖŒW‚Å‚ ‚éD
    274 ]‚Á‚āC¬—‚ª¶‚¶‚é‹°‚ꂪ‚ ‚邱‚Æ‚©‚çCSSPƒJ[ƒlƒ‹‚Å‚Í --id-input-file
    275 ‚¨‚æ‚Ñ --id-output-file ƒIƒvƒVƒ‡ƒ“‚ðŽw’肵‚Ä‚Í‚È‚ç‚È‚¢D
    276 
    277 –{—ˆ‚È‚ç‚΁C--kernel=ssp ‚¨‚æ‚Ñ --id-input-file ‚𓯎ž‚ÉŽw’肵‚½ê‡‚É
    278 ƒRƒ“ƒtƒBƒMƒ
    279 ƒŒ[ƒVƒ‡ƒ“ƒGƒ‰[‚Æ‚·‚ׂ«‚Æ‚±‚ë‚Å‚ ‚éD‚µ‚©‚µC‚±‚ê‚ç‚̃IƒvƒVƒ‡
    280 ƒ“‚ɑ΂·‚鏈—‚Í‘S‚ăRƒ“ƒtƒBƒMƒ
    281 ƒŒ[ƒ^“à•”‚ÅŽÀŽ{‚³‚êCƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹
    282 (kernel.tf)‚ł͏ˆ—‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢DŒ»Žž“_‚ł̓Rƒ“ƒtƒBƒMƒ
    283 ƒŒ[ƒ^‚̑Ήž
    284 ‚ɂ‚¢‚Ä–¢’è‚Å‚ ‚邽‚ߎb’è“I‚É‚±‚̂悤‚Ȉµ‚¢‚Æ‚µ‚Ä‚¢‚éD
     244【理由】
     245SSPカーネルの場合,「タスクIDの場合に限り」コンフィギュレータは
     246--id-input-file の指定内容を無視する.それは,CRE_TSKで指定した起動時優先
     247度の設定値が優先されるためである.また,--id-output-file で指定したファイ
     248ルへの出力内容も --id-input-file で指定したタスクIDの値がそのまま出力され
     249る.その出力内容は kernel_cfg.h へ出力されるタスクIDの値とは無関係である.
     250従って,混乱が生じる恐れがあることから,SSPカーネルでは --id-input-file
     251および --id-output-file オプションを指定してはならない.
     252
     253本来ならば,--kernel=ssp および --id-input-file を同時に指定した場合に
     254コンフィギュレーションエラーとすべきところである.しかし,これらのオプショ
     255ンに対する処理は全てコンフィギュレータ内部で実施され,テンプレートファイル
     256(kernel.tf)では処理することができない.現時点ではコンフィギュレータの対応
     257について未定であるため暫定的にこのような扱いとしている.
    285258**************************************************************************
    286259
    287 ŠeƒJ[ƒlƒ‹ƒIƒuƒWƒFƒNƒg‚ÉŠÖ‚·‚é’è‹`‚Ì•W€“I‚ȍ\¬‚́CŽŸ‚Ì’Ê‚è‚Å‚ ‚éDƒI
    288 ƒuƒWƒFƒNƒg‚É‚æ‚Á‚Ä—áŠO‚ª‚ ‚éê‡‚ɂ́CƒIƒuƒWƒFƒNƒg–ˆ‚̍€‚Åà–¾‚·‚éD
    289 
    290 (a) Å‘å‚̃IƒuƒWƒFƒNƒgID‚̕ϐ”‚Ì’è‹`
    291 
    292 Å‘å‚̃IƒuƒWƒFƒNƒgID‚ðŽ‚Â•Ï”‚Ì’è‹`‚𐶐¬‚·‚éD‹ï‘Ì“I‚ɂ́CƒIƒuƒWƒFƒN
    293 ƒg‚̏ȗª‹L†‚ðuXXX^xxxv‚Æ‚·‚é‚ƁCŽŸ‚̂悤‚ȍs‚𐶐¬‚·‚éD
     260各カーネルオブジェクトに関する定義の標準的な構成は,次の通りである.オ
     261ブジェクトによって例外がある場合には,オブジェクト毎の項で説明する.
     262
     263(a) 最大のオブジェクトIDの変数の定義
     264
     265最大のオブジェクトIDを持つ変数の定義を生成する.具体的には,オブジェク
     266トの省略記号を「XXX/xxx」とすると,次のような行を生成する.
    294267
    295268const ID _kernel_tmax_xxxid = (TMIN_XXXID + TNUM_XXXID - 1);
    296269
    297 (b) ƒIƒuƒWƒFƒNƒg‚É•K—v‚ȃƒ‚ƒŠ—̈æ‚Ì’è‹`
    298 
    299 ƒIƒuƒWƒFƒNƒg‚É‚æ‚Á‚ẮCƒIƒuƒWƒFƒNƒg‚É•K—v‚ȃƒ‚ƒŠ—̈æ‚Ì’è‹`‚𐶐¬‚·‚éD
    300 ‹ï‘Ì“I‚ɂ́CƒIƒuƒWƒFƒNƒg–ˆ‚̍€‚Åà–¾‚·‚éD
    301 
    302 (c) ƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»ƒuƒƒbƒN‚Ì’è‹`
    303 
    304 ƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»ƒuƒƒbƒN‚Ì’è‹`‚𐶐¬‚·‚éD‹ï‘Ì“I‚ɂ́C
    305         EƒIƒuƒWƒFƒNƒg‚̏ȗª‹L†‚ðuXXX^xxxv
    306         E‘®«€–ڂ̃f[ƒ^Œ^‚ðuYYYv
    307         E‘®«€–Ú‚Ì–¼Ì‚ðuzzzv
    308 ‚Æ‚·‚é‚ƁCƒIƒuƒWƒFƒNƒg‚Ì‘®«€–Ú–ˆ‚ÉŽŸ‚̂悤‚ȍs‚𐶐¬‚·‚éD
     270(b) オブジェクトに必要なメモリ領域の定義
     271
     272オブジェクトによっては,オブジェクトに必要なメモリ領域の定義を生成する.
     273具体的には,オブジェクト毎の項で説明する.
     274
     275(c) オブジェクトの初期化ブロックの定義
     276
     277オブジェクトの初期化ブロックの定義を生成する.具体的には,
     278        ・オブジェクトの省略記号を「XXX/xxx」
     279        ・属性項目のデータ型を「YYY」
     280        ・属性項目の名称を「zzz」
     281とすると,オブジェクトの属性項目毎に次のような行を生成する.
    309282
    310283const YYY _kernel_xxxinib_zzz[TNUM_XXXID] = {
    311         <ƒIƒuƒWƒFƒNƒgID‚ª1‚̃IƒuƒWƒFƒNƒg‚ɑ΂·‚é zzz ‚̏‰Šú‰»î•ñ>,
    312         <ƒIƒuƒWƒFƒNƒgID‚ª2‚̃IƒuƒWƒFƒNƒg‚ɑ΂·‚é zzz ‚̏‰Šú‰»î•ñ>,
    313                                 cc
    314         <ƒIƒuƒWƒFƒNƒgID‚ªTNUM_XXXID‚̃IƒuƒWƒFƒNƒg‚ɑ΂·‚é zzz ‚̏‰Šú‰»î•ñ>,
     284        <オブジェクトIDが1のオブジェクトに対する zzz の初期化情報>,
     285        <オブジェクトIDが2のオブジェクトに対する zzz の初期化情報>,
     286                                ……
     287        <オブジェクトIDがTNUM_XXXIDのオブジェクトに対する zzz の初期化情報>,
    315288};
    316289
    317 ƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»î•ñ‚ÌŒ`Ž®‚́CƒIƒuƒWƒFƒNƒg‚¨‚æ‚Ñ‘®«€–Ú–ˆ‚ɈقȂéD
    318 ‹ï‘Ì“I‚ɂ̓IƒuƒWƒFƒNƒg–ˆ‚̍€‚Åà–¾‚·‚éD
    319 
    320 (d) ƒIƒuƒWƒFƒNƒg‚̃Rƒ“ƒgƒ[ƒ‹ƒuƒƒbƒN‚Ì’è‹`
    321 
    322 ƒIƒuƒWƒFƒNƒg‚̃Rƒ“ƒgƒ[ƒ‹ƒuƒƒbƒN‚Ì’è‹`‚𐶐¬‚·‚éD‹ï‘Ì“I‚ɂ́C
    323         EƒIƒuƒWƒFƒNƒg‚̏ȗª‹L†‚ðuXXX^xxxv
    324         E‘®«€–ڂ̃f[ƒ^Œ^‚ðuYYYv
    325         E‘®«€–Ú‚Ì–¼Ì‚ðuzzzv
    326 ‚Æ‚·‚é‚ƁCƒIƒuƒWƒFƒNƒg‚Ì‘®«€–Ú–ˆ‚ÉŽŸ‚̂悤‚ȍs‚𐶐¬‚·‚éD
     290オブジェクトの初期化情報の形式は,オブジェクトおよび属性項目毎に異なる.
     291具体的にはオブジェクト毎の項で説明する.
     292
     293(d) オブジェクトのコントロールブロックの定義
     294
     295オブジェクトのコントロールブロックの定義を生成する.具体的には,
     296        ・オブジェクトの省略記号を「XXX/xxx」
     297        ・属性項目のデータ型を「YYY」
     298        ・属性項目の名称を「zzz」
     299とすると,オブジェクトの属性項目毎に次のような行を生成する.
    327300
    328301YYY _kernel_xxxcb_zzz[TNUM_XXXID];
    329302
    330 ƒIƒuƒWƒFƒNƒg‚̃Rƒ“ƒgƒ[ƒ‹ƒuƒƒbƒN‚ÌŒ`Ž®‚́CƒIƒuƒWƒFƒNƒg‚¨‚æ‚Ñ‘®«€–Ú–ˆ‚ɈقȂéD
    331 ‹ï‘Ì“I‚ɂ̓IƒuƒWƒFƒNƒg–ˆ‚̍€‚Åà–¾‚·‚éD
    332 
    333 
    334 (5-1) ƒ^ƒXƒN‚ÉŠÖ‚·‚é’è‹`
    335 
    336 SSPƒJ[ƒlƒ‹‚́Cƒ^ƒXƒN‚ªˆê‚‚à‚È‚¢ƒP[ƒX‚ɑΉž‚µ‚Ä‚¢‚È‚¢‚½‚߁Cƒ^ƒXƒN‚ÉŠÖ‚·‚é
    337 ’è‹`‚Í•K‚¸¶¬‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    338 
    339 ƒ^ƒXƒN‚̏ȗª‹L†‚́uTSKvutskv‚Å‚ ‚éD
    340 ‚½‚¾‚µCƒ^ƒXƒN‰Šú‰»ƒuƒƒbƒN‚̕ϐ”–¼‚Í _kernel_tinib_<‘®«€–Ú–¼> ‚Å‚ ‚éD
    341 iuTSK^tskv‚ɑウ‚āuT^tv‚ð—p‚¢‚Ä‚¢‚éjD
    342 ƒ^ƒXƒNƒRƒ“ƒgƒ[ƒ‹ƒuƒƒbƒN‚Í‘¶Ý‚µ‚È‚¢D
    343 
    344 ƒ^ƒXƒN‰Šú‰»ƒuƒƒbƒN‚ɂ́CuCRE_TSKvÃ“IAPI‚ÅŽw’肳‚ê‚éî•ñ‚ɉÁ‚¦‚āC
    345 uDEF_EPRvÃ“IAPI‚ÅŽw’肳‚ê‚éî•ñ‚ðŠÜ‚ß‚éD
    346 
    347 ˆÈ‰º‚ł́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    348 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ÉŽŸ‚̐ÓIAPI‚ªŠÜ‚Ü‚ê‚Ä
    349 ‚¢‚鎞‚ɐ¶¬‚·‚ׂ«î•ñ‚ɂ‚¢‚ďq‚ׂéD
     303オブジェクトのコントロールブロックの形式は,オブジェクトおよび属性項目毎に異なる.
     304具体的にはオブジェクト毎の項で説明する.
     305
     306
     307(5-1) タスクに関する定義
     308
     309SSPカーネルは,タスクが一つもないケースに対応していないため,タスクに関する
     310定義は必ず生成しなければならない.
     311
     312タスクの省略記号は「TSK」「tsk」である.
     313ただし,タスク初期化ブロックの変数名は _kernel_tinib_<属性項目名> である.
     314(「TSK/tsk」に代えて「T/t」を用いている).
     315タスクコントロールブロックは存在しない.
     316
     317タスク初期化ブロックには,「CRE_TSK」静的APIで指定される情報に加えて,
     318「DEF_EPR」静的APIで指定される情報を含める.
     319
     320以下では,システムコンフィギュレーションファイルに次の静的APIが含まれて
     321いる時に生成すべき情報について述べる.
    350322
    351323CRE_TSK(tskid, { tskatr, exinf, task, itskpri, stksz, stk });
    352324DEF_EPR(tskid, { exepri });
    353325
    354 ¦ ˆÈ~‚̏‰Šú‰»î•ñ‚Ì”z—ñ‚ÉŠi”[‚³‚ê‚鏇˜‚́C‹N“®Žž—Dæ“x‚̍‚‚¢‡‚Æ‚È‚éD
    355 ¦ ‚È‚º‚È‚çCƒ^ƒXƒNID ‚ª‹N“®Žž—Dæ“x‚̍‚‚¢‡”Ô‚ÅŠ„‚è“–‚Ä‚ç‚ê‚é‚©‚ç‚Å‚ ‚éD
    356 
    357 (5-1-1) ƒ^ƒXƒN‚̏‰Šú‰»î•ñiƒ^ƒXƒN‘®«j
    358 
    359 ƒ^ƒXƒN‘®«‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     326※ 以降の初期化情報の配列に格納される順序は,起動時優先度の高い順となる.
     327※ なぜなら,タスクID が起動時優先度の高い順番で割り当てられるからである.
     328
     329(5-1-1) タスクの初期化情報(タスク属性)
     330
     331タスク属性の初期化情報は,次の形式とする.
    360332
    361333const ATR _kernel_tinib_tskatr[TNUM_TSKID] = {(tskatr)};
    362334
    363 (5-1-2) ƒ^ƒXƒN‚̏‰Šú‰»î•ñiŠg’£î•ñj
    364 
    365 ƒ^ƒXƒN‚ÌŠg’£î•ñ‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     335(5-1-2) タスクの初期化情報(拡張情報)
     336
     337タスクの拡張情報の初期化情報は,次の形式とする.
    366338
    367339const intptr_t _kernel_tinib_exinf[TNUM_TSKID] = {(intptr_t)(exinf)};
    368340
    369 (5-1-3) ƒ^ƒXƒN‚̏‰Šú‰»î•ñi‹N“®”Ô’nj
    370 
    371 ƒ^ƒXƒN‚Ì‹N“®”Ô’n‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     341(5-1-3) タスクの初期化情報(起動番地)
     342
     343タスクの起動番地の初期化情報は,次の形式とする.
    372344
    373345const TASK _kernel_tinib_task[TNUM_TSKID] = {(task)};
    374346
    375 (5-1-4) ƒ^ƒXƒN‚̏‰Šú‰»î•ñiŽÀsŽž—Dæ“xj
    376 
    377 ƒ^ƒXƒN‚ÌŽÀsŽž—Dæ“x‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
    378 iŽÀÛ‚ɂ͉üs‚³‚ꂸC1s‚ŏo—Í‚³‚ê‚éj
     347(5-1-4) タスクの初期化情報(実行時優先度)
     348
     349タスクの実行時優先度の初期化情報は,次の形式とする.
     350(実際には改行されず,1行で出力される)
    379351
    380352const TASK _kernel_tinib_epriority[TNUM_TSKID] = {
    381         INT_PRIORITY(ŽÀsŽž—Dæ“x)};
    382 
    383 ŽÀsŽž—Dæ“x‚Ì’l‚Í CRE_TSK ‚Ì‹N“®Žž—Dæ“x(itskpri) ‚¨‚æ‚Ñ
    384 DEF_EPR ‚ÌŽÀsŽž—Dæ“x(exepri) ‚̐ݒè’l‚ðŒ³‚ÉŽZo‚³‚ê‚éD
    385 ŽZo•û–@‚ɂ‚¢‚Ä‚Í(5-1-6)‚ÉŒãq‚·‚éD
    386 
    387 (5-1-5) ready_primap ‚̏‰Šú’l‚Ì’è‹`
    388 
    389 ƒ^ƒXƒN‚ɑ΂µ‚ẮCƒrƒbƒgƒ}ƒbƒv ready_primap ‚̏‰Šú’lî•ñ‚𐶐¬‚·‚éD
    390 ƒ^ƒXƒN‘®«‚̐ݒè’l‚©‚çˆêˆÓ‚É’è‚߂邱‚Æ‚ª‚Å‚«‚é‚©‚ç‚Å‚ ‚éD
    391 
    392 ‹ï‘Ì“I‚ɂ͈ȉº‚̂悤‚È’è‹`‚𐶐¬‚·‚éD
    393 
    394 const uint_t _kernel_init_rdypri = <ready_primap‚̏‰Šú’l>;
    395 
    396 ‚±‚±‚Å ready_primap ‚̏‰Šú’l‚́Cƒ^ƒXƒN‘®«(tskatr)‚Ì’l‚©‚çŽZo‚³‚ê‚éD
    397 
    398 •Ï” _kernel_init_rdypri ‚ÌŠeƒrƒbƒg‚Í‚»‚ꂼ‚ê‚̃^ƒXƒN‚ɑΉž‚·‚éD
    399 ƒ^ƒXƒNID‚ª1‚̃^ƒXƒN‚͍ʼnºˆÊƒrƒbƒg(LSB)‚ɑΉž‚¯‚ç‚ê‚Ä‚¨‚èC
    400 ƒ^ƒXƒNID‚Ì’l‚ª1‚‘‚¦‚é–ˆ‚É1‚‚ˆÊ‚̃rƒbƒg‚ª‚»‚ꂼ‚ê‘Ήž‚¯‚ç‚ê‚éD
    401 —Ⴆ‚΁Cƒ^ƒXƒNID‚ª4‚̃^ƒXƒN‚͍ʼnºˆÊ‚©‚琔‚¦‚Ä4”Ԗڂ̃rƒbƒg‚ª‘Ήž‚·‚éD
    402 
    403 ƒ^ƒXƒN‘®«‚Æ‚µ‚Ä TA_ACT ‚ðŽ‚Âƒ^ƒXƒN‚́C‚»‚̃^ƒXƒN‚ɑΉž‚·‚éƒrƒbƒg‚ª
    404 1‚É‚È‚éDTA_ACT ‚ðŽ‚½‚È‚¢ê‡‚͑Ήž‚·‚éƒrƒbƒg‚ª0‚É‚È‚éD
    405 
    406 (5-1-6) —Dæ“x‚Ì•\Œ»
    407 
    408 —Dæ“x‚Ì’l‚́CƒRƒ“ƒtƒBƒMƒ
    409 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚Ì CRE_TSK ‹y‚Ñ DEF_EPR ‚É‚Ä
    410 Žw’肵‚½’l‚ðŒ³‚ÉCƒRƒ“ƒtƒBƒMƒ
    411 ƒŒ[ƒ^‚ªŽ©“®“I‚ÉŠ„‚è“–‚Ä‚éD
    412 ’l‚Ì”ÍˆÍ‚Í TMIN_TPRI(=1) ‚©‚ç TMAX_TPRI ‚͈̔͂̒l‚ð‚Æ‚éD
    413 
    414 ‚Ü‚½CƒRƒ“ƒtƒBƒMƒ
    415 ƒŒ[ƒ^‚É‚æ‚芄‚è“–‚Ä‚ç‚ê‚é—Dæ“x‚Ì’l‚Ƃ͕ʂɁCˆ—Œø—¦‚Ì
    416 ŠÏ“_‚©‚çƒvƒƒOƒ‰ƒ€’†‚ÅŽg—p‚³‚ê‚é—Dæ“x‚Ì“à•”•\Œ»‚ª‚ ‚éD
    417 “à•”•\Œ»‚Ì’l‚Í 0 ‚©‚ç (TMAX_TPRI-TMIN_TPRI) ‚͈̔͂̒l‚ð‚Æ‚éD
    418 —Dæ“x‚Æ‚»‚Ì“à•”•\Œ»‚Æ‚ÌŠÔ‚É‚Í (“à•”•\Œ» = —Dæ“x - TMIN_TPRI)‚ÌŠÖŒW‚ª‚ ‚éD
    419 
    420 ƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“x‚́CCRE_TSK ‚ÅŽw’肵‚½‹N“®Žž—Dæ“x‚̍‚‚¢‡‚Ɂi’l‚Æ‚µ‚Ä‚Í
    421 ¬‚³‚¢‡‚ɁjCTMIN_TPRI(=1) ‚©‚ç‚Í‚¶‚Ü‚é˜A‘±‚µ‚½’l‚ªŠ„‚è“–‚Ä‚ç‚ê‚éD
    422 ‚‚܂èCƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“x‚Ì’l‚̓^ƒXƒNID ‚É“™‚µ‚¢D
    423 
    424 ƒ^ƒXƒN‚ÌŽÀsŽž—Dæ“x‚Ì’l‚́CˆÈ‰º‚Ì•û–@‚ÅŽZo‚³‚ê‚éD
    425 
    426 i‚Pj“–ŠYƒ^ƒXƒN‚ɑ΂µ DEF_EPR ‚ÅŽÀsŽž—Dæ“x‚ð’è‹`‚µ‚È‚¢ê‡
    427 
    428 “–ŠYƒ^ƒXƒN‚ɑ΂µ DEF_EPR ‚ÅŽÀsŽž—Dæ“x‚ð’è‹`‚µ‚È‚¢ê‡C
    429 ‹N“®Žž—Dæ“x‚Ì’l‚Æ“¯‚¶’l‚ðŽÀsŽž—Dæ“x‚Ì’l‚Æ‚·‚éD
    430 
    431 i‚Qj“–ŠYƒ^ƒXƒN‚ɑ΂µ DEF_EPR ‚ÅŽÀsŽž—Dæ“x‚ð’è‹`‚·‚éê‡
    432 
    433 “–ŠYƒ^ƒXƒN‚ɑ΂µ DEF_EPR ‚ÅŽÀsŽž—Dæ“x‚ð’è‹`‚µ‚½ê‡C
    434 DEF_EPR ‚ÅŽw’肵‚½ŽÀsŽž—Dæ“x‚̐ݒè’lC•À‚тɁC‘S‚Ẵ^ƒXƒN‚ɑ΂·‚é
    435 ‹N“®Žž—Dæ“x‚̐ݒè’l‚¨‚æ‚уRƒ“ƒtƒBƒMƒ
    436 ƒŒ[ƒVƒ‡ƒ“Œ‹‰Ê‚Æ‚µ‚Ä“¾‚ç‚ê‚é‹N“®Žž—Dæ“x
    437 ‚Ì’l‚ð‚à‚ƂɁCŽÀsŽž—Dæ“x‚Ì’l‚ðŽZo‚·‚éD
    438 
    439 ŽÀsŽž—Dæ“x‚Ì’l‚ðŽZo‚·‚é•û–@‚́CuŽÀs’†‚̃^ƒXƒN‚ªƒvƒŠƒGƒ“ƒvƒg‚³‚ê‚é/‚³‚ê‚È‚¢v
    440 ‚Æ‚¢‚¤ŠÖŒW‚ª•Û‘¶‚³‚ê‚é”͈͂œKØ‚È’l‚ªŽZo‚³‚ê‚邱‚Æ‚ðˆÓ}‚µ‚½‚à‚̂ŁC
    441 ‹ï‘Ì“I‚Ȏ菇‚ÍŽŸ‚̂悤‚É‚È‚éD
    442 
    443 yŽÀsŽž—Dæ“x‚ÌŽZoŽè‡ ¦‚±‚ê‚ð‘S‚Ẵ^ƒXƒN‚ɑ΂µ‚čs‚¤z
    444 
    445 (1) ‚ ‚éƒ^ƒXƒN‚ð‘I‚Ô(T1‚Æ‚·‚é)
    446 (2) T1 ‚ÌŽÀsŽž—Dæ“x‚̐ݒè’l‚Æ“¯‚¶C‚Ü‚½‚́C‚»‚ê‚æ‚è‚à’á‚¢(’l‚Æ‚µ‚Ä‚Í
    447 ‘å‚«‚¢)‹N“®Žž—Dæ“x‚̐ݒè’l‚ðŽ‚Âƒ^ƒXƒN‚̏W‡‚Ì’†‚ŁC‹N“®Žž—Dæ“x‚Ì
    448 Ý’è’l‚ªÅ‚à‚‚¢i’l‚Æ‚µ‚Ä‚ÍÅ‚à¬‚³‚¢jƒ^ƒXƒN‚ð’T‚·(T2)
    449 (3) T2 ‚Ì‹N“®Žž—Dæ“x‚Ì’l‚ð T1 ‚ÌŽÀsŽž—Dæ“x‚Ì’l‚Æ‚·‚éD
    450 
    451 —áj
     353        INT_PRIORITY(実行時優先度)};
     354
     355実行時優先度の値は CRE_TSK の起動時優先度(itskpri) および
     356DEF_EPR の実行時優先度(exepri) の設定値を元に算出される.
     357算出方法については(5-1-6)に後述する.
     358
     359(5-1-5) ready_primap の初期値の定義
     360
     361タスクに対しては,ビットマップ ready_primap の初期値情報を生成する.
     362タスク属性の設定値から一意に定めることができるからである.
     363
     364具体的には以下のような定義を生成する.
     365
     366const uint_t _kernel_init_rdypri = <ready_primapの初期値>;
     367
     368ここで ready_primap の初期値は,タスク属性(tskatr)の値から算出される.
     369
     370変数 _kernel_init_rdypri の各ビットはそれぞれのタスクに対応する.
     371タスクIDが1のタスクは最下位ビット(LSB)に対応づけられており,
     372タスクIDの値が1つ増える毎に1つ高位のビットがそれぞれ対応づけられる.
     373例えば,タスクIDが4のタスクは最下位から数えて4番目のビットが対応する.
     374
     375タスク属性として TA_ACT を持つタスクは,そのタスクに対応するビットが
     3761になる.TA_ACT を持たない場合は対応するビットが0になる.
     377
     378(5-1-6) 優先度の表現
     379
     380優先度の値は,コンフィギュレーションファイルの CRE_TSK 及び DEF_EPR にて
     381指定した値を元に,コンフィギュレータが自動的に割り当てる.
     382値の範囲は TMIN_TPRI(=1) から TMAX_TPRI の範囲の値をとる.
     383
     384また,コンフィギュレータにより割り当てられる優先度の値とは別に,処理効率の
     385観点からプログラム中で使用される優先度の内部表現がある.
     386内部表現の値は 0 から (TMAX_TPRI-TMIN_TPRI) の範囲の値をとる.
     387優先度とその内部表現との間には (内部表現 = 優先度 - TMIN_TPRI)の関係がある.
     388
     389タスクの起動時優先度は,CRE_TSK で指定した起動時優先度の高い順に(値としては
     390小さい順に),TMIN_TPRI(=1) からはじまる連続した値が割り当てられる.
     391つまり,タスクの起動時優先度の値はタスクID に等しい.
     392
     393タスクの実行時優先度の値は,以下の方法で算出される.
     394
     395(1)当該タスクに対し DEF_EPR で実行時優先度を定義しない場合
     396
     397当該タスクに対し DEF_EPR で実行時優先度を定義しない場合,
     398起動時優先度の値と同じ値を実行時優先度の値とする.
     399
     400(2)当該タスクに対し DEF_EPR で実行時優先度を定義する場合
     401
     402当該タスクに対し DEF_EPR で実行時優先度を定義した場合,
     403DEF_EPR で指定した実行時優先度の設定値,並びに,全てのタスクに対する
     404起動時優先度の設定値およびコンフィギュレーション結果として得られる起動時優先度
     405の値をもとに,実行時優先度の値を算出する.
     406
     407実行時優先度の値を算出する方法は,「実行中のタスクがプリエンプトされる/されない」
     408という関係が保存される範囲で適切な値が算出されることを意図したもので,
     409具体的な手順は次のようになる.
     410
     411【実行時優先度の算出手順 ※これを全てのタスクに対して行う】
     412
     413(1) あるタスクを選ぶ(T1とする)
     414(2) T1 の実行時優先度の設定値と同じ,または,それよりも低い(値としては
     415大きい)起動時優先度の設定値を持つタスクの集合の中で,起動時優先度の
     416設定値が最も高い(値としては最も小さい)タスクを探す(T2)
     417(3) T2 の起動時優先度の値を T1 の実行時優先度の値とする.
     418
     419例)
    452420CRE_TSK(TASK1, { TA_NULL, 1, task1, 2, 10, NULL });
    453421CRE_TSK(TASK2, { TA_NULL, 3, task2, 6, 30, NULL });
     
    460428DEF_IPR(TASK4, { 4 } );
    461429
    462 Œ‹‰Ê‚ÍŽŸ‚̂悤‚É‚È‚éF
    463 
    464 y‹N“®Žž—Dæ“xz
    465         TASK1FÝ’è’l=2 ¨ (Š„‚è“–‚Ä‚ç‚ê‚é)‹N“®Žž—Dæ“x=1
    466         TASK2FÝ’è’l=6 ¨ (Š„‚è“–‚Ä‚ç‚ê‚é)‹N“®Žž—Dæ“x=3
    467         TASK3FÝ’è’l=4 ¨ (Š„‚è“–‚Ä‚ç‚ê‚é)‹N“®Žž—Dæ“x=2
    468         TASK4FÝ’è’l=8 ¨ (Š„‚è“–‚Ä‚ç‚ê‚é)‹N“®Žž—Dæ“x=4
    469 
    470         ‹N“®Žž—Dæ“x‚̍‚‚¢‡‚É•À‚Ñ‘Ö‚¦‚é‚Æ
    471         TASK1FÝ’è’l=2 ¨ ‹N“®Žž—Dæ“x=1
    472         TASK3FÝ’è’l=4 ¨ ‹N“®Žž—Dæ“x=2
    473         TASK2FÝ’è’l=6 ¨ ‹N“®Žž—Dæ“x=3
    474         TASK4FÝ’è’l=8 ¨ ‹N“®Žž—Dæ“x=4
    475 
    476 yŽÀsŽž—Dæ“xz
    477         TASK1FÝ’è’l=1
    478         TASK3FÝ’è’l=3
    479         TASK2FÝ’è’l=5
    480         TASK4FÝ’è’l=4
    481 
    482 E‚½‚ß‚µ‚É TASK4 ‚̏ꍇ‚ÌŽÀsŽž—Dæ“x‚Ì’l‚ðŽZo‚µ‚Ä‚Ý‚éD
    483         ETASK4 ‚ÌŽÀsŽž—Dæ“x‚̐ݒè’l(4)‚Æ“¯‚¶‚Ü‚½‚Í‚»‚ê‚æ‚è‚à’á‚¢‹N“®Žž
    484         @—Dæ“x‚̐ݒè’l‚ð‚à‚ƒ^ƒXƒN‚̏W‡ = {TASK2,TASK3,TASK4}
    485         Eã‹Lƒ^ƒXƒN‚̏W‡‚Ì’†‚ōłà‹N“®Žž—Dæ“x‚̐ݒè’l‚ª‚‚¢‚à‚Ì = TASK3
    486         Eã‹Lƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“x‚Ì’l = 2
    487         E]‚Á‚ÄTASK4 ‚ÌŽÀsŽž—Dæ“x‚Ì’l‚Í 2
    488 
    489 E“¯—l‚ɁCTASK3 ‚̏ꍇ‚́D
    490         ETASK3 ‚ÌŽÀsŽž—Dæ“x‚̐ݒè’l(3)‚Æ“¯‚¶‚Ü‚½‚Í‚»‚ê‚æ‚è‚à’á‚¢‹N“®Žž
    491         @—Dæ“x‚̐ݒè’l‚ð‚à‚ƒ^ƒXƒN‚̏W‡ = {TASK2,TASK3,TASK4}
    492         Eã‹Lƒ^ƒXƒN‚̏W‡‚Ì’†‚ōłà‹N“®Žž—Dæ“x‚̐ݒè’l‚ª‚‚¢‚à‚Ì = TASK3
    493         Eã‹Lƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“x‚Ì’l = 2
    494         E]‚Á‚ÄTASK3 ‚ÌŽÀsŽž—Dæ“x‚Ì’l‚Í 2
    495 
    496 ŽÀsŽž—Dæ“x‚ɑ΂·‚鏉Šú‰»î•ñ‚Ì kernel_cfg.c ‚Ö‚ÌŒ‹‰Ê‚ÍŽŸ‚̂悤‚É‚È‚éD
    497 ŽÀÛ‚Í1s‚Å•\Œ»‚³‚ê‚éD‚Ü‚½C”z—ñ‚Ö‚ÌŠi”[‡˜‚Í TASK1, TASK3, TASK2,
    498 TASK4 ‚̏‡˜‚ÅŠi”[‚³‚ê‚邱‚Æ‚É’ˆÓ‚·‚éD
    499 ‚¿‚Ȃ݂ɁCINT_PRIORITY ƒ}ƒNƒ‚Í—Dæ“x‚Ì’l‚ð‚»‚Ì“à•”•\Œ»‚É•ÏŠ·‚·‚éƒ}ƒNƒ‚Å
    500 ‚ ‚èCtask.h ‚Å’è‹`‚³‚ê‚Ä‚¢‚éD
     430結果は次のようになる:
     431
     432【起動時優先度】
     433        TASK1:設定値=2 → (割り当てられる)起動時優先度=1
     434        TASK2:設定値=6 → (割り当てられる)起動時優先度=3
     435        TASK3:設定値=4 → (割り当てられる)起動時優先度=2
     436        TASK4:設定値=8 → (割り当てられる)起動時優先度=4
     437
     438        起動時優先度の高い順に並び替えると
     439        TASK1:設定値=2 → 起動時優先度=1
     440        TASK3:設定値=4 → 起動時優先度=2
     441        TASK2:設定値=6 → 起動時優先度=3
     442        TASK4:設定値=8 → 起動時優先度=4
     443
     444【実行時優先度】
     445        TASK1:設定値=1
     446        TASK3:設定値=3
     447        TASK2:設定値=5
     448        TASK4:設定値=4
     449
     450・ためしに TASK4 の場合の実行時優先度の値を算出してみる.
     451        ・TASK4 の実行時優先度の設定値(4)と同じまたはそれよりも低い起動時
     452         優先度の設定値をもつタスクの集合 = {TASK2,TASK3,TASK4}
     453        ・上記タスクの集合の中で最も起動時優先度の設定値が高いもの = TASK3
     454        ・上記タスクの起動時優先度の値 = 2
     455        ・従ってTASK4 の実行時優先度の値は 2
     456
     457・同様に,TASK3 の場合は.
     458        ・TASK3 の実行時優先度の設定値(3)と同じまたはそれよりも低い起動時
     459         優先度の設定値をもつタスクの集合 = {TASK2,TASK3,TASK4}
     460        ・上記タスクの集合の中で最も起動時優先度の設定値が高いもの = TASK3
     461        ・上記タスクの起動時優先度の値 = 2
     462        ・従ってTASK3 の実行時優先度の値は 2
     463
     464実行時優先度に対する初期化情報の kernel_cfg.c への結果は次のようになる.
     465実際は1行で表現される.また,配列への格納順序は TASK1, TASK3, TASK2,
     466TASK4 の順序で格納されることに注意する.
     467ちなみに,INT_PRIORITY マクロは優先度の値をその内部表現に変換するマクロで
     468あり,task.h で定義されている.
    501469
    502470const uint_t _kernel_tinib_epriority[TNUM_TSKID] =
    503471         {INT_PRIORITY(1),INT_PRIORITY(2),INT_PRIORITY(3),INT_PRIORITY(2)};
    504472
    505 (5-1-7) ƒXƒ^ƒbƒN—̈æÝ’è
    506 
    507 SSPƒJ[ƒlƒ‹‚ł́Cƒ^ƒXƒN‚ðŠÜ‚Þ‘S‚Ă̏ˆ—’PˆÊ‚ª“¯‚¶ƒXƒ^ƒbƒN—̈æ‚ð‹¤—p‚·‚é
    508 ‚悤‚ɐ݌v‚³‚ê‚Ä‚¢‚éD
    509 ‹¤—p‚³‚ê‚éƒXƒ^ƒbƒN—̈æ‚Ì‚±‚Æ‚ðu‹¤—LƒXƒ^ƒbƒN—̈æv‚ƌĂԁD
    510 ‹¤—LƒXƒ^ƒbƒN—̈æ‚Ì’è‹`‚Í DEF_STK ‚ð—p‚¢‚čs‚¤DÚ‚µ‚­‚Í(9)‚ðŽQÆ‚Ì‚±‚ƁD
    511 
    512 ƒRƒ“ƒtƒBƒMƒ
    513 ƒŒ[ƒ^‚Í‹¤—LƒXƒ^ƒbƒN—̈æ‚Ì‚ÝŠm•Û‚µCƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒgê—p‚Ì
    514 ƒXƒ^ƒbƒN—̈æ‚ÍŠm•Û‚µ‚È‚¢D
    515 ‚±‚Ì‚½‚߁CCRE_TSK ‚ł͐擪”Ô’n stk ‚Æ‚µ‚Ä NULL ‚̂ݎ󂯕t‚¯‚éD
    516 NULL ˆÈŠO‚Ì’l‚ðŽw’肵‚½ê‡CƒGƒ‰[‚Æ‚È‚éD
    517 
    518 ‚Ü‚½CCRE_TSK ‚ÅŽw’è‚·‚éƒ^ƒXƒN‚̃Xƒ^ƒbƒNƒTƒCƒY stksz ‚Ì’l‚́C
    519 DEF_STK ‚ð—p‚¢‚È‚¢ê‡‚É‚Í‹¤—LƒXƒ^ƒbƒN—̈æ‚̃TƒCƒY‚ðŒˆ’è‚·‚邽‚ß‚É—p‚¢‚ç‚êC
    520 DEF_STK ‚ð—p‚¢‚éê‡‚É‚Í DEF_STK ‚ÅŽw’肵‚½‹¤—LƒXƒ^ƒbƒN—̈æ‚̃TƒCƒY‚ð
    521 ƒ`ƒFƒbƒN‚·‚邽‚ß‚É—p‚¢‚ç‚ê‚éD¦ (9-4) ‚àŽQÆ‚Ì‚±‚ƁD
    522 
    523 ‘Sƒ^ƒXƒN‚É‚æ‚éƒXƒ^ƒbƒNŽg—p—ʁi‚̐„’è’lj‚́CCRE_TSK ‚ÅŽw’è‚·‚é
    524 ƒXƒ^ƒbƒNƒTƒCƒY stksz, ‚¨‚æ‚Ñ‹N“®Žž—Dæ“x itskpriC‚È‚ç‚Ñ‚É DEF_EPR ‚Å
    525 Žw’è‚·‚éŽÀsŽž—Dæ“x exepri ‚©‚çŽZo‚³‚ê‚éDŽZoŽè‡‚ɂ‚¢‚Ä‚ÍŽŸß‚Åà–¾‚·‚éD
    526 
    527 (5-1-8) ‘Sƒ^ƒXƒN‚É‚æ‚éƒXƒ^ƒbƒNŽg—p—Ê‚ÌŽZo•û–@
    528 
    529 ‘Sƒ^ƒXƒN‚̃Xƒ^ƒbƒNŽg—p—ʂɑ΂·‚éŒvŽZ‚ÌŠî–{“I‚ȍl‚¦•û‚́C‚»‚ꂼ‚ê‚Ì—Dæ“x‚²‚ƂɁC
    530 “¯‚¶—Dæ“x‚ð‚à‚ƒ^ƒXƒN‚Ì’†‚ōłàƒXƒ^ƒbƒNŽg—p—Ê‚ª‘å‚«‚¢‚à‚Ì‚ð‘I‚сC‚»‚ê‚ç‚Ì
    531 ƒXƒ^ƒbƒNŽg—p—Ê‚ð‚·‚×‚Ä‰ÁŽZ‚µ‚½‚à‚̂ƍl‚¦‚邱‚Æ‚Å‚ ‚éDŽÀÛ‚ɂ̓vƒƒOƒ‰ƒ€‚É‚æ‚è
    532 ‚»‚ê‚æ‚菭‚È‚­‚È‚éƒP[ƒX‚à‘¶Ý‚µ“¾‚邪CŒ»Ý‚ÌŽÀ‘•‚ł͍l‚¦•û‚ð’Pƒ‰»‚µ‚Ä‚¢‚éD
    533 
    534 SSPƒJ[ƒlƒ‹‚ÌŽd—l‚ł́C‚ЂƂ‚̋N“®Žž—Dæ“x‚ɂ‚«“o˜^‰Â”\‚ȃ^ƒXƒN‚Í
    535 ‚Xˆê‚‚ł ‚éD‚»‚Ì‚½‚߁CDEF_EPR ‚É‚æ‚èŽÀsŽž—Dæ“x‚ðÝ’肵‚È‚¢ê‡C
    536 ‚·‚È‚í‚¿C‘S‚Ẵ^ƒXƒN‚ÌŽÀsŽž—Dæ“x‚ª‚»‚ꂼ‚ê‚Ì‹N“®Žž—Dæ“x‚É“™‚µ‚¢
    537 ê‡CŠeƒ^ƒXƒN‚̃Xƒ^ƒbƒNŽg—p—Ê‚ð’Pƒ‚ɉÁŽZ‚µ‚½‚à‚Ì‚ªC‘Sƒ^ƒXƒN‚É‚æ‚é
    538 ƒXƒ^ƒbƒNŽg—p—Ê‚Æ‚È‚éD
    539 
    540 ‚»‚ê‚ɑ΂µCDEF_EPR ‚ð—p‚¢‚Ä“Á’è‚̃^ƒXƒN‚ɑ΂·‚éŽÀsŽž—Dæ“x‚ðŽw’肵C
    541 “–ŠYƒ^ƒXƒNŽÀs’†‚Ì—Dæ“x‚ðˆø‚«ã‚°‚é‚悤‚ɐݒ肵‚½ê‡C–{—ˆ‚È‚ç‚΃vƒŠ
    542 ƒGƒ“ƒvƒg‚³‚ê‚é‚Í‚¸‚Ì‚à‚Ì‚ª‚³‚ê‚È‚­‚È‚éƒP[ƒX‚ª¶‚¶CŒ‹‰Ê‚Æ‚µ‚Ä‘Sƒ^ƒXƒN‚Ì
    543 ƒXƒ^ƒbƒNŽg—p—Ê‚ð­‚È‚­‚Å‚«‚éê‡‚ª‚ ‚éD
    544 
    545 ŽÀsŽž—Dæ“x‚ðl—¶‚µ‚½u‘Sƒ^ƒXƒN‚É‚æ‚éƒXƒ^ƒbƒNŽg—p—ʁv‚ÌŽZoŽè‡‚Í
    546 ŽŸ‚̂悤‚É‚È‚éi¦j
    547 (a) ‚ ‚éƒ^ƒXƒN‚©‚çŽÀsŠJŽn‚µC‘¼‚̂ǂ̂悤‚ȃ^ƒXƒN‚ɃvƒŠƒGƒ“ƒvƒg‚³‚ê‚é‚©C
    548     ‚»‚µ‚ÄŒ‹‰Ê“I‚É‚Ç‚¤‚¢‚¤ƒvƒƒOƒ‰ƒ€‚ÌŽÀsŒo˜H‚ª‘¶Ý‚µ“¾‚é‚©‚ð‘S‚Ä—ñ‹“‚·‚éD
    549 (b) ‚»‚ꂼ‚ê‚̏ꍇ‚́u‘Sƒ^ƒXƒN‚É‚æ‚éƒXƒ^ƒbƒNŽg—p—ʁv‚ð‹‚ß‚éD
    550 (c) ‹‚ß‚½’l‚Ì’†‚̍őå’l‚ð‘I‚ԁD
    551 
    552 ¦ ŽÀ‘•‚ł́C•s—v‚ȏˆ—‚̏ȗª“™‚às‚Á‚Ä‚¢‚邪C‚±‚±‚Å‚ÍŠî–{“I‚ȍl‚¦•û
    553    ‚Ì‚Ý‚ðŽ¦‚·D
    554 
    555 ŽZoŽè‡‚ð‹ï‘Ì“I‚È—á‚ð—p‚¢‚Äà–¾‚·‚éD
    556 —á‚Æ‚µ‚Đæ‚Ì (5-1-6) ‚Ì—á‚ð—p‚¢‚éD
    557 ‰º‚̎菇 (a), (b), (c) ‚͏ã‚É‹“‚°‚½Še€–ڂɑΉž‚µ‚Ä‚¢‚éD
     473(5-1-7) スタック領域設定
     474
     475SSPカーネルでは,タスクを含む全ての処理単位が同じスタック領域を共用する
     476ように設計されている.
     477共用されるスタック領域のことを「共有スタック領域」と呼ぶ.
     478共有スタック領域の定義は DEF_STK を用いて行う.詳しくは(9)を参照のこと.
     479
     480コンフィギュレータは共有スタック領域のみ確保し,タスクコンテキスト専用の
     481スタック領域は確保しない.
     482このため,CRE_TSK では先頭番地 stk として NULL のみ受け付ける.
     483NULL 以外の値を指定した場合,エラーとなる.
     484
     485また,CRE_TSK で指定するタスクのスタックサイズ stksz の値は,
     486DEF_STK を用いない場合には共有スタック領域のサイズを決定するために用いられ,
     487DEF_STK を用いる場合には DEF_STK で指定した共有スタック領域のサイズを
     488チェックするために用いられる.※ (9-4) も参照のこと.
     489
     490全タスクによるスタック使用量(の推定値)は,CRE_TSK で指定する
     491スタックサイズ stksz, および起動時優先度 itskpri,ならびに DEF_EPR で
     492指定する実行時優先度 exepri から算出される.算出手順については次節で説明する.
     493
     494(5-1-8) 全タスクによるスタック使用量の算出方法
     495
     496全タスクのスタック使用量に対する計算の基本的な考え方は,それぞれの優先度ごとに,
     497同じ優先度をもつタスクの中で最もスタック使用量が大きいものを選び,それらの
     498スタック使用量をすべて加算したものと考えることである.実際にはプログラムにより
     499それより少なくなるケースも存在し得るが,現在の実装では考え方を単純化している.
     500
     501SSPカーネルの仕様では,ひとつの起動時優先度につき登録可能なタスクは
     502高々一つである.そのため,DEF_EPR により実行時優先度を設定しない場合,
     503すなわち,全てのタスクの実行時優先度がそれぞれの起動時優先度に等しい
     504場合,各タスクのスタック使用量を単純に加算したものが,全タスクによる
     505スタック使用量となる.
     506
     507それに対し,DEF_EPR を用いて特定のタスクに対する実行時優先度を指定し,
     508当該タスク実行中の優先度を引き上げるように設定した場合,本来ならばプリ
     509エンプトされるはずのものがされなくなるケースが生じ,結果として全タスクの
     510スタック使用量を少なくできる場合がある.
     511
     512実行時優先度を考慮した「全タスクによるスタック使用量」の算出手順は
     513次のようになる(※)
     514(a) あるタスクから実行開始し,他のどのようなタスクにプリエンプトされるか,
     515    そして結果的にどういうプログラムの実行経路が存在し得るかを全て列挙する.
     516(b) それぞれの場合の「全タスクによるスタック使用量」を求める.
     517(c) 求めた値の中の最大値を選ぶ.
     518
     519※ 実装では,不要な処理の省略等も行っているが,ここでは基本的な考え方
     520   のみを示す.
     521
     522算出手順を具体的な例を用いて説明する.
     523例として先の (5-1-6) の例を用いる.
     524下の手順 (a), (b), (c) は上に挙げた各項目に対応している.
    558525
    559526CRE_TSK(TASK1, { TA_NULL, 1, task1, 2, 10, NULL });
     
    567534DEF_IPR(TASK4, { 4 } );
    568535
    569 (a) ‚ ‚éƒ^ƒXƒN(TASKn, n = 1,2,3,4)‚ð‘I‘ð‚·‚é.
    570     TASKn ‚ÌŽÀsŽž—Dæ“x‚æ‚è‚à‚‚¢‹N“®Žž—Dæ“x(’l‚Æ‚µ‚Ă͏¬‚³‚¢)‚ð‚à‚Â
    571     ƒ^ƒXƒN‚̏W‡‚ð’T‚·D
    572     ‚»‚µ‚āuƒvƒŠƒGƒ“ƒvƒg‚³‚ê‚éƒ^ƒXƒN¨ƒvƒŠƒGƒ“ƒvƒg‚·‚éƒ^ƒXƒNv‚Ì‘g‚ð—ñ‹“‚·‚éD
    573 
    574 ETASK1 ‚É’
    575 –Ú‚·‚é‚ƁC‚±‚ê‚ðƒvƒŠƒGƒ“ƒvƒg‰Â”\‚ȃ^ƒXƒN‚Í‘¶Ý‚µ‚È‚¢D
    576 ETASK2 ‚É’
    577 –Ú‚·‚é‚ƁCŽÀs’†‚Í—Dæ“x 5 ‚É‚È‚èC‚±‚ê‚ðƒvƒŠƒGƒ“ƒvƒg‰Â”\‚È
    578 @ƒ^ƒXƒN‚Í TASK1 ‚¨‚æ‚Ñ TASK3D
    579 ETASK3 ‚É’
    580 –Ú‚·‚é‚ƁCŽÀs’†‚Í—Dæ“x 3 ‚É‚È‚èC‚±‚ê‚ðƒvƒŠƒGƒ“ƒvƒg‰Â”\‚È
    581 @ƒ^ƒXƒN‚Í TASK1 ‚¾‚¯D
    582 ETASK4 ‚É’
    583 –Ú‚·‚é‚ƁCŽÀs’†‚Í—Dæ“x 4 ‚É‚È‚èC‚±‚ê‚ðƒvƒŠƒGƒ“ƒvƒg‰Â”\‚È
    584 @ƒ^ƒXƒN‚Í TASK1 ‚¾‚¯D
    585 
    586 ‚µ‚½‚ª‚Á‚Ä‚±‚±‚ł́CŽŸ‚Ì‘g‚ª“¾‚ç‚ê‚éD
    587         TASK2 ¨ TASK1
    588         TASK2 ¨ TASK3
    589         TASK3 ¨ TASK1
    590         TASK4 ¨ TASK1
    591 
    592 ‘S‚­ƒvƒŠƒGƒ“ƒvƒg‚³‚ê‚È‚¢ƒP[ƒXC‚¨‚æ‚сCƒvƒŠƒGƒ“ƒvƒg‚µ‚½ƒ^ƒXƒN‚ª‚³‚ç‚É
    593 •Ê‚̃^ƒXƒN‚ɃvƒŠƒGƒ“ƒvƒg‚³‚ê‚éƒP[ƒX‚܂ōl—¶‚·‚é‚ƁCŒ‹‰Ê“I‚ɃvƒƒOƒ‰ƒ€‚Ì
    594 ŽÀsŒo˜H‚ÍŽŸ‚̂悤‚É‚È‚é‚ƍl‚¦‚ç‚ê‚éD
    595 
    596 ETASK1 ‚©‚çŽn‚Ü‚éƒP[ƒXF
    597         TASK1 (ƒvƒŠƒGƒ“ƒvƒg‚³‚ꂸ‚ɏI—¹)
    598 
    599 ETASK2 ‚©‚çŽn‚Ü‚éƒP[ƒXF
     536(a) あるタスク(TASKn, n = 1,2,3,4)を選択する.
     537    TASKn の実行時優先度よりも高い起動時優先度(値としては小さい)をもつ
     538    タスクの集合を探す.
     539    そして「プリエンプトされるタスク→プリエンプトするタスク」の組を列挙する.
     540
     541・TASK1 に着目すると,これをプリエンプト可能なタスクは存在しない.
     542・TASK2 に着目すると,実行中は優先度 5 になり,これをプリエンプト可能な
     543 タスクは TASK1 および TASK3.
     544・TASK3 に着目すると,実行中は優先度 3 になり,これをプリエンプト可能な
     545 タスクは TASK1 だけ.
     546・TASK4 に着目すると,実行中は優先度 4 になり,これをプリエンプト可能な
     547 タスクは TASK1 だけ.
     548
     549したがってここでは,次の組が得られる.
     550        TASK2 → TASK1
     551        TASK2 → TASK3
     552        TASK3 → TASK1
     553        TASK4 → TASK1
     554
     555全くプリエンプトされないケース,および,プリエンプトしたタスクがさらに
     556別のタスクにプリエンプトされるケースまで考慮すると,結果的にプログラムの
     557実行経路は次のようになると考えられる.
     558
     559・TASK1 から始まるケース:
     560        TASK1 (プリエンプトされずに終了)
     561
     562・TASK2 から始まるケース:
    600563        TASK2
    601         TASK2 ¨ TASK1 (TASK2‚©‚çŽÀsŠJŽn‚µ‚āCTASK1‚ɃvƒŠƒGƒ“ƒvƒg‚³‚ꂽ)
    602         TASK2 ¨ TASK3
    603         TASK2 ¨ TASK3 ¨ TASK1
    604 
    605 ETASK3 ‚©‚çŽn‚Ü‚éƒP[ƒXF
     564        TASK2 → TASK1 (TASK2から実行開始して,TASK1にプリエンプトされた)
     565        TASK2 TASK3
     566        TASK2 → TASK3 → TASK1
     567
     568・TASK3 から始まるケース:
    606569        TASK3
    607         TASK3 ¨ TASK1
    608 
    609 ETASK4 ‚©‚çŽn‚Ü‚éƒP[ƒXF
     570        TASK3 TASK1
     571
     572・TASK4 から始まるケース:
    610573        TASK4
    611         TASK4 ¨ TASK1
    612 
    613 (b) ‚»‚ꂼ‚ê‚̃P[ƒX‚ŃXƒ^ƒbƒNŽg—p—Ê‚ðŒvŽZ‚·‚éD
    614 
    615 ETASK1 ‚©‚çŽn‚Ü‚éƒP[ƒXF
    616         TASK1F10
    617 
    618 ETASK2 ‚©‚çŽn‚Ü‚éƒP[ƒXF
    619         TASK2F30
    620         TASK2 ¨ TASK1F30+10
    621         TASK2 ¨ TASK3F30+50
    622         TASK2 ¨ TASK3 ¨ TASK1F30+50+10
    623 
    624 ETASK3 ‚©‚çŽn‚Ü‚éƒP[ƒXF
    625         TASK3F50
    626         TASK3 ¨ TASK1F50+10
    627 
    628 ETASK4 ‚©‚çŽn‚Ü‚éƒP[ƒXF
    629         TASK4F100
    630         TASK4 ¨ TASK1F100+10
    631 
    632 (c) Å‚à’l‚ª‘å‚«‚­‚È‚éŒo˜H‚ð‘I‚ԁD
    633 
    634 ‚±‚±‚Å‚Í TASK4 ¨ TASK1 ‚̏ꍇ‚ªÅ‘å‚ŁCŒ©Ï‚à‚è’l‚Í 110
    635 
    636 
    637 (5-1-9) ‘Sƒ^ƒXƒN‚É‚æ‚éƒXƒ^ƒbƒNŽg—p—Ê‚Ì’è‹`
    638 
    639 ƒRƒ“ƒtƒBƒMƒ
    640 ƒŒ[ƒ^‚́C‘Sƒ^ƒXƒN‚É‚æ‚éƒXƒ^ƒbƒNŽg—p—Ê‚ÌŒ©Ï‚à‚è‰ß’ö‚ð
    641 kernel_cfg.c ‚ɃRƒƒ“ƒg‚Æ‚µ‚ďo—Í‚·‚éD
     574        TASK4 → TASK1
     575
     576(b) それぞれのケースでスタック使用量を計算する.
     577
     578・TASK1 から始まるケース:
     579        TASK1:10
     580
     581・TASK2 から始まるケース:
     582        TASK2:30
     583        TASK2 → TASK1:30+10
     584        TASK2 → TASK3:30+50
     585        TASK2 → TASK3 → TASK1:30+50+10
     586
     587・TASK3 から始まるケース:
     588        TASK3:50
     589        TASK3 → TASK1:50+10
     590
     591・TASK4 から始まるケース:
     592        TASK4:100
     593        TASK4 → TASK1:100+10
     594
     595(c) 最も値が大きくなる経路を選ぶ.
     596
     597ここでは TASK4 → TASK1 の場合が最大で,見積もり値は 110
     598
     599
     600(5-1-9) 全タスクによるスタック使用量の定義
     601
     602コンフィギュレータは,全タスクによるスタック使用量の見積もり過程を
     603kernel_cfg.c にコメントとして出力する.
    642604
    643605/*
    644606 * Task Stack Size Estimation:
    645607 *
    646  i‚±‚±‚ÉŽZo‚̉ߒö‚ªo—Í‚³‚ê‚éj
     608 (ここに算出の過程が出力される)
    647609 */
    648610
    649 ‚»‚µ‚āCŽŸ‚̂悤‚ȍs‚𐶐¬‚·‚éD
    650 
    651 #define TOPPERS_TSTKSZ     <‘Sƒ^ƒXƒN‚É‚æ‚éƒXƒ^ƒbƒNŽg—p—Ê‚ÌŒvŽZ’l>
    652 
    653 
    654 (5-1-10) ƒGƒ‰[ðŒ
    655 
    656 ƒ^ƒXƒN‚ÉŠÖ‚·‚éƒGƒ‰[ðŒ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    657 
    658 –ƒRƒ“ƒtƒBƒMƒ
    659 ƒŒ[ƒ^–{‘Ì‚ªŒŸo‚·‚é‚à‚Ì
    660 Eƒ^ƒXƒN‚ªˆê‚Â‚à‘¶Ý‚µ‚È‚¢ê‡D
    661 E“¯‚¶tskid‚ɑ΂·‚éCRE_TSK‚ª•¡”‚ ‚éê‡iE_OBJj
    662 EDEF_EPR‚ɑΉž‚·‚éCRE_TSK‚ª‚È‚¢ê‡iE_NOEXSj
    663 E“¯‚¶tskid‚ɑ΂·‚éDEF_EPR‚ª•¡”‚ ‚éê‡iE_OBJj
    664 
    665 –ƒpƒX2‚ÅŒŸo‚·‚é‚à‚Ì
    666 Etskatr‚ªi[[TA_ACT]|[TA_RSTR]j‚Å‚È‚¢ê‡iE_RSATRj
    667         ¦ ƒ^[ƒQƒbƒgˆË‘¶•”‚Ń^ƒXƒN‘®«‚ð’ljÁ‰ÂiTARGET_TSKATRj
    668 E(TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)‚Å‚È‚¢ê‡iE_PARj
    669 E“¯‚¶ itskpri ‚ɑ΂·‚é CRE_TSK ‚ª•¡”‚ ‚éê‡ (E_PAR)
    670 Estksz‚ª0‚©Cƒ^[ƒQƒbƒg’è‹`‚̍ŏ¬’liTARGET_MIN_STKSZj‚æ‚è‚à¬‚³‚¢ê
    671 @‡iE_PARj
    672 Estk ‚ª NULL ‚Å‚È‚¢ê‡iE_PARj
    673 E(TMIN_TPRI <= exepri && exepri <= TMAX_TPRI) ‚Å‚È‚¢ê‡FE_PAR ƒGƒ‰[
    674 E(itskpri < exepri && exepri <= TMAX_TPRI) ‚Å‚ ‚éê‡FE_ILUSEƒGƒ‰[
    675 
    676 –ƒpƒX3‚ÅŒŸo‚·‚é‚à‚Ì
    677 Etask ‚ªƒvƒƒOƒ‰ƒ€‚ÌŠJŽn”Ô’n‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    678         - ƒ^[ƒQƒbƒgˆË‘¶‚Ì’liCHECK_FUNC_ALIGNj‚Ì”{”‚Å‚È‚¢ê‡
    679         - NULL‚̏ꍇiƒ^[ƒQƒbƒgˆË‘¶CCHECK_FUNC_NONNULLj
    680 
    681 
    682 (5-2) ƒCƒxƒ“ƒgƒtƒ‰ƒO‚ÉŠÖ‚·‚é’è‹`
    683 
    684 ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̏ȗª‹L†‚́uFLG^flgv‚Å‚ ‚éDˆÈ‰º‚ł́CƒVƒXƒeƒ€ƒRƒ“ƒtƒB
    685 ƒMƒ
    686 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ÉŽŸ‚̐ÓIAPI‚ªŠÜ‚Ü‚ê‚Ä‚¢‚鎞‚ɐ¶¬‚·‚ׂ«î•ñ‚É‚Â
    687 ‚¢‚ďq‚ׂéD
     611そして,次のような行を生成する.
     612
     613#define TOPPERS_TSTKSZ     <全タスクによるスタック使用量の計算値>
     614
     615
     616(5-1-10) エラー条件
     617
     618タスクに関するエラー条件は次の通りである.
     619
     620*コンフィギュレータ本体が検出するもの
     621・タスクが一つも存在しない場合.
     622・同じtskidに対するCRE_TSKが複数ある場合(E_OBJ)
     623・DEF_EPRに対応するCRE_TSKがない場合(E_NOEXS)
     624・同じtskidに対するDEF_EPRが複数ある場合(E_OBJ)
     625
     626*パス2で検出するもの
     627・tskatrが([[TA_ACT]|[TA_RSTR])でない場合(E_RSATR)
     628        ※ ターゲット依存部でタスク属性を追加可(TARGET_TSKATR)
     629・(TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)でない場合(E_PAR)
     630・同じ itskpri に対する CRE_TSK が複数ある場合 (E_PAR)
     631・stkszが0か,ターゲット定義の最小値(TARGET_MIN_STKSZ)よりも小さい場
     632 合(E_PAR)
     633・stk が NULL でない場合(E_PAR)
     634・(TMIN_TPRI <= exepri && exepri <= TMAX_TPRI) でない場合:E_PAR エラー
     635・(itskpri < exepri && exepri <= TMAX_TPRI) である場合:E_ILUSEエラー
     636
     637*パス3で検出するもの
     638・task がプログラムの開始番地として正しくない場合(E_PAR)
     639        - ターゲット依存の値(CHECK_FUNC_ALIGN)の倍数でない場合
     640        - NULLの場合(ターゲット依存,CHECK_FUNC_NONNULL)
     641
     642
     643(5-2) イベントフラグに関する定義
     644
     645イベントフラグの省略記号は「FLG/flg」である.以下では,システムコンフィ
     646ギュレーションファイルに次の静的APIが含まれている時に生成すべき情報につ
     647いて述べる.
    688648
    689649CRE_FLG(flgid, { flgatr, iflgptn });
    690650
    691 (5-2-1) ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̏‰Šú‰»î•ñiƒCƒxƒ“ƒgƒtƒ‰ƒO‘®«j
    692 
    693 ƒCƒxƒ“ƒgƒtƒ‰ƒO‚Ì‘®«î•ñ‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     651(5-2-1) イベントフラグの初期化情報(イベントフラグ属性)
     652
     653イベントフラグの属性情報の初期化情報は,次の形式とする.
    694654
    695655const ATR _kernel_flginib_atr[TNUM_FLGID] = {(flgatr)};
    696656
    697 (5-2-2) ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̏‰Šú‰»î•ñiƒtƒ‰ƒOƒpƒ^[ƒ“‰Šú’lj
    698 
    699 ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̃tƒ‰ƒOƒpƒ^[ƒ“‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     657(5-2-2) イベントフラグの初期化情報(フラグパターン初期値)
     658
     659イベントフラグのフラグパターンの初期化情報は,次の形式とする.
    700660
    701661const FLGPTN _kernel_flginib_iflgptn[TNUM_FLGID] = {(iflgptn)};
    702662
    703 (5-2-3) ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̃tƒ‰ƒOƒpƒ^[ƒ“
    704 
    705 ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̃tƒ‰ƒOƒpƒ^[ƒ“‚ðŠi”[‚·‚é”z—ñ‚́CˆÈ‰º‚ÌŒ`Ž®‚Æ‚·‚éD
     663(5-2-3) イベントフラグのフラグパターン
     664
     665イベントフラグのフラグパターンを格納する配列は,以下の形式とする.
    706666
    707667FLGPTN _kernel_flgcb_flgptn[TNUM_FLGID];
    708668
    709 (5-2-4) ƒGƒ‰[ðŒ
    710 
    711 ƒCƒxƒ“ƒgƒtƒ‰ƒO‚ÉŠÖ‚·‚éƒGƒ‰[ðŒ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    712 
    713 –ƒRƒ“ƒtƒBƒMƒ
    714 ƒŒ[ƒ^–{‘Ì‚ªŒŸo‚·‚é‚à‚Ì
    715 E“¯‚¶flgid‚ɑ΂·‚éCRE_FLG‚ª•¡”‚ ‚éê‡iE_OBJj
    716 
    717 –ƒpƒX2‚ÅŒŸo‚·‚é‚à‚Ì
    718 Etskatr‚ªi[[TA_CLR]|[TA_NULL]j‚Å‚È‚¢ê‡iE_RSATRj
    719         ¦ TA_CLR ‚Æ TA_NULL ‚𓯎ž‚ÉŽw’肵‚½ê‡CTA_CLR ‚Ì‚Ý‚ðŽw’肵‚½ê‡‚Æ“¯—l‚ɐU‚é•‘‚¤
    720 Eiflgptn ‚ªFLGPTN ‚ÉŠi”[‚Å‚«‚È‚¢(iflgptn‚Ì’l‚ªFLGPTNŒ^‚̍őå’l‚æ‚è‚à‘å‚«‚¢)ê‡iE_PARj
    721 
    722 
    723 (5-3) ƒf[ƒ^ƒLƒ
    724 [‚ÉŠÖ‚·‚é’è‹`
    725 
    726 ƒf[ƒ^ƒLƒ
    727 [‚̏ȗª‹L†‚́uDTQ^dtqv‚Å‚ ‚éDˆÈ‰º‚ł́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    728 
    729 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ÉŽŸ‚̐ÓIAPI‚ªŠÜ‚Ü‚ê‚Ä‚¢‚鎞‚ɐ¶¬‚·‚ׂ«î•ñ‚ɂ‚¢‚Ä
    730 q‚ׂéD
     669(5-2-4) エラー条件
     670
     671イベントフラグに関するエラー条件は次の通りである.
     672
     673*コンフィギュレータ本体が検出するもの
     674・同じflgidに対するCRE_FLGが複数ある場合(E_OBJ)
     675
     676*パス2で検出するもの
     677・tskatrが([[TA_CLR]|[TA_NULL])でない場合(E_RSATR)
     678        ※ TA_CLR と TA_NULL を同時に指定した場合,TA_CLR のみを指定した場合と同様に振る舞う
     679・iflgptn がFLGPTN に格納できない(iflgptnの値がFLGPTN型の最大値よりも大きい)場合(E_PAR)
     680
     681
     682(5-3) データキューに関する定義
     683
     684データキューの省略記号は「DTQ/dtq」である.以下では,システムコンフィギュ
     685レーションファイルに次の静的APIが含まれている時に生成すべき情報について
     686述べる.
    731687
    732688CRE_DTQ(dtqid, { dtqatr, dtqcnt, dtqmb });
    733689
    734 (5-3-1) ƒf[ƒ^ƒLƒ
    735 [‚É•K—v‚ȃƒ‚ƒŠ—̈æ‚Ì’è‹`
    736 
    737 ƒf[ƒ^ƒLƒ
    738 [‚É•K—v‚ȃƒ‚ƒŠ—̈æ‚Æ‚µ‚āCƒf[ƒ^ƒLƒ
    739 [ŠÇ——̈悪‚ ‚éD¶¬
    740 ‚·‚éƒf[ƒ^ƒLƒ
    741 [–ˆ‚ɁC•K—v‚ȃTƒCƒY‚̃f[ƒ^ƒLƒ
    742 [ŠÇ——̈æ‚ð’è‹`‚·‚éD‹ï
    743 ‘Ì“I‚ɂ́Cã‹L‚̐ÓIAPI‚ɑ΂µ‚āCŽŸ‚Ì’è‹`‚𐶐¬‚·‚éD
    744 
    745 –dtqcnt‚ª0‚Å‚È‚¢ê‡‚̂ݐ¶¬
    746 static intptr_t _kernel_dtqmb_<ƒf[ƒ^ƒLƒ
    747 [–¼>[dtqcnt];
    748 
    749 (5-3-2) ƒf[ƒ^ƒLƒ
    750 [‚̏‰Šú‰»î•ñ(ƒf[ƒ^ƒLƒ
    751 [‘®«)
    752 
    753 ƒf[ƒ^ƒLƒ
    754 [‚Ì‘®«î•ñ‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     690(5-3-1) データキューに必要なメモリ領域の定義
     691
     692データキューに必要なメモリ領域として,データキュー管理領域がある.生成
     693するデータキュー毎に,必要なサイズのデータキュー管理領域を定義する.具
     694体的には,上記の静的APIに対して,次の定義を生成する.
     695
     696*dtqcntが0でない場合のみ生成
     697static intptr_t _kernel_dtqmb_<データキュー名>[dtqcnt];
     698
     699(5-3-2) データキューの初期化情報(データキュー属性)
     700
     701データキューの属性情報の初期化情報は,次の形式とする.
    755702
    756703const ATR _kernel_dtqinib_atr[TNUM_DTQID] = {(dtqatr)};
    757704
    758 (5-3-3) ƒf[ƒ^ƒLƒ
    759 [‚̏‰Šú‰»î•ñ(ƒf[ƒ^ƒLƒ
    760 [ŠÇ——̈æ)
    761 
    762 ƒf[ƒ^ƒLƒ
    763 [‚̃f[ƒ^ƒLƒ
    764 [ŠÇ——̈æ‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
    765 
    766 intptr_t * const _kernel_dtqinib_data[TNUM_DTQID] = {(_kernel_dtqmb_<ƒf[ƒ^ƒLƒ
    767 [–¼>)};
    768 
    769 ¦ SSPƒJ[ƒlƒ‹‚Å‚Í‘Ò‚¿ó‘Ô‚ðƒTƒ|[ƒg‚µ‚È‚¢‚½‚߁C“¯ŠúŒÄo‚µ‚ªŽÀŒ»‚Å‚«‚È‚¢D
    770 @‚»‚Ì‚½‚ß dtqcnt ‚ª 0 ‚̏ꍇCƒRƒ“ƒtƒBƒMƒ
    771 ƒŒ[ƒVƒ‡ƒ“ƒGƒ‰[(E_PAR)‚Æ‚È‚éD
    772 
    773 (5-3-4) ƒf[ƒ^ƒLƒ
    774 [‚̏‰Šú‰»î•ñ(ƒf[ƒ^ƒLƒ
    775 [‚̃TƒCƒY)
    776 
    777 ƒf[ƒ^ƒLƒ
    778 [‚̃TƒCƒY‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     705(5-3-3) データキューの初期化情報(データキュー管理領域)
     706
     707データキューのデータキュー管理領域の初期化情報は,次の形式とする.
     708
     709intptr_t * const _kernel_dtqinib_data[TNUM_DTQID] = {(_kernel_dtqmb_<データキュー名>)};
     710
     711※ SSPカーネルでは待ち状態をサポートしないため,同期呼出しが実現できない.
     712 そのため dtqcnt が 0 の場合,コンフィギュレーションエラー(E_PAR)となる.
     713
     714(5-3-4) データキューの初期化情報(データキューのサイズ)
     715
     716データキューのサイズの初期化情報は,次の形式とする.
    779717
    780718const uint8_t _kernel_dtqinib_size[TNUM_DTQID] = {(dtqcnt)};
    781719
    782 (5-3-5) ƒf[ƒ^ƒLƒ
    783 [‚ÉŠi”[‚³‚ê‚Ä‚¢‚é—v‘f”
    784 
    785 ƒf[ƒ^ƒLƒ
    786 [‚ÉŠi”[‚³‚ê‚Ä‚¢‚é—v‘f”‚Ì”z—ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     720(5-3-5) データキューに格納されている要素数
     721
     722データキューに格納されている要素数の配列は,次の形式とする.
    787723
    788724uint8_t _kernel_dtqcb_count[TNUM_DTQID];
    789725
    790 (5-3-6) ƒf[ƒ^ƒLƒ
    791 [‚̐擪E––”ö—v‘f
    792 
    793 ƒf[ƒ^ƒLƒ
    794 [‚ÉŠi”[‚³‚ê‚Ä‚¢‚éæ“ª—v‘fE––”ö—v‘f‚ðŠi”[‚·‚é”z—ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     726(5-3-6) データキューの先頭・末尾要素
     727
     728データキューに格納されている先頭要素・末尾要素を格納する配列は,次の形式とする.
    795729
    796730uint8_t _kernel_dtqcb_head[TNUM_DTQID];
    797731uint8_t _kernel_dtqcb_tail[TNUM_DTQID];
    798732
    799 (5-3-7) ƒGƒ‰[ðŒ
    800 
    801 ƒf[ƒ^ƒLƒ
    802 [‚ÉŠÖ‚·‚éƒGƒ‰[ðŒ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    803 
    804 –ƒRƒ“ƒtƒBƒMƒ
    805 ƒŒ[ƒ^–{‘Ì‚ªŒŸo‚·‚é‚à‚Ì
    806 E“¯‚¶dtqid‚ɑ΂·‚éCRE_DTQ‚ª•¡”‚ ‚éê‡iE_OBJj
    807 
    808 –ƒpƒX2‚ÅŒŸo‚·‚é‚à‚Ì
    809 Edtqatr‚ªimTA_NULLnj‚Å‚È‚¢ê‡iE_RSATRj
    810 Edtqcnt‚ª 0 ‚̏ꍇ (E_PAR)
    811 Edtqmb ‚ª NULL ‚Å‚È‚¢ê‡iE_NOSPTj
    812 
    813 
    814 (5-4) ŽüŠúƒnƒ“ƒhƒ‰‚ÉŠÖ‚·‚é’è‹`
    815 
    816 ŽüŠúƒnƒ“ƒhƒ‰‚̏ȗª‹L†‚́uCYC^cycv‚Å‚ ‚éDˆÈ‰º‚ł́CƒVƒXƒeƒ€ƒRƒ“ƒtƒB
    817 ƒMƒ
    818 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ÉŽŸ‚̐ÓIAPI‚ªŠÜ‚Ü‚ê‚Ä‚¢‚鎞‚ɐ¶¬‚·‚ׂ«î•ñ‚É‚Â
    819 ‚¢‚ďq‚ׂéD
     733(5-3-7) エラー条件
     734
     735データキューに関するエラー条件は次の通りである.
     736
     737*コンフィギュレータ本体が検出するもの
     738・同じdtqidに対するCRE_DTQが複数ある場合(E_OBJ)
     739
     740*パス2で検出するもの
     741・dtqatrが([TA_NULL])でない場合(E_RSATR)
     742・dtqcntが 0 の場合 (E_PAR)
     743・dtqmb が NULL でない場合(E_NOSPT)
     744
     745
     746(5-4) 周期ハンドラに関する定義
     747
     748周期ハンドラの省略記号は「CYC/cyc」である.以下では,システムコンフィ
     749ギュレーションファイルに次の静的APIが含まれている時に生成すべき情報につ
     750いて述べる.
    820751
    821752CRE_CYC(cycid, { cycatr, exinf, cychdr, cyctim, cycphs });
    822753
    823 (5-4-1) ŽüŠúƒnƒ“ƒhƒ‰‚̏‰Šú‰»î•ñiŠg’£î•ñj
    824 
    825 ŽüŠúƒnƒ“ƒhƒ‰‚ÌŠg’£î•ñ‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     754(5-4-1) 周期ハンドラの初期化情報(拡張情報)
     755
     756周期ハンドラの拡張情報の初期化情報は,次の形式とする.
    826757
    827758const intptr_t _kernel_cycinib_exinf[TNUM_CYCID] = {(intptr_t)(exinf)};
    828759
    829 (5-4-2) ŽüŠúƒnƒ“ƒhƒ‰‚̏‰Šú‰»î•ñi‹N“®”Ô’nj
    830 
    831 ŽüŠúƒnƒ“ƒhƒ‰‚̃AƒhƒŒƒX‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     760(5-4-2) 周期ハンドラの初期化情報(起動番地)
     761
     762周期ハンドラのアドレスの初期化情報は,次の形式とする.
    832763
    833764const CYCHDR _kernel_cycinib_cychdr[TNUM_CYCID] = {(cycdhr)};
    834765
    835 (5-4-3) ŽüŠúƒnƒ“ƒhƒ‰‚̏‰Šú‰»î•ñi‹N“®ŽüŠúj
    836 
    837 ŽüŠúƒnƒ“ƒhƒ‰‚Ì‹N“®ŽüŠú‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     766(5-4-3) 周期ハンドラの初期化情報(起動周期)
     767
     768周期ハンドラの起動周期の初期化情報は,次の形式とする.
    838769
    839770const RELTIM _kernel_cycinib_cyctim[TNUM_CYCID] = {(cyctim)};
    840771
    841 (5-4-4) ŽüŠúƒnƒ“ƒhƒ‰‚̏‰Šú‰»î•ñiˆÊ‘Šj
    842 
    843 ŽüŠúƒnƒ“ƒhƒ‰‚̈ʑŠ‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     772(5-4-4) 周期ハンドラの初期化情報(位相)
     773
     774周期ハンドラの位相の初期化情報は,次の形式とする.
    844775
    845776const RELTIM _kernel_cycinib_cycphs[TNUM_CYCID] = {(cycphs)};
    846777
    847 (5-4-5) ŽüŠúƒnƒ“ƒhƒ‰‚Ì“®ìó‘Ô
    848 
    849 ŽüŠúƒnƒ“ƒhƒ‰‚Ì“®ìó‘Ô‚ðŠi”[‚·‚é•Ï”‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     778(5-4-5) 周期ハンドラの動作状態
     779
     780周期ハンドラの動作状態を格納する変数は,次の形式とする.
    850781
    851782uint_t _kernel_cyccb_cycact;
    852783
    853 •Ï” _kernel_cyccb_cycact ‚ÌŠeƒrƒbƒg‚Í‚»‚ꂼ‚ê‚ÌŽüŠúƒnƒ“ƒhƒ‰‚ɑΉž‚·‚éD
    854 ŽüŠúƒnƒ“ƒhƒ‰ID‚ª1‚̃^ƒXƒN‚͍ʼnºˆÊƒrƒbƒg(LSB)‚ɑΉž‚¯‚ç‚ê‚Ä‚¨‚èC
    855 ID‚Ì’l‚ª1‚‘‚¦‚é–ˆ‚É1‚‚ˆÊ‚̃rƒbƒg‚ª‚»‚ꂼ‚ê‘Ήž‚¯‚ç‚ê‚éD
    856 —Ⴆ‚΁Cƒnƒ“ƒhƒ‰ID‚ª4‚ÌŽüŠúƒnƒ“ƒhƒ‰‚͍ʼnºˆÊ‚©‚琔‚¦‚Ä4”Ԗڂ̃rƒbƒg‚ª
    857 ‘Ήž‚·‚éD
    858 
    859 “®ì‚µ‚Ä‚¢‚éó‘Ô‚ÌŽüŠúƒnƒ“ƒhƒ‰‚́C‚»‚ÌŽüŠúƒnƒ“ƒhƒ‰‚ɑΉž‚·‚éƒrƒbƒg‚ª
    860 1‚Æ‚È‚éD“®ì‚µ‚Ä‚¢‚È‚¢ó‘Ô‚ÌŽüŠúƒnƒ“ƒhƒ‰‚͑Ήž‚·‚éƒrƒbƒg‚ª0‚É‚È‚éD
    861 
    862 (5-4-6) ŽüŠúƒnƒ“ƒhƒ‰‚ÌŽŸ‰ñ‹N“®Žž‚Ì’è‹`
    863 
    864 ŽüŠúƒnƒ“ƒhƒ‰‚ÌŽŸ‰ñ‹N“®Žž‚ðŠi”[‚·‚é•Ï”‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     784変数 _kernel_cyccb_cycact の各ビットはそれぞれの周期ハンドラに対応する.
     785周期ハンドラIDが1のタスクは最下位ビット(LSB)に対応づけられており,
     786IDの値が1つ増える毎に1つ高位のビットがそれぞれ対応づけられる.
     787例えば,ハンドラIDが4の周期ハンドラは最下位から数えて4番目のビットが
     788対応する.
     789
     790動作している状態の周期ハンドラは,その周期ハンドラに対応するビットが
     7911となる.動作していない状態の周期ハンドラは対応するビットが0になる.
     792
     793(5-4-6) 周期ハンドラの次回起動時刻の定義
     794
     795周期ハンドラの次回起動時刻を格納する変数は,次の形式とする.
    865796
    866797EVTTIM _kernel_cyccb_evttim[TNUM_CYCID];
    867798
    868 (5-4-7) ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒLƒ
    869 [‚Ì’†‚̃IƒtƒZƒbƒgî•ñ‚Ì’è‹`
    870 
    871 ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒLƒ
    872 [‚Ì’†‚ÅŽüŠúƒnƒ“ƒhƒ‰—p‚ÉŠ„‚è“–‚Ä‚ç‚ꂽ—̈æ‚̐擪ˆÊ’u‚ð
    873 Ž¦‚·î•ñ‚ð•Ï”‚É•ÛŽ‚·‚éDƒ^ƒCƒ€ƒCƒxƒ“ƒgƒLƒ
    874 [‚Í”z—ñ‚Å•\Œ»‚³‚ê‚Ä‚¨‚èC
    875 æ“ªˆÊ’u‚Í”z—ñ‚̐擪‚©‚ç‚̃IƒtƒZƒbƒgi‚‚܂è”z—ñ‚̃Cƒ“ƒfƒbƒNƒXj‚Æ‚µ‚Ä
    876 •\Œ»‚³‚ê‚éDŽüŠúƒnƒ“ƒhƒ‰‚ɑ΂µ‚Ă̓^ƒCƒ€ƒCƒxƒ“ƒgƒLƒ
    877 [”z—ñ‚̐擪‚©‚犄‚è
    878 “–‚Ä‚ç‚ê‚邽‚߁C‚±‚Ì’l‚͏í‚É 0 ‚Æ‚È‚éD]‚Á‚ĕϐ”’è‹`‚́CŽŸ‚ÌŒ`Ž®‚Æ‚È‚éD
     799(5-4-7) タイムイベントキューの中のオフセット情報の定義
     800
     801タイムイベントキューの中で周期ハンドラ用に割り当てられた領域の先頭位置を
     802示す情報を変数に保持する.タイムイベントキューは配列で表現されており,
     803先頭位置は配列の先頭からのオフセット(つまり配列のインデックス)として
     804表現される.周期ハンドラに対してはタイムイベントキュー配列の先頭から割り
     805当てられるため,この値は常に 0 となる.従って変数定義は,次の形式となる.
    879806
    880807const uint_t _kernel_cycevtid_offset = 0;
    881808
    882 ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒLƒ
    883 [‚ɂ‚¢‚Ä‚Í(9-3)‚ðŽQÆ‚Ì‚±‚ƁD
    884 
    885 (5-4-8) ƒGƒ‰[ðŒ
    886 
    887 ŽüŠúƒnƒ“ƒhƒ‰‚ÉŠÖ‚·‚éƒGƒ‰[ðŒ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    888 
    889 –ƒRƒ“ƒtƒBƒMƒ
    890 ƒŒ[ƒ^–{‘Ì‚ªŒŸo‚·‚é‚à‚Ì
    891 E“¯‚¶cycid‚ɑ΂·‚éCRE_CYC‚ª•¡”‚ ‚éê‡iE_OBJj
    892 
    893 –ƒpƒX2‚ÅŒŸo‚·‚é‚à‚Ì
    894 Ecycatr‚ªimTA_STAnj‚Å‚È‚¢ê‡iE_RSATRj
    895 E(0 < cyctim && cyctim <= TMAX_RELTIM)‚Å‚È‚¢ê‡iE_PARj
    896 E(0 <= cycphs && cycphs <= TMAX_RELTIM)‚Å‚È‚¢ê‡iE_PARj
    897 EŒxFcycatr‚ÉTA_STA‚ªÝ’肳‚ê‚Ä‚¢‚āC(cycphs == 0)‚̏ꍇ
    898 ECRE_CYC ‚̃Gƒ“ƒgƒŠ‚ª16ŒÂ‚æ‚葽‚¢ ¦SSPŽÀ‘•’è‹`Ž–€
    899 
    900 –ƒpƒX3‚ÅŒŸo‚·‚é‚à‚Ì
    901 Ecychdr‚ªƒvƒƒOƒ‰ƒ€‚ÌŠJŽn”Ô’n‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    902         - ƒ^[ƒQƒbƒgˆË‘¶‚Ì’liCHECK_FUNC_ALIGNj‚Ì”{”‚Å‚È‚¢ê‡
    903         - NULL‚̏ꍇiƒ^[ƒQƒbƒgˆË‘¶CCHECK_FUNC_NONNULLj
    904 
    905 (5-5) ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ÉŠÖ‚·‚é’è‹`
    906 
    907 ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̏ȗª‹L†‚́uALM^almv‚Å‚ ‚éDˆÈ‰º‚ł́CƒVƒXƒeƒ€ƒRƒ“
    908 ƒtƒBƒMƒ
    909 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ÉŽŸ‚̐ÓIAPI‚ªŠÜ‚Ü‚ê‚Ä‚¢‚鎞‚ɐ¶¬‚·‚ׂ«î•ñ
    910 ‚ɂ‚¢‚ďq‚ׂéD
     809タイムイベントキューについては(9-3)を参照のこと.
     810
     811(5-4-8) エラー条件
     812
     813周期ハンドラに関するエラー条件は次の通りである.
     814
     815*コンフィギュレータ本体が検出するもの
     816・同じcycidに対するCRE_CYCが複数ある場合(E_OBJ)
     817
     818*パス2で検出するもの
     819・cycatrが([TA_STA])でない場合(E_RSATR)
     820・(0 < cyctim && cyctim <= TMAX_RELTIM)でない場合(E_PAR)
     821・(0 <= cycphs && cycphs <= TMAX_RELTIM)でない場合(E_PAR)
     822・警告:cycatrにTA_STAが設定されていて,(cycphs == 0)の場合
     823・CRE_CYC のエントリが16個より多い ※SSP実装定義事項
     824
     825*パス3で検出するもの
     826・cychdrがプログラムの開始番地として正しくない場合(E_PAR)
     827        - ターゲット依存の値(CHECK_FUNC_ALIGN)の倍数でない場合
     828        - NULLの場合(ターゲット依存,CHECK_FUNC_NONNULL)
     829
     830(5-5) アラームハンドラに関する定義
     831
     832アラームハンドラの省略記号は「ALM/alm」である.以下では,システムコン
     833フィギュレーションファイルに次の静的APIが含まれている時に生成すべき情報
     834について述べる.
    911835
    912836CRE_ALM(ID almid, { almatr, (intptr_t)(exinf), almhdr });
    913837
    914 (5-5-1) ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̏‰Šú‰»î•ñiŠg’£î•ñj
    915 
    916 ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ÌŠg’£î•ñ‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     838(5-5-1) アラームハンドラの初期化情報(拡張情報)
     839
     840アラームハンドラの拡張情報の初期化情報は,次の形式とする.
    917841
    918842const intptr_t _kernel_alminib_exinf[TNUM_ALMID] = {(intptr_t)(exinf)};
    919843
    920 (5-5-2) ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̏‰Šú‰»î•ñi‹N“®”Ô’nj
    921 
    922 ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚Ì‹N“®”Ô’n‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     844(5-5-2) アラームハンドラの初期化情報(起動番地)
     845
     846アラームハンドラの起動番地の初期化情報は,次の形式とする.
    923847
    924848const ALMHDR _kernel_alminib_almhdr[TNUM_ALMID] = {(almhdr)};
    925849
    926 (5-5-3) ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚Ì“®ìó‘Ô
    927 
    928 ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚Ì“®ìó‘Ô‚ðŠi”[‚·‚é•Ï”‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     850(5-5-3) アラームハンドラの動作状態
     851
     852アラームハンドラの動作状態を格納する変数は,次の形式とする.
    929853
    930854uint_t _kernel_almcb_almact;
    931855
    932 •Ï” _kernel_almcb_almact ‚ÌŠeƒrƒbƒg‚͌X‚̃Aƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ɑΉž‚·‚éD
    933 ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ID‚ª1‚̃^ƒXƒN‚͍ʼnºˆÊƒrƒbƒg(LSB)‚ɑΉž‚¯‚ç‚ê‚Ä‚¨‚èC
    934 ID‚Ì’l‚ª1‚‘‚¦‚é–ˆ‚É1‚‚ˆÊ‚̃rƒbƒg‚ª‚»‚ꂼ‚ê‘Ήž‚¯‚ç‚ê‚éD
    935 —Ⴆ‚΁Cƒnƒ“ƒhƒ‰ID‚ª4‚̃Aƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚͍ʼnºˆÊ‚©‚琔‚¦‚Ä4”Ԗڂ̃rƒbƒg‚ª
    936 ‘Ήž‚·‚éD
    937 
    938 “®ì‚µ‚Ä‚¢‚éó‘Ԃ̃Aƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚́C‚»‚ÌŽüŠúƒnƒ“ƒhƒ‰‚ɑΉž‚·‚éƒrƒbƒg‚ª
    939 1‚Æ‚È‚éD“®ì‚µ‚Ä‚¢‚È‚¢ó‘Ô‚ÌŽüŠúƒnƒ“ƒhƒ‰‚͑Ήž‚·‚éƒrƒbƒg‚ª0‚É‚È‚éD
    940 
    941 (5-5-4) ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒLƒ
    942 [‚Ì’†‚̃IƒtƒZƒbƒgî•ñ‚Ì’è‹`
    943 
    944 ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒLƒ
    945 [‚Ì’†‚ŃAƒ‰[ƒ€ƒnƒ“ƒhƒ‰—p‚ÉŠ„‚è“–‚Ä‚ç‚ꂽ—̈æ‚̐擪
    946 ˆÊ’u‚ðŽ¦‚·î•ñ‚ð•Ï”‚É•ÛŽ‚·‚éDƒ^ƒCƒ€ƒCƒxƒ“ƒgƒLƒ
    947 [‚Í”z—ñ‚Å•\Œ»‚³‚ê‚Ä‚¨‚èC
    948 æ“ªˆÊ’u‚Í”z—ñ‚̐擪‚©‚ç‚̃IƒtƒZƒbƒgi‚‚܂è”z—ñ‚̃Cƒ“ƒfƒbƒNƒXj‚Æ‚µ‚Ä
    949 •\Œ»‚³‚ê‚éDƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ɑ΂µ‚Ä‚ÍŽüŠúƒnƒ“ƒhƒ‰—p—̈æ‚ÌŽŸ‚Ì—v‘f‚©‚ç
    950 Š„‚è“–‚Ä‚ç‚ê‚邽‚߁C‚±‚Ì’l‚͏í‚ÉŽüŠúƒnƒ“ƒhƒ‰‚̌”‚É“™‚µ‚¢D
    951 •Ï”’è‹`‚́CŽŸ‚ÌŒ`Ž®‚Æ‚È‚éD
    952 
    953 const uint_t _kernel_almevtid_offset = <ŽüŠúƒnƒ“ƒhƒ‰‚̌”>;
    954 
    955 ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒLƒ
    956 [‚ɂ‚¢‚Ä‚Í(9-3)‚ðŽQÆ‚Ì‚±‚ƁD
    957 
    958 (5-5-5) ƒGƒ‰[ðŒ
    959 
    960 ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ÉŠÖ‚·‚éƒGƒ‰[ðŒ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    961 
    962 –ƒRƒ“ƒtƒBƒMƒ
    963 ƒŒ[ƒ^–{‘Ì‚ªŒŸo‚·‚é‚à‚Ì
    964 E“¯‚¶almid‚ɑ΂·‚éCRE_ALM‚ª•¡”‚ ‚éê‡iE_OBJj
    965 
    966 –ƒpƒX2‚ÅŒŸo‚·‚é‚à‚Ì
    967 Ealmatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
    968 ECRE_ALM ‚̃Gƒ“ƒgƒŠ‚ª16ŒÂ‚æ‚葽‚¢ ¦SSPŽÀ‘•’è‹`Ž–€
    969 
    970 –ƒpƒX3‚ÅŒŸo‚·‚é‚à‚Ì
    971 Ealmhdr‚ªƒvƒƒOƒ‰ƒ€‚ÌŠJŽn”Ô’n‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    972         - ƒ^[ƒQƒbƒgˆË‘¶‚Ì’liCHECK_FUNC_ALIGNj‚Ì”{”‚Å‚È‚¢ê‡
    973         - NULL‚̏ꍇiƒ^[ƒQƒbƒgˆË‘¶CCHECK_FUNC_NONNULLj
    974 
    975 (6) Š„ž‚Ý‚ÉŠÖ‚·‚é’è‹`
    976 
    977 Š„ž‚Ý‚ÉŠÖ‚µ‚ж¬‚·‚éî•ñ‚́Cƒ^[ƒQƒbƒg–ˆ‚É’è‚߂邱‚Æ‚ª‚Å‚«‚éD
    978 ƒ^[ƒQƒbƒg–ˆ‚É’è‚ß‚È‚¢ê‡‚ɂ́CˆÈ‰º‚ŏq‚ׂéƒ^[ƒQƒbƒg‚Ɉˑ¶‚µ‚È‚¢•W€“I‚È
    979 î•ñ‚𐶐¬‚·‚éDƒ^[ƒQƒbƒg–ˆ‚É’è‚ß‚éê‡‚ɂ́C(6-1)‚Æ(6-3)‚ɏq‚ׂéî•ñ‚͐¶
    980 ¬‚µ‚È‚¢i(6-2)‚ɏq‚ׂéî•ñ‚͐¶¬‚·‚éjD
    981 
    982 (6-1) Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ÉŠÖ‚·‚é’è‹`
    983 
    984 Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚Ì‘®«‚ðÝ’è‚·‚éÃ“IAPIuCFG_INTv‚Őݒ肵‚½Š„ž‚Ý—v‹
    985 ƒ‰ƒCƒ“‚ÉŠÖ‚·‚é’è‹`‚𐶐¬‚·‚éD‹ï‘Ì“I‚É‚ÍŽŸ‚Ì’Ê‚èD
    986 
    987 ˆÈ‰º‚ł́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    988 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ÉŽŸ‚̐ÓIAPI‚ªŠÜ‚Ü‚ê
    989 ‚Ä‚¢‚鎞‚ɐ¶¬‚·‚ׂ«î•ñ‚ɂ‚¢‚ďq‚ׂéD
     856変数 _kernel_almcb_almact の各ビットは個々のアラームハンドラに対応する.
     857アラームハンドラIDが1のタスクは最下位ビット(LSB)に対応づけられており,
     858IDの値が1つ増える毎に1つ高位のビットがそれぞれ対応づけられる.
     859例えば,ハンドラIDが4のアラームハンドラは最下位から数えて4番目のビットが
     860対応する.
     861
     862動作している状態のアラームハンドラは,その周期ハンドラに対応するビットが
     8631となる.動作していない状態の周期ハンドラは対応するビットが0になる.
     864
     865(5-5-4) タイムイベントキューの中のオフセット情報の定義
     866
     867タイムイベントキューの中でアラームハンドラ用に割り当てられた領域の先頭
     868位置を示す情報を変数に保持する.タイムイベントキューは配列で表現されており,
     869先頭位置は配列の先頭からのオフセット(つまり配列のインデックス)として
     870表現される.アラームハンドラに対しては周期ハンドラ用領域の次の要素から
     871割り当てられるため,この値は常に周期ハンドラの個数に等しい.
     872変数定義は,次の形式となる.
     873
     874const uint_t _kernel_almevtid_offset = <周期ハンドラの個数>;
     875
     876タイムイベントキューについては(9-3)を参照のこと.
     877
     878(5-5-5) エラー条件
     879
     880アラームハンドラに関するエラー条件は次の通りである.
     881
     882*コンフィギュレータ本体が検出するもの
     883・同じalmidに対するCRE_ALMが複数ある場合(E_OBJ)
     884
     885*パス2で検出するもの
     886・almatrが(TA_NULL)でない場合(E_RSATR)
     887・CRE_ALM のエントリが16個より多い ※SSP実装定義事項
     888
     889*パス3で検出するもの
     890・almhdrがプログラムの開始番地として正しくない場合(E_PAR)
     891        - ターゲット依存の値(CHECK_FUNC_ALIGN)の倍数でない場合
     892        - NULLの場合(ターゲット依存,CHECK_FUNC_NONNULL)
     893
     894(6) 割込みに関する定義
     895
     896割込みに関して生成する情報は,ターゲット毎に定めることができる.
     897ターゲット毎に定めない場合には,以下で述べるターゲットに依存しない標準的な
     898情報を生成する.ターゲット毎に定める場合には,(6-1)と(6-3)に述べる情報は生
     899成しない((6-2)に述べる情報は生成する).
     900
     901(6-1) 割込み要求ラインに関する定義
     902
     903割込み要求ラインの属性を設定する静的API「CFG_INT」で設定した割込み要求
     904ラインに関する定義を生成する.具体的には次の通り.
     905
     906以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
     907ている時に生成すべき情報について述べる.
    990908
    991909CFG_INT(INTNO intno, { intatr, intpri });
    992910
    993 (6-1-1) Ý’è‚·‚銄ž‚Ý—v‹ƒ‰ƒCƒ“‚̐”
    994 
    995 Ý’è‚·‚銄ž‚Ý—v‹ƒ‰ƒCƒ“‚̐”‚ðƒ}ƒNƒ’è‹`‚·‚éƒvƒŠƒvƒƒZƒbƒTƒfƒBƒŒƒNƒeƒB
    996 ƒui#definej‚𐶐¬‚·‚éD‚Ü‚½C‚»‚Ì’l‚ðŽ‚Â•Ï”‚Ì’è‹`‚𐶐¬‚·‚éD‹ï‘Ì“I
    997 ‚ɂ́CŽŸ‚̂悤‚ȍs‚𐶐¬‚·‚éD
    998 
    999 #define TNUM_INTNO <Ý’è‚·‚銄ž‚Ý—v‹ƒ‰ƒCƒ“‚̐”>
     911(6-1-1) 設定する割込み要求ラインの数
     912
     913設定する割込み要求ラインの数をマクロ定義するプリプロセッサディレクティ
     914ブ(#define)を生成する.また,その値を持つ変数の定義を生成する.具体的
     915には,次のような行を生成する.
     916
     917#define TNUM_INTNO <設定する割込み要求ラインの数>
    1000918const uint_t    _kernel_tnum_intno = TNUM_INTNO;
    1001919
    1002 (6-1-2) Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚̏‰Šú‰»î•ñiŠ„ž‚ݔԍ†j
    1003 
    1004 Š„ž‚ݔԍ†‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     920(6-1-2) 割込み要求ラインの初期化情報(割込み番号)
     921
     922割込み番号の初期化情報は,次の形式とする.
    1005923
    1006924const INTNO _kernel_intinib_intno[TNUM_INTNO] = {(intno)};
    1007925
    1008 (6-1-3) Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚̏‰Šú‰»î•ñiŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‘®«j
    1009 
    1010 Š„ž‚Ý—v‹ƒ‰ƒCƒ“‘®«‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     926(6-1-3) 割込み要求ラインの初期化情報(割込み要求ライン属性)
     927
     928割込み要求ライン属性の初期化情報は,次の形式とする.
    1011929
    1012930const ATR _kernel_intinib_intatr[TNUM_INTNO] = {(intatr)};
    1013931
    1014 (6-1-4) Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚̏‰Šú‰»î•ñiŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‘®«j
    1015 
    1016 Š„ž‚Ý—Dæ“x‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     932(6-1-4) 割込み要求ラインの初期化情報(割込み要求ライン属性)
     933
     934割込み優先度の初期化情報は,次の形式とする.
    1017935
    1018936const PRI _kernel_intinib_intpri[TNUM_INTNO] = {(intpri)};
    1019937
    1020 (6-1-5) ƒGƒ‰[ðŒ
    1021 
    1022 Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ÉŠÖ‚·‚éƒGƒ‰[ðŒ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    1023 
    1024 –ƒpƒX2‚ÅŒŸo‚·‚é‚à‚Ì
    1025 Eintno ‚ª CFG_INT‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1026 Eintno ‚ª CFG_INT‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
    1027 Eintatr‚ªimTA_ENAINTnbmTA_EDGEnj‚Å‚È‚¢ê‡iE_RSATRj
    1028         ¦ ƒ^[ƒQƒbƒgˆË‘¶•”‚ÅŠ„ž‚Ý‘®«‚ð’ljÁ‰ÂiTARGET_INTATRj
    1029 EƒJ[ƒlƒ‹ŠÇ—‚ɌŒ肳‚ê‚Ä‚¢‚é intno ‚ɑ΂µ‚āCintpri‚ÉTMIN_INTPRI
    1030 @‚æ‚è‚à¬‚³‚¢’li‚‚܂èC—Dæ“x‚Æ‚µ‚Ă͍‚‚¢’lj‚ªŽw’肳‚ꂽê‡iE_OBJj
    1031 EƒJ[ƒlƒ‹ŠÇ—ŠO‚ɌŒ肳‚ê‚Ä‚¢‚é intno ‚ɑ΂µ‚āCintpri ‚É TMIN_INTPRI
    1032 @‚Æ“¯‚¶‚©‚Ü‚½‚Í‚»‚ê‚æ‚è‚à‘å‚«‚¢’li‚‚܂èC—Dæ“x‚Æ‚µ‚Ä‚Í“¯‚¶‚©‚Ü‚½‚Í
    1033 @‚»‚ê‚æ‚è’á‚¢’lj‚ªŽw’肳‚ꂽê‡iE_OBJj
    1034 Eintpri ‚ª CFG_INT ‚ɑ΂·‚銄ž‚Ý—Dæ“x‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1035 
    1036 –•K—v‚ɉž‚¶‚ă^[ƒQƒbƒgˆË‘¶•”‚ÅŒŸo‚·‚é‚à‚Ì
    1037 Eintatr ‚ªŠ„ž‚Ý‘®«‚Æ‚µ‚Đݒè‚Å‚«‚È‚¢’l‚̏ꍇiE_RSATRj
    1038 Eintpri ‚ªŠ„ž‚Ý—Dæ“x‚Æ‚µ‚Đݒè‚Å‚«‚È‚¢’l‚̏ꍇiE_PARj
    1039 E“¯ˆê‚ÌŠ„ž‚Ý—Dæ“x‚µ‚©Ý’è‚Å‚«‚È‚¢Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ɑ΂µ‚āCˆÙ‚Ȃ銄
    1040 @ž‚Ý—Dæ“x‚ðÝ’肵‚½ê‡iE_PARj
    1041 
    1042 (6-2) Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ÉŠÖ‚·‚é’è‹`
    1043 
    1044 (6-2-1) Š„ž‚݃nƒ“ƒhƒ‰‚̐¶¬
    1045 
    1046 ƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1047 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹’†‚ÉŠÜ‚Ü‚ê‚銄ž‚݃T[ƒrƒXƒ‹[ƒ`
    1048 ƒ“‚ð’ljÁ‚·‚éÃ“IAPIuATT_ISRv‚ÉŠî‚«C“¯ˆê‚ÌŠ„ž‚ݔԍ†‚ɑ΂µ‚ĒljÁ‚³
    1049 ‚ꂽŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ð‡‚ÉŒÄ‚Ño‚·ŠÖ”‚𐶐¬‚·‚éD
    1050 
    1051 ‹ï‘Ì“I‚ɂ́C“¯ˆê‚ÌŠ„ž‚ݔԍ†‚ɑ΂µ‚ÄŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ð’ljÁ‚·‚é
     938(6-1-5) エラー条件
     939
     940割込み要求ラインに関するエラー条件は次の通りである.
     941
     942*パス2で検出するもの
     943・intno が CFG_INTに対する割込み番号として正しくない場合(E_PAR)
     944・intno が CFG_INTによって設定済みの場合(E_OBJ)
     945・intatrが([TA_ENAINT]|[TA_EDGE])でない場合(E_RSATR)
     946        ※ ターゲット依存部で割込み属性を追加可(TARGET_INTATR)
     947・カーネル管理に固定されている intno に対して,intpriにTMIN_INTPRI
     948 よりも小さい値(つまり,優先度としては高い値)が指定された場合(E_OBJ)
     949・カーネル管理外に固定されている intno に対して,intpri に TMIN_INTPRI
     950 と同じかまたはそれよりも大きい値(つまり,優先度としては同じかまたは
     951 それより低い値)が指定された場合(E_OBJ)
     952・intpri が CFG_INT に対する割込み優先度として正しくない場合(E_PAR)
     953
     954*必要に応じてターゲット依存部で検出するもの
     955・intatr が割込み属性として設定できない値の場合(E_RSATR)
     956・intpri が割込み優先度として設定できない値の場合(E_PAR)
     957・同一の割込み優先度しか設定できない割込み要求ラインに対して,異なる割
     958 込み優先度を設定した場合(E_PAR)
     959
     960(6-2) 割込みサービスルーチンに関する定義
     961
     962(6-2-1) 割込みハンドラの生成
     963
     964システムコンフィギュレーションファイル中に含まれる割込みサービスルーチ
     965ンを追加する静的API「ATT_ISR」に基づき,同一の割込み番号に対して追加さ
     966れた割込みサービスルーチンを順に呼び出す関数を生成する.
     967
     968具体的には,同一の割込み番号に対して割込みサービスルーチンを追加する
    1052969
    1053970ATT_ISR({ isratr_1, exinf_1, intno, isr_1, isrpri_1 });
    1054971ATT_ISR({ isratr_2, exinf_2, intno, isr_2, isrpri_2 });
    1055         cc
     972        ……
    1056973ATT_ISR({ isratr_n, exinf_n, intno, isr_n, isrpri_n });
    1057974
    1058 ‚Æ‚¢‚¤Ã“IAPI‚ɑ΂µ‚āCŽŸ‚̂悤‚Ȋ֐”‚𐶐¬‚·‚éD‚±‚±‚ŁCisrpri_1C
    1059 isrpri_2CccCisrpri_n‚́C’l‚̏¬‚³‚¢‡‚É•À‚בւ¦‚ç‚ê‚Ä‚¢‚é‚à‚Ì‚Æ‚·‚éD
    1060 ’l‚ª“¯‚¶‚à‚̂̊Ԃł́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1061 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹’†‚ł̐ÓI
    1062 API‚̏‡˜‚Ì’Ê‚è‚É•À‚ñ‚Å‚¢‚é‚à‚Ì‚Æ‚·‚éD
     975という静的APIに対して,次のような関数を生成する.ここで,isrpri_1,
     976isrpri_2,……,isrpri_nは,値の小さい順に並べ替えられているものとする.
     977値が同じものの間では,システムコンフィギュレーションファイル中での静的
     978APIの順序の通りに並んでいるものとする.
    1063979
    1064980static void
     
    1070986        saved_ipm = i_get_ipm();
    1071987
    1072         LOG_ISR_ENTER(<intno>);         /* ISR1‚̌ďo‚µ */
     988        LOG_ISR_ENTER(<intno>);         /* ISR1の呼出し */
    1073989        isr_1((intptr_t)(exinf_1));
    1074990        LOG_ISR_LEAVE(intno);
    1075991
    1076         if (i_sense_lock()) {           /* ISR‚̌ďo‚µ‘O‚̏ó‘Ô‚É–ß‚· */
     992        if (i_sense_lock()) {           /* ISRの呼出し前の状態に戻す */
    1077993                i_unlock_cpu();
    1078994        }
    1079995        i_set_ipm(saved_ipm);
    1080996
    1081         LOG_ISR_ENTER(<intno>);         /* ISR2‚̌ďo‚µ */
     997        LOG_ISR_ENTER(<intno>);         /* ISR2の呼出し */
    1082998        isr_2((intptr_t)(exinf_2));
    1083999        LOG_ISR_LEAVE(intno);
    10841000
    1085         if (i_sense_lock()) {           /* ISR‚̌ďo‚µ‘O‚̏ó‘Ô‚É–ß‚· */
     1001        if (i_sense_lock()) {           /* ISRの呼出し前の状態に戻す */
    10861002                i_unlock_cpu();
    10871003        }
    10881004        i_set_ipm(saved_ipm);
    10891005
    1090         cc
    1091 
    1092         LOG_ISR_ENTER(<intno>);         /* ISRn‚̌ďo‚µ */
     1006        ……
     1007
     1008        LOG_ISR_ENTER(<intno>);         /* ISRnの呼出し */
    10931009        isr_n((intptr_t)(exinf_n));
    10941010        LOG_ISR_LEAVE(intno);
     
    10971013}
    10981014
    1099 ‚±‚±‚ŁCISRn‚̌ďo‚µ‚ÌŒã‚Ɍďo‚µ‘O‚̏ó‘Ô‚É–ß‚³‚È‚¢‚̂́CŠ„ž‚݃nƒ“ƒhƒ‰
    1100 ‚©‚ç‚̃Šƒ^[ƒ“‚É‚æ‚èCƒJ[ƒlƒ‹‚ªŒ³‚̏ó‘Ô‚É–ß‚·‚½‚ß‚Å‚ ‚éD
    1101 
    1102 “¯ˆê‚ÌŠ„ž‚ݔԍ†‚ɑ΂µ‚ĒljÁ‚³‚ꂽŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ª1‚‚݂̂̏ꍇ
    1103 ‚ɂ́CŽŸ‚̂悤‚Ȋ֐”‚𐶐¬‚·‚éD
     1015ここで,ISRnの呼出しの後に呼出し前の状態に戻さないのは,割込みハンドラ
     1016からのリターンにより,カーネルが元の状態に戻すためである.
     1017
     1018同一の割込み番号に対して追加された割込みサービスルーチンが1つのみの場合
     1019には,次のような関数を生成する.
    11041020
    11051021static void
     
    11131029}
    11141030
    1115 y‰Û‘èz‚±‚±‚ŁCLOG_ISR_ENTERCLOG_ISR_LEAVE‚̈ø”‚ð‚Ç‚¤‚·‚é‚©‚ª‰Û‘è‚Æ
    1116 ‚µ‚ÄŽc‚Á‚Ä‚¢‚éDATT_ISR‚Å“o˜^‚³‚ꂽISR‚ɑ΂µ‚Ä‚ÍISR ID‚ª•t—^‚³‚ê‚È‚¢‚½
    1117 ‚߁CID‚ÅISR‚ð‹æ•Ê‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢D‚â‚Þ‚È‚­Š„ž‚ݔԍ†‚ð“n‚µ‚Ä‚¢‚邪C
    1118 Šg’£î•ñiexinfj‚à“n‚·‚ׂ«‚©‚à‚µ‚ê‚È‚¢D
    1119 
    1120 (6-2-2) Š„ž‚݃nƒ“ƒhƒ‰‚Ì’è‹`‚É‘Š“–‚·‚鏈—
    1121 
    1122 ã‚̂悤‚ÉŠ„ž‚݃nƒ“ƒhƒ‰‚𐶐¬‚µ‚½ê‡‚ɂ́CŽŸ‚Éà–¾‚·‚銄ž‚݃nƒ“ƒhƒ‰
    1123 ‚ÉŠÖ‚·‚é’è‹`‚É‚¨‚¢‚āCƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1124 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹’†‚ÉŽŸ‚̐Ã
    1125 “IAPI‚ªŠÜ‚Ü‚ê‚Ä‚¢‚é‚Ì‚Æ“¯—l‚ɏˆ—‚·‚éD
     1031【課題】ここで,LOG_ISR_ENTER,LOG_ISR_LEAVEの引数をどうするかが課題と
     1032して残っている.ATT_ISRで登録されたISRに対してはISR IDが付与されないた
     1033め,IDでISRを区別することができない.やむなく割込み番号を渡しているが,
     1034拡張情報(exinf)も渡すべきかもしれない.
     1035
     1036(6-2-2) 割込みハンドラの定義に相当する処理
     1037
     1038上のように割込みハンドラを生成した場合には,次に説明する割込みハンドラ
     1039に関する定義において,システムコンフィギュレーションファイル中に次の静
     1040的APIが含まれているのと同様に処理する.
    11261041
    11271042DEF_INH(inhno, { TA_NULL, _kernel_inthdr_<intno> });
    11281043
    1129 ‚±‚±‚Åinhno‚́Cintno‚ɑΉž‚·‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†‚Å‚ ‚éD
    1130 
    1131 (6-2-3) ƒGƒ‰[ðŒ
    1132 
    1133 Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ÉŠÖ‚·‚éƒGƒ‰[ðŒ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    1134 
    1135 –ƒpƒX2‚ÅŒŸo‚·‚é‚à‚Ì
    1136 Eisratr ‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
    1137         ¦ ƒ^[ƒQƒbƒgˆË‘¶•”‚ÅŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‘®«‚ð’ljÁ‰ÂiTARGET_ISRATRj
    1138 Eintno ‚ª ATT_ISR ‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1139         ¦ intno ‚ɑΉž‚·‚é inhno ‚ª‚È‚¢ê‡‚ðŠÜ‚Þ
    1140 E(TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)‚Å‚È‚¢ê‡iE_PARj
    1141 Eintno ‚ɑΉž‚·‚é inhno ‚ɑ΂µ‚Ä DEF_INH ‚ª‚ ‚éê‡iE_OBJj
    1142 Eintno ‚ɑ΂·‚é CFG_INT ‚ª‚È‚¢ê‡iE_OBJj
    1143 Eintno ‚ɑ΂µ‚Ä CFG_INT ‚ª‘¶Ý‚µC‚©‚CCFG_INT ‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ª
    1144 @TMIN_INTPRI ‚æ‚è‚à¬‚³‚¢i‚‚܂èC—Dæ“x‚Æ‚µ‚Ă͍‚‚¢jê‡iE_OBJj
    1145         ¦ ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌISR‚̓Tƒ|[ƒg‚µ‚È‚¢‚½‚ß
    1146 
    1147 –•K—v‚ɉž‚¶‚ă^[ƒQƒbƒgˆË‘¶•”‚ÅŒŸo‚·‚é‚à‚Ì
    1148 Eisr‚ªƒvƒƒOƒ‰ƒ€‚ÌŠJŽn”Ô’n‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1149 
    1150 (6-3) Š„ž‚݃nƒ“ƒhƒ‰‚ÉŠÖ‚·‚é’è‹`
    1151 
    1152 Š„ž‚݃nƒ“ƒhƒ‰‚ð’è‹`‚·‚éÃ“IAPIuDEF_INHv‚Å’è‹`‚µ‚½Š„ž‚݃nƒ“ƒhƒ‰
    1153 iãq‚ÌŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚̒ljÁ‚É‚æ‚èƒRƒ“ƒtƒBƒMƒ
    1154 ƒŒ[ƒ^‚ª¶¬‚µ‚½
    1155 Š„ž‚݃nƒ“ƒhƒ‰‚ðŠÜ‚ށj‚ÉŠÖ‚·‚é’è‹`‚𐶐¬‚·‚éD‹ï‘Ì“I‚É‚ÍŽŸ‚Ì’Ê‚èD
    1156 
    1157 ˆÈ‰º‚ł́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1158 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ÉŽŸ‚̐ÓIAPI‚ªŠÜ‚Ü‚ê
    1159 ‚Ä‚¢‚鎞‚ɐ¶¬‚·‚ׂ«î•ñ‚ɂ‚¢‚ďq‚ׂéD
     1044ここでinhnoは,intnoに対応する割込みハンドラ番号である.
     1045
     1046(6-2-3) エラー条件
     1047
     1048割込みサービスルーチンに関するエラー条件は次の通りである.
     1049
     1050*パス2で検出するもの
     1051・isratr が(TA_NULL)でない場合(E_RSATR)
     1052        ※ ターゲット依存部で割込みサービスルーチン属性を追加可(TARGET_ISRATR)
     1053・intno が ATT_ISR に対する割込み番号として正しくない場合(E_PAR)
     1054        ※ intno に対応する inhno がない場合を含む
     1055・(TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)でない場合(E_PAR)
     1056・intno に対応する inhno に対して DEF_INH がある場合(E_OBJ)
     1057・intno に対する CFG_INT がない場合(E_OBJ)
     1058・intno に対して CFG_INT が存在し,かつ,CFG_INT で設定された割込み優先度が
     1059 TMIN_INTPRI よりも小さい(つまり,優先度としては高い)場合(E_OBJ)
     1060        ※ カーネル管理外のISRはサポートしないため
     1061
     1062*必要に応じてターゲット依存部で検出するもの
     1063・isrがプログラムの開始番地として正しくない場合(E_PAR)
     1064
     1065(6-3) 割込みハンドラに関する定義
     1066
     1067割込みハンドラを定義する静的API「DEF_INH」で定義した割込みハンドラ
     1068(上述の割込みサービスルーチンの追加によりコンフィギュレータが生成した
     1069割込みハンドラを含む)に関する定義を生成する.具体的には次の通り.
     1070
     1071以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
     1072ている時に生成すべき情報について述べる.
    11601073
    11611074DEF_INH(inhno, { inhatr, inthdr });
    11621075
    1163 (6-3-1) ’è‹`‚·‚銄ž‚݃nƒ“ƒhƒ‰‚̐”
    1164 
    1165 ’è‹`‚·‚銄ž‚݃nƒ“ƒhƒ‰‚̐”‚ðƒ}ƒNƒ’è‹`‚·‚éƒvƒŠƒvƒƒZƒbƒTƒfƒBƒŒƒNƒeƒBƒu
    1166 i#definej‚𐶐¬‚·‚éD‚Ü‚½C‚»‚Ì’l‚ðŽ‚Â•Ï”‚Ì’è‹`‚𐶐¬‚·‚éD‹ï‘Ì“I
    1167 ‚ɂ́CŽŸ‚̂悤‚ȍs‚𐶐¬‚·‚éD
    1168 
    1169 #define TNUM_INHNO <’è‹`‚·‚銄ž‚݃nƒ“ƒhƒ‰‚̐”>
     1076(6-3-1) 定義する割込みハンドラの数
     1077
     1078定義する割込みハンドラの数をマクロ定義するプリプロセッサディレクティブ
     1079(#define)を生成する.また,その値を持つ変数の定義を生成する.具体的
     1080には,次のような行を生成する.
     1081
     1082#define TNUM_INHNO <定義する割込みハンドラの数>
    11701083const uint_t    _kernel_tnum_inhno = TNUM_INHNO;
    11711084
    1172 (6-3-2) Š„ž‚݃nƒ“ƒhƒ‰‚̏o“üŒûˆ—
    1173 
    1174 ’è‹`‚·‚銄ž‚݃nƒ“ƒhƒ‰–ˆ‚ɁCŠ„ž‚݃nƒ“ƒhƒ‰‚̏o“üŒûˆ—ƒ‹[ƒ`ƒ“‚𐶐¬‚·
    1175 ‚éD‹ï‘Ì“I‚ɂ́CŽŸ‚̂悤‚ȍs‚𐶐¬‚·‚éD
     1085(6-3-2) 割込みハンドラの出入口処理
     1086
     1087定義する割込みハンドラ毎に,割込みハンドラの出入口処理ルーチンを生成す
     1088る.具体的には,次のような行を生成する.
    11761089
    11771090INTHDR_ENTRY(inhno, inhno_num, inthdr)
    11781091
    1179 ‚±‚±‚Åinhno_num‚́CinhnoiŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†j‚𐔒l‚Å•\Œ»‚µ‚½‚à‚̂ŁC
    1180 ƒAƒZƒ“ƒuƒŠŒ¾Œê‹Lq‚ÉŽg—p‚·‚邽‚ß‚Ì‚à‚Ì‚Å‚ ‚éD
    1181 
    1182 (6-3-3) Š„ž‚݃nƒ“ƒhƒ‰‚̏‰Šú‰»î•ñiŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†j
    1183 
    1184 Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     1092ここでinhno_numは,inhno(割込みハンドラ番号)を数値で表現したもので,
     1093アセンブリ言語記述に使用するためのものである.
     1094
     1095(6-3-3) 割込みハンドラの初期化情報(割込みハンドラ番号)
     1096
     1097割込みハンドラ番号の初期化情報は,次の形式とする.
    11851098
    11861099const INHNO _kernel_inhinib_inhno[TNUM_INHNO] = {(inhno)};
    11871100
    1188 (6-3-4) Š„ž‚݃nƒ“ƒhƒ‰‚̏‰Šú‰»î•ñiŠ„ž‚݃nƒ“ƒhƒ‰‘®«j
    1189 
    1190 Š„ž‚݃nƒ“ƒhƒ‰‘®«‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     1101(6-3-4) 割込みハンドラの初期化情報(割込みハンドラ属性)
     1102
     1103割込みハンドラ属性の初期化情報は,次の形式とする.
    11911104
    11921105const ATR _kernel_inhinib_inhatr[TNUM_INHNO] = {(inhatr)};
    11931106
    1194 (6-3-5) Š„ž‚݃nƒ“ƒhƒ‰‚̏‰Šú‰»î•ñiŠ„ž‚݃nƒ“ƒhƒ‰ƒAƒhƒŒƒXj
    1195 
    1196 Š„ž‚݃nƒ“ƒhƒ‰‚̃AƒhƒŒƒX‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     1107(6-3-5) 割込みハンドラの初期化情報(割込みハンドラアドレス)
     1108
     1109割込みハンドラのアドレスの初期化情報は,次の形式とする.
    11971110
    11981111const FP _kernel_inhinib_entry[TNUM_INHNO] = {(inthdr)};
    11991112
    1200 (6-3-6) ƒGƒ‰[ðŒ
    1201 
    1202 Š„ž‚݃nƒ“ƒhƒ‰‚ÉŠÖ‚·‚éƒGƒ‰[ðŒ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    1203 
    1204 –ƒpƒX2‚ÅŒŸo‚·‚é‚à‚Ì
    1205 Einhno ‚ª DEF_INH ‚ɑ΂·‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1206 Einhno ‚ª DEF_INH ‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
    1207 #Einhno ‚ɑΉž‚·‚é intno ‚ɑ΂µ‚Ä ATT_ISR ‚ª‚ ‚éê‡iE_OBJj
    1208 #       ¦ inhno ‚ɑΉž‚·‚é intno ‚ª‚È‚¢ê‡‚ɂ́C‚±‚̃`ƒFƒbƒN‚ðs‚í‚È‚¢
    1209 #       ¨ ‚±‚̃`ƒFƒbƒN‚́CŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‘¤‚ōs‚¤
    1210 Einhatr ‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
    1211         ¦ ƒ^[ƒQƒbƒgˆË‘¶•”‚ÅŠ„ž‚݃nƒ“ƒhƒ‰‘®«‚ð’ljÁ‰ÂiTARGET_INHATRj
    1212         ¦ TA_NONKERNEL ‚ðŽg‚¤ê‡‚ɂ́CTARGET_INHATR ‚ɐݒ肷‚é
    1213 EƒJ[ƒlƒ‹ŠÇ—‚ɌŒ肳‚ê‚Ä‚¢‚é inhno ‚ɑ΂µ‚āCinhatr ‚É TA_NONKERNEL ‚ª
    1214 @Žw’肳‚ê‚Ä‚¢‚éê‡iE_RSATRj
    1215 EƒJ[ƒlƒ‹ŠÇ—ŠO‚ɌŒ肳‚ê‚Ä‚¢‚é inhno ‚ɑ΂µ‚āCinhatr ‚É TA_NONKERNEL ‚ª
    1216 @Žw’肳‚ê‚Ä‚¢‚È‚¢ê‡iE_RSATRj
    1217 Einhno ‚ɑΉž‚·‚é intno ‚ɑ΂·‚é CFG_INT ‚ª‚È‚¢ê‡iE_OBJj
    1218         ¦ inhno ‚ɑΉž‚·‚é intno ‚ª‚È‚¢ê‡‚ɂ́C‚±‚̃`ƒFƒbƒN‚ðs‚í‚È‚¢
    1219 Einhatr ‚É TA_NONKERNEL ‚ªŽw’肳‚ê‚Ä‚¨‚炸Cinhno ‚ɑΉž‚·‚é intno ‚ɑ΂µ‚Ä
    1220 @CFG_INT ‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ª TMIN_INTPRI ‚æ‚è‚à¬‚³‚¢ê‡iE_OBJj
    1221         ¦ inhno ‚ɑΉž‚·‚é intno ‚ª‚È‚¢ê‡‚ɂ́C‚±‚̃`ƒFƒbƒN‚ðs‚í‚È‚¢
    1222 Einhatr ‚É TA_NONKERNEL ‚ªŽw’肳‚ê‚Ä‚¨‚èCinhno ‚ɑΉž‚·‚é intno ‚ɑ΂µ‚Ä
    1223 @CFG_INT ‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ª TMIN_INTPRI ˆÈã‚Å‚ ‚éê‡iE_OBJj
    1224         ¦ inhno ‚ɑΉž‚·‚é intno ‚ª‚È‚¢ê‡‚ɂ́C‚±‚̃`ƒFƒbƒN‚ðs‚í‚È‚¢
    1225 
    1226 –•K—v‚ɉž‚¶‚ă^[ƒQƒbƒgˆË‘¶•”‚ÅŒŸo‚·‚é‚à‚Ì
    1227 Einthdr‚ªƒvƒƒOƒ‰ƒ€‚ÌŠJŽn”Ô’n‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1228 
    1229 (7) CPU—áŠO‚ÉŠÖ‚·‚é’è‹`
    1230 
    1231 CPU—áŠO‚ÉŠÖ‚µ‚ж¬‚·‚éî•ñ‚́Cƒ^[ƒQƒbƒg–ˆ‚É’è‚߂邱‚Æ‚ª‚Å‚«‚éD
    1232 ƒ^[ƒQƒbƒg–ˆ‚É’è‚ß‚È‚¢ê‡‚ɂ́CˆÈ‰º‚ŏq‚ׂéƒ^[ƒQƒbƒg‚Ɉˑ¶‚µ‚È‚¢•W€“I‚È
    1233 î•ñ‚𐶐¬‚·‚éDƒ^[ƒQƒbƒg–ˆ‚É’è‚ß‚éê‡‚ɂ́C‚±‚ê‚ç‚̏î•ñ‚͐¶¬‚³‚ê‚È‚¢D
    1234 
    1235 ƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1236 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹’†‚ɁCCPU—áŠOƒnƒ“ƒhƒ‰‚ð’è‹`‚·‚é
    1237 Ã“IAPIuDEF_EXCv‚ªŠÜ‚Ü‚ê‚Ä‚¢‚éê‡‚ɁCCPU—áŠOƒnƒ“ƒhƒ‰‚ÉŠÖ‚·‚é’è‹`‚ð
    1238 ¶¬‚·‚éD
    1239 
    1240 ˆÈ‰º‚ł́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1241 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ÉŽŸ‚̐ÓIAPI‚ªŠÜ‚Ü‚ê
    1242 ‚Ä‚¢‚鎞‚ɐ¶¬‚·‚ׂ«î•ñ‚ɂ‚¢‚ďq‚ׂéD
     1113(6-3-6) エラー条件
     1114
     1115割込みハンドラに関するエラー条件は次の通りである.
     1116
     1117*パス2で検出するもの
     1118・inhno が DEF_INH に対する割込みハンドラ番号として正しくない場合(E_PAR)
     1119・inhno が DEF_INH によって設定済みの場合(E_OBJ)
     1120#・inhno に対応する intno に対して ATT_ISR がある場合(E_OBJ)
     1121#       ※ inhno に対応する intno がない場合には,このチェックを行わない
     1122#       → このチェックは,割込みサービスルーチン側で行う
     1123・inhatr が(TA_NULL)でない場合(E_RSATR)
     1124        ※ ターゲット依存部で割込みハンドラ属性を追加可(TARGET_INHATR)
     1125        ※ TA_NONKERNEL を使う場合には,TARGET_INHATR に設定する
     1126・カーネル管理に固定されている inhno に対して,inhatr に TA_NONKERNEL が
     1127 指定されている場合(E_RSATR)
     1128・カーネル管理外に固定されている inhno に対して,inhatr に TA_NONKERNEL が
     1129 指定されていない場合(E_RSATR)
     1130・inhno に対応する intno に対する CFG_INT がない場合(E_OBJ)
     1131        ※ inhno に対応する intno がない場合には,このチェックを行わない
     1132・inhatr に TA_NONKERNEL が指定されておらず,inhno に対応する intno に対して
     1133 CFG_INT で設定された割込み優先度が TMIN_INTPRI よりも小さい場合(E_OBJ)
     1134        ※ inhno に対応する intno がない場合には,このチェックを行わない
     1135・inhatr に TA_NONKERNEL が指定されており,inhno に対応する intno に対して
     1136 CFG_INT で設定された割込み優先度が TMIN_INTPRI 以上である場合(E_OBJ)
     1137        ※ inhno に対応する intno がない場合には,このチェックを行わない
     1138
     1139*必要に応じてターゲット依存部で検出するもの
     1140・inthdrがプログラムの開始番地として正しくない場合(E_PAR)
     1141
     1142(7) CPU例外に関する定義
     1143
     1144CPU例外に関して生成する情報は,ターゲット毎に定めることができる.
     1145ターゲット毎に定めない場合には,以下で述べるターゲットに依存しない標準的な
     1146情報を生成する.ターゲット毎に定める場合には,これらの情報は生成されない.
     1147
     1148システムコンフィギュレーションファイル中に,CPU例外ハンドラを定義する
     1149静的API「DEF_EXC」が含まれている場合に,CPU例外ハンドラに関する定義を
     1150生成する.
     1151
     1152以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
     1153ている時に生成すべき情報について述べる.
    12431154
    12441155DEF_EXC(excno, { excatr, exchdr });
    12451156
    1246 (7-1) ’è‹`‚·‚éCPU—áŠOƒnƒ“ƒhƒ‰‚̐”
    1247 
    1248 ’è‹`‚·‚éCPU—áŠOƒnƒ“ƒhƒ‰‚̐”‚ðƒ}ƒNƒ’è‹`‚·‚éƒvƒŠƒvƒƒZƒbƒTƒfƒBƒŒƒNƒeƒB
    1249 ƒui#definej‚𐶐¬‚·‚éD‚Ü‚½C‚»‚Ì’l‚ðŽ‚Â•Ï”‚Ì’è‹`‚𐶐¬‚·‚éD‹ï‘Ì
    1250 “I‚ɂ́CŽŸ‚̂悤‚ȍs‚𐶐¬‚·‚éD
    1251 
    1252 #define TNUM_EXCNO <’è‹`‚·‚éCPU—áŠOƒnƒ“ƒhƒ‰‚̐”>
     1157(7-1) 定義するCPU例外ハンドラの数
     1158
     1159定義するCPU例外ハンドラの数をマクロ定義するプリプロセッサディレクティ
     1160ブ(#define)を生成する.また,その値を持つ変数の定義を生成する.具体
     1161的には,次のような行を生成する.
     1162
     1163#define TNUM_EXCNO <定義するCPU例外ハンドラの数>
    12531164const uint_t    _kernel_tnum_excno = TNUM_EXCNO;
    12541165
    1255 (7-2) CPU—áŠOƒnƒ“ƒhƒ‰‚̏o“üŒûˆ—
    1256 
    1257 ’è‹`‚·‚éCPU—áŠOƒnƒ“ƒhƒ‰–ˆ‚ɁCCPU—áŠOƒnƒ“ƒhƒ‰‚̏o“üŒûˆ—ƒ‹[ƒ`ƒ“‚𐶐¬
    1258 ‚·‚éD‹ï‘Ì“I‚ɂ́CŽŸ‚̂悤‚ȍs‚𐶐¬‚·‚éD
     1166(7-2) CPU例外ハンドラの出入口処理
     1167
     1168定義するCPU例外ハンドラ毎に,CPU例外ハンドラの出入口処理ルーチンを生成
     1169する.具体的には,次のような行を生成する.
    12591170
    12601171EXCHDR_ENTRY(excno, excno_num, exchdr)
    12611172
    1262 ‚±‚±‚Åexcno_num‚́CexcnoiCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†j‚𐔒l‚Å•\Œ»‚µ‚½‚à‚̂ŁC
    1263 ƒAƒZƒ“ƒuƒŠŒ¾Œê‹Lq‚ÉŽg—p‚·‚邽‚ß‚Ì‚à‚Ì‚Å‚ ‚éD
    1264 
    1265 (7-3) CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚̏‰Šú‰»î•ñiCPU—áŠO”ԍ†j
    1266 
    1267 CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     1173ここでexcno_numは,excno(CPU例外ハンドラ番号)を数値で表現したもので,
     1174アセンブリ言語記述に使用するためのものである.
     1175
     1176(7-3) CPU例外ハンドラ番号の初期化情報(CPU例外番号)
     1177
     1178CPU例外ハンドラ番号の初期化情報は,次の形式とする.
    12681179
    12691180const EXCNO _kernel_excinib_excno[TNUM_EXCNO] = {(excno)};
    12701181
    1271 (7-4) CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚̏‰Šú‰»î•ñiCPU—áŠOƒnƒ“ƒhƒ‰‘®«j
    1272 
    1273 CPU—áŠOƒnƒ“ƒhƒ‰‘®«‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     1182(7-4) CPU例外ハンドラ番号の初期化情報(CPU例外ハンドラ属性)
     1183
     1184CPU例外ハンドラ属性の初期化情報は,次の形式とする.
    12741185
    12751186const ATR _kernel_excinib_excatr[TNUM_EXCNO] = {(excatr)};
    12761187
    1277 (7-5) CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚̏‰Šú‰»î•ñiCPU—áŠOƒnƒ“ƒhƒ‰‚̐擪”Ô’nj
    1278 
    1279 CPU—áŠOƒnƒ“ƒhƒ‰‚̐擪”Ô’n‚̏‰Šú‰»î•ñ‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     1188(7-5) CPU例外ハンドラ番号の初期化情報(CPU例外ハンドラの先頭番地)
     1189
     1190CPU例外ハンドラの先頭番地の初期化情報は,次の形式とする.
    12801191
    12811192const FP _kernel_excinib_entry[TNUM_EXCNO] = {(FP)(EXC_ENTRY(excno, exchdr))};
    12821193
    1283 ‚±‚±‚Å EXC_ENTRY ‚ÍCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚ÆCPU—áŠOƒnƒ“ƒhƒ‰‚̐擪”Ô’n‚ðŒ³‚É
    1284 CPU—áŠOƒnƒ“ƒhƒ‰‚Ì“ü‚èŒûˆ—‚Ì–¼Ì‚𐶐¬‚·‚éƒ}ƒNƒ‚ŁCƒ^[ƒQƒbƒgˆË‘¶•”‚Å
    1285 ’è‹`‚³‚ê‚Ä‚¢‚éD
    1286 
    1287 (7-6) ƒGƒ‰[ðŒ
    1288 
    1289 CPU—áŠOƒnƒ“ƒhƒ‰‚ÉŠÖ‚·‚éƒGƒ‰[ðŒ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    1290 
    1291 –ƒpƒX2‚ÅŒŸo‚·‚é‚à‚Ì
    1292 Eexcno ‚ª DEF_EXC ‚ɑ΂·‚é CPU —áŠOƒnƒ“ƒhƒ‰”ԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1293 Eexcno ‚ª DEF_EXC ‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
    1294 Eexcatr ‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
    1295         ¦ ƒ^[ƒQƒbƒgˆË‘¶•”‚ÅCPU—áŠOƒnƒ“ƒhƒ‰‘®«‚ð’ljÁ‰ÂiTARGET_EXCATRj
    1296 
    1297 –•K—v‚ɉž‚¶‚ă^[ƒQƒbƒgˆË‘¶•”‚ÅŒŸo‚·‚é‚à‚Ì
    1298 Eexchdr‚ªƒvƒƒOƒ‰ƒ€‚ÌŠJŽn”Ô’n‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1299 
    1300 (8) ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈æ‚ÉŠÖ‚·‚é’è‹`
    1301 
    1302 æ‚Ì (5-1-7) ‚Å‚àà–¾‚µ‚½‚悤‚ɁCSSPƒJ[ƒlƒ‹‚ł́CƒRƒ“ƒtƒBƒMƒ
    1303 ƒŒ[ƒ^‚Í
    1304 ‹¤—LƒXƒ^ƒbƒN—̈æ‚Ì‚ÝŠm•Û‚·‚éD‚µ‚½‚ª‚Á‚āC”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒgê—p‚̃Xƒ^ƒbƒN—̈æ‚Í
    1305 Šm•Û‚µ‚È‚¢D‚±‚Ì‚½‚߁CDEF_ICS ‚Ì–ðŠ„‚ÍC”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ª—p‚¢‚éƒXƒ^ƒbƒN—̈æ‚Ì
    1306 ƒTƒCƒY‚ðŽw’è‚·‚邱‚Æ‚Ì‚Ý‚Æ‚È‚éD‚Ü‚½CDEF_ICS ‚ł͐擪”Ô’n istk ‚Æ‚µ‚Ä NULL ‚Ì‚Ý
    1307 Žó‚¯•t‚¯‚éDNULL ˆÈŠO‚Ì’l‚ðŽw’肵‚½ê‡‚̓Gƒ‰[‚Æ‚È‚éD
    1308 
    1309 ¦ ‹¤—LƒXƒ^ƒbƒN—̈æ‚ÉŠÖ‚·‚é’è‹`‚Í (9) ‚ðŽQÆ‚·‚邱‚ƁD
    1310 
    1311 ‚È‚¨C”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒNƒTƒCƒY‚ÉŠÖ‚·‚é’è‹`‚́CˆÈ‰º‚̂悤‚É
    1312 DEF_ICS ‚Ì—L–³‚É‚©‚©‚í‚炸í‚ɐ¶¬‚³‚ê‚éD
    1313 
    1314 (8-1) DEF_ICS ‚ª‚È‚¢ê‡
    1315 
    1316 ƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1317 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ɁCÃ“IAPIuDEF_ICSv‚ªŠÜ‚Ü‚ê‚Ä
    1318 ‚¢‚È‚¢ê‡‚ɂ́CŽŸ‚̍s‚𐶐¬‚·‚éD
     1194ここで EXC_ENTRY はCPU例外ハンドラ番号とCPU例外ハンドラの先頭番地を元に
     1195CPU例外ハンドラの入り口処理の名称を生成するマクロで,ターゲット依存部で
     1196定義されている.
     1197
     1198(7-6) エラー条件
     1199
     1200CPU例外ハンドラに関するエラー条件は次の通りである.
     1201
     1202*パス2で検出するもの
     1203・excno が DEF_EXC に対する CPU 例外ハンドラ番号として正しくない場合(E_PAR)
     1204・excno が DEF_EXC によって設定済みの場合(E_OBJ)
     1205・excatr が(TA_NULL)でない場合(E_RSATR)
     1206        ※ ターゲット依存部でCPU例外ハンドラ属性を追加可(TARGET_EXCATR)
     1207
     1208*必要に応じてターゲット依存部で検出するもの
     1209・exchdrがプログラムの開始番地として正しくない場合(E_PAR)
     1210
     1211(8) 非タスクコンテキスト用のスタック領域に関する定義
     1212
     1213先の (5-1-7) でも説明したように,SSPカーネルでは,コンフィギュレータは
     1214共有スタック領域のみ確保する.したがって,非タスクコンテキスト専用のスタック領域は
     1215確保しない.このため,DEF_ICS の役割は,非タスクコンテキストが用いるスタック領域の
     1216サイズを指定することのみとなる.また,DEF_ICS では先頭番地 istk として NULL のみ
     1217受け付ける.NULL 以外の値を指定した場合はエラーとなる.
     1218
     1219※ 共有スタック領域に関する定義は (9) を参照すること.
     1220
     1221なお,非タスクコンテキスト用のスタックサイズに関する定義は,以下のように
     1222DEF_ICS の有無にかかわらず常に生成される.
     1223
     1224(8-1) DEF_ICS がない場合
     1225
     1226システムコンフィギュレーションファイルに,静的API「DEF_ICS」が含まれて
     1227いない場合には,次の行を生成する.
    13191228
    13201229#define TOPPERS_ISTKSZ          DEFAULT_ISTKSZ
    13211230
    1322 (8-2) DEF_ICS ‚ª‚ ‚éê‡
    1323 
    1324 ˆÈ‰º‚ł́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1325 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ÉŽŸ‚̐ÓIAPI‚ªŠÜ‚Ü‚ê‚Ä
    1326 ‚¢‚鎞‚ɐ¶¬‚·‚ׂ«î•ñ‚ɂ‚¢‚ďq‚ׂéD
     1231(8-2) DEF_ICS がある場合
     1232
     1233以下では,システムコンフィギュレーションファイルに次の静的APIが含まれて
     1234いる時に生成すべき情報について述べる.
    13271235
    13281236DEF_ICS({ istksz, istk });
    13291237
    1330 DEF_ICS ‚Å‚Í istk ‚Æ‚µ‚ÄNULL‚Ì‚ÝŽw’è‰Â”\‚Å‚ ‚èCo—͂ɂ͉e‹¿‚µ‚È‚¢D
    1331 ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pƒXƒ^ƒbƒN—̈æ‚̃TƒCƒY istksz ‚É‚æ‚莟‚̍s‚𐶐¬‚·‚éD
     1238DEF_ICS では istk としてNULLのみ指定可能であり,出力には影響しない.
     1239非タスクコンテキスト用スタック領域のサイズ istksz により次の行を生成する.
    13321240
    13331241#define TOPPERS_ISTKSZ          (istksz)
    13341242
    1335 ¦‹¤—LƒXƒ^ƒbƒN—̈æ‚Ì’è‹`‚ɂ‚¢‚Ä‚Í (9) ‚ðŽQÆ‚Ì‚±‚ƁD
    1336 
    1337 (8-3) ƒGƒ‰[ðŒ
    1338 
    1339 ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈æ‚ÉŠÖ‚·‚éƒGƒ‰[ðŒ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    1340 
    1341 –ƒpƒX2‚ÅŒŸo‚·‚é‚à‚Ì
    1342 EÃ“IAPIuDEF_ICSv‚ª•¡”‚ ‚éiE_OBJj
    1343 Eistksz‚ªƒXƒ^ƒbƒN—̈æ‚̃TƒCƒY‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1344         - istksz ‚ª 0 ‚̏ꍇ
    1345 Eistk‚ªƒXƒ^ƒbƒN—̈æ‚̐擪”Ô’n‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1346         - NULLˆÈŠO‚Ì’l‚̏ꍇ
    1347 
    1348 –•K—v‚ɉž‚¶‚ă^[ƒQƒbƒgˆË‘¶•”‚ÅŒŸo‚·‚é‚à‚Ì
    1349 Eistksz‚ª¬‚³‚·‚¬‚éê‡iE_PARj
    1350 
    1351 
    1352 (9) ‹¤—LƒXƒ^ƒbƒN—̈æ‚ÉŠÖ‚·‚é’è‹`
    1353 
    1354 æ‚Ì (5-1-7) ‚É‚Äà–¾‚µ‚½‚悤‚ɁCSSPƒJ[ƒlƒ‹‚ł̓^ƒXƒN‚ðŠÜ‚Þ‘S‚Ă̏ˆ—’PˆÊ‚ª
    1355 “¯‚¶ƒXƒ^ƒbƒN—̈æ‚ð‹¤—p‚·‚é‚悤‚ɐ݌v‚³‚ê‚Ä‚¢‚éD‚»‚µ‚Ä‹¤—p‚³‚ê‚éƒXƒ^ƒbƒN—̈æ‚Ì
    1356 ‚±‚Æ‚ðu‹¤—LƒXƒ^ƒbƒN—̈æv‚ƌĂԁD
    1357 
    1358 ‹¤—LƒXƒ^ƒbƒN—̈æ‚Ì’è‹`‚Í DEF_STK ‚ð—p‚¢‚čs‚¤D‚»‚µ‚āCƒRƒ“ƒtƒBƒMƒ
    1359 ƒŒ[ƒVƒ‡ƒ“‚Å‚Í
    1360 ‹¤—LƒXƒ^ƒbƒN—̈æ‚ÉŠÖ‚·‚é’è‹`‚́CDEF_STK ‚Ì—L–³‚ÉŠÖ‚í‚炸í‚ɐ¶¬‚³‚ê‚éD
    1361 
    1362 ˆÈ‰º‚ł́CDEF_STK ‚Ì—L–³‚¨‚æ‚Ñ—^‚¦‚ç‚ê‚éˆø”‚Ì“à—e‚É‚æ‚èC
    1363 ‚ǂ̂悤‚É‹¤—LƒXƒ^ƒbƒN—̈æ‚Ì’è‹`‚ª¶¬‚³‚ê‚é‚©‚ɂ‚¢‚Äà–¾‚·‚éD
    1364 
    1365 (9-1) DEF_STK ‚ª‚È‚¢ê‡‚ɐ¶¬‚³‚ê‚é’è‹`
    1366 
    1367 ƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1368 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ɁCÃ“IAPIuDEF_STKv‚ªŠÜ‚Ü‚ê‚Ä
    1369 ‚¢‚È‚¢ê‡‚ɂ́CŽŸ‚̍s‚𐶐¬‚·‚éD
     1243※共有スタック領域の定義については (9) を参照のこと.
     1244
     1245(8-3) エラー条件
     1246
     1247非タスクコンテキスト用のスタック領域に関するエラー条件は次の通りである.
     1248
     1249*パス2で検出するもの
     1250・静的API「DEF_ICS」が複数ある(E_OBJ)
     1251・istkszがスタック領域のサイズとして正しくない場合(E_PAR)
     1252        - istksz が 0 の場合
     1253・istkがスタック領域の先頭番地として正しくない場合(E_PAR)
     1254        - NULL以外の値の場合
     1255
     1256*必要に応じてターゲット依存部で検出するもの
     1257・istkszが小さすぎる場合(E_PAR)
     1258
     1259
     1260(9) 共有スタック領域に関する定義
     1261
     1262先の (5-1-7) にて説明したように,SSPカーネルではタスクを含む全ての処理単位が
     1263同じスタック領域を共用するように設計されている.そして共用されるスタック領域の
     1264ことを「共有スタック領域」と呼ぶ.
     1265
     1266共有スタック領域の定義は DEF_STK を用いて行う.そして,コンフィギュレーションでは
     1267共有スタック領域に関する定義は,DEF_STK の有無に関わらず常に生成される.
     1268
     1269以下では,DEF_STK の有無および与えられる引数の内容により,
     1270どのように共有スタック領域の定義が生成されるかについて説明する.
     1271
     1272(9-1) DEF_STK がない場合に生成される定義
     1273
     1274システムコンフィギュレーションファイルに,静的API「DEF_STK」が含まれて
     1275いない場合には,次の行を生成する.
    13701276
    13711277static STK_T                    _kernel_stack[COUNT_STK_T(TOPPERS_TSTKSZ+TOPPERS_ISTKSZ)];
     
    13731279#define TOPPERS_STKSZ           ROUND_STK_T(TOPPERS_TSTKSZ+TOPPERS_ISTKSZ)
    13741280
    1375 (9-2) DEF_STK‚ª‚ ‚éê‡‚ɂ̂ݐ¶¬‚³‚ê‚é’è‹`
    1376 
    1377 ˆÈ‰º‚ł́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1378 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ÉŽŸ‚̐ÓIAPI‚ªŠÜ‚Ü‚ê‚Ä
    1379 ‚¢‚鎞‚ɐ¶¬‚·‚ׂ«î•ñ‚ɂ‚¢‚ďq‚ׂéD
     1281(9-2) DEF_STKがある場合にのみ生成される定義
     1282
     1283以下では,システムコンフィギュレーションファイルに次の静的APIが含まれて
     1284いる時に生成すべき情報について述べる.
    13801285
    13811286DEF_STK({ stksz, stk });
    13821287
    1383 (9-2-1) stk ‚ª NULL ‚̏ꍇ
    1384 
    1385 stk ‚ª NULL ‚̏ꍇ‚ɂ́CŽw’肳‚ꂽƒTƒCƒY‚Ì‹¤—LƒXƒ^ƒbƒN—̈æ‚ðŠm•Û‚µC
    1386 ‹¤—LƒXƒ^ƒbƒN—̈æ‚̏‰Šú‰»î•ñ‚𐶐¬‚·‚éD
    1387 ‹ï‘Ì“I‚ɂ́Cã‹L‚̐ÓIAPI‚ɑ΂µ‚āCŽŸ‚̍s‚𐶐¬‚·‚éD
     1288(9-2-1) stk が NULL の場合
     1289
     1290stk が NULL の場合には,指定されたサイズの共有スタック領域を確保し,
     1291共有スタック領域の初期化情報を生成する.
     1292具体的には,上記の静的APIに対して,次の行を生成する.
    13881293
    13891294static STK_T                    _kernel_stack[COUNT_STK_T(stksz)];
     
    13911296#define TOPPERS_STKSZ           ROUND_STK_T(stksz)
    13921297
    1393 (9-2-2) stk ‚ª NULL ˆÈŠO‚̏ꍇ
    1394 
    1395 stk ‚ª NULL ‚Å‚È‚¢ê‡‚ɂ́C‹¤—LƒXƒ^ƒbƒN—̈æ‚̏‰Šú‰»î•ñ‚ðCŽŸ‚ÌŒ`Ž®‚Ő¶¬‚·‚éD
     1298(9-2-2) stk が NULL 以外の場合
     1299
     1300stk が NULL でない場合には,共有スタック領域の初期化情報を,次の形式で生成する.
    13961301
    13971302#define TOPPERS_STK             (stk)
    13981303#define TOPPERS_STKSZ           (stksz)
    13991304
    1400 (9-3) DEF_STK ‚Ì—L–³‚ÉŠÖŒW‚È‚­Cí‚ɐ¶¬‚³‚ê‚é’è‹`
    1401 
    1402 DEF_STK‚Ì—L–³‚É‚æ‚炸CŽŸ‚Ì’è‹`‚𐶐¬‚·‚éD
     1305(9-3) DEF_STK の有無に関係なく,常に生成される定義
     1306
     1307DEF_STKの有無によらず,次の定義を生成する.
    14031308
    14041309const SIZE      _kernel_stksz = TOPPERS_STKSZ;
     
    14091314#endif /* TOPPERS_ISTKPT */
    14101315
    1411 (9-4) ƒGƒ‰[ðŒ
    1412 
    1413 ‹¤—LƒXƒ^ƒbƒN—̈æ‚ÉŠÖ‚·‚éƒGƒ‰[ðŒ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    1414 
    1415 –ƒpƒX2‚ÅŒŸo‚·‚é‚à‚Ì
    1416 EÃ“IAPIuDEF_STKv‚ª•¡”‚ ‚éiE_OBJj
    1417 Estksz‚ªƒXƒ^ƒbƒN—̈æ‚̃TƒCƒY‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1418         - stksz ‚Æ‚µ‚Ä 0 ‚ðŽw’肵‚½ê‡
    1419         - ƒ^[ƒQƒbƒgˆË‘¶‚Ì’liCHECK_STKSZ_ALIGNj‚Ì”{”‚Å‚È‚¢ê‡
    1420         ¦ ‚±‚̃Gƒ‰[ƒ`ƒFƒbƒN‚́Cstk ‚ª NULL ‚Å‚È‚¢ê‡‚ɂ̂ݍs‚¤
    1421 EŒxFstksz ‚ªC(TOPPERS_TSTKSZ+TOPPERS_ISTKSZ) ‚æ‚è‚à¬‚³‚¢ê‡
    1422         ¦ DEF_STK ‚ª‘¶Ý‚µCstk ‚ª”ñNULL‚̏ꍇD
    1423         ¦ ƒ}ƒNƒ‚Ì’l‚ɂ‚¢‚Ä‚Í (5-1-9), (8-1), (8-2) ‚ðŽQÆ‚Ì‚±‚Æ
    1424 
    1425 –ƒpƒX3‚ÅŒŸo‚·‚é‚à‚Ì
    1426 Estk‚ªƒXƒ^ƒbƒN—̈æ‚̐擪”Ô’n‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1427         - ƒ^[ƒQƒbƒgˆË‘¶‚Ì’liCHECK_STACK_ALIGNj‚Ì”{”‚Å‚È‚¢ê‡
    1428         - NULL‚̏ꍇiƒ^[ƒQƒbƒgˆË‘¶CCHECK_STACK_NONNULLj
    1429 
    1430 (10) ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—‚ÉŠÖ‚·‚é’è‹`
    1431 
    1432 ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—‚ÉŠÖ˜A‚µ‚āCŽŸ‚Ì’è‹`‚𐶐¬‚·‚éD
    1433 
    1434 (10-1) ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰‚̐”
    1435 
    1436 ¶¬‚³‚ꂽƒ^ƒCƒ€ƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰‚̐”‚ðƒ}ƒNƒ’è‹`‚·‚éƒvƒŠƒvƒƒZƒbƒT
    1437 ƒfƒBƒŒƒNƒeƒCƒu(#define) ‚𐶐¬‚·‚éD
    1438 
    1439 SSPƒJ[ƒlƒ‹‚ł̓^ƒCƒ€ƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰‚Æ‚µ‚ÄŽüŠúƒnƒ“ƒhƒ‰‚¨‚æ‚уAƒ‰[ƒ€
    1440 ƒnƒ“ƒhƒ‰‚Ì‚Ý‚ðƒTƒ|[ƒg‚·‚éD‚»‚Ì‚½‚߁CCRE_CYC ‚¨‚æ‚Ñ CRE_ALM ‚̍‡Œv‚ª
    1441 ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰”‚Æ‚È‚éD
    1442 
    1443 ‹ï‘Ì“I‚ɂ́CŽŸ‚̂悤‚È‹Lq‚𐶐¬‚·‚éD
    1444 
    1445 #define TNUM_TMEVT      <ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰‚̌”>
    1446 
    1447 (10-2) ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚̃TƒCƒY‚Ì’è‹`
    1448 
    1449 ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚Ì—v‘f”‚ð’è‹`‚·‚é•Ï”‚𐶐¬‚·‚éD
    1450 ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚Ì—v‘f”‚̓^ƒCƒ€ƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰‚̐”‚É“™‚µ‚¢D
    1451 
    1452 ‹ï‘Ì“I‚ɂ́CŽŸ‚̂悤‚È‹Lq‚𐶐¬‚·‚éD
    1453 
    1454 const uint_t _kernel_tmevt_queue = <ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰‚̌”>;
    1455 
    1456 (10-3) ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒLƒ
    1457 [‚Ì’è‹`
    1458 
    1459 ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—‚Ì‚½‚߂̃Lƒ
    1460 [‚𐶐¬‚·‚éDƒLƒ
    1461 [‚Í”z—ñ‚Æ‚µ‚ÄŽÀ‘•‚³‚ê‚Ä
    1462 ‚¢‚éDƒLƒ
    1463 [‚̐擪‚ð•\Œ»‚·‚邽‚ß‚Ì”z—ñ—v‘f‚ðŠm•Û‚·‚邽‚߁C”z—ñ‚Ì—v‘f”‚Í
    1464 uƒ^ƒCƒ€ƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰‚̌”{1v‚Æ‚È‚éD
    1465 
    1466 ‹ï‘Ì“I‚ɂ́CŽŸ‚̂悤‚È‹Lq‚𐶐¬‚·‚éD
     1316(9-4) エラー条件
     1317
     1318共有スタック領域に関するエラー条件は次の通りである.
     1319
     1320*パス2で検出するもの
     1321・静的API「DEF_STK」が複数ある(E_OBJ)
     1322・stkszがスタック領域のサイズとして正しくない場合(E_PAR)
     1323        - stksz として 0 を指定した場合
     1324        - ターゲット依存の値(CHECK_STKSZ_ALIGN)の倍数でない場合
     1325        ※ このエラーチェックは,stk が NULL でない場合にのみ行う
     1326・警告:stksz が,(TOPPERS_TSTKSZ+TOPPERS_ISTKSZ) よりも小さい場合
     1327        ※ DEF_STK が存在し,stk が非NULLの場合.
     1328        ※ マクロの値については (5-1-9), (8-1), (8-2) を参照のこと
     1329
     1330*パス3で検出するもの
     1331・stkがスタック領域の先頭番地として正しくない場合(E_PAR)
     1332        - ターゲット依存の値(CHECK_STACK_ALIGN)の倍数でない場合
     1333        - NULLの場合(ターゲット依存,CHECK_STACK_NONNULL)
     1334
     1335(10) タイムイベント管理に関する定義
     1336
     1337タイムイベント管理に関連して,次の定義を生成する.
     1338
     1339(10-1) タイムイベントハンドラの数
     1340
     1341生成されたタイムイベントハンドラの数をマクロ定義するプリプロセッサ
     1342ディレクテイブ(#define) を生成する.
     1343
     1344SSPカーネルではタイムイベントハンドラとして周期ハンドラおよびアラーム
     1345ハンドラのみをサポートする.そのため,CRE_CYC および CRE_ALM の合計が
     1346タイムイベントハンドラ数となる.
     1347
     1348具体的には,次のような記述を生成する.
     1349
     1350#define TNUM_TMEVT      <タイムイベントハンドラの個数>
     1351
     1352(10-2) タイムイベントブロックのサイズの定義
     1353
     1354タイムイベントブロックの要素数を定義する変数を生成する.
     1355タイムイベントブロックの要素数はタイムイベントハンドラの数に等しい.
     1356
     1357具体的には,次のような記述を生成する.
     1358
     1359const uint_t _kernel_tmevt_queue = <タイムイベントハンドラの個数>;
     1360
     1361(10-3) タイムイベントキューの定義
     1362
     1363タイムイベント管理のためのキューを生成する.キューは配列として実装されて
     1364いる.キューの先頭を表現するための配列要素を確保するため,配列の要素数は
     1365「タイムイベントハンドラの個数+1」となる.
     1366
     1367具体的には,次のような記述を生成する.
    14671368
    14681369extern QUEUE tmevt_queue[TNUM_TMEVT+1];
    14691370
    1470 (10-4) ƒ^ƒCƒ€ƒCƒxƒ“ƒgŽžŠÔ‚Ì’è‹`
    1471 
    1472 ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰‚Ì‹N“®Žž‚ðŠi”[‚·‚é•Ï”‚́CŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     1371(10-4) タイムイベント時間の定義
     1372
     1373タイムイベントハンドラの起動時刻を格納する変数は,次の形式とする.
    14731374
    14741375extern EVTTIM tmevt_time[TNUM_TMEVT];
    14751376
    1476 (10-5) ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚̃R[ƒ‹ƒoƒbƒN‚Ì’è‹`
    1477 
    1478 ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰‚̃R[ƒ‹ƒoƒbƒNŠÖ”‚ðŠi”[‚·‚é•Ï”‚́C
    1479 ŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     1377(10-5) タイムイベントのコールバックの定義
     1378
     1379タイムイベントハンドラのコールバック関数を格納する変数は,
     1380次の形式とする.
    14801381
    14811382extern CBACK tmevt_callback[TNUM_TMEVT];
    14821383
    1483 (10-6) ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒR[ƒ‹ƒoƒbƒN‚̈ø”‚Ì’è‹`
    1484 
    1485 ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰‚̃R[ƒ‹ƒoƒbƒNŠÖ”‚̈ø”‚ðŠi”[‚·‚é•Ï”‚́C
    1486 ŽŸ‚ÌŒ`Ž®‚Æ‚·‚éD
     1384(10-6) タイムイベントコールバックの引数の定義
     1385
     1386タイムイベントハンドラのコールバック関数の引数を格納する変数は,
     1387次の形式とする.
    14871388
    14881389extern uintptr_t tmevt_arg[TNUM_TMEVT];
    14891390
    1490 (11) Šeƒ‚ƒWƒ
    1491 [ƒ‹‚̏‰Šú‰»ŠÖ”‚Ì’è‹`
    1492 
    1493 ŠeƒJ[ƒlƒ‹ƒIƒuƒWƒFƒNƒg‚ÌŠÇ—CŠ„ž‚ÝŠÇ—CCPU—áŠOƒnƒ“ƒhƒ‰ŠÇ—‚ÌŠe‹@”\‚ð
    1494 ‰Šú‰»ŠÖ”‚ð‡‚ÉŒÄ‚Ño‚·ŠÖ”i_kernel_initialize_objectj‚𐶐¬‚·‚éDŽŸ
    1495 ‚Ì3‚‚̏‰Šú‰»ŠÖ”‚ðœ‚¢‚ẮCŽg—p‚µ‚È‚¢‹@”\‚̏‰Šú‰»ŠÖ”‚͌Ăяo‚³‚È‚¢D
     1391(11) 各モジュールの初期化関数の定義
     1392
     1393各カーネルオブジェクトの管理,割込み管理,CPU例外ハンドラ管理の各機能を
     1394初期化関数を順に呼び出す関数(_kernel_initialize_object)を生成する.次
     1395の3つの初期化関数を除いては,使用しない機能の初期化関数は呼び出さない.
    14961396
    14971397_kernel_initialize_task();
     
    14991399_kernel_initialize_exception
    15001400
    1501 ‚Ü‚½ŽŸ‚̏‰Šú‰»ŠÖ”‚ɂ‚¢‚ẮCŽüŠúƒnƒ“ƒhƒ‰‚Ü‚½‚̓Aƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ðŽg—p‚·‚é
    1502 ê‡‚ɂ̂݌Ăяo‚³‚ê‚éD
     1401また次の初期化関数については,周期ハンドラまたはアラームハンドラを使用する
     1402場合にのみ呼び出される.
    15031403_kernel_initialize_time_event();
    15041404
    1505 ‚·‚ׂĂ̋@”\‚ðŽg‚Á‚½ê‡‚ɐ¶¬‚³‚ê‚éŠÖ”‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
     1405すべての機能を使った場合に生成される関数は次の通りである.
    15061406
    15071407void
     
    15181418
    15191419
    1520 (12) ‰Šú‰»ƒ‹[ƒ`ƒ“‚ÌŽÀsŠÖ”‚Ì’è‹`
    1521 
    1522 ƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1523 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹’†‚ÉŠÜ‚Ü‚ê‚鏉Šú‰»ƒ‹[ƒ`ƒ“‚ð’ljÁ
    1524 ‚·‚éÃ“IAPIuATT_INIv‚ɑ΂µ‚āC’ljÁ‚µ‚½‰Šú‰»ƒ‹[ƒ`ƒ“‚ð‡‚ÉŒÄ‚Ño‚·ŠÖ
    1525 ”‚𐶐¬‚·‚éD‹ï‘Ì“I‚ɂ́C
     1420(12) 初期化ルーチンの実行関数の定義
     1421
     1422システムコンフィギュレーションファイル中に含まれる初期化ルーチンを追加
     1423する静的API「ATT_INI」に対して,追加した初期化ルーチンを順に呼び出す関
     1424数を生成する.具体的には,
    15261425
    15271426ATT_INI({ iniatr, exinf, inirtn });
    15281427
    1529 ‚Æ‚¢‚¤Ã“IAPI‚ɑ΂µ‚āC
     1428という静的APIに対して,
    15301429
    15311430(inirtn)((intptr_t)(exinf));
    15321431
    1533 ‚ðŒÄ‚яo‚·ŠÖ”‚ðC_kernel_call_inirtn‚Æ‚¢‚¤–¼‘O‚Ő¶¬‚·‚éD‰Šú‰»ƒ‹[ƒ`
    1534 ƒ“‚ðŒÄ‚яo‚·‡˜‚́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1535 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹’†‚ł̐ÓI
    1536 API‚̏‡˜‚Ɉê’v‚³‚¹‚éD
    1537 
    1538 —Ⴆ‚΁C
     1432を呼び出す関数を,_kernel_call_inirtnという名前で生成する.初期化ルーチ
     1433ンを呼び出す順序は,システムコンフィギュレーションファイル中での静的
     1434APIの順序に一致させる.
     1435
     1436例えば,
    15391437
    15401438ATT_INI({ TA_NULL, 0, timer_initialize });
    15411439ATT_INI({ TA_NULL, CONSOLE_PORTID, serial_initialize });
    15421440
    1543 ‚Æ‚¢‚¤2‚‚̐ÓIAPI‚ª‚±‚̏‡˜‚Å‹Lq‚³‚ꂽŽž‚ɐ¶¬‚·‚éŠÖ”‚ÍŽŸ‚Ì’Ê‚è‚Å‚ 
    1544 ‚éD
     1441という2つの静的APIがこの順序で記述された時に生成する関数は次の通りであ
     1442る.
    15451443
    15461444void
     
    15511449}
    15521450
    1553 (12-1) ƒGƒ‰[ðŒ
    1554 
    1555 ‰Šú‰»ƒ‹[ƒ`ƒ“‚ÉŠÖ‚·‚éƒGƒ‰[ðŒ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    1556 
    1557 –ƒpƒX2‚ÅŒŸo‚·‚é‚à‚Ì
    1558 Einiatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
    1559 
    1560 –•K—v‚ɉž‚¶‚ă^[ƒQƒbƒgˆË‘¶•”‚ÅŒŸo‚·‚é‚à‚Ì
    1561 Einirtn‚ªƒvƒƒOƒ‰ƒ€‚ÌŠJŽn”Ô’n‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1562 
    1563 (13) I—¹ˆ—ƒ‹[ƒ`ƒ“‚ÌŽÀsŠÖ”‚Ì’è‹`
    1564 
    1565 ƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1566 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹’†‚ÉŠÜ‚Ü‚ê‚éI—¹ˆ—ƒ‹[ƒ`ƒ“‚ð’Ç
    1567 ‰Á‚·‚éÃ“IAPIuATT_TERv‚ɑ΂µ‚āC’ljÁ‚µ‚½I—¹ˆ—ƒ‹[ƒ`ƒ“‚ð‡‚ÉŒÄ‚Ño
    1568 ‚·ŠÖ”‚𐶐¬‚·‚éD‹ï‘Ì“I‚ɂ́C
     1451(12-1) エラー条件
     1452
     1453初期化ルーチンに関するエラー条件は次の通りである.
     1454
     1455*パス2で検出するもの
     1456・iniatrが(TA_NULL)でない場合(E_RSATR)
     1457
     1458*必要に応じてターゲット依存部で検出するもの
     1459・inirtnがプログラムの開始番地として正しくない場合(E_PAR)
     1460
     1461(13) 終了処理ルーチンの実行関数の定義
     1462
     1463システムコンフィギュレーションファイル中に含まれる終了処理ルーチンを追
     1464加する静的API「ATT_TER」に対して,追加した終了処理ルーチンを順に呼び出
     1465す関数を生成する.具体的には,
    15691466
    15701467ATT_TER({ teratr, exinf, terrtn });
    15711468
    1572 ‚Æ‚¢‚¤Ã“IAPI‚ɑ΂µ‚āC
     1469という静的APIに対して,
    15731470
    15741471(terrtn)((intptr_t)(exinf));
    15751472
    1576 ‚ðŒÄ‚яo‚·ŠÖ”‚ðC_kernel_call_terrtn‚Æ‚¢‚¤–¼‘O‚Ő¶¬‚·‚éDI—¹ˆ—ƒ‹[
    1577 ƒ`ƒ“‚ðŒÄ‚яo‚·‡˜‚́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1578 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹’†‚ł̐ÓI
    1579 API‚Ì‹t‡‚Ɉê’v‚³‚¹‚éD
    1580 
    1581 —Ⴆ‚΁C
     1473を呼び出す関数を,_kernel_call_terrtnという名前で生成する.終了処理ルー
     1474チンを呼び出す順序は,システムコンフィギュレーションファイル中での静的
     1475APIの逆順に一致させる.
     1476
     1477例えば,
    15821478
    15831479ATT_TER({ TA_NULL, 0, timer_terminate });
    15841480ATT_TER({ TA_NULL, CONSOLE_PORTID, serial_terminate });
    15851481
    1586 ‚Æ‚¢‚¤2‚‚̐ÓIAPI‚ª‚±‚̏‡˜‚Å‹Lq‚³‚ꂽŽž‚ɐ¶¬‚·‚éŠÖ”‚ÍŽŸ‚Ì’Ê‚è‚Å‚ 
    1587 ‚éD
     1482という2つの静的APIがこの順序で記述された時に生成する関数は次の通りであ
     1483る.
    15881484
    15891485void
     
    15941490}
    15951491
    1596 (13-1) ƒGƒ‰[ðŒ
    1597 
    1598 I—¹ˆ—ƒ‹[ƒ`ƒ“‚ÉŠÖ‚·‚éƒGƒ‰[ðŒ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    1599 
    1600 –ƒpƒX2‚ÅŒŸo‚·‚é‚à‚Ì
    1601 Eteratr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
    1602 
    1603 –•K—v‚ɉž‚¶‚ă^[ƒQƒbƒgˆË‘¶•”‚ÅŒŸo‚·‚é‚à‚Ì
    1604 Eterrtn‚ªƒvƒƒOƒ‰ƒ€‚ÌŠJŽn”Ô’n‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
    1605 
    1606 ˆÈã
     1492(13-1) エラー条件
     1493
     1494終了処理ルーチンに関するエラー条件は次の通りである.
     1495
     1496*パス2で検出するもの
     1497・teratrが(TA_NULL)でない場合(E_RSATR)
     1498
     1499*必要に応じてターゲット依存部で検出するもの
     1500・terrtnがプログラムの開始番地として正しくない場合(E_PAR)
     1501
     1502以上
  • ssp_qb_r5f100le_cs/trunk/doc/extension.txt

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11
    2                 TOPPERS/SSPƒJ[ƒlƒ‹
    3                 Šg’£ƒpƒbƒP[ƒWŽd—l
     2                TOPPERS/SSPカーネル
     3                拡張パッケージ仕様
    44
    5                 ‘Ήžƒo[ƒWƒ‡ƒ“: Release 1.3.0
    6                 ÅIXV: 2015”N 5ŒŽ12“ú
     5                対応バージョン: Release 1.3.0
     6                最終更新: 2015年 5月12日
    77
    8 ‚±‚̃hƒLƒ
    9 ƒƒ“ƒg‚́CTOPPERS/SSPƒJ[ƒlƒ‹‚Ì‹@”\‚ðŠg’£‚·‚邽‚ß‚ÌŠg’£
    10 ƒpƒbƒP[ƒW‚É•t‚¢‚Ä‹Lq‚µ‚½‚à‚Ì‚Å‚ ‚éD
     8このドキュメントは,TOPPERS/SSPカーネルの機能を拡張するための拡張
     9パッケージに付いて記述したものである.
    1110
    1211----------------------------------------------------------------------
     
    1817                Nagoya Municipal Industrial Research Institute, JAPAN
    1918 
    20  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    21  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    22  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    23  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    24      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    25      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    26  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    27      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    28 ƒƒ“ƒgi—˜—p
    29      ŽÒƒ}ƒjƒ
    30 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    31      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    32  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    33      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    34      ‚ƁD
    35    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    36 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    37 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    38        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    39    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    40        •ñ‚·‚邱‚ƁD
    41  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    42      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    43      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    44      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    45      –Ɛӂ·‚邱‚ƁD
     19 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     20 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     21 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     22 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     23     権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     24     スコード中に含まれていること.
     25 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     26     用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     27     者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     28     の無保証規定を掲載すること.
     29 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     30     用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     31     と.
     32   (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     33       作権表示,この利用条件および下記の無保証規定を掲載すること.
     34   (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     35       報告すること.
     36 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     37     害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     38     また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     39     由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     40     免責すること.
    4641 
    47  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    48  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    49  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    50  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    51  ‚̐ӔC‚𕉂í‚È‚¢D
     42 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     43 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     44 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     45 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     46 の責任を負わない.
    5247 
    5348----------------------------------------------------------------------
    5449
    55 ›Šg’£ƒpƒbƒP[ƒW‚ÌŠT—v
     50○拡張パッケージの概要
    5651
    57 EŽüŠúƒnƒ“ƒhƒ‰‹@”\
    58 EƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹@”\
    59 EƒVƒXƒeƒ€ŽžŠÇ—‹@”\
    60 EƒCƒxƒ“ƒgƒtƒ‰ƒO‹@”\
    61 Eƒf[ƒ^ƒLƒ
    62 [‹@”\
     52・周期ハンドラ機能
     53・アラームハンドラ機能
     54・システム時刻管理機能
     55・イベントフラグ機能
     56・データキュー機能
    6357
    64 ŽžŠÔŠÇ—‹@”\‚ðŽÀŒ»‚·‚邽‚߂̃^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—‹@”\‚àŠg’£ƒpƒbƒP[ƒW’†‚É
    65 ŠÜ‚ñ‚Å‚¢‚éD
     58時間管理機能を実現するためのタイムイベント管理機能も拡張パッケージ中に
     59含んでいる.
    6660
    67 ›ŽüŠúƒnƒ“ƒhƒ‰‹@”\
     61○周期ハンドラ機能
    6862
    69 ŽüŠúƒnƒ“ƒhƒ‰‹@”\‚́CˆÈ‰º‚̃T[ƒrƒXƒR[ƒ‹‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚éD
     63周期ハンドラ機能は,以下のサービスコールをサポートしている.
    7064
    71 ECRE_CYC
    72 Esta_cyc
    73 Estp_cyc
     65CRE_CYC
     66sta_cyc
     67stp_cyc
    7468
    75 ‚½‚¾‚µCSSPƒJ[ƒlƒ‹‚Å‚Í16ŒÂ‚Ü‚Å‚µ‚©ŽüŠúƒnƒ“ƒhƒ‰‚𐶐¬‚Å‚«‚È‚¢‚Æ‚¢‚¤
    76 §ŒÀ‚ª‚ ‚éD
     69ただし,SSPカーネルでは16個までしか周期ハンドラを生成できないという
     70制限がある.
    7771
    78 ›ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹@”\
     72○アラームハンドラ機能
    7973
    80 ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹@”\‚́CˆÈ‰º‚̃T[ƒrƒXƒR[ƒ‹‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚éD
     74アラームハンドラ機能は,以下のサービスコールをサポートしている.
    8175
    82 ECRE_ALM
    83 Esta_alm
    84 Eista_alm
    85 Estp_alm
    86 Eistp_alm
     76CRE_ALM
     77sta_alm
     78ista_alm
     79stp_alm
     80istp_alm
    8781
    88 ‚½‚¾‚µCSSPƒJ[ƒlƒ‹‚Å‚Í16ŒÂ‚Ü‚Å‚µ‚©ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚𐶐¬‚Å‚«‚È‚¢‚Æ‚¢‚¤
    89 §ŒÀ‚ª‚ ‚éD
     82ただし,SSPカーネルでは16個までしかアラームハンドラを生成できないという
     83制限がある.
    9084
    91 ›ƒVƒXƒeƒ€ŽžŠÇ—‹@”\
     85○システム時刻管理機能
    9286
    93 ƒVƒXƒeƒ€ŽžŠÇ—‹@”\‚́CˆÈ‰º‚̃T[ƒrƒXƒR[ƒ‹‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚éD
     87システム時刻管理機能は,以下のサービスコールをサポートしている.
    9488
    95 Eget_tim
     89get_tim
    9690
    97 ›ƒCƒxƒ“ƒgƒtƒ‰ƒO‹@”\
     91○イベントフラグ機能
    9892
    99 ƒCƒxƒ“ƒgƒtƒ‰ƒO‹@”\‚́CˆÈ‰º‚̃T[ƒrƒXƒR[ƒ‹‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚éD
     93イベントフラグ機能は,以下のサービスコールをサポートしている.
    10094
    101 ECRE_FLG
    102 Eset_flg
    103 Eiset_flg
    104 Eclr_flg
    105 Epol_flg
     95CRE_FLG
     96set_flg
     97iset_flg
     98clr_flg
     99pol_flg
    106100
    107 ›ƒf[ƒ^ƒLƒ
    108 [‹@”\
     101○データキュー機能
    109102
    110 ƒf[ƒ^ƒLƒ
    111 [‹@”\‚́CˆÈ‰º‚̃T[ƒrƒXƒR[ƒ‹‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚éD
     103データキュー機能は,以下のサービスコールをサポートしている.
    112104
    113 ECRE_DTQ
    114 Epsnd_dtq
    115 Eipsnd_dtq
    116 Eprcv_dtq
     105CRE_DTQ
     106psnd_dtq
     107ipsnd_dtq
     108prcv_dtq
    117109
    118 ›ƒŠƒtƒ@ƒŒƒ“ƒX
     110○リファレンス
    119111
    120 (1) ŽüŠúƒnƒ“ƒhƒ‰‹@”\
     112(1) 周期ハンドラ機能
    121113
    122114        ER ercd = sta_cyc(ID cycid)
    123115        ER ercd = stp_cyc(ID cycid)
    124116
    125 (2) ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹@”\
     117(2) アラームハンドラ機能
    126118
    127119        ER ercd = sta_alm(ID almid, RELTIM almtim)
     
    130122        ER ercd = istp_alm(ID almid)
    131123
    132 (3) ŽžŠÔŠÇ—‹@”\
     124(3) 時間管理機能
    133125
    134126        ER ercd = get_tim(SYSTIM *p_systim)
    135127
    136 (4) ƒCƒxƒ“ƒgƒtƒ‰ƒO‹@”\
     128(4) イベントフラグ機能
    137129
    138130    ER set_flg(ID flgid, FLGPTN setptn);
     
    141133    ER pol_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn);
    142134
    143 (5) ƒf[ƒ^ƒLƒ
    144 [‹@”\
     135(5) データキュー機能
    145136
    146137    ER psnd_dtq(ID dtqid, intptr_t data);
     
    149140
    150141
    151 › Ã“IAPIˆê——
     142○ 静的API一覧
    152143
    153 (1) ŽüŠúƒnƒ“ƒhƒ‰‹@”\
     144(1) 周期ハンドラ機能
    154145
    155146CRE_CYC(ID cycid, { ATR cycatr, intptr_t exinf,
    156147                        CYCHDR cychdr, RELTIM cyctim, RELTIM cycphs })
    157148
    158 (2) ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹@”\
     149(2) アラームハンドラ機能
    159150
    160151CRE_ALM(ID almid, { ATR almatr, intptr_t exinf, ALMHDR almhdr })
    161152
    162 (3) ƒCƒxƒ“ƒgƒtƒ‰ƒO‹@”\
     153(3) イベントフラグ機能
    163154
    164155CRE_FLG(ID flgid, { ATR flgatr, FLGPTN iflgptn })
    165156
    166 (4) ƒf[ƒ^ƒLƒ
    167 [‹@”\
     157(4) データキュー機能
    168158
    169159CRE_DTQ(ID dtqid, { ATR dtqatr, uint_t dtqcnt, void *dtqmb })
    170160
    171 ˆÈãD
     161以上.
  • ssp_qb_r5f100le_cs/trunk/doc/porting.txt

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11
    2                 TOPPERS/SSPƒJ[ƒlƒ‹
    3                 ƒ^[ƒQƒbƒgˆË‘¶•” ƒ|[ƒeƒBƒ“ƒOƒKƒCƒh
    4 
    5                 ‘Ήžƒo[ƒWƒ‡ƒ“: Release 1.3.0
    6                 ÅIXV: 2015”N5ŒŽ11“ú
    7 
    8 ‚±‚̃hƒLƒ
    9 ƒƒ“ƒg‚́CTOPPERS/SSPƒJ[ƒlƒ‹‚ðC–¢ƒTƒ|[ƒg‚̃^[ƒQƒbƒgƒVƒXƒe
    10 ƒ€‚Ƀ|[ƒeƒBƒ“ƒO‚·‚邽‚ß‚É•K—v‚Æ‚È‚éƒ^[ƒQƒbƒgˆË‘¶•”‚ÌŽÀ‘••û–@‚ðà–¾‚·
    11 ‚é‚à‚Ì‚Å‚ ‚éD
     2                TOPPERS/SSPカーネル
     3                ターゲット依存部 ポーティングガイド
     4
     5                対応バージョン: Release 1.3.0
     6                最終更新: 2015年5月11日
     7
     8このドキュメントは,TOPPERS/SSPカーネルを,未サポートのターゲットシステ
     9ムにポーティングするために必要となるターゲット依存部の実装方法を説明す
     10るものである.
    1211
    1312----------------------------------------------------------------------
     
    1918                Nagoya Municipal Industrial Research Institute, JAPAN
    2019
    21  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    22  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    23  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    24  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    25      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    26      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    27  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    28      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    29 ƒƒ“ƒgi—˜—p
    30      ŽÒƒ}ƒjƒ
    31 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    32      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    33  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    34      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    35      ‚ƁD
    36    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    37 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    38 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    39        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    40    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    41        •ñ‚·‚邱‚ƁD
    42  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    43      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    44      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    45      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    46      –Ɛӂ·‚邱‚ƁD
     20 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     21 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     22 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     23 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     24     権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     25     スコード中に含まれていること.
     26 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     27     用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     28     者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     29     の無保証規定を掲載すること.
     30 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     31     用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     32     と.
     33   (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     34       作権表示,この利用条件および下記の無保証規定を掲載すること.
     35   (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     36       報告すること.
     37 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     38     害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     39     また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     40     由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     41     免責すること.
    4742 
    48  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    49  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    50  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    51  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    52  ‚̐ӔC‚𕉂í‚È‚¢D
     43 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     44 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     45 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     46 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     47 の責任を負わない.
    5348 
    5449----------------------------------------------------------------------
    5550
    56 ›–ÚŽŸ
    57 
    58 1. ‹¤’ÊŽ–€
    59         1.1 ƒ^[ƒQƒbƒgˆË‘¶•”‚̍\¬
    60         1.2 –¼‘O‚̏Փ˂̖hŽ~
    61         1.3 ‘½dƒCƒ“ƒNƒ‹[ƒh‚Ì–hŽ~
    62         1.4 ƒAƒZƒ“ƒuƒŠŒ¾Œê‚Ƃ̃wƒbƒ_ƒtƒ@ƒCƒ‹‚Ì‹¤—p
    63         1.5 ƒCƒ“ƒNƒ‹[ƒh‹Lq‚Ì•û–@
    64         1.6 ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚̏o“üˆ—‚ÌŽÀŒ»‚ÉŠÖ‚·‚鐧–ñ
    65 2. ƒVƒXƒeƒ€\’zŠÂ‹«‚̃^[ƒQƒbƒgˆË‘¶•”
    66         2.1 ƒ^[ƒQƒbƒg—ªÌ‚ƃ^[ƒQƒbƒgˆË‘¶•”‚̃fƒBƒŒƒNƒgƒŠ
    67         2.2 Makefile‚̃^[ƒQƒbƒgˆË‘¶•”
    68         2.3 ŠJ”­ŠÂ‹«–¼‚ƃRƒ}ƒ“ƒh–¼‚̐ݒè
    69         2.4 ƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“‚ƃIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚̐ݒè
    70         2.5 ƒŠƒ“ƒN•û–@‚̐ݒè
    71         2.6 ˆË‘¶ŠÖŒW‚Ì’è‹`
    72         2.7 ‚»‚Ì‘¼‚̐ݒè
    73 3. TOPPERS‹¤’Ê’è‹`‚̃^[ƒQƒbƒgˆË‘¶•”
    74         3.1 ƒ^[ƒQƒbƒgŽ¯•Êƒ}ƒNƒ
    75         3.2 ®”Œ^‚̍őå’lEÅ¬’lEƒrƒbƒg”
    76         3.3 ƒTƒCƒY‚ÌŽw’肳‚ꂽ®”Œ^C‚»‚̍őå’lEÅ¬’lC®”’萔‚ðì‚éƒ}ƒNƒ
    77         3.4 ƒTƒCƒY‚ÌŽw’肳‚ꂽ•‚“®¬”“_Œ^C‚»‚̍őå’lEÅ¬’l‚̃}ƒNƒ
    78         3.5 ƒRƒ“ƒpƒCƒ‰‚ÌŠg’£‹@”\‚Ì‚½‚߂̃}ƒNƒ’è‹`
    79         3.6 •W€“I‚È’è‹`‚̏㏑‚«
    80         3.7 ƒAƒT[ƒVƒ‡ƒ“‚Ì‚½‚ß‚Ì’è‹`
    81 4. ƒVƒXƒeƒ€ƒCƒ“ƒ^ƒtƒF[ƒXƒŒƒCƒ„iSILj‚̃^[ƒQƒbƒgˆË‘¶•”
    82         4.1 ‘SŠ„ž‚݃ƒbƒNó‘Ô‚ÌŠÇ—
    83         4.2 ”÷­ŽžŠÔ‘Ò‚¿
    84         4.3 ƒvƒƒZƒbƒT‚̃Gƒ“ƒfƒBƒAƒ“
    85         4.4 ƒƒ‚ƒŠ‹óŠÔƒAƒNƒZƒXŠÖ”
    86         4.5 I/O‹óŠÔƒAƒNƒZƒXŠÖ”
    87 5. ƒJ[ƒlƒ‹API‚̃^[ƒQƒbƒgˆË‘¶•”
    88         5.1 ƒ^[ƒQƒbƒg’è‹`‚ŃTƒ|[ƒg‚·‚é‹@”\
    89         5.2 Š„ž‚Ý—Dæ“x‚͈̔Í
    90         5.3 ƒ^ƒCƒ€ƒeƒBƒbƒN‚Ì’è‹`
    91         5.4 ƒƒ‚ƒŠ—̈æŠm•Û‚Ì‚½‚ß‚ÌŒ^’è‹`
    92         5.5 ƒƒ‚ƒŠ—̈æŠm•Û‚Ì‚½‚߂̃}ƒNƒ
    93         5.6 ƒI[ƒoƒ‰ƒ“ƒnƒ“ƒhƒ‰‹@”\Šg’£‚Ì‚½‚ß‚Ì’è‹`iƒIƒvƒVƒ‡ƒ“j
    94 6. ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”
    95         6.1 ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚Ì‹¤’ÊŽ–€
    96                 6.1.1  ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚̍\¬—v‘f
    97                 6.1.2  ƒ^[ƒQƒbƒgˆË‘¶•”‚̊֐”‚Ì–½–¼‹K‘¥
    98         6.2 ƒgƒŒ[ƒXƒƒO‹@”\‚ւ̑Ήž
    99         6.3 ƒVƒXƒeƒ€ó‘Ô‚ÌŠÇ—
    100                 6.3.1  ‘SŠ„ž‚݃ƒbƒNó‘Ô‚ÌŠÇ—
    101                 6.3.2  ƒRƒ“ƒeƒLƒXƒg‚ÌŠÇ—
    102                 6.3.3  CPUƒƒbƒNó‘Ô‚ÌŠÇ—
    103         6.4 Š„ž‚Ý‚ÉŠÖ˜A‚·‚éƒVƒXƒeƒ€ó‘Ô‚ÌŠÇ—
    104                 6.4.1  Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚ÌŠÇ—
    105                 6.4.2  Š„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚ÌŠÇ—
    106                 6.4.3  Š„ž‚Ý—v‹‚̃NƒŠƒA
    107                 6.4.4  Š„ž‚Ý—v‹‚̃vƒ[ƒu
    108                 6.4.5  Š„ž‚݃nƒ“ƒhƒ‰‚̐擪ˆ—‚Æ––”öˆ—
    109         6.5 ƒ^ƒXƒNƒfƒBƒXƒpƒbƒ`ƒƒ
    110                 6.5.1 ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒgƒuƒƒbƒN‚ƃ^ƒXƒN‰Šú‰»ƒRƒ“ƒeƒLƒXƒgƒuƒƒbƒN
    111                 6.5.2 ƒfƒBƒXƒpƒbƒ`ƒƒ–{‘Ì
    112                 6.5.3 ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚©‚ç‚̃fƒBƒXƒpƒbƒ`
    113                 6.5.4 ƒfƒBƒXƒpƒbƒ`ƒƒ‚Ì“®ìŠJŽn
    114                 6.5.5 Œ»Ý‚̃Rƒ“ƒeƒLƒXƒg‚ðŽÌ‚ĂăfƒBƒXƒpƒbƒ`
    115                 6.5.6 ƒ^ƒXƒN‚Ì‹N“®ˆ—
    116         6.6 Š„ž‚݃nƒ“ƒhƒ‰
    117                 6.6.1 Š„ž‚݃nƒ“ƒhƒ‰‚̏o“üŒûˆ—
    118                 6.6.2 Š„ž‚݃nƒ“ƒhƒ‰–ˆ‚̏o“üŒûˆ—‚̐¶¬
    119                 6.6.3 Š„ž‚݃nƒ“ƒhƒ‰‚̐ݒè
    120                 6.6.4 Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚Ì‘®«‚̐ݒè
    121                 6.6.5 Š„ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚̕ύX
    122                 6.6.6 ƒfƒtƒHƒ‹ƒg‚ÌŠ„ž‚݃nƒ“ƒhƒ‰
    123                 6.6.7 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý
    124         6.7 CPU—áŠOƒnƒ“ƒhƒ‰‚ÆCPU—áŠO”­¶Žž‚̃VƒXƒeƒ€ó‘Ô‚ÌŽQÆ
    125                 6.7.1 CPU—áŠOƒnƒ“ƒhƒ‰‚̏o“üŒûˆ—
    126                 6.7.2 CPU—áŠOƒnƒ“ƒhƒ‰‚̏o“üŒûˆ—‚̐¶¬
    127                 6.7.3 CPU—áŠOƒnƒ“ƒhƒ‰‚̐ݒè
    128                 6.7.4 CPU—áŠOŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚̕ύX
    129                 6.7.5 ƒfƒtƒHƒ‹ƒg‚ÌCPU—áŠOƒnƒ“ƒhƒ‰
    130                 6.7.6 CPU—áŠO”­¶Žž‚̃VƒXƒeƒ€ó‘Ô‚ÌŽQÆ
    131         6.8 ƒJ[ƒlƒ‹‚Ì‹N“®EI—¹‚ƃXƒ^ƒbƒN—̈æ‚È‚Ç
    132         6.9 ƒJ[ƒlƒ‹“à•”‚̃`ƒ
    133 [ƒjƒ“ƒO
    134                 6.9.1 ƒrƒbƒgƒ}ƒbƒvƒT[ƒ`
    135                 6.9.2 ƒrƒbƒgƒtƒB[ƒ‹ƒh
    136         6.10 ƒJ[ƒlƒ‹ŽÀ‘•‚ÉŠÖ‚·‚é‚»‚Ì‘¼‚Ì’è‹`
    137                 6.10.1 ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈æ
    138                 6.10.2 ‹óƒ‰ƒxƒ‹‚Ì’è‹`
    139         6.11  ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚Ì‚½‚߂̃Šƒl[ƒ€‹Lq
    140         6.12 ƒ^ƒCƒ}ƒhƒ‰ƒCƒo
    141                 6.12.1 ƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚̃tƒ@ƒCƒ‹\¬
    142                 6.12.2 ƒ^ƒCƒ}‚̏‰Šú‰»EI—¹ˆ—EŠ„ž‚ݏˆ—
    143                 6.12.3 «”\•]‰¿—pƒVƒXƒeƒ€Žž‚ÌŽQÆ‚Ì‚½‚ß‚Ì‹@”\
    144 7. ƒRƒ“ƒtƒBƒMƒ
    145 ƒŒ[ƒ^Ý’èƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”
    146         7.1 Ý’èƒtƒ@ƒCƒ‹‚ƃ^[ƒQƒbƒgˆË‘¶•”‚̈ʒu•t‚¯
    147         7.2 ƒpƒX2‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”
    148                 7.2.1 ƒ^[ƒQƒbƒg”ñˆË‘¶•”‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚é‘O‚É’è‹`‚·‚ׂ«•Ï”
    149                 7.2.2 ƒ^[ƒQƒbƒg”ñˆË‘¶•”‚Å’è‹`‚³‚ê‚é•Ï”
    150         7.3 ƒpƒX3‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”
    151         7.4 cfg1_out.c‚̃Šƒ“ƒN‚É•K—v‚ȃXƒ^ƒu‚Ì’è‹`ƒtƒ@ƒCƒ‹
    152 8. ƒVƒXƒeƒ€ƒT[ƒrƒX“™‚̃^[ƒQƒbƒgˆË‘¶•”
    153         8.1 ƒVƒXƒeƒ€ƒT[ƒrƒX‚̃^[ƒQƒbƒgˆË‘¶•”
    154         8.2 ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚̃^[ƒQƒbƒgˆË‘¶•”
    155                 8.2.1 •Ï”Cƒf[ƒ^Œ^CŠÇ—ŠÖ”
    156                 8.2.2 ƒfƒoƒCƒXƒT[ƒrƒXƒ‹[ƒ`ƒ“
    157                 8.2.3 ƒR[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“
    158         8.3 ƒJ[ƒlƒ‹‹N“®ƒƒbƒZ[ƒW‚̏o—͂̃^[ƒQƒbƒgˆË‘¶’è‹`
    159         8.4 ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚ƃeƒXƒgƒvƒƒOƒ‰ƒ€‚̃^[ƒQƒbƒgˆË‘¶’è‹`
    160 9. ‚»‚Ì‘¼
    161         9.1 ƒhƒLƒ
    162 ƒƒ“ƒg
    163         9.2 ƒpƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹
    164 10. ƒŠƒtƒ@ƒŒƒ“ƒX
    165         10.1 ƒ^[ƒQƒbƒgˆË‘¶•”‚̃tƒ@ƒCƒ‹ˆê——
    166 
    167 
    168 1. ‹¤’ÊŽ–€
    169 
    170 1.1 ƒ^[ƒQƒbƒgˆË‘¶•”‚̍\¬
    171 
    172 ƒ^[ƒQƒbƒgˆË‘¶•”‚́CtargetƒfƒBƒŒƒNƒgƒŠ‚̉º‚ɁCƒ^[ƒQƒbƒgƒn[ƒhƒEƒFƒA‚Æ
    173 ŠJ”­ŠÂ‹«‚Ì‘g‚ݍ‡‚킹–ˆ‚É—pˆÓ‚·‚éD‚½‚¾‚µCƒ^[ƒQƒbƒgˆË‘¶•”‚̍ė˜—p«‚ð
    174 l—¶‚µCƒvƒƒZƒbƒTCƒ`ƒbƒvCŠJ”­ŠÂ‹«‚݂̂Ɉˑ¶‚·‚é•”•ª‚ðCƒvƒƒZƒbƒTˆË
    175 ‘¶•”Cƒ`ƒbƒvˆË‘¶•”CŠJ”­ŠÂ‹«ˆË‘¶•”‚Æ‚¢‚¤Œ`‚Ő؂蕪‚¯‚Ä‚à‚æ‚¢DØ‚蕪‚¯
    176 •û‚́Cƒ^[ƒQƒbƒgˆË‘¶•”‚ÌŽÀ‘•‚É”C‚³‚ê‚Ä‚¢‚éDƒvƒƒZƒbƒTˆË‘¶•”Cƒ`ƒbƒvˆË
    177 ‘¶•”CŠJ”­ŠÂ‹«ˆË‘¶•”‚́CarchƒfƒBƒŒƒNƒgƒŠ‚̉º‚É’u‚­D
    178 
    179 SSPƒJ[ƒlƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”‚́CƒVƒXƒeƒ€\’zŠÂ‹«iMakefile“™j‚̃^[ƒQƒb
    180 ƒgˆË‘¶•”CTOPPERS‹¤’Ê’è‹`it_stddef.hj‚̃^[ƒQƒbƒgˆË‘¶•”CƒVƒXƒeƒ€ƒCƒ“
    181 ƒ^ƒtƒF[ƒXƒŒƒCƒ„iSILCsil.hj‚̃^[ƒQƒbƒgˆË‘¶•”CƒJ[ƒlƒ‹APIikernel.hj
    182 ‚̃^[ƒQƒbƒgˆË‘¶•”CƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”iƒRƒ“ƒtƒBƒMƒ
    183 ƒŒ[ƒ^
    184 Ý’èƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”‚ðŠÜ‚ށjCƒVƒXƒeƒ€ƒT[ƒrƒX‚̃^[ƒQƒbƒgˆË
    185 ‘¶•”Cƒ^[ƒQƒbƒgˆË‘¶•”‚ÉŠÖ‚·‚éƒhƒLƒ
    186 ƒƒ“ƒg“™‚ō\¬‚³‚ê‚éD
    187 
    188 1.2 –¼‘O‚̏Փ˂̖hŽ~
    189 
    190 TOPPERSƒvƒƒWƒFƒNƒg‚ª’ñ‹Ÿ‚·‚éƒ\ƒtƒgƒEƒFƒA‚Ì‚½‚߂ɁCTOPPERS_‚ÅŽn‚Ü‚éƒVƒ“
    191 ƒ{ƒ‹‚ð—\–ñ‚µ‚Ä‚¢‚éDƒwƒbƒ_ƒtƒ@ƒCƒ‹’†‚É‹Lq‚³‚êCƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚©‚çŽQ
    192 Æ‚Å‚«‚é“à•”ƒVƒ“ƒ{ƒ‹‚́CTOPPERS_‚ÅŽn‚Ü‚é–¼‘O‚Æ‚·‚éD
    193 
    194 ‚Ü‚½C_kernel_‚ÅŽn‚Ü‚éƒVƒ“ƒ{ƒ‹‚́CƒJ[ƒlƒ‹“à•”‚̕ϐ”‚âŠÖ”‚Ì‚½‚ß‚É—\–ñ
    195 ‚µ‚Ä‚¢‚éDƒJ[ƒlƒ‹“à•”‚̕ϐ”‚âŠÖ”‚Ì–¼‘O‚ŁCƒŠƒ“ƒNŽž‚ɃAƒvƒŠƒP[ƒVƒ‡ƒ“
    196 ‚Ì–¼‘O‚ƏՓ˂·‚é‰Â”\«‚ª‚ ‚é‚à‚̂́CƒŠƒl[ƒ€‹Lq‚ɃŠƒXƒgƒAƒbƒv‚·‚邱‚Æ
    197 ‚ŁCƒRƒ“ƒpƒCƒ‹Žž‚É_kernel_‚ÅŽn‚Ü‚é–¼‘O‚É’u‚«Š·‚¦‚邱‚Æ‚Æ‚µ‚Ä‚¢‚éD
    198 
    199 1.3 ‘½dƒCƒ“ƒNƒ‹[ƒh‚Ì–hŽ~
    200 
    201 ‚·‚ׂẴwƒbƒ_ƒtƒ@ƒCƒ‹‚́C‘½d‚ɃCƒ“ƒNƒ‹[ƒh‚³‚ê‚é‚Ì‚ð–hŽ~‚·‚邽‚߂̏ð
    202 ŒƒRƒ“ƒpƒCƒ‹‹Lq‚ð“ü‚ê‚邱‚Æ‚Æ‚·‚éD—Ⴆ‚΁Ctarget_config.h‚Å‚ ‚ê‚΁Cƒtƒ@
    203 ƒCƒ‹‚̐擪‚É
     51○目次
     52
     531. 共通事項
     54        1.1 ターゲット依存部の構成
     55        1.2 名前の衝突の防止
     56        1.3 多重インクルードの防止
     57        1.4 アセンブリ言語とのヘッダファイルの共用
     58        1.5 インクルード記述の方法
     59        1.6 クリティカルセクションの出入処理の実現に関する制約
     602. システム構築環境のターゲット依存部
     61        2.1 ターゲット略称とターゲット依存部のディレクトリ
     62        2.2 Makefileのターゲット依存部
     63        2.3 開発環境名とコマンド名の設定
     64        2.4 コンパイルオプションとオブジェクトファイルの設定
     65        2.5 リンク方法の設定
     66        2.6 依存関係の定義
     67        2.7 その他の設定
     683. TOPPERS共通定義のターゲット依存部
     69        3.1 ターゲット識別マクロ
     70        3.2 整数型の最大値・最小値・ビット数
     71        3.3 サイズの指定された整数型,その最大値・最小値,整数定数を作るマクロ
     72        3.4 サイズの指定された浮動小数点型,その最大値・最小値のマクロ
     73        3.5 コンパイラの拡張機能のためのマクロ定義
     74        3.6 標準的な定義の上書き
     75        3.7 アサーションのための定義
     764. システムインタフェースレイヤ(SIL)のターゲット依存部
     77        4.1 全割込みロック状態の管理
     78        4.2 微少時間待ち
     79        4.3 プロセッサのエンディアン
     80        4.4 メモリ空間アクセス関数
     81        4.5 I/O空間アクセス関数
     825. カーネルAPIのターゲット依存部
     83        5.1 ターゲット定義でサポートする機能
     84        5.2 割込み優先度の範囲
     85        5.3 タイムティックの定義
     86        5.4 メモリ領域確保のための型定義
     87        5.5 メモリ領域確保のためのマクロ
     88        5.6 オーバランハンドラ機能拡張のための定義(オプション)
     896. カーネル実装のターゲット依存部
     90        6.1 カーネル実装のターゲット依存部の共通事項
     91                6.1.1  カーネル実装のターゲット依存部の構成要素
     92                6.1.2  ターゲット依存部の関数の命名規則
     93        6.2 トレースログ機能への対応
     94        6.3 システム状態の管理
     95                6.3.1  全割込みロック状態の管理
     96                6.3.2  コンテキストの管理
     97                6.3.3  CPUロック状態の管理
     98        6.4 割込みに関連するシステム状態の管理
     99                6.4.1  割込み優先度マスクの管理
     100                6.4.2  割込み要求禁止フラグの管理
     101                6.4.3  割込み要求のクリア
     102                6.4.4  割込み要求のプローブ
     103                6.4.5  割込みハンドラの先頭処理と末尾処理
     104        6.5 タスクディスパッチャ
     105                6.5.1 タスクコンテキストブロックとタスク初期化コンテキストブロック
     106                6.5.2 ディスパッチャ本体
     107                6.5.3 タスクコンテキストからのディスパッチ
     108                6.5.4 ディスパッチャの動作開始
     109                6.5.5 現在のコンテキストを捨ててディスパッチ
     110                6.5.6 タスクの起動処理
     111        6.6 割込みハンドラ
     112                6.6.1 割込みハンドラの出入口処理
     113                6.6.2 割込みハンドラ毎の出入口処理の生成
     114                6.6.3 割込みハンドラの設定
     115                6.6.4 割込み要求ラインの属性の設定
     116                6.6.5 割込み管理機能の初期化処理の変更
     117                6.6.6 デフォルトの割込みハンドラ
     118                6.6.7 カーネル管理外の割込み
     119        6.7 CPU例外ハンドラとCPU例外発生時のシステム状態の参照
     120                6.7.1 CPU例外ハンドラの出入口処理
     121                6.7.2 CPU例外ハンドラの出入口処理の生成
     122                6.7.3 CPU例外ハンドラの設定
     123                6.7.4 CPU例外管理機能の初期化処理の変更
     124                6.7.5 デフォルトのCPU例外ハンドラ
     125                6.7.6 CPU例外発生時のシステム状態の参照
     126        6.8 カーネルの起動・終了とスタック領域など
     127        6.9 カーネル内部のチューニング
     128                6.9.1 ビットマップサーチ
     129                6.9.2 ビットフィールド
     130        6.10 カーネル実装に関するその他の定義
     131                6.10.1 非タスクコンテキスト用のスタック領域
     132                6.10.2 空ラベルの定義
     133        6.11  カーネル実装のターゲット依存部のためのリネーム記述
     134        6.12 タイマドライバ
     135                6.12.1 タイマドライバのファイル構成
     136                6.12.2 タイマの初期化・終了処理・割込み処理
     137                6.12.3 性能評価用システム時刻の参照のための機能
     1387. コンフィギュレータ設定ファイルのターゲット依存部
     139        7.1 設定ファイルとターゲット依存部の位置付け
     140        7.2 パス2のテンプレートファイルのターゲット依存部
     141                7.2.1 ターゲット非依存部をインクルードする前に定義すべき変数
     142                7.2.2 ターゲット非依存部で定義される変数
     143        7.3 パス3のテンプレートファイルのターゲット依存部
     144        7.4 cfg1_out.cのリンクに必要なスタブの定義ファイル
     1458. システムサービス等のターゲット依存部
     146        8.1 システムサービスのターゲット依存部
     147        8.2 シリアルインタフェースドライバのターゲット依存部
     148                8.2.1 変数,データ型,管理関数
     149                8.2.2 デバイスサービスルーチン
     150                8.2.3 コールバックルーチン
     151        8.3 カーネル起動メッセージの出力のターゲット依存定義
     152        8.4 サンプルプログラムとテストプログラムのターゲット依存定義
     1539. その他
     154        9.1 ドキュメント
     155        9.2 パッケージ記述ファイル
     15610. リファレンス
     157        10.1 ターゲット依存部のファイル一覧
     158
     159
     1601. 共通事項
     161
     1621.1 ターゲット依存部の構成
     163
     164ターゲット依存部は,targetディレクトリの下に,ターゲットハードウェアと
     165開発環境の組み合わせ毎に用意する.ただし,ターゲット依存部の再利用性を
     166考慮し,プロセッサ,チップ,開発環境のみに依存する部分を,プロセッサ依
     167存部,チップ依存部,開発環境依存部という形で切り分けてもよい.切り分け
     168方は,ターゲット依存部の実装に任されている.プロセッサ依存部,チップ依
     169存部,開発環境依存部は,archディレクトリの下に置く.
     170
     171SSPカーネルのターゲット依存部は,システム構築環境(Makefile等)のターゲッ
     172ト依存部,TOPPERS共通定義(t_stddef.h)のターゲット依存部,システムイン
     173タフェースレイヤ(SIL,sil.h)のターゲット依存部,カーネルAPI(kernel.h)
     174のターゲット依存部,カーネル実装のターゲット依存部(コンフィギュレータ
     175設定ファイルのターゲット依存部を含む),システムサービスのターゲット依
     176存部,ターゲット依存部に関するドキュメント等で構成される.
     177
     1781.2 名前の衝突の防止
     179
     180TOPPERSプロジェクトが提供するソフトウェアのために,TOPPERS_で始まるシン
     181ボルを予約している.ヘッダファイル中に記述され,アプリケーションから参
     182照できる内部シンボルは,TOPPERS_で始まる名前とする.
     183
     184また,_kernel_で始まるシンボルは,カーネル内部の変数や関数のために予約
     185している.カーネル内部の変数や関数の名前で,リンク時にアプリケーション
     186の名前と衝突する可能性があるものは,リネーム記述にリストアップすること
     187で,コンパイル時に_kernel_で始まる名前に置き換えることとしている.
     188
     1891.3 多重インクルードの防止
     190
     191すべてのヘッダファイルは,多重にインクルードされるのを防止するための条
     192件コンパイル記述を入れることとする.例えば,target_config.hであれば,ファ
     193イルの先頭に
    204194
    205195#ifndef TOPPERS_TARGET_CONFIG_H
    206196#define TOPPERS_TARGET_CONFIG_H
    207197
    208 ‚ðCƒtƒ@ƒCƒ‹‚Ì––”ö‚É
     198を,ファイルの末尾に
    209199
    210200#endif /* TOPPERS_TARGET_CONFIG_H */
    211201
    212 ‚ð‹Lq‚·‚éD
    213 
    214 1.4 ƒAƒZƒ“ƒuƒŠŒ¾Œê‚Ƃ̃wƒbƒ_ƒtƒ@ƒCƒ‹‚Ì‹¤—p
    215 
    216 SSPƒJ[ƒlƒ‹‚̃wƒbƒ_ƒtƒ@ƒCƒ‹‚Ì‘½‚­‚́CƒAƒZƒ“ƒuƒŠŒ¾Œê‚̃\[ƒXƒtƒ@ƒCƒ‹‚©‚ç
    217 ‚àƒCƒ“ƒNƒ‹[ƒh‚Å‚«‚é‚悤‚É‚·‚邽‚߂ɁCŽŸ‚̃‹[ƒ‹‚ɏ]‚Á‚Ä‹Lq‚·‚é‚à‚Ì‚Æ
    218 ‚·‚éD
    219 
    220 ETOPPERS_MACRO_ONLY‚ªƒ}ƒNƒ’è‹`‚³‚ê‚Ä‚¢‚éê‡‚ɂ́CƒAƒZƒ“ƒuƒŠŒ¾Œê‚Å‚Í
    221 @‰ðŽß‚Å‚«‚È‚¢‹Lqiƒ}ƒNƒ’è‹`ˆÈŠO‚Ì‹Lqj‚ðœ‚­‚悤‚É‹Lq‚·‚éD
    222 
    223 E•„†–³‚µ®”Œ^‚̒萔’l‚́CUINT_C‚âULONG_C‚Ȃǂ̐®”’萔‚ðì‚邽‚߂̃}
    224 @ƒNƒ‚ð—p‚¢‚Ä‹Lq‚·‚éD‚½‚¾‚µCƒAƒZƒ“ƒuƒŠŒ¾Œê‚̃\[ƒXƒtƒ@ƒCƒ‹‚©‚ç‚àƒC
    225 @ƒ“ƒNƒ‹[ƒh‚Å‚«‚éƒtƒ@ƒCƒ‹’†‚Å‚ ‚Á‚Ä‚àCCŒ¾Œê‚Ì‚Ý‚Å—p‚¢‚é’萔‚ð‚±‚ê‚ç‚Ì
    226 @ƒ}ƒNƒ‚ðŽg‚Á‚Ä‹Lq‚·‚é•K—v‚Í‚È‚¢D
    227 
    228 ‚Ü‚½CƒJ[ƒlƒ‹ŽÀ‘•‚É‚¨‚¢‚ẮCŽŸ‚̃‹[ƒ‹‚ɏ]‚¤‚à‚Ì‚Æ‚·‚éD
    229 
    230 EƒAƒZƒ“ƒuƒŠŒ¾Œê‚©‚ç‚à—p‚¢‚é’萔‚Ì’è‹`’†‚ÉŒ^ƒLƒƒƒXƒg‚ð—p‚¢‚éê‡‚ɂ́C
    231 @CASTƒ}ƒNƒ‚ð—p‚¢‚Ä‹Lq‚·‚éD
    232 
    233 ƒAƒZƒ“ƒuƒŠŒ¾Œê‚©‚çƒwƒbƒ_ƒtƒ@ƒCƒ‹‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚éÛ‚ɂ́C•K—v‚ɉž‚¶‚āC
    234 TOPPERS_MACRO_ONLYCUINC_CCULONG_CCCAST‚ðƒ}ƒNƒ’è‹`‚µ‚Ä‚©‚çCƒCƒ“ƒNƒ‹[
    235 ƒh‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    236 
    237 1.5 ƒCƒ“ƒNƒ‹[ƒh‹Lq‚Ì•û–@
    238 
    239 ŠJ”­ŠÂ‹«‚Å—pˆÓ‚³‚ê‚Ä‚¢‚é•W€ƒwƒbƒ_ƒtƒ@ƒCƒ‹‚¨‚æ‚ÑincludeƒfƒBƒŒƒNƒgƒŠ‰º‚Ì
    240 •W€ƒwƒbƒ_ƒtƒ@ƒCƒ‹‚́Cu#include <...>v‚É‚æ‚èƒCƒ“ƒNƒ‹[ƒh‚·‚éD
    241 
    242 ‚»‚Ì‘¼‚̃wƒbƒ_ƒtƒ@ƒCƒ‹‚́Cu#include "..."v‚É‚æ‚èƒCƒ“ƒNƒ‹[ƒh‚·‚éDƒwƒb
    243 ƒ_ƒtƒ@ƒCƒ‹‚ªCƒJƒŒƒ“ƒgƒfƒBƒŒƒNƒgƒŠ‚âƒCƒ“ƒNƒ‹[ƒh‚·‚éƒtƒ@ƒCƒ‹‚Æ“¯‚¶ƒfƒB
    244 ƒŒƒNƒgƒŠˆÈŠO‚̃fƒBƒŒƒNƒgƒŠ‚É’u‚©‚ê‚Ä‚¢‚éê‡‚ɂ́CŽŸ‚̂悤‚ɃpƒXŽw’è‚ð
    245 s‚¤D
    246 
    247 Eƒ^[ƒQƒbƒgˆË‘¶•”itarget/<ƒ^[ƒQƒbƒg–¼>j‚̃fƒBƒŒƒNƒgƒŠ‚É’u‚©‚ê‚Ä‚¢‚é
    248 @ê‡‚́CƒpƒXŽw’è‚ðs‚킸Cƒtƒ@ƒCƒ‹–¼‚Ì‚Ý‚ð‹Lq‚·‚éD
    249                 —áj#include "target_config.h"
    250 
    251 EarchƒfƒBƒŒƒNƒgƒŠ‰º‚̃fƒBƒŒƒNƒgƒŠ‚É’u‚©‚ê‚Ä‚¢‚éê‡‚ɂ́CarchƒfƒBƒŒƒN
    252 @ƒgƒŠ‚©‚ç‚Ì‘Š‘΃pƒX‚Å‹Lq‚·‚éD
    253                 —áj#include "m68k_gcc/prc_config.h"
    254 
    255 E‚»‚Ì‘¼‚̏ꍇ‚ɂ́Cƒ\[ƒXƒvƒƒOƒ‰ƒ€‚̃‹[ƒgƒfƒBƒŒƒNƒgƒŠiconfigure‚ª’u
    256 @‚©‚ê‚Ä‚¢‚éƒfƒBƒŒƒNƒgƒŠj‚©‚ç‚Ì‘Š‘΃pƒX‚Å‹Lq‚·‚éD
    257                 —áj#include "pdic/upd72001/upd72001.h"
    258 
    259 EƒJ[ƒlƒ‹‚ð\¬‚·‚éƒtƒ@ƒCƒ‹‚©‚çCkernelƒfƒBƒŒƒNƒgƒŠ‰º‚̃wƒbƒ_ƒtƒ@ƒCƒ‹
    260 @‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚éê‡‚́CƒpƒXŽw’è‚ðs‚킸Cƒtƒ@ƒCƒ‹–¼‚Ì‚Ý‚ð‹Lq‚·‚éD
    261                 —áj#include "kernel_impl.h"
    262 
    263 1.6 ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚̏o“üˆ—‚ÌŽÀŒ»‚ÉŠÖ‚·‚鐧–ñ
    264 
    265 ƒJ[ƒlƒ‹“à‚Å—p‚¢‚éƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚̏o“üˆ—‚ðŽÀŒ»‚·‚éê‡‚ɂ́C
    266 ŽŸ‚Ì2‚Â‚ÌðŒ‚ð–ž‚½‚·‚悤‚ÉŽÀ‘•‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    267 
    268 (1-6-1) o“üˆ—‚©‚甲‚¯‚½Žž“_‚ł́CŠ„ž‚Ý‚Ì‹ÖŽ~^‹–‰Â‚ªŠ®—¹‚µ‚Ä‚¢‚È‚¯
    269 ‚ê‚΂Ȃç‚È‚¢D—Ⴆ‚΁CŠ„ž‚Ý‹ÖŽ~^‹–‰Â–½—ß‚ðŽÀs‚µ‚Ä‚©‚çŽÀÛ‚ÉŠ„ž‚Ý‚ª
    270 ‹ÖŽ~^‹–‰Â‚³‚ê‚é‚܂ʼn½–½—ß‚©’x‰„‚·‚éƒvƒƒZƒbƒT‚̏ꍇ‚ɂ́Co“üˆ—‚Ì’†
    271 ‚ÉNOP–½—ß‚ð“ü‚ê‚é‚È‚Ç‚Ì•û–@‚ŁCo“üˆ—‚𔲂¯‚½Žž“_‚ł́CŠ„ž‚Ý‚ª‹ÖŽ~^
    272 ‹–‰Â‚³‚ꂽó‘Ô‚É‚È‚Á‚Ä‚¢‚邱‚Æ‚ð•ÛØ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    273 
    274 (1-6-2) ƒƒ‚ƒŠã‚̃f[ƒ^\‘¢‚ª‘‚«•Ï‚í‚é‰Â”\«‚ª‚ ‚邱‚Æ‚ðC‰½‚ç‚©‚Ì•û
    275 –@‚ŃRƒ“ƒpƒCƒ‰‚É’m‚点‚È‚¯‚ê‚΂Ȃç‚È‚¢DGNUŠJ”­ŠÂ‹«‚ł́CŽŸ‚Ì‚¢‚¸‚ê‚©‚Ì
    276 •û–@‚Å‚±‚̐§–ñ‚ð–ž‚½‚·‚±‚Æ‚ª‚Å‚«‚éD
    277 
    278 (a) ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚̏o“üˆ—‚Ì‘S‘Ì‚Ü‚½‚͏o“üˆ—‚Ì–{Ž¿“I‚È•”•ª
    279         i‹ï‘Ì“I‚ɂ́CŠ„ž‚Ý‹ÖŽ~^‹–‰Â‚·‚鏈—j‚ðiƒCƒ“ƒ‰ƒCƒ“‚Å‚È‚¢j’ʏí
    280         ‚̊֐”‚É‚æ‚èŽÀŒ»‚·‚éD
    281 
    282 (b) ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚̏o“üˆ—‚Ì–{Ž¿“I‚È•”•ª‚ðƒCƒ“ƒ‰ƒCƒ“ƒAƒZƒ“ƒu
    283         ƒ‰‚É‚æ‚Á‚ÄŽÀŒ»‚µ‚Ä‚¢‚éê‡‚ɂ́C‚»‚̃Cƒ“ƒ‰ƒCƒ“ƒAƒZƒ“ƒuƒ‰‚Ìclobber•Ï
    284         ”ƒŠƒXƒg‚É"memory"‚ð’ljÁ‚·‚éD
    285 
    286 (c) ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚̏o“üˆ—‚Ì–{Ž¿“I‚È•”•ª‚ªCƒ}ƒNƒ‚âƒCƒ“ƒ‰ƒC
    287         ƒ“ŠÖ”ŒÄo‚µ‚ÅŽÀŒ»‚µ‚Ä‚¢‚éê‡‚ɂ́CƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚É“ü‚鏈
    288         —‚̍Ōã‚Əo‚鏈—‚̐擪‚ɁCAsm("":::"memory")‚Æ‚¢‚¤‹Lq‚ð“ü‚ê‚éD
    289 
    290 ‚±‚̂悤‚Ȑ§–ñ‚ðÝ‚¯‚闝—R‚ɂ‚¢‚ẮCuTOPPERS/ASPƒJ[ƒlƒ‹ ÝŒvƒƒ‚v
    291 ‚́uƒJ[ƒlƒ‹‚̃f[ƒ^\‘¢‚ɑ΂·‚évolatileéŒ¾‚ɂ‚¢‚āv‚̐߂ðŽQÆ‚·‚邱
    292 ‚ƁD
    293 
    294 2. ƒVƒXƒeƒ€\’zŠÂ‹«‚̃^[ƒQƒbƒgˆË‘¶•”
    295 
    296 ‚±‚ÌÍ‚Ìà–¾‚́CGNUŠJ”­ŠÂ‹«iGCCCGASCBINUTILSCGNU Makej‚ð—p‚¢‚邱‚Æ
    297 ‚ð‘z’肵‚Ä‹Lq‚µ‚Ä‚ ‚éD‚»‚êˆÈŠO‚ÌŠJ”­ŠÂ‹«‚ð—p‚¢‚éê‡‚ɂ́CŠJ”­ŠÂ‹«‚É
    298 ‚ ‚킹‚ďC³‚·‚é•K—v‚ª‚ ‚éD
    299 
    300 2.1 ƒ^[ƒQƒbƒg—ªÌ‚ƃ^[ƒQƒbƒgˆË‘¶•”‚̃fƒBƒŒƒNƒgƒŠ
    301 
    302 V‚µ‚¢ƒ^[ƒQƒbƒgˆË‘¶•”‚ðì¬‚·‚鎞‚́C‚Ü‚¸Cƒ^[ƒQƒbƒg—ªÌ‚ð’è‚ß‚éDƒ^[
    303 ƒQƒbƒg—ªÌ‚́CƒVƒXƒeƒ€—ªÌ‚ÆŠJ”­ŠÂ‹«—ªÌ‚ð"_"‚ŘAŒ‹‚µ‚½‚à‚Ì‚Æ‚·‚éDƒVƒX
    304 ƒeƒ€—ªÌ‚É—p‚¢‚镶Žš‚͉p¬•¶Žš‚Ɛ”Žš‚Æ"_"‚ɁCŠJ”­ŠÂ‹«—ªÌ‚É—p‚¢‚镶Žš‚Í
    305 ‰p¬•¶Žš‚Ɛ”Žš‚ÉŒÀ’è‚·‚éDGNUŠJ”­ŠÂ‹«‚ÌŠJ”­ŠÂ‹«—ªÌ‚́C"gcc"‚Æ‚·‚éD—á
    306 ‚¦‚΁CƒVƒXƒeƒ€—ªÌ‚ª"dve68k"‚ŁCGNUŠJ”­ŠÂ‹«‚ð—p‚¢‚éê‡‚ɂ́Cƒ^[ƒQƒbƒg
    307 —ªÌ‚Í"dve68k_gcc"‚Æ‚È‚éD
    308 
    309 ƒ^[ƒQƒbƒgˆË‘¶•”‚̃tƒ@ƒCƒ‹‚ð’u‚­‚½‚߂ɁCtargetƒfƒBƒŒƒNƒgƒŠ‚̉º‚ɁCƒ^[
    310 ƒQƒbƒg—ªÌ‚𖼏̂Ƃ·‚éƒfƒBƒŒƒNƒgƒŠ‚ðì¬‚·‚éD‚±‚ê‚ðƒ^[ƒQƒbƒgˆË‘¶•”ƒfƒB
    311 ƒŒƒNƒgƒŠ‚ƌĂԁD
    312 
    313 ƒ^[ƒQƒbƒgˆË‘¶•”‚©‚çƒvƒƒZƒbƒTˆË‘¶•”‚âƒ`ƒbƒvˆË‘¶•”‚ðØ‚蕪‚¯‚éê‡‚ɂ́C
    314 ˆË‘¶•”—ªÌ‚ð’è‚ß‚éDˆË‘¶•”—ªÌ‚́CƒvƒƒZƒbƒT‚âƒ`ƒbƒv‚Ì—ªÌ‚ÆŠJ”­ŠÂ‹«—ª
    315 Ì‚ð"_"‚ŘAŒ‹‚µ‚½‚à‚Ì‚Æ‚·‚éDƒvƒƒZƒbƒT‚âƒ`ƒbƒv‚Ì—ªÌ‚É—p‚¢‚镶Žš‚́C‰p
    316 ¬•¶Žš‚Ɛ”Žš‚Æ"_"‚ÉŒÀ’è‚·‚éD—Ⴆ‚΁CƒvƒƒZƒbƒT—ªÌ‚ª"m68k"‚ŁCGNUŠJ”­
    317 ŠÂ‹«‚ð—p‚¢‚éê‡‚ɂ́CˆË‘¶•”—ªÌ‚Í"m68k_gcc"‚Æ‚È‚éD
    318 
    319 ‚Ü‚½Cƒ^[ƒQƒbƒgˆË‘¶•”‚©‚çŠJ”­ŠÂ‹«ˆË‘¶•”‚ðØ‚蕪‚¯‚éê‡‚ɂ́CŠJ”­ŠÂ‹«
    320 —ªÌ‚ðˆË‘¶•”—ªÌ‚Æ‚·‚éD—Ⴆ‚΁CGNUŠJ”­ŠÂ‹«ˆË‘¶•”‚̈ˑ¶•”—ªÌ‚́C"gcc"
    321 ‚Æ‚È‚éD
    322 
    323 ‚±‚ê‚ç‚̈ˑ¶•”‚̃tƒ@ƒCƒ‹‚ð’u‚­‚½‚߂ɁCarchƒfƒBƒŒƒNƒgƒŠ‚̉º‚ɁCˆË‘¶•”—ª
    324 Ì‚𖼏̂Ƃ·‚éƒfƒBƒŒƒNƒgƒŠ‚ðì¬‚·‚éD
    325 
    326 ‚È‚¨CGNUŠJ”­ŠÂ‹«ˆÈŠO‚ÌŠJ”­ŠÂ‹«‚ð—p‚¢‚éê‡‚ɂ́CƒRƒ“ƒtƒBƒMƒ
    327 ƒŒ[ƒVƒ‡ƒ“
    328 ƒXƒNƒŠƒvƒgiconfigurejCƒTƒ“ƒvƒ‹‚ÌMakefileisample/MakefilejCˆê•”‚Ì
    329 ƒ†[ƒeƒBƒŠƒeƒBƒvƒƒOƒ‰ƒ€iutils/genoffsetCutils/makedepj‚ðC‚»‚ÌŠJ”­
    330 ŠÂ‹«—p‚É—pˆÓ‚·‚é•K—v‚ª‚ ‚éê‡‚ª‚ ‚éD‚»‚̏ꍇ‚ɂ́C‚±‚ê‚ç‚̃tƒ@ƒCƒ‹‚ðC
    331 ƒ^[ƒQƒbƒgˆË‘¶•”ƒfƒBƒŒƒNƒgƒŠ‚©ŠJ”­ŠÂ‹«ˆË‘¶•”ƒfƒBƒŒƒNƒgƒŠ‚É’u‚­‚à‚Ì‚Æ‚·
    332 ‚éD‚Ü‚½CŠJ”­ŠÂ‹«—p‚̃vƒƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚ª•K—v‚ȏꍇ‚ɂ́Cƒ^[ƒQƒbƒg
    333 ˆË‘¶•”ƒfƒBƒŒƒNƒgƒŠ‚É’u‚­‚à‚Ì‚Æ‚·‚éD
    334 
    335 2.2 Makefile‚̃^[ƒQƒbƒgˆË‘¶•”
    336 
    337 Makefile‚̃^[ƒQƒbƒgˆË‘¶•”‚́Cƒ^[ƒQƒbƒgˆË‘¶•”ƒfƒBƒŒƒNƒgƒŠ‚É’u‚¢‚½
    338 Makefile.target‚Ü‚½‚Í‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹iƒvƒƒZƒbƒTEƒ`ƒb
    339 ƒvEŠJ”­ŠÂ‹«ˆË‘¶•”‚Å—pˆÓ‚³‚ê‚éƒtƒ@ƒCƒ‹‚Ȃǁj‚ÉŠÜ‚ß‚éD
    340 
    341 2.3 ŠJ”­ŠÂ‹«–¼‚ƃRƒ}ƒ“ƒh–¼‚̐ݒè
    342 
    343 ŠJ”­ŠÂ‹«–¼‚ƃRƒ}ƒ“ƒh–¼‚ðÝ’è‚·‚邽‚߂ɁCMakefile‚̃^[ƒQƒbƒgˆË‘¶•”‚ÅŽŸ
    344 ‚̕ϐ”‚ð’è‹`‚·‚éD
    345 
    346 (2-3-1) TOOL                                    ŠJ”­ŠÂ‹«–¼
    347 
    348 ŠJ”­ŠÂ‹«–¼‚É’è‹`‚·‚éDGNUŠJ”­ŠÂ‹«‚ð—p‚¢‚éê‡‚ɂ́Cgcc‚É’è‹`‚·‚éD
    349 
    350 (2-3-2) GCC_TARGET                              GNUŠJ”­ŠÂ‹«‚̃^[ƒQƒbƒg–¼
    351 
    352 GNUŠJ”­ŠÂ‹«‚ð—p‚¢‚éê‡‚ɁCGNUŠJ”­ŠÂ‹«‚ðconfigure‚·‚éê‡‚ÉŽw’è‚·‚éƒ^[
    353 ƒQƒbƒg–¼‚É’è‹`‚·‚éD‚±‚±‚ÅŽw’肵‚½ƒ^[ƒQƒbƒg–¼‚́CŠJ”­ŠÂ‹«‚̃Rƒ}ƒ“ƒh–¼
    354 ‚̐擪‚É•t—^‚³‚ê‚镶Žš—ñ‚Æ‚È‚éD—Ⴆ‚΁CGCC_TARGET‚ðm68k-unknown-elf‚É
    355 ’è‹`‚µ‚½ê‡‚ɂ́CƒRƒ“ƒpƒCƒ‰‚Æ‚µ‚Äm68k-unknown-elf-gcc‚ªŽg‚í‚ê‚éD‚±‚Ì
    356 •Ï”‚ª’è‹`‚³‚ê‚È‚¢ê‡‚ɂ́C’P‚È‚égcc‚ªŽg‚í‚ê‚éD
    357 
    358 (2-3-3) CC                                              CƒRƒ“ƒpƒCƒ‰ƒhƒ‰ƒCƒo‚Ì–¼Ì
    359 (2-3-4) CXX                                             C++ƒRƒ“ƒpƒCƒ‰ƒhƒ‰ƒCƒo‚Ì–¼Ì
    360 (2-3-5) AS                                              ƒAƒZƒ“ƒuƒ‰‚Ì–¼Ì
    361 (2-3-6) LD                                              ƒŠƒ“ƒJ‚Ì–¼Ì
    362 (2-3-7) AR                                              ƒA[ƒJƒCƒo‚Ì–¼Ì
    363 (2-3-8) NM                                              nmƒvƒƒOƒ‰ƒ€‚Ì–¼Ì
    364 (2-3-9) RANLIB                                  ranlibƒvƒƒOƒ‰ƒ€‚Ì–¼Ì
    365 (2-3-10) OBJCOPY                                objcopyƒvƒƒOƒ‰ƒ€‚Ì–¼Ì
    366 (2-3-11) OBJDUMP                                objdumpƒvƒƒOƒ‰ƒ€‚Ì–¼Ì
    367 
    368 GNUŠJ”­ŠÂ‹«ˆÈŠO‚ÌŠJ”­ŠÂ‹«‚ð—p‚¢‚éê‡‚ɁC‚»‚ꂼ‚ê‚̃Rƒ}ƒ“ƒh‚Ì–¼Ì‚É’è‹`
    369 ‚·‚éD‘Ήž‚·‚éƒRƒ}ƒ“ƒh‚ª‚È‚¢ê‡‚âCƒRƒ}ƒ“ƒhƒpƒ‰ƒ[ƒ^‚ªˆÙ‚È‚éê‡‚ɂ́C
    370 Makefile’†‚Å‚»‚̃Rƒ}ƒ“ƒh‚ðŒÄ‚яo‚µ‚Ä‚¢‚é•”•ª‚ð•ÏX‚·‚é•K—v‚ª‚ ‚éD
    371 
    372 GNUŠJ”­ŠÂ‹«‚ł́C‚±‚ê‚ç‚ÍGCC_TARGET‚ð—p‚¢‚Ä’è‹`‚³‚ê‚é‚̂ŁC’è‹`‚·‚é•K—v
    373 ‚Í‚È‚¢D
    374 
    375 2.4 ƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“‚ƃIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚̐ݒè
    376 
    377 Makefile‚̃^[ƒQƒbƒgˆË‘¶•”‚ňȉº‚Åà–¾‚·‚é•Ï”‚ð’è‹`‚·‚鎞‚ɂ́C":="‚ð
    378 —p‚¢‚āC‚»‚ê‚Ü‚Å‚Ì’è‹`‚ɒljÁ‚·‚éŒ`‚ōs‚¤D—Ⴆ‚΁CƒRƒ“ƒpƒCƒ‰‚ɑ΂·‚é‚»
    379 ‚Ì‘¼‚̃IƒvƒVƒ‡ƒ“‚Æ‚µ‚āu-Wall -g -O2v‚ð’ljÁ‚µ‚½‚¢ê‡‚ɂ́CuCOPTS :=
    380 $(COPTS) -Wall -g -O2v‚Æ‚¢‚¤‹Lq‚ðMakefile‚̃^[ƒQƒbƒgˆË‘¶•”‚ÉŠÜ‚ß‚éD
    381 
    382 (2-4-1) COPTS                           ƒRƒ“ƒpƒCƒ‰‚ɑ΂·‚é‚»‚Ì‘¼‚̃IƒvƒVƒ‡ƒ“
    383 (2-4-2) CDEFS                           ƒ}ƒNƒ’è‹`ƒIƒvƒVƒ‡ƒ“i-DƒIƒvƒVƒ‡ƒ“j
    384 (2-4-3) INCLUDES                        ƒwƒbƒ_ƒtƒ@ƒCƒ‹‚Ì’u‚©‚ꂽƒfƒBƒŒƒNƒgƒŠŽw’èƒI
    385                                                         ƒvƒVƒ‡ƒ“i-IƒIƒvƒVƒ‡ƒ“j
    386 (2-4-4) LDFLAGS                         ƒŠƒ“ƒJ‚ɑ΂·‚é‚»‚Ì‘¼‚̃IƒvƒVƒ‡ƒ“
    387 (2-4-5) LIBS                            ƒ‰ƒCƒuƒ‰ƒŠƒŠƒ“ƒNŽw’è‚Ì‚½‚߂̃IƒvƒVƒ‡ƒ“
    388 
    389 ƒ^[ƒQƒbƒg‚Ɉˑ¶‚µ‚āC‚·‚ׂẴ\[ƒXƒtƒ@ƒCƒ‹‚É‹¤’Ê‚·‚éƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡
    390 ƒ“‚̒ljÁ‚ª•K—v‚ȏꍇ‚ɂ́CƒIƒvƒVƒ‡ƒ“‚ÌŽí—Þ–ˆ‚ɏã‚ÉŽ¦‚µ‚½•Ï”‚É’è‹`‚·‚éD
    391 
    392 ‚Ù‚Æ‚ñ‚ǂ̏ꍇ‚ɁCƒ^[ƒQƒbƒgˆË‘¶•”ƒfƒBƒŒƒNƒgƒŠ‚ÌMakefile.target‚ɂ́CˆÈ
    393 ‰º‚Ì‹Lq‚ðŠÜ‚ß‚é•K—v‚ª‚ ‚éD
     202を記述する.
     203
     2041.4 アセンブリ言語とのヘッダファイルの共用
     205
     206SSPカーネルのヘッダファイルの多くは,アセンブリ言語のソースファイルから
     207もインクルードできるようにするために,次のルールに従って記述するものと
     208する.
     209
     210・TOPPERS_MACRO_ONLYがマクロ定義されている場合には,アセンブリ言語では
     211 解釈できない記述(マクロ定義以外の記述)を除くように記述する.
     212
     213・符号無し整数型の定数値は,UINT_CやULONG_Cなどの整数定数を作るためのマ
     214 クロを用いて記述する.ただし,アセンブリ言語のソースファイルからもイ
     215 ンクルードできるファイル中であっても,C言語のみで用いる定数をこれらの
     216 マクロを使って記述する必要はない.
     217
     218また,カーネル実装においては,次のルールに従うものとする.
     219
     220・アセンブリ言語からも用いる定数の定義中に型キャストを用いる場合には,
     221 CASTマクロを用いて記述する.
     222
     223アセンブリ言語からヘッダファイルをインクルードする際には,必要に応じて,
     224TOPPERS_MACRO_ONLY,UINC_C,ULONG_C,CASTをマクロ定義してから,インクルー
     225ドしなければならない.
     226
     2271.5 インクルード記述の方法
     228
     229開発環境で用意されている標準ヘッダファイルおよびincludeディレクトリ下の
     230標準ヘッダファイルは,「#include <...>」によりインクルードする.
     231
     232その他のヘッダファイルは,「#include "..."」によりインクルードする.ヘッ
     233ダファイルが,カレントディレクトリやインクルードするファイルと同じディ
     234レクトリ以外のディレクトリに置かれている場合には,次のようにパス指定を
     235行う.
     236
     237・ターゲット依存部(target/<ターゲット名>)のディレクトリに置かれている
     238 場合は,パス指定を行わず,ファイル名のみを記述する.
     239                例)#include "target_config.h"
     240
     241・archディレクトリ下のディレクトリに置かれている場合には,archディレク
     242 トリからの相対パスで記述する.
     243                例)#include "m68k_gcc/prc_config.h"
     244
     245・その他の場合には,ソースプログラムのルートディレクトリ(configureが置
     246 かれているディレクトリ)からの相対パスで記述する.
     247                例)#include "pdic/upd72001/upd72001.h"
     248
     249・カーネルを構成するファイルから,kernelディレクトリ下のヘッダファイル
     250 をインクルードする場合は,パス指定を行わず,ファイル名のみを記述する.
     251                例)#include "kernel_impl.h"
     252
     2531.6 クリティカルセクションの出入処理の実現に関する制約
     254
     255カーネル内で用いるクリティカルセクションの出入処理を実現する場合には,
     256次の2つの条件を満たすように実装しなければならない.
     257
     258(1-6-1) 出入処理から抜けた時点では,割込みの禁止/許可が完了していなけ
     259ればならない.例えば,割込み禁止/許可命令を実行してから実際に割込みが
     260禁止/許可されるまで何命令か遅延するプロセッサの場合には,出入処理の中
     261にNOP命令を入れるなどの方法で,出入処理を抜けた時点では,割込みが禁止/
     262許可された状態になっていることを保証しなければならない.
     263
     264(1-6-2) メモリ上のデータ構造が書き変わる可能性があることを,何らかの方
     265法でコンパイラに知らせなければならない.GNU開発環境では,次のいずれかの
     266方法でこの制約を満たすことができる.
     267
     268(a) クリティカルセクションの出入処理の全体または出入処理の本質的な部分
     269        (具体的には,割込み禁止/許可する処理)を(インラインでない)通常
     270        の関数により実現する.
     271
     272(b) クリティカルセクションの出入処理の本質的な部分をインラインアセンブ
     273        ラによって実現している場合には,そのインラインアセンブラのclobber変
     274        数リストに"memory"を追加する.
     275
     276(c) クリティカルセクションの出入処理の本質的な部分が,マクロやインライ
     277        ン関数呼出しで実現している場合には,クリティカルセクションに入る処
     278        理の最後と出る処理の先頭に,Asm("":::"memory")という記述を入れる.
     279
     280このような制約を設ける理由については,「TOPPERS/ASPカーネル 設計メモ」
     281の「カーネルのデータ構造に対するvolatile宣言について」の節を参照するこ
     282と.
     283
     2842. システム構築環境のターゲット依存部
     285
     286この章の説明は,GNU開発環境(GCC,GAS,BINUTILS,GNU Make)を用いること
     287を想定して記述してある.それ以外の開発環境を用いる場合には,開発環境に
     288あわせて修正する必要がある.
     289
     2902.1 ターゲット略称とターゲット依存部のディレクトリ
     291
     292新しいターゲット依存部を作成する時は,まず,ターゲット略称を定める.ター
     293ゲット略称は,システム略称と開発環境略称を"_"で連結したものとする.シス
     294テム略称に用いる文字は英小文字と数字と"_"に,開発環境略称に用いる文字は
     295英小文字と数字に限定する.GNU開発環境の開発環境略称は,"gcc"とする.例
     296えば,システム略称が"dve68k"で,GNU開発環境を用いる場合には,ターゲット
     297略称は"dve68k_gcc"となる.
     298
     299ターゲット依存部のファイルを置くために,targetディレクトリの下に,ター
     300ゲット略称を名称とするディレクトリを作成する.これをターゲット依存部ディ
     301レクトリと呼ぶ.
     302
     303ターゲット依存部からプロセッサ依存部やチップ依存部を切り分ける場合には,
     304依存部略称を定める.依存部略称は,プロセッサやチップの略称と開発環境略
     305称を"_"で連結したものとする.プロセッサやチップの略称に用いる文字は,英
     306小文字と数字と"_"に限定する.例えば,プロセッサ略称が"m68k"で,GNU開発
     307環境を用いる場合には,依存部略称は"m68k_gcc"となる.
     308
     309また,ターゲット依存部から開発環境依存部を切り分ける場合には,開発環境
     310略称を依存部略称とする.例えば,GNU開発環境依存部の依存部略称は,"gcc"
     311となる.
     312
     313これらの依存部のファイルを置くために,archディレクトリの下に,依存部略
     314称を名称とするディレクトリを作成する.
     315
     316なお,GNU開発環境以外の開発環境を用いる場合には,コンフィギュレーション
     317スクリプト(configure),サンプルのMakefile(sample/Makefile),一部の
     318ユーティリティプログラム(utils/genoffset,utils/makedep)を,その開発
     319環境用に用意する必要がある場合がある.その場合には,これらのファイルを,
     320ターゲット依存部ディレクトリか開発環境依存部ディレクトリに置くものとす
     321る.また,開発環境用のプロジェクトファイルが必要な場合には,ターゲット
     322依存部ディレクトリに置くものとする.
     323
     3242.2 Makefileのターゲット依存部
     325
     326Makefileのターゲット依存部は,ターゲット依存部ディレクトリに置いた
     327Makefile.targetまたはそこからインクルードされるファイル(プロセッサ・チッ
     328プ・開発環境依存部で用意されるファイルなど)に含める.
     329
     3302.3 開発環境名とコマンド名の設定
     331
     332開発環境名とコマンド名を設定するために,Makefileのターゲット依存部で次
     333の変数を定義する.
     334
     335(2-3-1) TOOL                                    開発環境名
     336
     337開発環境名に定義する.GNU開発環境を用いる場合には,gccに定義する.
     338
     339(2-3-2) GCC_TARGET                              GNU開発環境のターゲット名
     340
     341GNU開発環境を用いる場合に,GNU開発環境をconfigureする場合に指定するター
     342ゲット名に定義する.ここで指定したターゲット名は,開発環境のコマンド名
     343の先頭に付与される文字列となる.例えば,GCC_TARGETをm68k-unknown-elfに
     344定義した場合には,コンパイラとしてm68k-unknown-elf-gccが使われる.この
     345変数が定義されない場合には,単なるgccが使われる.
     346
     347(2-3-3) CC                                              Cコンパイラドライバの名称
     348(2-3-4) CXX                                             C++コンパイラドライバの名称
     349(2-3-5) AS                                              アセンブラの名称
     350(2-3-6) LD                                              リンカの名称
     351(2-3-7) AR                                              アーカイバの名称
     352(2-3-8) NM                                              nmプログラムの名称
     353(2-3-9) RANLIB                                  ranlibプログラムの名称
     354(2-3-10) OBJCOPY                                objcopyプログラムの名称
     355(2-3-11) OBJDUMP                                objdumpプログラムの名称
     356
     357GNU開発環境以外の開発環境を用いる場合に,それぞれのコマンドの名称に定義
     358する.対応するコマンドがない場合や,コマンドパラメータが異なる場合には,
     359Makefile中でそのコマンドを呼び出している部分を変更する必要がある.
     360
     361GNU開発環境では,これらはGCC_TARGETを用いて定義されるので,定義する必要
     362はない.
     363
     3642.4 コンパイルオプションとオブジェクトファイルの設定
     365
     366Makefileのターゲット依存部で以下で説明する変数を定義する時には,":="を
     367用いて,それまでの定義に追加する形で行う.例えば,コンパイラに対するそ
     368の他のオプションとして「-Wall -g -O2」を追加したい場合には,「COPTS :=
     369$(COPTS) -Wall -g -O2」という記述をMakefileのターゲット依存部に含める.
     370
     371(2-4-1) COPTS                           コンパイラに対するその他のオプション
     372(2-4-2) CDEFS                           マクロ定義オプション(-Dオプション)
     373(2-4-3) INCLUDES                        ヘッダファイルの置かれたディレクトリ指定オ
     374                                                        プション(-Iオプション)
     375(2-4-4) LDFLAGS                         リンカに対するその他のオプション
     376(2-4-5) LIBS                            ライブラリリンク指定のためのオプション
     377
     378ターゲットに依存して,すべてのソースファイルに共通するコンパイルオプショ
     379ンの追加が必要な場合には,オプションの種類毎に上に示した変数に定義する.
     380
     381ほとんどの場合に,ターゲット依存部ディレクトリのMakefile.targetには,以
     382下の記述を含める必要がある.
    394383
    395384----------------------------------------
     
    397386----------------------------------------
    398387
    399 ‚±‚±‚ÅTARGETDIR‚́Cƒ^[ƒQƒbƒgˆË‘¶•”ƒfƒBƒŒƒNƒgƒŠ‚É’è‹`‚³‚ê‚Ä‚¢‚éD‚Ü‚½
    400 SRCDIR‚́CMakefile‚É‚¨‚¢‚āCƒ\[ƒXƒvƒƒOƒ‰ƒ€‚̃‹[ƒgƒfƒBƒŒƒNƒgƒŠ
    401 iconfigure‚ª’u‚©‚ê‚Ä‚¢‚éƒfƒBƒŒƒNƒgƒŠj‚É’è‹`‚³‚ê‚Ä‚¢‚éD
    402 
    403 ƒRƒ“ƒpƒCƒ‰‚Ì–â‘è“™‚ŁCŒxƒƒbƒZ[ƒW‚ªo‚邱‚Æ‚ð–h‚°‚È‚¢ó‹µˆÈŠO‚ł́C
    404 COPTS‚É-Werror‚ð’ljÁ‚·‚邱‚Ƃ𐄏§‚·‚éD
     388ここでTARGETDIRは,ターゲット依存部ディレクトリに定義されている.また
     389SRCDIRは,Makefileにおいて,ソースプログラムのルートディレクトリ
     390(configureが置かれているディレクトリ)に定義されている.
     391
     392コンパイラの問題等で,警告メッセージが出ることを防げない状況以外では,
     393COPTSに-Werrorを追加することを推奨する.
    405394
    406395----------------------------------------
     
    408397----------------------------------------
    409398
    410 ƒJ[ƒlƒ‹‚̃Rƒ“ƒpƒCƒ‹Žž‚ɁCdereferencing type-punned pointer will break
    411 strict-aliasing rules‚Æ‚¢‚¤Œx‚ªo‚éê‡‚ɂ́CˆÈ‰º‚ð’ljÁ‚·‚é‚Æ‚æ‚¢D‚±
    412 ‚ÌŒxƒƒbƒZ[ƒW‚ÉŠÖ‚·‚éÚ×‚́CuTOPPERS/ASPƒJ[ƒlƒ‹ ÝŒvƒƒ‚v‚́uŒ^
    413 ƒLƒƒƒXƒg‚É”º‚¤ŒxƒƒbƒZ[ƒWv‚̐߂ðŽQÆ‚·‚邱‚ƁD
     399カーネルのコンパイル時に,dereferencing type-punned pointer will break
     400strict-aliasing rulesという警告が出る場合には,以下を追加するとよい.こ
     401の警告メッセージに関する詳細は,「TOPPERS/ASPカーネル 設計メモ」の「型
     402キャストに伴う警告メッセージ」の節を参照すること.
    414403
    415404----------------------------------------
     
    417406----------------------------------------
    418407
    419 ‚Ü‚½CƒAƒZƒ“ƒuƒŠŒ¾ŒêƒŒƒxƒ‹‚ÌŽ¯•Ê–¼‚ªCCŒ¾ŒêƒŒƒxƒ‹‚ÌŽ¯•Ê–¼‚̐擪‚É"_"‚ª
    420 •t‚¢‚½‚à‚Ì‚É‚È‚éê‡‚ɂ́CCDEFS‚É-DTOPPERS_LABEL_ASM‚ð’ljÁ‚·‚éD
    421 
    422 (2-4-6) SYSSVC_DIR                      ƒVƒXƒeƒ€ƒT[ƒrƒX‚̃\[ƒX‚ª’u‚©‚ꂽƒfƒBƒŒƒNƒgƒŠ
    423 (2-4-7) SYSSVC_ASMOBJS          ƒAƒZƒ“ƒuƒŠŒ¾Œê‚Å‹Lq‚³‚ꂽƒVƒXƒeƒ€ƒT[ƒrƒX‚Ì
    424                                                         ƒIƒuƒWƒFƒNƒg
    425 (2-4-8) SYSSVC_COBJS            CŒ¾Œê‚Å‹Lq‚³‚ꂽƒVƒXƒeƒ€ƒT[ƒrƒX‚̃IƒuƒWƒFƒNƒg
    426 (2-4-9) SYSSVC_CFLAGS           ƒVƒXƒeƒ€ƒT[ƒrƒX‚ɑ΂·‚éƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“
    427 (2-4-10) SYSSVC_LIBS            ƒVƒXƒeƒ€ƒT[ƒrƒX‚ɑ΂·‚郉ƒCƒuƒ‰ƒŠƒŠƒ“ƒNŽw’è
    428 
    429 ƒ^[ƒQƒbƒg‚Ɉˑ¶‚µ‚āCƒVƒXƒeƒ€ƒT[ƒrƒXiƒVƒXƒeƒ€ƒƒOƒ^ƒXƒN‚âƒfƒoƒCƒXƒh
    430 ƒ‰ƒCƒo‚Ȃǁj‚̃\[ƒX‚ª’u‚©‚ꂽƒfƒBƒŒƒNƒgƒŠCƒVƒXƒeƒ€ƒT[ƒrƒX‚ð\¬‚·‚é
    431 ƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚̃ŠƒXƒgC‚»‚ê‚ç‚ðƒRƒ“ƒpƒCƒ‹‚·‚éÛ‚É“K—p‚·‚éƒRƒ“ƒp
    432 ƒCƒ‹ƒIƒvƒVƒ‡ƒ“C‚»‚̍\¬‚É•K—v‚ȃ‰ƒCƒuƒ‰ƒŠƒŠƒ“ƒNŽw’è‚ð’ljÁ‚·‚éê‡‚ɂ́C
    433 ã‚ÉŽ¦‚µ‚½•Ï”‚É’è‹`‚·‚éD
    434 
    435 (2-4-11) KERNEL_DIR                     ƒJ[ƒlƒ‹‚̃\[ƒX‚ª’u‚©‚ꂽƒfƒBƒŒƒNƒgƒŠ
    436 (2-4-12) KERNEL_ASMOBJS         ƒAƒZƒ“ƒuƒŠŒ¾Œê‚Å‹Lq‚³‚ꂽƒJ[ƒlƒ‹‚̃IƒuƒWƒFƒNƒg
    437 (2-4-13) KERNEL_COBJS           CŒ¾Œê‚Å‹Lq‚³‚ꂽƒJ[ƒlƒ‹‚̃IƒuƒWƒFƒNƒg
    438 (2-4-14) KERNEL_CFLAGS          ƒJ[ƒlƒ‹‚ɑ΂·‚éƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“
    439 
    440 ƒ^[ƒQƒbƒg‚Ɉˑ¶‚µ‚āCƒJ[ƒlƒ‹‚̃\[ƒX‚ª’u‚©‚ꂽƒfƒBƒŒƒNƒgƒŠCƒJ[ƒlƒ‹
    441 ‚ð\¬‚·‚éƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚̃ŠƒXƒgC‚»‚ê‚ç‚ðƒRƒ“ƒpƒCƒ‹‚·‚éÛ‚É“K—p
    442 ‚·‚éƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“‚ð’ljÁ‚·‚éê‡‚ɂ́Cã‚ÉŽ¦‚µ‚½•Ï”‚É’è‹`‚·‚éD
    443 
    444 ‚Ù‚Æ‚ñ‚ǂ̏ꍇ‚ɁCƒ^[ƒQƒbƒgˆË‘¶•”ƒfƒBƒŒƒNƒgƒŠ‚ÌMakefile.target‚ɂ́CˆÈ
    445 ‰º‚Ì‹Lq‚ðŠÜ‚ß‚é•K—v‚ª‚ ‚éD
     408また,アセンブリ言語レベルの識別名が,C言語レベルの識別名の先頭に"_"が
     409付いたものになる場合には,CDEFSに-DTOPPERS_LABEL_ASMを追加する.
     410
     411(2-4-6) SYSSVC_DIR                      システムサービスのソースが置かれたディレクトリ
     412(2-4-7) SYSSVC_ASMOBJS          アセンブリ言語で記述されたシステムサービスの
     413                                                        オブジェクト
     414(2-4-8) SYSSVC_COBJS            C言語で記述されたシステムサービスのオブジェクト
     415(2-4-9) SYSSVC_CFLAGS           システムサービスに対するコンパイルオプション
     416(2-4-10) SYSSVC_LIBS            システムサービスに対するライブラリリンク指定
     417
     418ターゲットに依存して,システムサービス(システムログタスクやデバイスド
     419ライバなど)のソースが置かれたディレクトリ,システムサービスを構成する
     420オブジェクトファイルのリスト,それらをコンパイルする際に適用するコンパ
     421イルオプション,その構成に必要なライブラリリンク指定を追加する場合には,
     422上に示した変数に定義する.
     423
     424(2-4-11) KERNEL_DIR                     カーネルのソースが置かれたディレクトリ
     425(2-4-12) KERNEL_ASMOBJS         アセンブリ言語で記述されたカーネルのオブジェクト
     426(2-4-13) KERNEL_COBJS           C言語で記述されたカーネルのオブジェクト
     427(2-4-14) KERNEL_CFLAGS          カーネルに対するコンパイルオプション
     428
     429ターゲットに依存して,カーネルのソースが置かれたディレクトリ,カーネル
     430を構成するオブジェクトファイルのリスト,それらをコンパイルする際に適用
     431するコンパイルオプションを追加する場合には,上に示した変数に定義する.
     432
     433ほとんどの場合に,ターゲット依存部ディレクトリのMakefile.targetには,以
     434下の記述を含める必要がある.
    446435
    447436----------------------------------------
     
    451440----------------------------------------
    452441
    453 (2-4-15) CFG_TABS                       ƒRƒ“ƒtƒBƒMƒ
    454 ƒŒ[ƒ^‚ɑ΂·‚éƒIƒvƒVƒ‡ƒ“
    455 
    456 ƒ^[ƒQƒbƒg‚Ɉˑ¶‚µ‚āCƒRƒ“ƒtƒBƒMƒ
    457 ƒŒ[ƒ^‚ɑ΂·‚éƒIƒvƒVƒ‡ƒ“‚ð’ljÁ‚·‚éê
    458 ‡‚ɂ́Cã‚ÉŽ¦‚µ‚½•Ï”‚É’è‹`‚·‚éD‹ï‘Ì“I‚ɂ́CƒRƒ“ƒtƒBƒMƒ
    459 ƒŒ[ƒ^‚Ì’lŽæ
    460 “¾ƒVƒ“ƒ{ƒ‹ƒe[ƒuƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”itarget_def.csvj‚ª‚ ‚éê‡‚ɂ́C
    461 ‚»‚ê‚ðŽw’è‚·‚éƒIƒvƒVƒ‡ƒ“‚ð’ljÁ‚·‚é•K—v‚ª‚ ‚éD
    462 
    463 ‚Ù‚Æ‚ñ‚ǂ̏ꍇ‚ɁCƒ^[ƒQƒbƒgˆË‘¶•”ƒfƒBƒŒƒNƒgƒŠ‚ÌMakefile.target‚ɂ́CˆÈ
    464 ‰º‚Ì‹Lq‚ðŠÜ‚ß‚é•K—v‚ª‚ ‚éD
     442(2-4-15) CFG_TABS                       コンフィギュレータに対するオプション
     443
     444ターゲットに依存して,コンフィギュレータに対するオプションを追加する場
     445合には,上に示した変数に定義する.具体的には,コンフィギュレータの値取
     446得シンボルテーブルのターゲット依存部(target_def.csv)がある場合には,
     447それを指定するオプションを追加する必要がある.
     448
     449ほとんどの場合に,ターゲット依存部ディレクトリのMakefile.targetには,以
     450下の記述を含める必要がある.
    465451
    466452----------------------------------------
     
    468454----------------------------------------
    469455
    470 (2-4-16) CFG1_OUT_LDFLAGS       cfg1_out.c‚ɑ΂·‚郊ƒ“ƒNƒIƒvƒVƒ‡ƒ“
    471 
    472 ƒ^[ƒQƒbƒg‚Ɉˑ¶‚µ‚āCcfg1_out.c‚ðƒŠƒ“ƒN‚·‚éÛ‚É“K—p‚·‚éƒIƒvƒVƒ‡ƒ“‚ð’Ç
    473 ‰Á‚·‚éê‡‚ɂ́Cã‚ÉŽ¦‚µ‚½•Ï”‚É’è‹`‚·‚éD
    474 
    475 (2-4-17) CFG_OBJS                       ƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    476 ƒŒ[ƒVƒ‡ƒ“‚Ì‚½‚߂̃Iƒu
    477                                                         ƒWƒFƒNƒg
    478 
    479 ƒ^[ƒQƒbƒg‚Ɉˑ¶‚µ‚āCƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    480 ƒŒ[ƒVƒ‡ƒ“‚Ì‚½‚߂̃IƒuƒWƒFƒN
    481 ƒgƒtƒ@ƒCƒ‹‚ðikernel_cfg.oˆÈŠO‚Ɂj’ljÁ‚·‚éê‡‚ɂ́Cã‚ÉŽ¦‚µ‚½•Ï”‚É’è
    482 ‹`‚·‚éD‚±‚̏ꍇC’ljÁ‚µ‚½ƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚̍쐬ƒ‹[ƒ‹iƒRƒ“ƒpƒCƒ‹^
    483 ƒAƒZƒ“ƒuƒ‹ƒ‹[ƒ‹‚ƈˑ¶ŠÖŒWì¬ƒ‹[ƒ‹j‚ðCMakefile‚̃^[ƒQƒbƒgˆË‘¶•”‚É
    484 ‹Lq‚·‚é•K—v‚ª‚ ‚éD
     456(2-4-16) CFG1_OUT_LDFLAGS       cfg1_out.cに対するリンクオプション
     457
     458ターゲットに依存して,cfg1_out.cをリンクする際に適用するオプションを追
     459加する場合には,上に示した変数に定義する.
     460
     461(2-4-17) CFG_OBJS                       システムコンフィギュレーションのためのオブ
     462                                                        ジェクト
     463
     464ターゲットに依存して,システムコンフィギュレーションのためのオブジェク
     465トファイルを(kernel_cfg.o以外に)追加する場合には,上に示した変数に定
     466義する.この場合,追加したオブジェクトファイルの作成ルール(コンパイル/
     467アセンブルルールと依存関係作成ルール)を,Makefileのターゲット依存部に
     468記述する必要がある.
    485469
    486470(2-4-18) CFG2_OUT
    487471
    488 ƒ^[ƒQƒbƒg‚Ɉˑ¶‚µ‚āCƒRƒ“ƒtƒBƒMƒ
    489 ƒŒ[ƒ^‚̃pƒX2‚Åkernel_cfg.c‚Æ
    490 kernel_cfg.hˆÈŠO‚̃tƒ@ƒCƒ‹‚𐶐¬‚·‚éê‡‚ɂ́Cã‚ÉŽ¦‚µ‚½•Ï”‚É’è‹`‚·‚éD
     472ターゲットに依存して,コンフィギュレータのパス2でkernel_cfg.cと
     473kernel_cfg.h以外のファイルを生成する場合には,上に示した変数に定義する.
    491474
    492475(2-4-19) OMIT_WARINIG_ALL
    493476(2-4-20) OMIT_OPTIMIZATION
    494477
    495 ƒTƒ“ƒvƒ‹‚ÌMakefile‚ł́CƒRƒ“ƒpƒCƒ‰‚ɑ΂·‚éƒIƒvƒVƒ‡ƒ“‚Ɂu-Wall -g -O2v
    496 ‚ð’ljÁ‚·‚éD-Wall‚ð’ljÁ‚µ‚½‚­‚È‚¢ê‡‚ɂ́CMakefile‚̃^[ƒQƒbƒgˆË‘¶•”‚Å
    497 OMIT_WARNING_ALL‚ð"true"‚É’è‹`‚·‚éD-O2‚ð’ljÁ‚µ‚½‚­‚È‚¢ê‡‚ɂ́C
    498 Makefile‚̃^[ƒQƒbƒgˆË‘¶•”‚ÅOMIT_OPTIMIZATION‚ð"true"‚É’è‹`‚·‚éD
    499 
    500 2.5 ƒŠƒ“ƒN•û–@‚̐ݒè
    501 
    502 (2-5-1) LDSCRIPT                                ƒŠƒ“ƒJƒXƒNƒŠƒvƒg‚̃tƒ@ƒCƒ‹–¼
    503 
    504 ŠJ”­ŠÂ‹«‚É•W€‚̃Šƒ“ƒJƒXƒNƒŠƒvƒg‚ªŽg—p‚Å‚«‚È‚¢ê‡‚ɂ́Cƒ^[ƒQƒbƒgˆË‘¶
    505 •”‚ŃŠƒ“ƒJƒXƒNƒŠƒvƒg‚ð—pˆÓ‚µC‚»‚̃tƒ@ƒCƒ‹–¼‚ð‚±‚Ì•Ï”‚É’è‹`‚·‚éD
    506 
    507 (2-5-2) TEXT_START_ADDRESS              ƒeƒLƒXƒgƒZƒNƒVƒ‡ƒ“‚̐擪”Ô’n
    508 (2-5-3) DATA_START_ADDRESS              ƒf[ƒ^ƒZƒNƒVƒ‡ƒ“‚̐擪”Ô’n
    509 
    510 ŠeƒZƒNƒVƒ‡ƒ“‚̐擪”Ô’n‚ÌŽw’肪•K—v‚ȏꍇ‚ɂ́C‚±‚ê‚ç‚̕ϐ”‚ɐ擪”Ô’n‚ð
    511 ’è‹`‚·‚éD
    512 
    513 (2-5-4) START_OBJS                              æ“ª‚ɃŠƒ“ƒN‚·‚ׂ«ƒ‚ƒWƒ
    514 [ƒ‹–¼
    515 (2-5-5) END_OBJS                                ÅŒã‚ɃŠƒ“ƒN‚·‚ׂ«ƒ‚ƒWƒ
    516 [ƒ‹–¼
    517 
    518 ƒ^[ƒQƒbƒg‚É‚æ‚Á‚ẮCƒ[ƒhƒ‚ƒWƒ
    519 [ƒ‹‚̐擪‚ƍŌã‚ɃŠƒ“ƒN‚·‚ׂ«ƒ‚ƒWƒ
    520 [
    521 ƒ‹‚ðCƒ^[ƒQƒbƒgˆË‘¶•”‚Å—pˆÓ‚·‚é•K—v‚ª‚ ‚éD‘½‚­‚̏ꍇCƒXƒ^[ƒgƒAƒbƒv
    522 ƒ‚ƒWƒ
    523 [ƒ‹‚ðƒ[ƒhƒ‚ƒWƒ
    524 [ƒ‹‚̐擪‚ɃŠƒ“ƒN‚·‚é•K—v‚ª‚ ‚éD
    525 
    526 ƒ[ƒhƒ‚ƒWƒ
    527 [ƒ‹‚̐擪‚ɃŠƒ“ƒN‚·‚ׂ«ƒvƒƒOƒ‰ƒ€‚ª‚ ‚éê‡‚ɂ́CMakefile
    528 ‚̃^[ƒQƒbƒgˆË‘¶•”‚É‚¨‚¢‚āC‚»‚̃IƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹–¼‚ðSTART_OBJS‚É’è
    529 ‹`‚µC‚»‚ê‚ɑ΂·‚éƒRƒ“ƒpƒCƒ‹ƒ‹[ƒ‹‚ƈˑ¶ŠÖŒWì¬ƒ‹[ƒ‹‚ð’è‹`‚·‚éDƒ[
    530 ƒhƒ‚ƒWƒ
    531 [ƒ‹‚̍Ōã‚ɃŠƒ“ƒN‚·‚ׂ«ƒ‚ƒWƒ
    532 [ƒ‹‚ª‚ ‚éê‡‚ɂ́C‚»‚̃IƒuƒWƒF
    533 ƒNƒgƒtƒ@ƒCƒ‹–¼‚ðEND_OBJS‚É’è‹`‚µC‚»‚ê‚ɑ΂·‚éƒRƒ“ƒpƒCƒ‹ƒ‹[ƒ‹‚ƈˑ¶ŠÖ
    534 ŒWì¬ƒ‹[ƒ‹‚ð’è‹`‚·‚éD‚Ü‚½C•W€‚̃Xƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    535 [ƒ‹icrt0.oj
    536 ‚ðƒŠƒ“ƒN‚µ‚È‚¢‚悤‚ɁCLDFLAGS‚É-nostdlib‚ð’ljÁ‚·‚é•K—v‚ª‚ ‚éD‚³‚ç
    537 ‚ɁC-nostdlib‚ð‚‚¯‚邱‚Æ‚Å•W€ƒ‰ƒCƒuƒ‰ƒŠ‚ªƒŠƒ“ƒN‚³‚ê‚È‚­‚Ȃ邽‚߁C
    538 LIBS‚É-lgcc‚ð’ljÁ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    539 
    540 —Ⴆ‚΁CƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    541 [ƒ‹‚̃\[ƒXƒtƒ@ƒCƒ‹‚ªstart.S‚̏ꍇ‚ɂ́C
    542 Makefile‚̃^[ƒQƒbƒgˆË‘¶•”‚ÉŽŸ‚̂悤‚È‹Lq‚ð“ü‚ê‚é‚Æ‚æ‚¢D
     478サンプルのMakefileでは,コンパイラに対するオプションに「-Wall -g -O2」
     479を追加する.-Wallを追加したくない場合には,Makefileのターゲット依存部で
     480OMIT_WARNING_ALLを"true"に定義する.-O2を追加したくない場合には,
     481Makefileのターゲット依存部でOMIT_OPTIMIZATIONを"true"に定義する.
     482
     4832.5 リンク方法の設定
     484
     485(2-5-1) LDSCRIPT                                リンカスクリプトのファイル名
     486
     487開発環境に標準のリンカスクリプトが使用できない場合には,ターゲット依存
     488部でリンカスクリプトを用意し,そのファイル名をこの変数に定義する.
     489
     490(2-5-2) TEXT_START_ADDRESS              テキストセクションの先頭番地
     491(2-5-3) DATA_START_ADDRESS              データセクションの先頭番地
     492
     493各セクションの先頭番地の指定が必要な場合には,これらの変数に先頭番地を
     494定義する.
     495
     496(2-5-4) START_OBJS                              先頭にリンクすべきモジュール名
     497(2-5-5) END_OBJS                                最後にリンクすべきモジュール名
     498
     499ターゲットによっては,ロードモジュールの先頭と最後にリンクすべきモジュー
     500ルを,ターゲット依存部で用意する必要がある.多くの場合,スタートアップ
     501モジュールをロードモジュールの先頭にリンクする必要がある.
     502
     503ロードモジュールの先頭にリンクすべきプログラムがある場合には,Makefile
     504のターゲット依存部において,そのオブジェクトファイル名をSTART_OBJSに定
     505義し,それに対するコンパイルルールと依存関係作成ルールを定義する.ロー
     506ドモジュールの最後にリンクすべきモジュールがある場合には,そのオブジェ
     507クトファイル名をEND_OBJSに定義し,それに対するコンパイルルールと依存関
     508係作成ルールを定義する.また,標準のスタートアップモジュール(crt0.o)
     509をリンクしないように,LDFLAGSに-nostdlibを追加する必要がある.さら
     510に,-nostdlibをつけることで標準ライブラリがリンクされなくなるため,
     511LIBSに-lgccを追加しなければならない.
     512
     513例えば,スタートアップモジュールのソースファイルがstart.Sの場合には,
     514Makefileのターゲット依存部に次のような記述を入れるとよい.
    543515
    544516----------------------------------------
    545 # ƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    546 [ƒ‹‚̃IƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹–¼
     517# スタートアップモジュールのオブジェクトファイル名
    547518START_OBJS = start.o
    548519
    549 # ƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    550 [ƒ‹‚̃Rƒ“ƒpƒCƒ‹ƒ‹[ƒ‹
     520# スタートアップモジュールのコンパイルルール
    551521$(START_OBJS): %.o: %.S
    552522        $(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<
    553523
    554 # ƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    555 [ƒ‹‚̈ˑ¶ŠÖŒWì¬ƒ‹[ƒ‹
     524# スタートアップモジュールの依存関係作成ルール
    556525$(START_OBJS:.o=.d): %.d: %.S
    557526        @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
    558527                -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend
    559528
    560 # ƒŠƒ“ƒJ‚ɑ΂·‚éƒIƒvƒVƒ‡ƒ“
     529# リンカに対するオプション
    561530LDFLAGS := -nostdlib $(LDFLAGS)
    562531LIBS := $(LIBS) -lgcc
    563532----------------------------------------
    564533
    565 ‚Ü‚½CGNUŠJ”­ŠÂ‹«‚ŁCƒRƒ“ƒpƒCƒ‰‚É•W€‚Ìcrtbegin.o‚Æcrtend.o‚ð—p‚¢‚éê‡
    566 ‚ɂ́CMakefile ‚̃^[ƒQƒbƒgˆË‘¶•”‚ÉŽŸ‚̂悤‚È‹Lq‚ð“ü‚ê‚é‚Æ‚æ‚¢D
     534また,GNU開発環境で,コンパイラに標準のcrtbegin.oとcrtend.oを用いる場合
     535には,Makefile のターゲット依存部に次のような記述を入れるとよい.
    567536
    568537----------------------------------------
    569 # ƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹–¼
     538# オブジェクトファイル名
    570539START_OBJS = $(shell $(CC) -print-file-name=crtbegin.o)
    571540END_OBJS = $(shell $(CC) -print-file-name=crtend.o)
    572541
    573 # ˆË‘¶ŠÖŒWì¬ƒ‹[ƒ‹
     542# 依存関係作成ルール
    574543$(START_OBJS:.o=.d): %.d:
    575544$(END_OBJS:.o=.d): %.d:
    576545
    577 # ƒŠƒ“ƒJ‚ɑ΂·‚éƒIƒvƒVƒ‡ƒ“
     546# リンカに対するオプション
    578547LDFLAGS := -nostdlib $(LDFLAGS)
    579548LIBS := $(LIBS) -lgcc
    580549----------------------------------------
    581550
    582 ‚±‚̏ꍇC‚±‚ê‚ç‚̃tƒ@ƒCƒ‹‚ðƒRƒ“ƒpƒCƒ‹‚·‚邱‚Æ‚Í‚È‚¢‚½‚߁CƒRƒ“ƒpƒCƒ‹ƒ‹[
    583 ƒ‹‚Í•s—v‚Å‚ ‚éD‚Ü‚½CˆË‘¶ŠÖŒWì¬ƒ‹[ƒ‹‚̓_ƒ~[‚Å‚æ‚¢iˆË‘¶ŠÖŒWì¬ƒ‹[
    584 ƒ‹‚ª‚È‚¢‚ƃGƒ‰[‚É‚È‚éjD
    585 
    586 (2-5-6) HIDDEN_OBJS                             Žw’肵‚È‚­‚Ä‚àƒŠƒ“ƒN‚³‚ê‚郂ƒWƒ
    587 [ƒ‹–¼
    588 
    589 ƒ[ƒhƒ‚ƒWƒ
    590 [ƒ‹‚ɃŠƒ“ƒN‚·‚ׂ«ƒ‚ƒWƒ
    591 [ƒ‹‚ðCƒŠƒ“ƒJ‚ɑ΂·‚éƒpƒ‰ƒ[ƒ^‚Å
    592 ‚Í‚È‚­CƒŠƒ“ƒJƒXƒNƒŠƒvƒg’†‚Ɂi—Ⴆ‚΁CGNUŠJ”­ŠÂ‹«‚̃Šƒ“ƒJƒXƒNƒŠƒvƒg‚Ì
    593 STARTUP‚ðŽg‚Á‚āj‹Lq‚·‚éê‡‚ɂ́C‚»‚̃IƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹–¼‚ðC
    594 iSTART_OBJS‚Ü‚½‚ÍEND_OBJS‚Å‚Í‚È‚­jHIDDEN_OBJS‚É’è‹`‚µC‚»‚ê‚ɑ΂·‚éƒR
    595 ƒ“ƒpƒCƒ‹ƒ‹[ƒ‹‚ƈˑ¶ŠÖŒWì¬ƒ‹[ƒ‹‚ð’è‹`‚·‚éDHIDDEN_OBJS‚É’è‹`‚µ‚½ƒ‚
    596 ƒWƒ
    597 [ƒ‹‚́CƒŠƒ“ƒJ‚ɑ΂·‚éƒpƒ‰ƒ[ƒ^‚©‚ç‚͏œŠO‚³‚ê‚éDLIBS‚ÆLDFLAGS‚É‚Â
    598 ‚¢‚ẮCSTART_OBJS‚Ü‚½‚ÍEND_OBJS‚ð—p‚¢‚éê‡‚Æ“¯—l‚Å‚ ‚éD
    599 
    600 —Ⴆ‚΁CƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    601 [ƒ‹‚̃\[ƒXƒtƒ@ƒCƒ‹‚ªstart.S‚ŁCstart.o‚ð
    602 ƒŠƒ“ƒN‚·‚邱‚Æ‚ðƒŠƒ“ƒJƒXƒNƒŠƒvƒg’†‚É‹Lq‚·‚éê‡‚ɂ́CMakefile‚̃^[ƒQƒb
    603 ƒgˆË‘¶•”‚ÉŽŸ‚̂悤‚È‹Lq‚ð“ü‚ê‚é‚Æ‚æ‚¢D
     551この場合,これらのファイルをコンパイルすることはないため,コンパイルルー
     552ルは不要である.また,依存関係作成ルールはダミーでよい(依存関係作成ルー
     553ルがないとエラーになる).
     554
     555(2-5-6) HIDDEN_OBJS                             指定しなくてもリンクされるモジュール名
     556
     557ロードモジュールにリンクすべきモジュールを,リンカに対するパラメータで
     558はなく,リンカスクリプト中に(例えば,GNU開発環境のリンカスクリプトの
     559STARTUPを使って)記述する場合には,そのオブジェクトファイル名を,
     560(START_OBJSまたはEND_OBJSではなく)HIDDEN_OBJSに定義し,それに対するコ
     561ンパイルルールと依存関係作成ルールを定義する.HIDDEN_OBJSに定義したモ
     562ジュールは,リンカに対するパラメータからは除外される.LIBSとLDFLAGSにつ
     563いては,START_OBJSまたはEND_OBJSを用いる場合と同様である.
     564
     565例えば,スタートアップモジュールのソースファイルがstart.Sで,start.oを
     566リンクすることをリンカスクリプト中に記述する場合には,Makefileのターゲッ
     567ト依存部に次のような記述を入れるとよい.
    604568
    605569----------------------------------------
    606 # ƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    607 [ƒ‹‚̃IƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹–¼
     570# スタートアップモジュールのオブジェクトファイル名
    608571HIDDEN_OBJS = start.o
    609572
    610 # ƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    611 [ƒ‹‚̃Rƒ“ƒpƒCƒ‹ƒ‹[ƒ‹
     573# スタートアップモジュールのコンパイルルール
    612574$(HIDDEN_OBJS): %.o: %.S
    613575        $(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<
    614576
    615 # ƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    616 [ƒ‹‚̈ˑ¶ŠÖŒWì¬ƒ‹[ƒ‹
     577# スタートアップモジュールの依存関係作成ルール
    617578$(HIDDEN_OBJS:.o=.d): %.d: %.S
    618579        @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
    619580                -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend
    620581
    621 # ƒŠƒ“ƒJ‚ɑ΂·‚éƒIƒvƒVƒ‡ƒ“
     582# リンカに対するオプション
    622583LDFLAGS := -nostdlib $(LDFLAGS)
    623584LIBS := $(LIBS) -lgcc
    624585----------------------------------------
    625586
    626 2.6 ˆË‘¶ŠÖŒW‚Ì’è‹`
    627 
    628 ƒRƒ“ƒtƒBƒMƒ
    629 ƒŒ[ƒ^‚ÌŠeƒpƒX‚ɑ΂µ‚āCƒ^[ƒQƒbƒgˆË‘¶‚̃tƒ@ƒCƒ‹‚ւ̈ˑ¶ŠÖ
    630 ŒW‚ð’è‹`‚·‚éD‹ï‘Ì“I‚ɂ́CƒpƒX1CƒpƒX2CƒpƒX3‚ªˆË‘¶‚·‚éƒtƒ@ƒCƒ‹‚ðC‚»‚ê
    631 ‚¼‚êcfg1_out.cCkernel_cfg.timestampC$(OBJFILE)‚ɑ΂·‚éˆË‘¶ŠÖŒW‚ÌŒ`‚Å
    632 ‹Lq‚·‚éD
    633 
    634 ‚Ù‚Æ‚ñ‚ǂ̏ꍇ‚ɁCƒ^[ƒQƒbƒgˆË‘¶•”ƒfƒBƒŒƒNƒgƒŠ‚ÌMakefile.target‚ɂ́CˆÈ
    635 ‰º‚Ì‹Lq‚ðŠÜ‚ß‚é•K—v‚ª‚ ‚éD
     5872.6 依存関係の定義
     588
     589コンフィギュレータの各パスに対して,ターゲット依存のファイルへの依存関
     590係を定義する.具体的には,パス1,パス2,パス3が依存するファイルを,それ
     591ぞれcfg1_out.c,kernel_cfg.timestamp,$(OBJFILE)に対する依存関係の形で
     592記述する.
     593
     594ほとんどの場合に,ターゲット依存部ディレクトリのMakefile.targetには,以
     595下の記述を含める必要がある.
    636596
    637597----------------------------------------
     
    641601----------------------------------------
    642602
    643 2.7 ‚»‚Ì‘¼‚̐ݒè
    644 
    645 (2-7-1) CLEAN_FILES                             clean‚É‚æ‚èíœ‚·‚éƒtƒ@ƒCƒ‹–¼
    646 
    647 clean‚É‚æ‚èíœ‚·‚éƒtƒ@ƒCƒ‹‚ðƒ^[ƒQƒbƒgˆË‘¶•”‚ŒljÁ‚µ‚½‚¢ê‡‚ɂ́Cƒtƒ@
    648 ƒCƒ‹–¼‚ð‚±‚Ì•Ï”‚ɒljÁ’è‹`‚·‚éD
    649 
    650 (2-7-2) REALCLEAN_FILES                 realclean‚É‚æ‚èíœ‚·‚éƒtƒ@ƒCƒ‹–¼
    651 
    652 realclean‚É‚æ‚èíœ‚·‚éƒtƒ@ƒCƒ‹‚ðƒ^[ƒQƒbƒgˆË‘¶•”‚ŒljÁ‚µ‚½‚¢ê‡‚ɂ́C
    653 ƒtƒ@ƒCƒ‹–¼‚ð‚±‚Ì•Ï”‚ɒljÁ’è‹`‚·‚éD
    654 
    655 
    656 3. TOPPERS‹¤’Ê’è‹`‚̃^[ƒQƒbƒgˆË‘¶•”
    657 
    658 TOPPERS‹¤’Ê’è‹`it_stddef.hj‚̃^[ƒQƒbƒgˆË‘¶•”‚́Ctarget_stddef.h‚Ü‚½
    659 ‚Í‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹iƒvƒƒZƒbƒTEƒ`ƒbƒvEŠJ”­ŠÂ‹«ˆË‘¶
    660 •”‚Å—pˆÓ‚³‚ê‚éƒwƒbƒ_ƒtƒ@ƒCƒ‹‚Ȃǁj‚ÉŠÜ‚ß‚éD
    661 
    662 3.1 ƒ^[ƒQƒbƒgŽ¯•Êƒ}ƒNƒ
    663 
    664 ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚âƒVƒXƒeƒ€ƒT[ƒrƒX‚Ń^[ƒQƒbƒg‚ðŽ¯•Ê‚·‚邽‚߂ɁC
    665 "TOPPERS_"‚ɃVƒXƒeƒ€—ªÌ‚ð‘啶Žš‚É‚µ‚½•¶Žš—ñ‚ð˜AŒ‹‚µ‚½‚à‚́i—Ⴆ‚΁C
    666 "TOPPERS_DVE68K"j‚ðƒ}ƒNƒ’è‹`‚·‚éD
    667 
    668 ‚Ü‚½Cƒ^[ƒQƒbƒgˆË‘¶•”‚©‚çƒvƒƒZƒbƒTˆË‘¶•”‚âƒ`ƒbƒvˆË‘¶•”‚ðØ‚蕪‚¯‚½ê
    669 ‡‚ɂ́C"TOPPERS_"‚Ɉˑ¶•”—ªÌ‚ð‘啶Žš‚É‚µ‚½•¶Žš—ñ‚ð˜AŒ‹‚µ‚½‚à‚́i—Ⴆ
    670 ‚΁C"TOPPERS_M68K"j‚ðƒ}ƒNƒ’è‹`‚·‚éD
    671 
    672 3.2 ®”Œ^‚̍őå’lEÅ¬’lEƒrƒbƒg”
    673 
    674 (3-2-1) INT_MAX                         int‚ÉŠi”[‚Å‚«‚éÅ‘å’liC90€‹’j
    675 (3-2-2) INT_MIN                         int‚ÉŠi”[‚Å‚«‚éÅ¬’liC90€‹’j
    676 (3-2-3) UINT_MAX                        unsigned int‚ÉŠi”[‚Å‚«‚éÅ‘å’liC90€‹’j
    677 (3-2-4) LONG_MAX                        long‚ÉŠi”[‚Å‚«‚éÅ‘å’liC90€‹’j
    678 (3-2-5) LONG_MIN                        long‚ÉŠi”[‚Å‚«‚éÅ¬’liC90€‹’j
    679 (3-2-6) ULONG_MAX                       unsigned long‚ÉŠi”[‚Å‚«‚éÅ‘å’liC90€‹’j
    680 (3-2-7) CHAR_BIT                        charŒ^‚̃rƒbƒg”iC90€‹’j
    681 
    682 ®”Œ^‚̍őå’lEÅ¬’lEƒrƒbƒg”‚ðC‚±‚ê‚ç‚̃Vƒ“ƒ{ƒ‹‚Ƀ}ƒNƒ‚É’è‹`‚·‚éD
    683 
    684 ‚±‚ê‚ç‚̃}ƒNƒ‚́CC90‚ɏ€‹’‚µ‚½‚à‚Ì‚Å‚ ‚éDŠJ”­ŠÂ‹«‚ÉC90‚ɏ€‹’‚µ‚½
    685 limits.h‚ª—pˆÓ‚³‚ê‚Ä‚¢‚éê‡‚ɂ́C‚±‚ê‚ç‚̃}ƒNƒ‚ð’è‹`‚·‚邱‚Ƃɑウ‚āC
    686 limits.h‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚ê‚΂悢D
    687 
    688 3.3 ƒTƒCƒY‚ÌŽw’肳‚ꂽ®”Œ^C‚»‚̍őå’lEÅ¬’lC®”’萔‚ðì‚éƒ}ƒNƒ
    689 
    690 (3-3-1) int8_t                          •„†•t‚«8ƒrƒbƒg®”iƒIƒvƒVƒ‡ƒ“CC99€‹’j
    691 (3-3-2) uint8_t                         •„†–³‚µ8ƒrƒbƒg®”iƒIƒvƒVƒ‡ƒ“CC99€‹’j
    692 (3-3-3) int16_t                         •„†•t‚«16ƒrƒbƒg®”iC99€‹’j
    693 (3-3-4) uint16_t                        •„†–³‚µ16ƒrƒbƒg®”iC99€‹’j
    694 (3-3-5) int32_t                         •„†•t‚«32ƒrƒbƒg®”iC99€‹’j
    695 (3-3-6) uint32_t                        •„†–³‚µ32ƒrƒbƒg®”iC99€‹’j
    696 (3-3-7) int64_t                         •„†•t‚«64ƒrƒbƒg®”iƒIƒvƒVƒ‡ƒ“CC99€‹’j
    697 (3-3-8) uint64_t                        •„†–³‚µ64ƒrƒbƒg®”iƒIƒvƒVƒ‡ƒ“CC99€‹’j
    698 (3-3-9) int128_t                        •„†•t‚«128ƒrƒbƒg®”iƒIƒvƒVƒ‡ƒ“CC99€‹’j
    699 (3-3-10) uint128_t                      •„†–³‚µ128ƒrƒbƒg®”iƒIƒvƒVƒ‡ƒ“CC99€‹’j
    700 (3-3-11) int_least8_t           8ƒrƒbƒgˆÈã‚Ì•„†•t‚«®”iC99€‹’j
    701 (3-3-12) uint_least8_t          8ƒrƒbƒgˆÈã‚Ì•„†–³‚µ®”iC99€‹’j
    702 (3-3-13) intptr_t                       ƒ|ƒCƒ“ƒ^‚ðŠi”[‚Å‚«‚éƒTƒCƒY‚Ì•„†•t‚«®”iC99€‹’j
    703 (3-3-14) uintptr_t                      ƒ|ƒCƒ“ƒ^‚ðŠi”[‚Å‚«‚éƒTƒCƒY‚Ì•„†–³‚µ®”iC99€‹’j
    704 (3-3-15) INT8_MAX                       int8_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    705 (3-3-16) INT8_MIN                       int8_t‚ÉŠi”[‚Å‚«‚éÅ¬’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    706 (3-3-17) UINT8_MAX                      uint8_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    707 (3-3-18) INT16_MAX                      int16_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liC99€‹’j
    708 (3-3-19) INT16_MIN                      int16_t‚ÉŠi”[‚Å‚«‚éÅ¬’liC99€‹’j
    709 (3-3-20) UINT16_MAX                     uint16_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liC99€‹’j
    710 (3-3-21) INT32_MAX                      int32_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liC99€‹’j
    711 (3-3-22) INT32_MIN                      int32_t‚ÉŠi”[‚Å‚«‚éÅ¬’liC99€‹’j
    712 (3-3-23) UINT32_MAX                     uint32_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liC99€‹’j
    713 (3-3-24) INT64_MAX                      int64_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    714 (3-3-25) INT64_MIN                      int64_t‚ÉŠi”[‚Å‚«‚éÅ¬’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    715 (3-3-26) UINT64_MAX                     uint64_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    716 (3-3-27) INT128_MAX                     int128_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    717 (3-3-28) INT128_MIN                     int128_t‚ÉŠi”[‚Å‚«‚éÅ¬’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    718 (3-3-29) UINT128_MAX            uint128_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    719 (3-3-30) INT_LEAST8_MAX         int_least8_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liC99€‹’j
    720 (3-3-31) INT_LEAST8_MIN         int_least8_t‚ÉŠi”[‚Å‚«‚éÅ¬’liC99€‹’j
    721 (3-3-32) UINT_LEAST8_MAX        uint_least8_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liC99€‹’j
    722 (3-3-33) INT8_C(val)            int_least8_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒiC99€‹’j
    723 (3-3-34) UINT8_C(val)           uint_least8_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒiC99€‹’j
    724 (3-3-35) INT16_C(val)           int16_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒiC99€‹’j
    725 (3-3-36) UINT16_C(val)          uint16_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒiC99€‹’j
    726 (3-3-37) INT32_C(val)           int32_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒiC99€‹’j
    727 (3-3-38) UINT32_C(val)          uint32_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒiC99€‹’j
    728 (3-3-39) INT64_C(val)           int64_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒiƒIƒvƒVƒ‡ƒ“CC99€‹’j
    729 (3-3-40) UINT64_C(val)          uint64_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒiƒIƒvƒVƒ‡ƒ“CC99€‹’j
    730 (3-3-41) INT128_C(val)          int128_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒiƒIƒvƒVƒ‡ƒ“CC99€‹’j
    731 (3-3-42) UINT128_C(val)         uint128_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒiƒIƒvƒVƒ‡ƒ“CC99€‹’j
    732 
    733 Žw’肳‚ꂽƒTƒCƒY‚̐®”Œ^‚ðC‚±‚ê‚ç‚̃Vƒ“ƒ{ƒ‹‚ÉŒ^’è‹`‚·‚éD‚Ü‚½Cƒf[ƒ^
    734 Œ^‚ÉŠi”[‚Å‚«‚éÅ‘å’lEÅ¬’l‚ƁC®”’萔‚ðì‚éƒ}ƒNƒ‚ðC‚±‚ê‚ç‚̃Vƒ“ƒ{
    735 ƒ‹‚Ƀ}ƒNƒ’è‹`‚·‚éD
    736 
    737 ‚±‚ê‚ç‚̃f[ƒ^Œ^‚¨‚æ‚у}ƒNƒ‚́CC99‚ɏ€‹’‚µ‚½‚à‚Ì‚Å‚ ‚éDŠJ”­ŠÂ‹«‚ÉC99
    738 ‚ɏ€‹’‚µ‚½stdint.h‚ª—pˆÓ‚³‚ê‚Ä‚¢‚éê‡‚ɂ́C‚±‚ê‚ç‚̃f[ƒ^Œ^‚¨‚æ‚у}ƒN
    739 ƒ‚ð’è‹`‚·‚邱‚Ƃɑウ‚āCstdint.h‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚ê‚΂悢D
    740 
    741 ã‚ŃIƒvƒVƒ‡ƒ“‚Æ‹Lq‚µ‚½‚à‚̂́CŠY“–‚·‚éƒf[ƒ^Œ^‚ªƒRƒ“ƒpƒCƒ‰‚ŃTƒ|[ƒg
    742 ‚³‚ê‚Ä‚¢‚éê‡‚É‚Ì‚Ý’è‹`‚·‚邱‚Æ‚ðŽ¦‚·D
    743 
    744 3.4 ƒTƒCƒY‚ÌŽw’肳‚ꂽ•‚“®¬”“_Œ^C‚»‚̍őå’lEÅ¬’l‚̃}ƒNƒ
    745 
    746 (3-4-1) float32_t                       IEEE754€‹’‚Ì32ƒrƒbƒg’P¸“x•‚“®¬”“_”iƒIƒv
    747                                                         ƒVƒ‡ƒ“j
    748 (3-4-2) double64_t                      IEEE754€‹’‚Ì64ƒrƒbƒg”{¸“x•‚“®¬”“_”iƒIƒv
    749                                                         ƒVƒ‡ƒ“j
    750 (3-4-3) FLOAT32_MIN                     float32_t‚ÉŠi”[‚Å‚«‚éÅ¬‚̐³‹K‰»‚³‚ꂽ³‚Ì•‚
    751                                                         “®¬”“_”iƒIƒvƒVƒ‡ƒ“j
    752 (3-4-4) FLOAT32_MAX                     float32_t‚ÉŠi”[‚Å‚«‚é•\Œ»‰Â”\‚ȍőå‚Ì—LŒÀ•‚“®
    753                                                         ¬”“_”iƒIƒvƒVƒ‡ƒ“j
    754 (3-4-5) DOUBLE64_MIN            double64_t‚ÉŠi”[‚Å‚«‚éÅ¬‚̐³‹K‰»‚³‚ꂽ³‚Ì•‚
    755                                                         “®¬”“_”iƒIƒvƒVƒ‡ƒ“j
    756 (3-4-6) DOUBLE64_MAX            double64_t‚ÉŠi”[‚Å‚«‚é•\Œ»‰Â”\‚ȍőå‚Ì—LŒÀ•‚“®
    757                                                         ¬”“_”iƒIƒvƒVƒ‡ƒ“j
    758 
    759 Žw’肳‚ꂽƒTƒCƒYE•\Œ»Œ`Ž®‚Ì•‚“®¬”“_Œ^‚ðC‚±‚ê‚ç‚̃Vƒ“ƒ{ƒ‹‚ÉŒ^’è‹`‚·
    760 ‚éD‚Ü‚½Cƒf[ƒ^Œ^‚ÉŠi”[‚Å‚«‚éÅ‘å’lEÅ¬’l‚ðC‚±‚ê‚ç‚̃Vƒ“ƒ{ƒ‹‚Ƀ}ƒN
    761 ƒ’è‹`‚·‚éD
    762 
    763 ‚¢‚¸‚ê‚àCŠY“–‚·‚éƒf[ƒ^Œ^‚ªƒRƒ“ƒpƒCƒ‰‚ŃTƒ|[ƒg‚³‚ê‚Ä‚¢‚éê‡‚É‚Ì‚Ý’è
    764 ‹`‚·‚éD
    765 
    766 3.5 ƒRƒ“ƒpƒCƒ‰‚ÌŠg’£‹@”\‚Ì‚½‚߂̃}ƒNƒ’è‹`
    767 
    768 ƒRƒ“ƒpƒCƒ‰‚ÌŠg’£‹@”\‚ð—p‚¢‚邽‚߂̃}ƒNƒ‚Æ‚µ‚āC•K—v‚ɉž‚¶‚āCˆÈ‰º‚̃}
    769 ƒNƒ‚Ì’è‹`‚ðŠÜ‚ß‚éD
    770 
    771 (3-5-1) inlineiƒIƒvƒVƒ‡ƒ“CƒfƒtƒHƒ‹ƒg‚Í–¢’è‹`j
    772 (3-5-2) InlineiƒIƒvƒVƒ‡ƒ“CƒfƒtƒHƒ‹ƒg‚Ístatic inlinej
    773 
    774 ƒCƒ“ƒ‰ƒCƒ“ŠÖ”‚Å‚ ‚邱‚Æ‚ðŽ¦‚·Žw’èDInline‚́CƒRƒ“ƒpƒCƒ‹’PˆÊ‚Ƀ[ƒJƒ‹
    775 ‚ȃCƒ“ƒ‰ƒCƒ“ŠÖ”‚Å‚ ‚邱‚Æ‚ðŽ¦‚·D
    776 
    777 (3-5-3) asmiƒIƒvƒVƒ‡ƒ“CƒfƒtƒHƒ‹ƒg‚Í–¢’è‹`j
    778 (3-5-4) AsmiƒIƒvƒVƒ‡ƒ“CƒfƒtƒHƒ‹ƒg‚Í–¢’è‹`j
    779 
    780 ƒCƒ“ƒ‰ƒCƒ“ƒAƒZƒ“ƒuƒ‰‚ð‹Lq‚·‚邽‚ß‚ÌŽw’èDAsm‚́CÅ“K‰»‚É‚æ‚èíœ‚µ‚Ä‚Í
    781 ‚È‚ç‚È‚¢‚±‚Æ‚ðŽ¦‚·D‚±‚ê‚ç‚́Cƒ^[ƒQƒbƒgˆË‘¶•”‚Å‚Ì‚ÝŽg‚¤ƒ}ƒNƒ‚Å‚ ‚邽
    782 ‚߁Cƒ^[ƒQƒbƒgˆË‘¶•”‚ÅŽg‚í‚È‚¢‚È‚ç’è‹`‚·‚é•K—v‚Í‚È‚¢D
    783 
    784 (3-5-5) offsetof(structure, field)iƒIƒvƒVƒ‡ƒ“CƒfƒtƒHƒ‹ƒg‚Ì’è‹`‚ ‚èj
    785 
    786 \‘¢‘Ìstructure‚Ì’†‚ł́CƒtƒB[ƒ‹ƒhfield‚̃IƒtƒZƒbƒg‚ð‹‚ß‚éƒ}ƒNƒD
    787 
    788 (3-5-6) alignof(type)iƒIƒvƒVƒ‡ƒ“CƒfƒtƒHƒ‹ƒg‚Ì’è‹`‚ ‚èj
    789 
    790 ƒf[ƒ^Œ^type‚̃Aƒ‰ƒCƒ“ƒƒ“ƒg’PˆÊ‚ð‹‚ß‚éƒ}ƒNƒD
    791 
    792 (3-5-7) NoReturniƒIƒvƒVƒ‡ƒ“CƒfƒtƒHƒ‹ƒg‚Í–¢’è‹`j
    793 
    794 ƒŠƒ^[ƒ“‚·‚邱‚Æ‚Ì‚È‚¢ŠÖ”‚Å‚ ‚邱‚Æ‚ðŽ¦‚·Žw’èD‚±‚ê‚́Cƒ^[ƒQƒbƒgˆË‘¶
    795 •”‚Ì‚ÝŽg‚¤ƒ}ƒNƒ‚Å‚ ‚邽‚߁Cƒ^[ƒQƒbƒgˆË‘¶•”‚ÅŽg‚í‚È‚¢‚È‚ç’è‹`‚·‚é•K—v
    796 ‚Í‚È‚¢D
    797 
    798 3.6 •W€“I‚È’è‹`‚̏㏑‚«
    799 
    800 t_stddef.h‚ÉŠÜ‚Ü‚ê‚éTOPPERS‹¤’Ê’è‹`‚Ì•W€“I‚È’è‹`‚ðã‘‚«‚·‚éê‡‚ɂ́C
    801 ˆÈ‰º‚̃}ƒNƒ‚ð’è‹`‚·‚éD
    802 
    803 (3-6-1) TOPPERS_booliƒIƒvƒVƒ‡ƒ“CƒfƒtƒHƒ‹ƒg‚Íintj
    804 (3-6-2) TOPPERS_sizeiƒIƒvƒVƒ‡ƒ“CƒfƒtƒHƒ‹ƒg‚Íuintptr_tj
    805 (3-6-3) TOPPERS_fpiƒIƒvƒVƒ‡ƒ“CƒfƒtƒHƒ‹ƒg‚Í‘¼‚ƌ݊·«‚Ì‚È‚¢ŠÖ”ƒ|ƒCƒ“ƒ^j
    806 
    807 ‚»‚ꂼ‚êCbool_tCSIZECFP‚ÉŒ^’è‹`‚·‚ׂ«ƒf[ƒ^Œ^D
    808 
    809 (3-6-4) UINT_C(val)iƒIƒvƒVƒ‡ƒ“CƒfƒtƒHƒ‹ƒg‚ÍU‚ð•t‰Áj
    810 (3-6-5) ULONG_C(val)iƒIƒvƒVƒ‡ƒ“CƒfƒtƒHƒ‹ƒg‚ÍUL‚ð•t‰Áj
    811 
    812 ‚»‚ꂼ‚êCunsigned uintŒ^Cunsigned longŒ^‚̒萔‚ðì‚邽‚߂̃}ƒNƒD
    813 
    814 (3-6-6) NULLiƒIƒvƒVƒ‡ƒ“CƒfƒtƒHƒ‹ƒg‚Í0j
    815 
    816 C90€‹’‚ÌCŒ¾ŒêŠÂ‹«‚ł́CNULL‚Ì’è‹`‚Ístddef.h‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邽‚߁C‚±‚ê‚ð
    817 ƒCƒ“ƒNƒ‹[ƒh‚µ‚Ä‚à‚æ‚¢D
    818 
    819 (3-6-7) ERCD(mercd, sercd)iƒIƒvƒVƒ‡ƒ“j
    820 (3-6-8) MERCD(ercd)iƒIƒvƒVƒ‡ƒ“j
    821 (3-6-9) SERCD(ercd)iƒIƒvƒVƒ‡ƒ“j
    822 
    823 ERCDCMERCDCSERCD‚Ì•W€‚Ì’è‹`‚́C•„†•t‚«®”‚ª2‚̕␔‚Å•\Œ»‚³‚ê‚Ä‚¨‚èC
    824 ‰EƒVƒtƒg‰‰ŽZŽqi>>j‚ªŽZpƒVƒtƒg‚³‚ê‚邱‚Æ‚ð‰¼’è‚µ‚Ä‚¢‚éD‘½‚­‚̃Rƒ“ƒp
    825 ƒCƒ‰‚Å‚±‚̉¼’肪¬‚è—§‚‚ªC‚»‚¤‚Å‚È‚¢ê‡‚ɂ́Cƒ^[ƒQƒbƒgˆË‘¶•”‚Å‚±‚ê
    826 ‚ç‚Ì’è‹`‚ðã‘‚«‚·‚é•K—v‚ª‚ ‚éD
    827 
    828 (3-6-10) ALIGN_TYPE(addr, type)iƒIƒvƒVƒ‡ƒ“j
    829 
    830 ƒAƒhƒŒƒXaddr‚ªCƒf[ƒ^Œ^type‚̃Aƒ‰ƒCƒ“ƒƒ“ƒg’PˆÊ‚ɃAƒ‰ƒCƒ“‚µ‚Ä‚¢‚é‚©
    831 ƒ`ƒFƒbƒN‚·‚éƒ}ƒNƒD
    832 
    833 3.7 ƒAƒT[ƒVƒ‡ƒ“‚Ì‚½‚ß‚Ì’è‹`
    834 
    835 t_stddef.h‚ɂ́Cassert‚Ì’è‹`‚ªŠÜ‚Ü‚ê‚éDassert‚ªŽ¸”s‚µ‚½ê‡iassert‚Ì
    836 ƒpƒ‰ƒ[ƒ^‚ªfalse‚É‚È‚Á‚½ê‡j‚̏ˆ—‚ðCƒ^[ƒQƒbƒgˆË‘¶‚É—pˆÓ‚·‚é•K—v‚ª
    837 ‚ ‚éD‚±‚ê‚ç‚Ì’è‹`‚́Cassertƒ}ƒNƒ‚ðŽg—p‚·‚é‘O‚Å‚ ‚ê‚΁Ct_stddef.hˆÈ~
    838 ‚ɃCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚Ä‚à‚æ‚¢D‚È‚¨Cassert‚𖳌ø‚É
    839 ‚·‚éiNDEBUG‚ðƒ}ƒNƒ’è‹`‚µ‚ăRƒ“ƒpƒCƒ‹‚·‚éjê‡‚ɂ́C‚±‚ê‚ç‚ð—pˆÓ‚·‚é
    840 •K—v‚Í‚È‚¢D
     6032.7 その他の設定
     604
     605(2-7-1) CLEAN_FILES                             cleanにより削除するファイル名
     606
     607cleanにより削除するファイルをターゲット依存部で追加したい場合には,ファ
     608イル名をこの変数に追加定義する.
     609
     610(2-7-2) REALCLEAN_FILES                 realcleanにより削除するファイル名
     611
     612realcleanにより削除するファイルをターゲット依存部で追加したい場合には,
     613ファイル名をこの変数に追加定義する.
     614
     615
     6163. TOPPERS共通定義のターゲット依存部
     617
     618TOPPERS共通定義(t_stddef.h)のターゲット依存部は,target_stddef.hまた
     619はそこからインクルードされるファイル(プロセッサ・チップ・開発環境依存
     620部で用意されるヘッダファイルなど)に含める.
     621
     6223.1 ターゲット識別マクロ
     623
     624アプリケーションやシステムサービスでターゲットを識別するために,
     625"TOPPERS_"にシステム略称を大文字にした文字列を連結したもの(例えば,
     626"TOPPERS_DVE68K")をマクロ定義する.
     627
     628また,ターゲット依存部からプロセッサ依存部やチップ依存部を切り分けた場
     629合には,"TOPPERS_"に依存部略称を大文字にした文字列を連結したもの(例え
     630ば,"TOPPERS_M68K")をマクロ定義する.
     631
     6323.2 整数型の最大値・最小値・ビット数
     633
     634(3-2-1) INT_MAX                         intに格納できる最大値(C90準拠)
     635(3-2-2) INT_MIN                         intに格納できる最小値(C90準拠)
     636(3-2-3) UINT_MAX                        unsigned intに格納できる最大値(C90準拠)
     637(3-2-4) LONG_MAX                        longに格納できる最大値(C90準拠)
     638(3-2-5) LONG_MIN                        longに格納できる最小値(C90準拠)
     639(3-2-6) ULONG_MAX                       unsigned longに格納できる最大値(C90準拠)
     640(3-2-7) CHAR_BIT                        char型のビット数(C90準拠)
     641
     642整数型の最大値・最小値・ビット数を,これらのシンボルにマクロに定義する.
     643
     644これらのマクロは,C90に準拠したものである.開発環境にC90に準拠した
     645limits.hが用意されている場合には,これらのマクロを定義することに代えて,
     646limits.hをインクルードすればよい.
     647
     6483.3 サイズの指定された整数型,その最大値・最小値,整数定数を作るマクロ
     649
     650(3-3-1) int8_t                          符号付き8ビット整数(オプション,C99準拠)
     651(3-3-2) uint8_t                         符号無し8ビット整数(オプション,C99準拠)
     652(3-3-3) int16_t                         符号付き16ビット整数(C99準拠)
     653(3-3-4) uint16_t                        符号無し16ビット整数(C99準拠)
     654(3-3-5) int32_t                         符号付き32ビット整数(C99準拠)
     655(3-3-6) uint32_t                        符号無し32ビット整数(C99準拠)
     656(3-3-7) int64_t                         符号付き64ビット整数(オプション,C99準拠)
     657(3-3-8) uint64_t                        符号無し64ビット整数(オプション,C99準拠)
     658(3-3-9) int128_t                        符号付き128ビット整数(オプション,C99準拠)
     659(3-3-10) uint128_t                      符号無し128ビット整数(オプション,C99準拠)
     660(3-3-11) int_least8_t           8ビット以上の符号付き整数(C99準拠)
     661(3-3-12) uint_least8_t          8ビット以上の符号無し整数(C99準拠)
     662(3-3-13) intptr_t                       ポインタを格納できるサイズの符号付き整数(C99準拠)
     663(3-3-14) uintptr_t                      ポインタを格納できるサイズの符号無し整数(C99準拠)
     664(3-3-15) INT8_MAX                       int8_tに格納できる最大値(オプション,C99準拠)
     665(3-3-16) INT8_MIN                       int8_tに格納できる最小値(オプション,C99準拠)
     666(3-3-17) UINT8_MAX                      uint8_tに格納できる最大値(オプション,C99準拠)
     667(3-3-18) INT16_MAX                      int16_tに格納できる最大値(C99準拠)
     668(3-3-19) INT16_MIN                      int16_tに格納できる最小値(C99準拠)
     669(3-3-20) UINT16_MAX                     uint16_tに格納できる最大値(C99準拠)
     670(3-3-21) INT32_MAX                      int32_tに格納できる最大値(C99準拠)
     671(3-3-22) INT32_MIN                      int32_tに格納できる最小値(C99準拠)
     672(3-3-23) UINT32_MAX                     uint32_tに格納できる最大値(C99準拠)
     673(3-3-24) INT64_MAX                      int64_tに格納できる最大値(オプション,C99準拠)
     674(3-3-25) INT64_MIN                      int64_tに格納できる最小値(オプション,C99準拠)
     675(3-3-26) UINT64_MAX                     uint64_tに格納できる最大値(オプション,C99準拠)
     676(3-3-27) INT128_MAX                     int128_tに格納できる最大値(オプション,C99準拠)
     677(3-3-28) INT128_MIN                     int128_tに格納できる最小値(オプション,C99準拠)
     678(3-3-29) UINT128_MAX            uint128_tに格納できる最大値(オプション,C99準拠)
     679(3-3-30) INT_LEAST8_MAX         int_least8_tに格納できる最大値(C99準拠)
     680(3-3-31) INT_LEAST8_MIN         int_least8_tに格納できる最小値(C99準拠)
     681(3-3-32) UINT_LEAST8_MAX        uint_least8_tに格納できる最大値(C99準拠)
     682(3-3-33) INT8_C(val)            int_least8_t型の定数を作るマクロ(C99準拠)
     683(3-3-34) UINT8_C(val)           uint_least8_t型の定数を作るマクロ(C99準拠)
     684(3-3-35) INT16_C(val)           int16_t型の定数を作るマクロ(C99準拠)
     685(3-3-36) UINT16_C(val)          uint16_t型の定数を作るマクロ(C99準拠)
     686(3-3-37) INT32_C(val)           int32_t型の定数を作るマクロ(C99準拠)
     687(3-3-38) UINT32_C(val)          uint32_t型の定数を作るマクロ(C99準拠)
     688(3-3-39) INT64_C(val)           int64_t型の定数を作るマクロ(オプション,C99準拠)
     689(3-3-40) UINT64_C(val)          uint64_t型の定数を作るマクロ(オプション,C99準拠)
     690(3-3-41) INT128_C(val)          int128_t型の定数を作るマクロ(オプション,C99準拠)
     691(3-3-42) UINT128_C(val)         uint128_t型の定数を作るマクロ(オプション,C99準拠)
     692
     693指定されたサイズの整数型を,これらのシンボルに型定義する.また,データ
     694型に格納できる最大値・最小値と,整数定数を作るマクロを,これらのシンボ
     695ルにマクロ定義する.
     696
     697これらのデータ型およびマクロは,C99に準拠したものである.開発環境にC99
     698に準拠したstdint.hが用意されている場合には,これらのデータ型およびマク
     699ロを定義することに代えて,stdint.hをインクルードすればよい.
     700
     701上でオプションと記述したものは,該当するデータ型がコンパイラでサポート
     702されている場合にのみ定義することを示す.
     703
     7043.4 サイズの指定された浮動小数点型,その最大値・最小値のマクロ
     705
     706(3-4-1) float32_t                       IEEE754準拠の32ビット単精度浮動小数点数(オプ
     707                                                        ション)
     708(3-4-2) double64_t                      IEEE754準拠の64ビット倍精度浮動小数点数(オプ
     709                                                        ション)
     710(3-4-3) FLOAT32_MIN                     float32_tに格納できる最小の正規化された正の浮
     711                                                        動小数点数(オプション)
     712(3-4-4) FLOAT32_MAX                     float32_tに格納できる表現可能な最大の有限浮動
     713                                                        小数点数(オプション)
     714(3-4-5) DOUBLE64_MIN            double64_tに格納できる最小の正規化された正の浮
     715                                                        動小数点数(オプション)
     716(3-4-6) DOUBLE64_MAX            double64_tに格納できる表現可能な最大の有限浮動
     717                                                        小数点数(オプション)
     718
     719指定されたサイズ・表現形式の浮動小数点型を,これらのシンボルに型定義す
     720る.また,データ型に格納できる最大値・最小値を,これらのシンボルにマク
     721ロ定義する.
     722
     723いずれも,該当するデータ型がコンパイラでサポートされている場合にのみ定
     724義する.
     725
     7263.5 コンパイラの拡張機能のためのマクロ定義
     727
     728コンパイラの拡張機能を用いるためのマクロとして,必要に応じて,以下のマ
     729クロの定義を含める.
     730
     731(3-5-1) inline(オプション,デフォルトは未定義)
     732(3-5-2) Inline(オプション,デフォルトはstatic inline)
     733
     734インライン関数であることを示す指定.Inlineは,コンパイル単位にローカル
     735なインライン関数であることを示す.
     736
     737(3-5-3) asm(オプション,デフォルトは未定義)
     738(3-5-4) Asm(オプション,デフォルトは未定義)
     739
     740インラインアセンブラを記述するための指定.Asmは,最適化により削除しては
     741ならないことを示す.これらは,ターゲット依存部でのみ使うマクロであるた
     742め,ターゲット依存部で使わないなら定義する必要はない.
     743
     744(3-5-5) offsetof(structure, field)(オプション,デフォルトの定義あり)
     745
     746構造体structureの中での,フィールドfieldのオフセットを求めるマクロ.
     747
     748(3-5-6) alignof(type)(オプション,デフォルトの定義あり)
     749
     750データ型typeのアラインメント単位を求めるマクロ.
     751
     752(3-5-7) NoReturn(オプション,デフォルトは未定義)
     753
     754リターンすることのない関数であることを示す指定.これは,ターゲット依存
     755部のみ使うマクロであるため,ターゲット依存部で使わないなら定義する必要
     756はない.
     757
     7583.6 標準的な定義の上書き
     759
     760t_stddef.hに含まれるTOPPERS共通定義の標準的な定義を上書きする場合には,
     761以下のマクロを定義する.
     762
     763(3-6-1) TOPPERS_bool(オプション,デフォルトはint)
     764(3-6-2) TOPPERS_size(オプション,デフォルトはuintptr_t)
     765(3-6-3) TOPPERS_fp(オプション,デフォルトは他と互換性のない関数ポインタ)
     766
     767それぞれ,bool_t,SIZE,FPに型定義すべきデータ型.
     768
     769(3-6-4) UINT_C(val)(オプション,デフォルトはUを付加)
     770(3-6-5) ULONG_C(val)(オプション,デフォルトはULを付加)
     771
     772それぞれ,unsigned uint型,unsigned long型の定数を作るためのマクロ.
     773
     774(3-6-6) NULL(オプション,デフォルトは0)
     775
     776C90準拠のC言語環境では,NULLの定義はstddef.hに含まれているため,これを
     777インクルードしてもよい.
     778
     779(3-6-7) ERCD(mercd, sercd)(オプション)
     780(3-6-8) MERCD(ercd)(オプション)
     781(3-6-9) SERCD(ercd)(オプション)
     782
     783ERCD,MERCD,SERCDの標準の定義は,符号付き整数が2の補数で表現されており,
     784右シフト演算子(>>)が算術シフトされることを仮定している.多くのコンパ
     785イラでこの仮定が成り立つが,そうでない場合には,ターゲット依存部でこれ
     786らの定義を上書きする必要がある.
     787
     788(3-6-10) ALIGN_TYPE(addr, type)(オプション)
     789
     790アドレスaddrが,データ型typeのアラインメント単位にアラインしているか
     791チェックするマクロ.
     792
     7933.7 アサーションのための定義
     794
     795t_stddef.hには,assertの定義が含まれる.assertが失敗した場合(assertの
     796パラメータがfalseになった場合)の処理を,ターゲット依存に用意する必要が
     797ある.これらの定義は,assertマクロを使用する前であれば,t_stddef.h以降
     798にインクルードされるファイルに含まれていてもよい.なお,assertを無効に
     799する(NDEBUGをマクロ定義してコンパイルする)場合には,これらを用意する
     800必要はない.
    841801
    842802(3-7-1) TOPPERS_assert_abort(void)
    843803
    844 assert‚ªŽ¸”s‚µ‚½ê‡‚ɁCƒvƒƒOƒ‰ƒ€‚ð’âŽ~‚³‚¹‚éŠÖ”DƒVƒXƒeƒ€ŠJ”­’†‚̓f
    845 ƒoƒbƒK‚É—Ž‚Æ‚·‚Ì‚ª—‘z“I‚Å‚ ‚éDƒVƒXƒeƒ€‰Ò“­Žž‚É‚Í—áŠOˆ—‚ðs‚킹‚邱
    846 ‚Æ‚É‚È‚éD
    847 
    848 –{ŠÖ”‚𖳌Àƒ‹[ƒv‚ÅŽÀ‘•‚·‚éÛ‚́CˆÈ‰º‚ÌŒ`Ž®‚Æ‚·‚邱‚Æ(TECS‚̃p[ƒT‚Ì
    849 §ŒÀ‚ɍ‡‚킹‚邽‚߁jD
     804assertが失敗した場合に,プログラムを停止させる関数.システム開発中はデ
     805バッガに落とすのが理想的である.システム稼働時には例外処理を行わせるこ
     806とになる.
     807
     808本関数を無限ループで実装する際は,以下の形式とすること(TECSのパーサの
     809制限に合わせるため).
    850810
    851811Inline void
     
    859819(3-7-2) TOPPERS_assert_fail(exp, file, line)
    860820
    861 assert‚ªŽ¸”s‚µ‚½Žž‚̏î•ñ‚ð•\Ž¦/‹L˜^‚·‚邽‚߂̃}ƒNƒDƒVƒXƒeƒ€ƒƒO‹@”\‚ð
    862 —p‚¢‚éê‡‚ɂ́Ct_syslog.h‚ɃVƒXƒeƒ€ƒƒO‹@”\‚É‹L˜^‚·‚邽‚ß‚Ì’è‹`‚ªŠÜ‚Ü
    863 ‚ê‚Ä‚¢‚é‚̂ŁCƒ^[ƒQƒbƒgˆË‘¶•”‚Å—pˆÓ‚·‚é•K—v‚Í‚È‚¢D
    864 
    865 
    866 4. ƒVƒXƒeƒ€ƒCƒ“ƒ^ƒtƒF[ƒXƒŒƒCƒ„iSILj‚̃^[ƒQƒbƒgˆË‘¶•”
    867 
    868 ƒVƒXƒeƒ€ƒCƒ“ƒ^ƒtƒF[ƒXƒŒƒCƒ„iSILCsil.hj‚̃^[ƒQƒbƒgˆË‘¶•”‚Ì’è‹`‚́C
    869 target_sil.h‚Ü‚½‚Í‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹iƒvƒƒZƒbƒTEƒ`ƒb
    870 ƒvEŠJ”­ŠÂ‹«ˆË‘¶•”‚Å—pˆÓ‚³‚ê‚éƒwƒbƒ_ƒtƒ@ƒCƒ‹‚Ȃǁj‚ÉŠÜ‚ß‚éD
    871 
    872 SIL‚̃T[ƒrƒXƒR[ƒ‹‚́C”CˆÓ‚̃VƒXƒeƒ€ó‘ԂŌĂяo‚·‚±‚Æ‚ª‚Å‚«‚éD‚»‚Ì‚½
    873 ‚߁CSIL‚̃^[ƒQƒbƒgˆË‘¶•”‚̊֐”‚́C”CˆÓ‚̃VƒXƒeƒ€ó‘ԂŌĂяo‚¹‚é‚悤‚É
    874 ŽÀ‘•‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    875 
    876 4.1 ‘SŠ„ž‚݃ƒbƒNó‘Ô‚ÌŠÇ—
    877 
    878 SIL‚̃^[ƒQƒbƒgˆË‘¶•”‚ł́C‘SŠ„ž‚݃ƒbƒNó‘Ô‚Ö‘JˆÚ‚·‚é‹@”\‚ƁCŒ³‚̏ó‘Ô
    879 ‚Ö–ß‚·‹@”\iŒ³‚̏ó‘Ô‚ð‹L‰¯‚·‚邽‚߂ɕϐ”‚ðŽg‚¤j‚ð’ñ‹Ÿ‚·‚éD‘SŠ„ž‚݃ƒb
    880 ƒNó‘Ô‚Å‚ ‚é‚©‚ð”»•Ê‚·‚é‹@”\‚Í’ñ‹Ÿ‚·‚é•K—v‚ª‚È‚¢D
    881 
    882 SIL‚Ì‹@”\‚́CƒJ[ƒlƒ‹‚ðŽg—p‚µ‚È‚¢ê‡‚É‚àŽg—p‚Å‚«‚é•K—v‚ª‚ ‚éD‚»‚Ì‚½‚߁C
    883 ‘SŠ„ž‚݃ƒbƒNó‘Ô‚Ö‚Ì‘JˆÚ‚ÆŒ³‚̏ó‘Ô‚Ö‚Ì•œ‹A‚́CƒJ[ƒlƒ‹‚ð—p‚¢‚¸Cƒvƒ
    884 ƒZƒbƒT‚̃Šƒ\[ƒX‚𒼐ڑ€ì‚·‚邱‚Æ‚É‚æ‚Á‚ÄŽÀŒ»‚·‚éD‚Ü‚½C‘SŠ„ž‚݃ƒb
    885 ƒNó‘Ô‚Ö‚Ì‘JˆÚ‚ÆŒ³‚̏ó‘Ô‚Ö‚Ì•œ‹A‚́C‘SŠ„ž‚݃ƒbƒNó‘Ô‚âCPUƒƒbƒNó‘Ô‚Å
    886 ‚às‚¦‚é•K—v‚ª‚ ‚éD
    887 
    888 •ÛŒì‹@”\‚ðŽ‚Á‚½ƒJ[ƒlƒ‹‚ł́Cƒ†[ƒUƒ^ƒXƒN‚©‚çƒvƒƒZƒbƒT‚̃Šƒ\[ƒX‚ð’¼
    889 Ú‘€ì‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚½‚߁Cƒ†[ƒUƒ^ƒXƒN‚©‚ç‚Í‚±‚ê‚ç‚Ì‹@”\‚ð—p‚¢‚邱
    890 ‚Æ‚ª‚Å‚«‚È‚¢D—p‚¢‚½ê‡‚̐U•‘‚¢‚̓^[ƒQƒbƒgƒvƒƒZƒbƒT‚Ɉˑ¶‚·‚邪C“T
    891 Œ^“I‚ɂ́C“ÁŒ –½—߈ᔽ‚È‚Ç‚ÌCPU—áŠO‚ª”­¶‚·‚邱‚Æ‚É‚È‚éD
     821assertが失敗した時の情報を表示/記録するためのマクロ.システムログ機能を
     822用いる場合には,t_syslog.hにシステムログ機能に記録するための定義が含ま
     823れているので,ターゲット依存部で用意する必要はない.
     824
     825
     8264. システムインタフェースレイヤ(SIL)のターゲット依存部
     827
     828システムインタフェースレイヤ(SIL,sil.h)のターゲット依存部の定義は,
     829target_sil.hまたはそこからインクルードされるファイル(プロセッサ・チッ
     830プ・開発環境依存部で用意されるヘッダファイルなど)に含める.
     831
     832SILのサービスコールは,任意のシステム状態で呼び出すことができる.そのた
     833め,SILのターゲット依存部の関数は,任意のシステム状態で呼び出せるように
     834実装しなければならない.
     835
     8364.1 全割込みロック状態の管理
     837
     838SILのターゲット依存部では,全割込みロック状態へ遷移する機能と,元の状態
     839へ戻す機能(元の状態を記憶するために変数を使う)を提供する.全割込みロッ
     840ク状態であるかを判別する機能は提供する必要がない.
     841
     842SILの機能は,カーネルを使用しない場合にも使用できる必要がある.そのため,
     843全割込みロック状態への遷移と元の状態への復帰は,カーネルを用いず,プロ
     844セッサのリソースを直接操作することによって実現する.また,全割込みロッ
     845ク状態への遷移と元の状態への復帰は,全割込みロック状態やCPUロック状態で
     846も行える必要がある.
     847
     848保護機能を持ったカーネルでは,ユーザタスクからプロセッサのリソースを直
     849接操作することができないため,ユーザタスクからはこれらの機能を用いるこ
     850とができない.用いた場合の振舞いはターゲットプロセッサに依存するが,典
     851型的には,特権命令違反などのCPU例外が発生することになる.
    892852
    893853(4-1-1) SIL_PRE_LOC
    894854
    895 ‘SŠ„ž‚݃ƒbƒNƒtƒ‰ƒO‚̏ó‘Ô‚ð•Û‘¶‚·‚邽‚߂̕ϐ”‚ð’è‹`‚·‚éƒ}ƒNƒDŒ^–¼‚Ì
    896 Œã‚ɁC•Ï”–¼‚𑱂¯‚½‚à‚Ì‚É’è‹`‚·‚éD•Ï”–¼‚́C‘¼‚Ì–¼‘O‚ƏՓ˂µ‚È‚¢‚悤
    897 ‚ɁC"TOPPERS_"‚ÅŽn‚Ü‚é–¼‘O‚É‚·‚éD
     855全割込みロックフラグの状態を保存するための変数を定義するマクロ.型名の
     856後に,変数名を続けたものに定義する.変数名は,他の名前と衝突しないよう
     857に,"TOPPERS_"で始まる名前にする.
    898858
    899859(4-1-2) SIL_LOC_INT()
    900860
    901 Œ»Ý‚Ì‘SŠ„ž‚݃ƒbƒNƒtƒ‰ƒO‚̏ó‘Ô‚ðSIL_PRE_LOC‚Å’è‹`‚µ‚½•Ï”‚É•Û‘¶‚µC‘S
    902 Š„ž‚݃ƒbƒNó‘Ô‚É‘JˆÚ‚³‚¹‚éƒ}ƒNƒD‚±‚̃}ƒNƒ‚ðŽÀŒ»‚·‚éÛ‚ɂ́Cu1.6
    903 ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚̏o“üˆ—‚ÌŽÀŒ»‚ÉŠÖ‚·‚鐧–ñv‚̐߂ɋLq‚³‚ê‚Ä‚¢
    904 ‚鐧–ñ‚ɏ]‚í‚È‚¯‚ê‚΂Ȃç‚È‚¢D
     861現在の全割込みロックフラグの状態をSIL_PRE_LOCで定義した変数に保存し,全
     862割込みロック状態に遷移させるマクロ.このマクロを実現する際には,「1.6
     863クリティカルセクションの出入処理の実現に関する制約」の節に記述されてい
     864る制約に従わなければならない.
    905865
    906866(4-1-3) SIL_UNL_INT()
    907867
    908 SIL_LOC_INT()‚É‚æ‚Á‚ĕϐ”‚É•Û‘¶‚µ‚½ó‘Ô‚É–ß‚·ƒ}ƒNƒD‚±‚̃}ƒNƒ‚ðŽÀŒ»‚·
    909 ‚éÛ‚ɂ́Cu1.6 ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚̏o“üˆ—‚ÌŽÀŒ»‚ÉŠÖ‚·‚鐧–ñv‚Ì
    910 ß‚É‹Lq‚³‚ê‚Ä‚¢‚鐧–ñ‚ɏ]‚í‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    911 
    912 4.2 ”÷­ŽžŠÔ‘Ò‚¿
     868SIL_LOC_INT()によって変数に保存した状態に戻すマクロ.このマクロを実現す
     869る際には,「1.6 クリティカルセクションの出入処理の実現に関する制約」の
     870節に記述されている制約に従わなければならない.
     871
     8724.2 微少時間待ち
    913873
    914874(4-2-1) void sil_dly_nse(ulong_t dlytim)
    915875
    916 dlytim‚ÅŽw’肳‚ꂽˆÈã‚ÌŽžŠÔi’PˆÊ‚̓iƒm•bjCƒ‹[ƒv‚È‚Ç‚É‚æ‚Á‚đ҂ŠÖ
    917 ”D
    918 
    919 ˆÈ‰º‚̊֐”‚Æ“™‰¿‚ȏˆ—‚ðCƒAƒZƒ“ƒuƒŠŒ¾Œê‚Å‹Lq‚·‚é•û–@‚ðC•W€“I‚ÈŽÀ‘•
    920 •û–@‚Æ‚·‚éDƒAƒZƒ“ƒuƒŠŒ¾Œê‚Å‹Lq‚·‚é‚̂́CƒRƒ“ƒpƒCƒ‰‚̍œK‰»‚Ɉˑ¶‚µ‚È
    921 ‚¢‚悤‚É‚·‚邽‚ß‚Å‚ ‚éD‚Ü‚½‚±‚̊֐”‚́CƒLƒƒƒbƒVƒ
    922 “™‚̉e‹¿‚ðŽó‚¯‚È‚¢‚æ
    923 ‚¤‚ɁC‚Å‚«‚éŒÀ‚胁ƒ‚ƒŠƒAƒNƒZƒX‚ðs‚í‚È‚¢‚悤‚ÉŽÀ‘•‚·‚ׂ«‚Å‚ ‚éD
     876dlytimで指定された以上の時間(単位はナノ秒),ループなどによって待つ関
     877数.
     878
     879以下の関数と等価な処理を,アセンブリ言語で記述する方法を,標準的な実装
     880方法とする.アセンブリ言語で記述するのは,コンパイラの最適化に依存しな
     881いようにするためである.またこの関数は,キャッシュ等の影響を受けないよ
     882うに,できる限りメモリアクセスを行わないように実装すべきである.
    924883
    925884        void sil_dly_nse(ulong_t dlytim)
    926885        {
    927886                dlytim -= SIL_DLY_TIM1;
    928                 if (Œ‹‰Ê‚ª0‚æ‚è‘å‚«‚¢) {
     887                if (結果が0より大きい) {
    929888                        do {
    930889                                dlytim -= SIL_DLY_TIM2;
    931                         } while (Œ‹‰Ê‚ª0‚æ‚è‘å‚«‚¢);
     890                        } while (結果が0より大きい);
    932891                }
    933892        }
    934893
    935 ‚±‚̊֐”‚Ì“®ì‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éDdlytim‚ªSIL_DLY_TIM1ˆÈ‰º‚̏ꍇ‚ɂ́CÅ
    936 ‰‚Ìif•¶‚ÌðŒ‚ª¬—§‚¹‚¸C‚·‚®‚Ɋ֐”‚©‚甲‚¯‚éDdlytim‚ªSIL_DLY_TIM1‚æ
    937 ‚è‘å‚«‚­C(SIL_DLY_TIM1+SIL_DLY_TIM2)ˆÈ‰º‚̏ꍇ‚ɂ́CÅ‰‚Ìif•¶‚ÌðŒ‚Í
    938 ¬—§‚·‚邪Cdoƒ‹[ƒv‚Í1‰ñ‚à‰ñ‚炸‚Ɋ֐”‚©‚甲‚¯‚éDdlytim‚ª
    939 (SIL_DLY_TIM1+SIL_DLY_TIM2)‚æ‚è‘å‚«‚­C(SIL_DLY_TIM1+SIL_DLY_TIM2*2)ˆÈ
    940 ‰º‚̏ꍇ‚ɂ́Cdoƒ‹[ƒv‚ð1‰ñ‚¾‚¯‰ñ‚Á‚Ċ֐”‚©‚甲‚¯‚éD‚»‚ÌŒãCdlytim‚ª
    941 SIL_DLY_TIM2‘å‚«‚­‚È‚é“x‚ɁCwhileƒ‹[ƒv‚ð‰ñ‚é‰ñ”‚ª1‰ñ‚¸‚‘‚¦‚éD
    942 
    943 ‚È‚¨C‚±‚̊֐”‚ðƒAƒZƒ“ƒuƒŠŒ¾Œêi‚Ü‚½‚́CCŒ¾Œêj‚Å‹Lq‚·‚éê‡C‚ǂ̃tƒ@
    944 ƒCƒ‹‚É‹Lq‚·‚é‚©‚ª–â‘è‚É‚È‚éDSIL‚̃^[ƒQƒbƒgˆË‘¶•”‚ɂ́C•W€‚ł́CƒAƒZ
    945 ƒ“ƒuƒŠŒ¾Œêi‚Ü‚½‚́CCŒ¾Œêj‚̊֐”’è‹`‚ð‹Lq‚·‚邽‚߂̃tƒ@ƒCƒ‹‚ð—pˆÓ‚µ‚Ä
    946 ‚¢‚È‚¢Dƒ^[ƒQƒbƒgˆË‘¶‚Å—pˆÓ‚µ‚Ä‚à‚æ‚¢‚ªC—áŠO“I‚ɁCƒJ[ƒlƒ‹ŽÀ‘•‚̃^[
    947 ƒQƒbƒgˆË‘¶ƒ‚ƒWƒ
    948 [ƒ‹itarget_support.S‚Ü‚½‚Ítarget_config.cj‚É‹Lq‚µ‚Ä
    949 ‚à‚æ‚¢‚±‚Æ‚É‚·‚éD
    950 
    951 (4-2-2) SIL_DLY_TIM1iƒIƒvƒVƒ‡ƒ“j
    952 (4-2-3) SIL_DLY_TIM2iƒIƒvƒVƒ‡ƒ“j
    953 
    954 sil_dly_nse‚ðã‹L‚Ì•W€“I‚È•û–@‚ÅŽÀŒ»‚µ‚½ê‡C‚±‚Ì2‚‚̒萔‚ðƒ^[ƒQƒb
    955 ƒgˆË‘¶•”‚Ń}ƒNƒ’è‹`‚·‚éD
    956 
    957 SIL_DLY_TIM2‚́Cã‹L‚̊֐”‚É‚¨‚¢‚āCdoƒ‹[ƒv1‰ñ‚ÌŽÀsŽžŠÔi’PˆÊ‚̓iƒm•bj
    958 ‚ɐݒ肷‚éDƒ^[ƒQƒbƒgƒvƒƒZƒbƒT‚Ì–½—߃Zƒbƒg‚É‚à‚æ‚邪C‚¨‚¨‚æ‚»CŒ¸ŽZ
    959 –½—ß‚ÆðŒ•ªŠò–½—ߊe1‰ñ‚ÌŽÀsŽžŠÔ‚É‚È‚éDSIL_DLY_TIM2‚ªŒˆ‚Ü‚ê‚΁CŠÖ”ŒÄ
    960 o‚µ‚àŠÜ‚ß‚½‘S‘Ì‚ÌŽžŠÔ‚ªdlytim‚ÅŽw’肳‚ꂽˆÈã‚ÌŽžŠÔ‚É‚È‚é‚悤‚ɁC
    961 SIL_DLY_TIM1‚ðŒˆ‚ß‚éD
    962 
    963 ¦‰º‹L‚Ì“à—e‚́CŒ»Žž“_‚ÅSSPƒJ[ƒlƒ‹‚Å‚Í–¢ƒTƒ|[ƒg‚Å‚ ‚éD
    964 
    965 ‚±‚Ì2‚‚̒萔’l‚ÌŒˆ’è‚ðŽx‰‡‚·‚éƒvƒƒOƒ‰ƒ€‚Æ‚µ‚āCtestƒfƒBƒŒƒNƒgƒŠ‚ɁC
    966 test_dlynse‚ð—pˆÓ‚µ‚Ä‚¢‚éDtest_dlynse‚ðŽÀs‚·‚é‚ƁCŽŸ‚̂悤‚ȏo—Í‚ª“¾
    967 ‚ç‚ê‚éD
     894この関数の動作は次の通りである.dlytimがSIL_DLY_TIM1以下の場合には,最
     895初のif文の条件が成立せず,すぐに関数から抜ける.dlytimがSIL_DLY_TIM1よ
     896り大きく,(SIL_DLY_TIM1+SIL_DLY_TIM2)以下の場合には,最初のif文の条件は
     897成立するが,doループは1回も回らずに関数から抜ける.dlytimが
     898(SIL_DLY_TIM1+SIL_DLY_TIM2)より大きく,(SIL_DLY_TIM1+SIL_DLY_TIM2*2)以
     899下の場合には,doループを1回だけ回って関数から抜ける.その後,dlytimが
     900SIL_DLY_TIM2大きくなる度に,whileループを回る回数が1回ずつ増える.
     901
     902なお,この関数をアセンブリ言語(または,C言語)で記述する場合,どのファ
     903イルに記述するかが問題になる.SILのターゲット依存部には,標準では,アセ
     904ンブリ言語(または,C言語)の関数定義を記述するためのファイルを用意して
     905いない.ターゲット依存で用意してもよいが,例外的に,カーネル実装のター
     906ゲット依存モジュール(target_support.Sまたはtarget_config.c)に記述して
     907もよいことにする.
     908
     909(4-2-2) SIL_DLY_TIM1(オプション)
     910(4-2-3) SIL_DLY_TIM2(オプション)
     911
     912sil_dly_nseを上記の標準的な方法で実現した場合,この2つの定数をターゲッ
     913ト依存部でマクロ定義する.
     914
     915SIL_DLY_TIM2は,上記の関数において,doループ1回の実行時間(単位はナノ秒)
     916に設定する.ターゲットプロセッサの命令セットにもよるが,おおよそ,減算
     917命令と条件分岐命令各1回の実行時間になる.SIL_DLY_TIM2が決まれば,関数呼
     918出しも含めた全体の時間がdlytimで指定された以上の時間になるように,
     919SIL_DLY_TIM1を決める.
     920
     921※下記の内容は,現時点でSSPカーネルでは未サポートである.
     922
     923この2つの定数値の決定を支援するプログラムとして,testディレクトリに,
     924test_dlynseを用意している.test_dlynseを実行すると,次のような出力が得
     925られる.
    968926
    969927-- for fitting parameters --
     
    972930sil_dly_nse(510): 520 OK
    973931sil_dly_nse(600): 610 OK
    974 <’†—ª>
     932<中略>
    975933-- for checking boundary conditions --
    976934sil_dly_nse(421): 520 OK
     
    978936sil_dly_nse(601): 700 OK
    979937
    980 "for fitting parameters"‚É‘±‚­o—͂́Csil_dly_nse(dlytim)‚ðŒÄ‚яo‚µ‚½ê
    981 ‡‚Ì‘Ò‚¿ŽžŠÔ‚𑪒肵‚½Œ‹‰Ê‚Å‚ ‚éD‚±‚̃vƒƒOƒ‰ƒ€‚ð—p‚¢‚āC":"‚̉E‘¤‚̐”
    982 ’l‚ªCdlytim‚æ‚è‚à‘å‚«‚¢”͈͂łȂé‚ׂ­‹ß‚¢’l‚É‚È‚é‚悤‚ɁC2‚‚̒萔’l‚ð
    983 ’²®‚·‚éD"for checking boundary conditions"‚É‘±‚­o—͂́CƒvƒƒOƒ‰ƒ€‚Ì
    984 ‘Ó–«‚ðƒ`ƒFƒbƒN‚·‚邽‚ß‚Ì‚à‚̂ŁC":"‚̉E‘¤‚̐”’l‚ªCdlytim‚æ‚è‚à‘å‚«‚¢
    985 ‚±‚Æ‚ðŠm”F‚·‚éi‹ß‚¢’l‚É‚È‚é•K—v‚Í‚È‚¢jD
    986 
    987 4.3 ƒvƒƒZƒbƒT‚̃Gƒ“ƒfƒBƒAƒ“
     938"for fitting parameters"に続く出力は,sil_dly_nse(dlytim)を呼び出した場
     939合の待ち時間を測定した結果である.このプログラムを用いて,":"の右側の数
     940値が,dlytimよりも大きい範囲でなるべく近い値になるように,2つの定数値を
     941調整する."for checking boundary conditions"に続く出力は,プログラムの
     942妥当性をチェックするためのもので,":"の右側の数値が,dlytimよりも大きい
     943ことを確認する(近い値になる必要はない).
     944
     9454.3 プロセッサのエンディアン
    988946
    989947(4-3-1) SIL_ENDIAN_BIG
    990948(4-3-2) SIL_ENDIAN_LITTLE
    991949
    992 ƒvƒƒZƒbƒT‚̃Gƒ“ƒfƒBƒAƒ“‚É‚æ‚èC‚¢‚¸‚ê‚©•Ð•û‚̃Vƒ“ƒ{ƒ‹‚ðƒ}ƒNƒ’è‹`‚·‚éD
    993 
    994 (4-3-3) TOPPERS_SIL_REV_ENDIAN_UINT16iƒIƒvƒVƒ‡ƒ“j
    995 (4-3-4) TOPPERS_SIL_REV_ENDIAN_UINT32iƒIƒvƒVƒ‡ƒ“j
    996 
    997 ‚»‚ꂼ‚êC16ƒrƒbƒgC32ƒrƒbƒg‚Ì•„†–³‚µ®”‚̃Gƒ“ƒfƒBƒAƒ“‚𔽓]‚³‚¹‚éƒ}
    998 ƒNƒDƒvƒƒZƒbƒT‚ªƒGƒ“ƒfƒBƒAƒ“”½“]‚Ì‚½‚ß‚Ì–½—ß‚ðŽ‚Âê‡‚ɂ́C‚»‚Ì–½—ß
    999 ‚ð—p‚¢‚ÄŽÀŒ»‚·‚éD‚±‚ê‚ç‚̃Vƒ“ƒ{ƒ‹‚ðƒ}ƒNƒ’è‹`‚µ‚È‚¢ê‡‚ɂ́CƒfƒtƒHƒ‹
    1000 ƒg‚Ì’è‹`‚ªŽg‚í‚ê‚éD
    1001 
    1002 4.4 ƒƒ‚ƒŠ‹óŠÔƒAƒNƒZƒXŠÖ”
     950プロセッサのエンディアンにより,いずれか片方のシンボルをマクロ定義する.
     951
     952(4-3-3) TOPPERS_SIL_REV_ENDIAN_UINT16(オプション)
     953(4-3-4) TOPPERS_SIL_REV_ENDIAN_UINT32(オプション)
     954
     955それぞれ,16ビット,32ビットの符号無し整数のエンディアンを反転させるマ
     956クロ.プロセッサがエンディアン反転のための命令を持つ場合には,その命令
     957を用いて実現する.これらのシンボルをマクロ定義しない場合には,デフォル
     958トの定義が使われる.
     959
     9604.4 メモリ空間アクセス関数
    1003961
    1004962(4-4-1) TOPPERS_OMIT_SIL_ACCESS
    1005963
    1006 •W€‚̃ƒ‚ƒŠ‹óŠÔƒAƒNƒZƒXŠÖ”‚ðŽg—p‚¹‚¸Cƒ^[ƒQƒbƒgˆË‘¶•”‚Å—pˆÓ‚·‚éê‡
    1007 ‚ɂ́C‚±‚̃Vƒ“ƒ{ƒ‹‚ðƒ}ƒNƒ’è‹`‚·‚éD
     964標準のメモリ空間アクセス関数を使用せず,ターゲット依存部で用意する場合
     965には,このシンボルをマクロ定義する.
    1008966
    1009967(4-4-2) TOPPERS_OMIT_SIL_REH_LEM
     
    1016974(4-4-9) TOPPERS_OMIT_SIL_WRW_BEM
    1017975
    1018 ‚»‚ꂼ‚êC•W€‚Ìsil_reh_lemCsil_wrh_lemCsil_reh_bemCsil_wrh_bemC
    1019 sil_rew_lemCsil_wrw_lemCsil_rew_bemCsil_wrw_bem‚ðŽg—p‚¹‚¸Cƒ^[ƒQƒb
    1020 ƒgˆË‘¶•”‚Å—pˆÓ‚·‚éê‡‚ɂ́C‚±‚ê‚ç‚̃Vƒ“ƒ{ƒ‹‚ðƒ}ƒNƒ’è‹`‚·‚éD
    1021 
    1022 4.5 I/O‹óŠÔƒAƒNƒZƒXŠÖ”
    1023 
    1024 ƒƒ‚ƒŠ‹óŠÔ‚Æ‚Í•Ê‚ÉI/O‹óŠÔ‚ðŽ‚ÂƒvƒƒZƒbƒT‚ł́CI/O‹óŠÔ‚É‚ ‚éƒfƒoƒCƒXƒŒ
    1025 ƒWƒXƒ^‚ðƒAƒNƒZƒX‚·‚邽‚߂̊֐”‚Æ‚µ‚āCsil_reb_iopCsil_wrb_iopC
    1026 sil_reh_iopCsil_wrh_iopCsil_reh_lepCsil_wrh_lepCsil_reh_bepC
    1027 sil_wrh_bepCsil_rew_iopCsil_wrw_iopCsil_rew_lepCsil_wrw_lepC
    1028 sil_rew_bepCsil_wrw_bep‚Ì’†‚Å•K—v‚È‚à‚Ì‚ðCƒ^[ƒQƒbƒgˆË‘¶•”‚Å—pˆÓ‚·‚éD
    1029 
    1030 
    1031 5. ƒJ[ƒlƒ‹API‚̃^[ƒQƒbƒgˆË‘¶•”
    1032 
    1033 ƒJ[ƒlƒ‹APIikernel.hj‚̃^[ƒQƒbƒgˆË‘¶•”‚Ì’è‹`‚́Ctarget_kernel.h‚Ü‚½
    1034 ‚Í‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹iƒvƒƒZƒbƒTEƒ`ƒbƒvEŠJ”­ŠÂ‹«ˆË‘¶
    1035 •”‚Å—pˆÓ‚³‚ê‚éƒwƒbƒ_ƒtƒ@ƒCƒ‹‚Ȃǁj‚ÉŠÜ‚ß‚éD
    1036 
    1037 5.1 ƒ^[ƒQƒbƒg’è‹`‚ŃTƒ|[ƒg‚·‚é‹@”\
    1038 
    1039 (5-1-1) TOPPERS_TARGET_SUPPORT_DIS_INT          dis_int‚ðƒTƒ|[ƒg‚·‚é
    1040 (5-1-2) TOPPERS_TARGET_SUPPORT_ENA_INT          ena_int‚ðƒTƒ|[ƒg‚·‚é
    1041 
    1042 dis_intCena_intCƒTƒ|[ƒg‚·‚éê‡‚ɁC‚»‚ꂼ‚ê‚̃Vƒ“ƒ{ƒ‹‚ðƒ}ƒN
    1043 ƒ’è‹`‚·‚éD
    1044 
    1045 5.2 Š„ž‚Ý—Dæ“x‚͈̔Í
    1046 
    1047 (5-2-1) TMIN_INTPRI                             Š„ž‚Ý—Dæ“x‚̍ŏ¬’liÅ‚’lj
    1048 (5-2-2) TMAX_INTPRI                             Š„ž‚Ý—Dæ“x‚̍őå’liÅ’á’lj
    1049 
    1050 ‚»‚ꂼ‚êCƒJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚Ý—Dæ“x‚̍ŏ¬’li—Dæ“x‚ªÅ‚jCƒJ[ƒl
    1051 ƒ‹ŠÇ—‚ÌŠ„ž‚Ý—Dæ“x‚̍őå’li—Dæ“x‚ªÅ’áj‚É’è‹`‚·‚éDTMAX_INTPRI‚Í-1
    1052 ‚ɌŒ肳‚ê‚Ä‚¢‚邪C‘Ώ̐«‚Ì‚½‚߂ɁCƒ^[ƒQƒbƒgˆË‘¶•”‚Å’è‹`‚·‚邱‚Æ‚É‚µ
    1053 ‚Ä‚¢‚éD
    1054 
    1055 5.3 ƒ^ƒCƒ€ƒeƒBƒbƒN‚Ì’è‹`
    1056 
    1057 (5-3-1) TIC_NUME                                ƒ^ƒCƒ€ƒeƒBƒbƒN‚ÌŽüŠú‚Ì•ªŽq
    1058 (5-3-2) TIC_DENO                                ƒ^ƒCƒ€ƒeƒBƒbƒN‚ÌŽüŠú‚Ì•ª•ê
    1059 
    1060 ƒ^ƒCƒ€ƒeƒBƒbƒN‚ÌŽüŠúisignal_time‚ðŒÄ‚яo‚·ŽüŠúj‚ðCƒ~ƒŠ•b’PˆÊ‚ŁC
    1061 TIC_NUME/TIC_DENO‚É’è‹`‚·‚éD—Ⴆ‚΁Cƒ^ƒCƒ€ƒeƒBƒbƒN‚ÌŽüŠú‚ª1/30•b‚̏ꍇ
    1062 ‚ɂ́CTIC_NUME‚ð100‚ɁCTIC_DENO‚ð3‚É’è‹`‚·‚ê‚΂悢D
    1063 
    1064 ƒ^ƒCƒ€ƒeƒBƒbƒN‚ÌŽüŠú‚́C1ƒ~ƒŠ•b‚Æ‚·‚éi‚‚܂èCTIC_NUMECTIC_DENO‚Æ‚à1
    1065 ‚É’è‹`‚·‚éj‚±‚Ƃ𐄏§‚·‚邪CƒVƒ~ƒ
    1066 ƒŒ[ƒVƒ‡ƒ“ŠÂ‹«‚␫”\‚Ì’á‚¢ƒvƒƒZƒb
    1067 ƒT‚Å‚»‚ꂪ“KØ‚Å‚È‚¢ê‡‚ɂ́C‚»‚êˆÈŠO‚Ì’l‚Æ‚µ‚Ä‚à‚æ‚¢D‚»‚̏ꍇ‚Å‚àC
    1068 ‰Â”\‚ÈŒÀ‚èC1ƒ~ƒŠ•b‚Ì”{”‚Å‚ ‚éi‚‚܂èCTIC_DENO‚ð1‚É’è‹`‚·‚éj‚±‚Æ‚ª
    1069 –]‚Ü‚µ‚¢D
    1070 
    1071 TIC_NUME‚ÆTIC_DENO‚Ì’è‹`‚ð•ÏX‚·‚邱‚ƂŁCƒ^ƒCƒ€ƒeƒBƒbƒN‚ÌŽüŠú‚ð•ÏX‚Å
    1072 ‚«‚é‚悤‚Ƀ^ƒCƒ}ƒhƒ‰ƒCƒo‚ðŽÀ‘•‚·‚éê‡‚ɂ́C‚±‚Ì2‚‚̒萔‚Ì’è‹`‚̓fƒtƒH
    1073 ƒ‹ƒg’l‚ð—^‚¦‚Ä‚¢‚邱‚Æ‚É‚È‚éD‚»‚±‚ŁC‚±‚ê‚ç‚Ì’è‹`‚ðu#ifndef TIC_NUMEv
    1074 u#endifv‚ň͂ñ‚Å‹Lq‚·‚éD
    1075 
    1076 5.4 ƒƒ‚ƒŠ—̈æŠm•Û‚Ì‚½‚ß‚ÌŒ^’è‹`
    1077 
    1078 (5-4-1) TOPPERS_STK_T   ƒXƒ^ƒbƒN—̈æ‚ðŠm•Û‚·‚邽‚ß‚ÌŒ^iƒIƒvƒVƒ‡ƒ“j
    1079 
    1080 ƒXƒ^ƒbƒN—̈æ‚́C•W€‚ł́Cintptr_tŒ^‚Ì”z—ñ‚Æ‚µ‚ÄŠm•Û‚·‚邪C‚æ‚è‘å‚«‚¢’PˆÊ‚Å
    1081 ƒAƒ‰ƒCƒ“‚³‚¹‚½‚¢‚È‚Ç‚Ì——R‚ŁC‚»‚êˆÈŠO‚ÌŒ^‚Ì”z—ñ‚Æ‚µ‚ÄŠm•Û‚·‚éê‡‚ɂ́C
    1082 ‚»‚ꂼ‚êTOPPERS_STK_T‚Æ‚ðC”z—ñ‚̃x[ƒX‚Æ‚È‚éƒf[ƒ^Œ^‚Ƀ}ƒNƒ’è‹`‚·‚éD
    1083 
    1084 5.5 ƒƒ‚ƒŠ—̈æŠm•Û‚Ì‚½‚߂̃}ƒNƒ
    1085 
    1086 (5-5-1) TOPPERS_ROUND_SZiƒIƒvƒVƒ‡ƒ“j
    1087 (5-5-2) TOPPERS_COUNT_SZiƒIƒvƒVƒ‡ƒ“j
    1088 
    1089 TOPPERS_COUNT_SZ(sz, unit)‚́Csz/unit‚ðØ‚èã‚°‚½’l‚ð‹‚ß‚éƒ}ƒNƒ‚ŁCƒT
    1090 ƒCƒY‚ªsz‚̃ƒ‚ƒŠ—̈æ‚ðƒTƒCƒY‚ªunit‚̃f[ƒ^Œ^‚Ì”z—ñ‚ÅŠm•Û‚·‚éê‡‚Ì—v‘f
    1091 ”‚ð‹‚ß‚é‚½‚ß‚É—p‚¢‚éDTOPPERS_ROUND_SZ(sz, unit)‚́Csz/unit‚ðØ‚èã‚°
    1092 ‚½‚à‚Ì‚Éunit‚ð‚©‚¯‚½’l‚ð‹‚ß‚éƒ}ƒNƒ‚ŁCƒTƒCƒY‚ªsz‚̃ƒ‚ƒŠ—̈æ‚ðƒTƒCƒY
    1093 ‚ªunit‚̃f[ƒ^Œ^‚Ì”z—ñ‚ÅŠm•Û‚·‚éê‡‚̃g[ƒ^ƒ‹ƒTƒCƒY‚ð‹‚ß‚é‚½‚ß‚É—p‚¢
    1094 ‚éD
    1095 
    1096 ‚»‚ꂼ‚êC•W€‚ÌTOPPERS_ROUND_SZCTOPPERS_COUNT_SZ‚ª“KØ‚Å‚È‚­Cƒ^[ƒQƒb
    1097 ƒgˆË‘¶•”‚Å—pˆÓ‚·‚éê‡‚ɂ́C‚±‚ê‚ç‚̃Vƒ“ƒ{ƒ‹‚ð“KØ‚È’l‚Ƀ}ƒNƒ’è‹`‚·‚éD
    1098 
    1099 6. ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”
    1100 
    1101 6.1 ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚Ì‹¤’ÊŽ–€
    1102 
    1103 6.1.1 ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚̍\¬—v‘f
    1104 
    1105 ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚́CˆÈ‰º‚Ì—v‘f‚ō\¬‚³‚ê‚éD
    1106 
    1107 (a) ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶‚Ì’è‹`
    1108 
    1109 ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚©‚çŽQÆ‚³‚ê‚éƒ^[ƒQƒbƒgˆË‘¶‚Ì’è‹`‚́C
    1110 target_config.h‚Ü‚½‚Í‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹iƒvƒƒZƒbƒTEƒ`ƒb
    1111 ƒvEŠJ”­ŠÂ‹«ˆË‘¶•”‚Å—pˆÓ‚³‚ê‚éƒwƒbƒ_ƒtƒ@ƒCƒ‹‚Ȃǁj‚ÉŠÜ‚ß‚éD
    1112 
    1113 ƒ^[ƒQƒbƒg‚̃n[ƒhƒEƒFƒAŽ‘Œ¹iŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚âCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†C
    1114 ƒfƒoƒCƒXƒŒƒWƒXƒ^‚̔Ԓn‚Ȃǁj‚Ì’è‹`‚́CƒVƒXƒeƒ€ƒT[ƒrƒX‚âƒAƒvƒŠƒP[ƒVƒ‡
    1115 ƒ“‚É‚à—L—p‚Å‚ ‚邽‚߁CƒJ[ƒlƒ‹ŽÀ‘•‚Ì‚Ý‚É—L—p‚È’è‹`‚ðŠÜ‚Þƒtƒ@ƒCƒ‹‚Ƃ͐Ø
    1116 ‚蕪‚¯‚āC“Æ—§‚µ‚½ƒwƒbƒ_ƒtƒ@ƒCƒ‹‚ÉŠÜ‚ß‚éD‚±‚̃wƒbƒ_ƒtƒ@ƒCƒ‹‚Ì•W€“I‚È
    1117 –¼Ì‚ðCƒVƒXƒeƒ€—ªÌ.hi‚Ü‚½‚́Cƒ`ƒbƒv—ªÌ.hCƒvƒƒZƒbƒT—ªÌ.hj‚Æ‚·‚éD
    1118 
    1119 (b) ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶ƒ‚ƒWƒ
    1120 [ƒ‹
    1121 
    1122 ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶‚̕ϐ”’è‹`‚âŠÖ”‚ðŠÜ‚Þƒ‚ƒWƒ
    1123 [ƒ‹DCŒ¾Œê‚Å‹L
    1124 q‚³‚ê‚é•”•ª‚ðtarget_config.cCƒAƒZƒ“ƒuƒŠŒ¾Œê‚Å‹Lq‚³‚ê‚é•”•ª‚ð
    1125 target_support.S‚ÉŠÜ‚ß‚éDƒvƒƒZƒbƒTEƒ`ƒbƒvEŠJ”­ŠÂ‹«ˆË‘¶•”‚ðØ‚蕪‚¯
    1126 ‚邱‚Æ‚âCƒtƒ@ƒCƒ‹‚ª‘å‚«‚­‚È‚éê‡‚É•¡”‚̃tƒ@ƒCƒ‹‚É•ªŠ„‚·‚邱‚Æ‚à‰Â”\
    1127 ‚Å‚ ‚éD
    1128 
    1129 (c) ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚Ì‚½‚߂̃Šƒl[ƒ€‹Lq
    1130 
    1131 ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚̕ϐ”–¼‚âŠÖ”–¼‚ðCæ“ª‚É_kernel_‚ð•t—^
    1132 ‚µ‚½–¼‘O‚ɃŠƒl[ƒ€‚·‚邽‚߂̃‚ƒWƒ
    1133 [ƒ‹Dtarget_rename.def‚ð—pˆÓ‚µCƒc[
    1134 ƒ‹iutils/genrenamej‚É‚æ‚èCtarget_rename.h‚Ætarget_unrename.h‚𐶐¬‚·
    1135 ‚éDƒvƒƒZƒbƒTEƒ`ƒbƒvEŠJ”­ŠÂ‹«ˆË‘¶•”‚ðØ‚蕪‚¯‚éê‡‚ɂ́CƒŠƒl[ƒ€‹L
    1136 q‚àØ‚蕪‚¯‚éD
    1137 
    1138 ¦
    1139 (d) ƒ^ƒCƒ}ƒhƒ‰ƒCƒo
    1140 
    1141 ƒJ[ƒlƒ‹‚Ƀ^ƒCƒ€ƒeƒBƒbƒN‚ð’Ê’m‚·‚éisignal_time‚ðŽüŠú“I‚ɌĂяo‚·j‚½‚ß
    1142 ‚̃^ƒCƒ}ƒhƒ‰ƒCƒo‚̃wƒbƒ_ƒtƒ@ƒCƒ‹CŽÀ‘•ƒtƒ@ƒCƒ‹CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1143 ƒŒ[
    1144 ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ðC‚»‚ꂼ‚êCtarget_timer.hCtarget_timer.cC
    1145 target_timer.cfg‚ÉŠÜ‚ß‚éDƒvƒƒZƒbƒTEƒ`ƒbƒvEŠJ”­ŠÂ‹«ˆË‘¶•”‚ðØ‚蕪‚¯
    1146 ‚邱‚Æ‚à‰Â”\‚Å‚ ‚éD
    1147 
    1148 (e) ƒRƒ“ƒtƒBƒMƒ
    1149 ƒŒ[ƒ^Ý’èƒtƒ@ƒCƒ‹
    1150 
    1151 ƒRƒ“ƒtƒBƒMƒ
    1152 ƒŒ[ƒ^‚̐ݒèƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”‚ðCtarget_def.csvC
    1153 target.tfCtarget_check.tf‚É—pˆÓ‚·‚éDƒRƒ“ƒtƒBƒMƒ
    1154 ƒŒ[ƒ^Ý’èƒtƒ@ƒCƒ‹‚Ì
    1155 ‹Lq•û–@‚ɂ‚¢‚ẮC‚VÍ‚Åà–¾‚·‚éD
    1156 
    1157 6.1.2 ƒ^[ƒQƒbƒgˆË‘¶•”‚̊֐”‚Ì–½–¼‹K‘¥
    1158 
    1159 ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚ð\¬‚·‚éŠÖ”‚Ì’†‚ŁCt_‚ÅŽn‚Ü‚é‚à‚̂̓^
    1160 ƒXƒNƒRƒ“ƒeƒLƒXƒgê—pCi_‚ÅŽn‚Ü‚é‚à‚Ì‚Í”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒgê—pCx_‚ÅŽn
    1161 ‚Ü‚é‚à‚Ì‚Í‚¢‚¸‚ê‚̃Rƒ“ƒeƒLƒXƒg‚©‚ç‚Å‚àŒÄ‚яo‚·‚±‚Æ‚ª‚Å‚«‚éŠÖ”‚Å‚ ‚éD
    1162 
    1163 6.2 ƒgƒŒ[ƒXƒƒO‹@”\‚ւ̑Ήž
    1164 
    1165 ƒJ[ƒlƒ‹‚̃gƒŒ[ƒXƒƒO‹@”\‚Ì’†‚ŁCŠ„ž‚݃nƒ“ƒhƒ‰CCPU—áŠOƒnƒ“ƒhƒ‰‚ÌŠJŽn
    1166 EI—¹‚̃gƒŒ[ƒXƒƒOŽæ“¾‚́Cƒ^[ƒQƒbƒgˆË‘¶•”‚ÅŽÀ‘•‚·‚é•K—v‚ª‚ ‚éD‚Ù‚Æ‚ñ
    1167 ‚ǂ̃^[ƒQƒbƒgƒVƒXƒeƒ€‚É‚¨‚¢‚āC‚»‚ê‚ç‚̏ˆ—‚̓AƒZƒ“ƒuƒŠŒ¾Œê‚Å‹Lq‚³‚ê‚Ä
    1168 ‚¨‚èCƒ^[ƒQƒbƒg”ñˆË‘¶•”Œü‚¯‚̃gƒŒ[ƒXƒƒOƒ}ƒNƒ‚Æ“¯‚¶•û–@iƒgƒŒ[ƒXƒƒO
    1169 ƒ}ƒNƒ‚ðCƒgƒŒ[ƒXƒƒOŽæ“¾ˆ—‚ÌCŒ¾Œê‹Lq‚Ƀ}ƒNƒ’è‹`‚·‚é•û–@j‚́C—p‚¢
    1170 ‚邱‚Æ‚ª‚Å‚«‚È‚¢D
    1171 
    1172 ‚»‚±‚ŁCƒAƒZƒ“ƒuƒŠŒ¾Œê‚Å‹Lq‚³‚ê‚Ä‚¢‚鏈—’†‚ɃgƒŒ[ƒXƒƒOŽæ“¾‚𖄂ߍž
    1173 ‚ޏꍇ‚ɂ́CƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚ª’è‹`‚³‚ê‚Ä‚¢‚ê‚΁C‚»‚ꂪ‰½‚É’è‹`‚³‚ê‚Ä
    1174 ‚¢‚é‚©‚Í–³Ž‹‚µ‚āC•W€“I‚ȃgƒŒ[ƒXƒƒOŠÖ”‚ªCŒ¾Œê‚Å‹Lq‚³‚ê‚Ä‚¢‚é‚Æ‘z’è
    1175 ‚µ‚āC‚»‚ê‚ðŒÄ‚яo‚·‚悤‚ɃR[ƒfƒBƒ“ƒO‚·‚éD
    1176 
    1177 ‹ï‘Ì“I‚ɂ́C‰º‚Ì•\‚̍¶‘¤‚ÉŽ¦‚µ‚½ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚ª’è‹`‚³‚ê‚Ä‚¢‚ê‚΁C
    1178 •\‚̉E‘¤‚ÉŽ¦‚µ‚½CŒ¾Œê‹Lq‚Æ“¯“™‚̏ˆ—‚ðs‚¤‚悤‚ɃR[ƒfƒBƒ“ƒO‚·‚éD
    1179 
    1180         ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ              ƒgƒŒ[ƒXƒƒOŽæ“¾ˆ—
     976それぞれ,標準のsil_reh_lem,sil_wrh_lem,sil_reh_bem,sil_wrh_bem,
     977sil_rew_lem,sil_wrw_lem,sil_rew_bem,sil_wrw_bemを使用せず,ターゲッ
     978ト依存部で用意する場合には,これらのシンボルをマクロ定義する.
     979
     9804.5 I/O空間アクセス関数
     981
     982メモリ空間とは別にI/O空間を持つプロセッサでは,I/O空間にあるデバイスレ
     983ジスタをアクセスするための関数として,sil_reb_iop,sil_wrb_iop,
     984sil_reh_iop,sil_wrh_iop,sil_reh_lep,sil_wrh_lep,sil_reh_bep,
     985sil_wrh_bep,sil_rew_iop,sil_wrw_iop,sil_rew_lep,sil_wrw_lep,
     986sil_rew_bep,sil_wrw_bepの中で必要なものを,ターゲット依存部で用意する.
     987
     988
     9895. カーネルAPIのターゲット依存部
     990
     991カーネルAPI(kernel.h)のターゲット依存部の定義は,target_kernel.hまた
     992はそこからインクルードされるファイル(プロセッサ・チップ・開発環境依存
     993部で用意されるヘッダファイルなど)に含める.
     994
     9955.1 ターゲット定義でサポートする機能
     996
     997(5-1-1) TOPPERS_TARGET_SUPPORT_DIS_INT          dis_intをサポートする
     998(5-1-2) TOPPERS_TARGET_SUPPORT_ENA_INT          ena_intをサポートする
     999
     1000dis_int,ena_int,サポートする場合に,それぞれのシンボルをマク
     1001ロ定義する.
     1002
     10035.2 割込み優先度の範囲
     1004
     1005(5-2-1) TMIN_INTPRI                             割込み優先度の最小値(最高値)
     1006(5-2-2) TMAX_INTPRI                             割込み優先度の最大値(最低値)
     1007
     1008それぞれ,カーネル管理の割込み優先度の最小値(=優先度が最高),カーネ
     1009ル管理の割込み優先度の最大値(優先度が最低)に定義する.TMAX_INTPRIは-1
     1010に固定されているが,対称性のために,ターゲット依存部で定義することにし
     1011ている.
     1012
     10135.3 タイムティックの定義
     1014
     1015(5-3-1) TIC_NUME                                タイムティックの周期の分子
     1016(5-3-2) TIC_DENO                                タイムティックの周期の分母
     1017
     1018タイムティックの周期(signal_timeを呼び出す周期)を,ミリ秒単位で,
     1019TIC_NUME/TIC_DENOに定義する.例えば,タイムティックの周期が1/30秒の場合
     1020には,TIC_NUMEを100に,TIC_DENOを3に定義すればよい.
     1021
     1022タイムティックの周期は,1ミリ秒とする(つまり,TIC_NUME,TIC_DENOとも1
     1023に定義する)ことを推奨するが,シミュレーション環境や性能の低いプロセッ
     1024サでそれが適切でない場合には,それ以外の値としてもよい.その場合でも,
     1025可能な限り,1ミリ秒の倍数である(つまり,TIC_DENOを1に定義する)ことが
     1026望ましい.
     1027
     1028TIC_NUMEとTIC_DENOの定義を変更することで,タイムティックの周期を変更で
     1029きるようにタイマドライバを実装する場合には,この2つの定数の定義はデフォ
     1030ルト値を与えていることになる.そこで,これらの定義を「#ifndef TIC_NUME」
     1031「#endif」で囲んで記述する.
     1032
     10335.4 メモリ領域確保のための型定義
     1034
     1035(5-4-1) TOPPERS_STK_T   スタック領域を確保するための型(オプション)
     1036
     1037スタック領域は,標準では,intptr_t型の配列として確保するが,より大きい単位で
     1038アラインさせたいなどの理由で,それ以外の型の配列として確保する場合には,
     1039それぞれTOPPERS_STK_Tとを,配列のベースとなるデータ型にマクロ定義する.
     1040
     10415.5 メモリ領域確保のためのマクロ
     1042
     1043(5-5-1) TOPPERS_ROUND_SZ(オプション)
     1044(5-5-2) TOPPERS_COUNT_SZ(オプション)
     1045
     1046TOPPERS_COUNT_SZ(sz, unit)は,sz/unitを切り上げた値を求めるマクロで,サ
     1047イズがszのメモリ領域をサイズがunitのデータ型の配列で確保する場合の要素
     1048数を求めるために用いる.TOPPERS_ROUND_SZ(sz, unit)は,sz/unitを切り上げ
     1049たものにunitをかけた値を求めるマクロで,サイズがszのメモリ領域をサイズ
     1050がunitのデータ型の配列で確保する場合のトータルサイズを求めるために用い
     1051る.
     1052
     1053それぞれ,標準のTOPPERS_ROUND_SZ,TOPPERS_COUNT_SZが適切でなく,ターゲッ
     1054ト依存部で用意する場合には,これらのシンボルを適切な値にマクロ定義する.
     1055
     10566. カーネル実装のターゲット依存部
     1057
     10586.1 カーネル実装のターゲット依存部の共通事項
     1059
     10606.1.1 カーネル実装のターゲット依存部の構成要素
     1061
     1062カーネル実装のターゲット依存部は,以下の要素で構成される.
     1063
     1064(a) カーネル実装のターゲット依存の定義
     1065
     1066カーネル実装のターゲット非依存部から参照されるターゲット依存の定義は,
     1067target_config.hまたはそこからインクルードされるファイル(プロセッサ・チッ
     1068プ・開発環境依存部で用意されるヘッダファイルなど)に含める.
     1069
     1070ターゲットのハードウェア資源(割込みハンドラ番号やCPU例外ハンドラ番号,
     1071デバイスレジスタの番地など)の定義は,システムサービスやアプリケーショ
     1072ンにも有用であるため,カーネル実装のみに有用な定義を含むファイルとは切
     1073り分けて,独立したヘッダファイルに含める.このヘッダファイルの標準的な
     1074名称を,システム略称.h(または,チップ略称.h,プロセッサ略称.h)とする.
     1075
     1076(b) カーネル実装のターゲット依存モジュール
     1077
     1078カーネル実装のターゲット依存の変数定義や関数を含むモジュール.C言語で記
     1079述される部分をtarget_config.c,アセンブリ言語で記述される部分を
     1080target_support.Sに含める.プロセッサ・チップ・開発環境依存部を切り分け
     1081ることや,ファイルが大きくなる場合に複数のファイルに分割することも可能
     1082である.
     1083
     1084(c) カーネル実装のターゲット依存部のためのリネーム記述
     1085
     1086カーネル実装のターゲット依存部の変数名や関数名を,先頭に_kernel_を付与
     1087した名前にリネームするためのモジュール.target_rename.defを用意し,ツー
     1088ル(utils/genrename)により,target_rename.hとtarget_unrename.hを生成す
     1089る.プロセッサ・チップ・開発環境依存部を切り分ける場合には,リネーム記
     1090述も切り分ける.
     1091
     1092
     1093(d) タイマドライバ
     1094
     1095カーネルにタイムティックを通知する(signal_timeを周期的に呼び出す)ため
     1096のタイマドライバのヘッダファイル,実装ファイル,システムコンフィギュレー
     1097ションファイルを,それぞれ,target_timer.h,target_timer.c,
     1098target_timer.cfgに含める.プロセッサ・チップ・開発環境依存部を切り分け
     1099ることも可能である.
     1100
     1101(e) コンフィギュレータ設定ファイル
     1102
     1103コンフィギュレータの設定ファイルのターゲット依存部を,target_def.csv,
     1104target.tf,target_check.tfに用意する.コンフィギュレータ設定ファイルの
     1105記述方法については,7章で説明する.
     1106
     11076.1.2 ターゲット依存部の関数の命名規則
     1108
     1109カーネル実装のターゲット依存部を構成する関数の中で,t_で始まるものはタ
     1110スクコンテキスト専用,i_で始まるものは非タスクコンテキスト専用,x_で始
     1111まるものはいずれのコンテキストからでも呼び出すことができる関数である.
     1112
     11136.2 トレースログ機能への対応
     1114
     1115カーネルのトレースログ機能の中で,割込みハンドラ,CPU例外ハンドラの開始
     1116・終了のトレースログ取得は,ターゲット依存部で実装する必要がある.ほとん
     1117どのターゲットシステムにおいて,それらの処理はアセンブリ言語で記述されて
     1118おり,ターゲット非依存部向けのトレースログマクロと同じ方法(トレースログ
     1119マクロを,トレースログ取得処理のC言語記述にマクロ定義する方法)は,用い
     1120ることができない.
     1121
     1122そこで,アセンブリ言語で記述されている処理中にトレースログ取得を埋め込
     1123む場合には,トレースログマクロが定義されていれば,それが何に定義されて
     1124いるかは無視して,標準的なトレースログ関数がC言語で記述されていると想定
     1125して,それを呼び出すようにコーディングする.
     1126
     1127具体的には,下の表の左側に示したトレースログマクロが定義されていれば,
     1128表の右側に示したC言語記述と同等の処理を行うようにコーディングする.
     1129
     1130        トレースログマクロ               トレースログ取得処理
    11811131        -----------------------------------------------
    11821132        LOG_INH_ENTER                   log_inh_enter(inhno)
     
    11851135        LOG_EXC_LEAVE                   log_exc_leave(excno)
    11861136
    1187 6.3 ƒVƒXƒeƒ€ó‘Ô‚ÌŠÇ—
    1188 
    1189 SSPƒJ[ƒlƒ‹‚ðV‚½‚ȃ^[ƒQƒbƒgƒVƒXƒeƒ€‚Ƀ|[ƒeƒBƒ“ƒO‚·‚éÛ‚ɁCÅ‚àd—v‚È
    1190 ì‹Æ‚́CƒJ[ƒlƒ‹‚ª’è‹`‚·‚éƒVƒXƒeƒ€ó‘Ô‚ðCƒn[ƒhƒEƒFƒAiƒvƒƒZƒbƒTjã
    1191 ‚łǂ̂悤‚ÉŽÀŒ»‚·‚é‚©‚Å‚ ‚éDˆÈ‰º‚Ìà–¾‚́CTOPPERSV¢‘ãƒJ[ƒlƒ‹‚É‚¨‚¯
    1192 ‚éƒVƒXƒeƒ€ó‘Ô‚Ì’è‹`EˆÓ–¡‚ð’m‚Á‚Ä‚¢‚邱‚Æ‚ð‘O’ñ‚É‹Lq‚µ‚Ä‚¢‚éD
    1193 
    1194 6.3.1 ‘SŠ„ž‚݃ƒbƒNó‘Ô‚ÌŠÇ—
    1195 
    1196 ‘SŠ„ž‚݃ƒbƒNó‘Ԃ́CNMI‚ðœ‚­‚·‚ׂĂ̊„ž‚Ý‚ðƒ}ƒXƒN‚µ‚½ó‘Ô‚Å‚ ‚éD‘S
    1197 Š„ž‚݃ƒbƒNó‘Ô‚ðŠÇ—‚·‚é‹@”\‚́CƒVƒXƒeƒ€ƒCƒ“ƒ^ƒtƒF[ƒXƒŒƒCƒ„iSILj‚É
    1198 ‚æ‚Á‚Ä’ñ‹Ÿ‚³‚êCƒJ[ƒlƒ‹‚Í‘SŠ„ž‚݃ƒbƒNó‘Ô‚ðŠÇ—‚µ‚È‚¢D
    1199 
    1200 ‘SŠ„ž‚݃ƒbƒNó‘Ԃł́Csns_ker‚Æext_kerˆÈŠO‚̃J[ƒlƒ‹‚̃T[ƒrƒXƒR[ƒ‹
    1201 ‚ðŒÄ‚Ô‚±‚Æ‚Í‚Å‚«‚È‚¢‚à‚Ì‚Æ‚µ‚Ä‚¨‚èCŒÄ‚ñ‚¾ê‡‚ɂ͉½‚ª‹N‚±‚é‚©•ÛØ‚µ‚Ä
    1202 ‚¢‚È‚¢Dsns_ker‚Æext_ker‚©‚çŒÄ‚яo‚·ˆ—‚́CƒgƒŒ[ƒXƒƒOŽæ“¾ˆ—‚ÆSIL‚Ì
    1203 ƒT[ƒrƒXƒR[ƒ‹‚ðœ‚­‚ƁCcall_exit_kernel‚Ì‚Ý‚Å‚ ‚éD‚»‚Ì‚½‚߁C
    1204 call_exit_kernel‚©‚çŒÄ‚яo‚·‚à‚Ì‚ðœ‚¢‚āCƒJ[ƒlƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”‚Ì
    1205 ŠÖ”‚ªC‘SŠ„ž‚݃ƒbƒNó‘ԂŌĂяo‚³‚ê‚éó‹µ‚͍l‚¦‚é•K—v‚ª‚È‚¢D
    1206 
    1207 6.3.2 ƒRƒ“ƒeƒLƒXƒg‚ÌŠÇ—
    1208 
    1209 ˆ—’PˆÊ‚ªŽÀs‚³‚ê‚éƒRƒ“ƒeƒLƒXƒg‚́Cƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚Æ”ñƒ^ƒXƒNƒRƒ“ƒe
    1210 ƒLƒXƒg‚É•ª—Þ‚³‚ê‚éD
    1211 
    1212 ƒ^[ƒQƒbƒgˆË‘¶•”‚́CŽÀs’†‚̏ˆ—’PˆÊ‚ªCƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÅŽÀs‚³‚ê‚Ä
    1213 ‚¢‚é‚©”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÅŽÀs‚³‚ê‚Ä‚¢‚é‚©‚ð”»•Ê‚·‚é‹@”\‚ð’ñ‹Ÿ‚·‚éD
    1214 ‚Ü‚½CCPU—áŠO‚ª”­¶‚µ‚½ƒRƒ“ƒeƒLƒXƒg‚ɂ‚¢‚Ä”»•Ê‚·‚é‹@”\‚ð’ñ‹Ÿ‚·‚éD
    1215 
    1216 ƒ^[ƒQƒbƒgˆË‘¶•”‚ł́CŠ„ž‚݃nƒ“ƒhƒ‰‚ÆCPU—áŠOƒnƒ“ƒhƒ‰‚Ì“üŒûˆ—‚Å”ñƒ^ƒX
    1217 ƒNƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦C‚»‚ê‚ç‚̏oŒûˆ—‚ÅŒ³‚̃Rƒ“ƒeƒLƒXƒg‚É–ß‚·D‚Ü
    1218 ‚½CƒfƒBƒXƒpƒbƒ`ƒƒ‚Ì“à•”‚ňꎞ“I‚É”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦‚éD
     11376.3 システム状態の管理
     1138
     1139SSPカーネルを新たなターゲットシステムにポーティングする際に,最も重要な
     1140作業は,カーネルが定義するシステム状態を,ハードウェア(プロセッサ)上
     1141でどのように実現するかである.以下の説明は,TOPPERS新世代カーネルにおけ
     1142るシステム状態の定義・意味を知っていることを前提に記述している.
     1143
     11446.3.1 全割込みロック状態の管理
     1145
     1146全割込みロック状態は,NMIを除くすべての割込みをマスクした状態である.全
     1147割込みロック状態を管理する機能は,システムインタフェースレイヤ(SIL)に
     1148よって提供され,カーネルは全割込みロック状態を管理しない.
     1149
     1150全割込みロック状態では,sns_kerとext_ker以外のカーネルのサービスコール
     1151を呼ぶことはできないものとしており,呼んだ場合には何が起こるか保証して
     1152いない.sns_kerとext_kerから呼び出す処理は,トレースログ取得処理とSILの
     1153サービスコールを除くと,call_exit_kernelのみである.そのため,
     1154call_exit_kernelから呼び出すものを除いて,カーネルのターゲット依存部の
     1155関数が,全割込みロック状態で呼び出される状況は考える必要がない.
     1156
     11576.3.2 コンテキストの管理
     1158
     1159処理単位が実行されるコンテキストは,タスクコンテキストと非タスクコンテ
     1160キストに分類される.
     1161
     1162ターゲット依存部は,実行中の処理単位が,タスクコンテキストで実行されて
     1163いるか非タスクコンテキストで実行されているかを判別する機能を提供する.
     1164また,CPU例外が発生したコンテキストについて判別する機能を提供する.
     1165
     1166ターゲット依存部では,割込みハンドラとCPU例外ハンドラの入口処理で非タス
     1167クコンテキストに切り換え,それらの出口処理で元のコンテキストに戻す.ま
     1168た,ディスパッチャの内部で一時的に非タスクコンテキストに切り換える.
    12191169
    12201170(6-3-2-1) bool_t sense_context(void)
    12211171
    1222 ŽÀs’†‚̏ˆ—’PˆÊ‚ªCƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÅŽÀs‚³‚ê‚Ä‚¢‚éê‡‚É‚ÍfalseC”ñ
    1223 ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÅŽÀs‚³‚ê‚Ä‚¢‚éê‡‚É‚Ítrue‚ð•Ô‚·ŠÖ”D‚±‚̊֐”‚́C
    1224 CPUƒƒbƒNó‘Ô‚Å‚àCPUƒƒbƒN‰ðœó‘Ô‚Å‚àŒÄ‚яo‚¹‚é‚悤‚ÉŽÀ‘•‚µ‚È‚¯‚ê‚΂È
    1225 ‚ç‚È‚¢D
    1226 
    1227 6.3.3 CPUƒƒbƒNó‘Ô‚ÌŠÇ—
    1228 
    1229 ƒ^[ƒQƒbƒgˆË‘¶•”‚́CCPUƒƒbƒNó‘Ô‚Ö‘JˆÚ‚·‚é‹@”\CCPUƒƒbƒN‰ðœó‘Ô‚Ö‘J
    1230 ˆÚ‚·‚é‹@”\CCPUƒƒbƒNó‘Ô‚Å‚ ‚é‚©‚ð”»•Ê‚·‚é‹@”\‚ð’ñ‹Ÿ‚·‚éD
     1172実行中の処理単位が,タスクコンテキストで実行されている場合にはfalse,非
     1173タスクコンテキストで実行されている場合にはtrueを返す関数.この関数は,
     1174CPUロック状態でもCPUロック解除状態でも呼び出せるように実装しなければな
     1175らない.
     1176
     11776.3.3 CPUロック状態の管理
     1178
     1179ターゲット依存部は,CPUロック状態へ遷移する機能,CPUロック解除状態へ遷
     1180移する機能,CPUロック状態であるかを判別する機能を提供する.
    12311181
    12321182(6-3-3-1) void t_lock_cpu(void)
     
    12341184(6-3-3-3) void x_lock_cpu(void)
    12351185
    1236 CPUƒƒbƒN‰ðœó‘Ô‚©‚çCCPUƒƒbƒNó‘Ô‚Ö‘JˆÚ‚³‚¹‚éŠÖ”D‚±‚ê‚ç‚̊֐”‚́C
    1237 CPUƒƒbƒNó‘ԂŌĂяo‚³‚ê‚邱‚Æ‚Í‚È‚­CŒÄ‚яo‚³‚ꂽê‡‚Ì“®ì‚͕ۏ؂·‚é
    1238 •K—v‚ª‚È‚¢D
    1239 
    1240 ‚±‚ê‚ç‚̊֐”‚ðŽÀŒ»‚·‚éÛ‚ɂ́Cu1.6 ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚̏o“üˆ—‚Ì
    1241 ŽÀŒ»‚ÉŠÖ‚·‚鐧–ñv‚̐߂ɋLq‚³‚ê‚Ä‚¢‚鐧–ñ‚ɏ]‚í‚È‚¯‚ê‚΂Ȃç‚È‚¢D
     1186CPUロック解除状態から,CPUロック状態へ遷移させる関数.これらの関数は,
     1187CPUロック状態で呼び出されることはなく,呼び出された場合の動作は保証する
     1188必要がない.
     1189
     1190これらの関数を実現する際には,「1.6 クリティカルセクションの出入処理の
     1191実現に関する制約」の節に記述されている制約に従わなければならない.
    12421192
    12431193(6-3-3-4) void t_unlock_cpu(void)
     
    12451195(6-3-3-6) void x_unlock_cpu(void)
    12461196
    1247 CPUƒƒbƒNó‘Ô‚©‚çCCPUƒƒbƒN‰ðœó‘Ô‚Ö‘JˆÚ‚³‚¹‚éŠÖ”D‚±‚ê‚ç‚̊֐”‚́C
    1248 CPUƒƒbƒN‰ðœó‘ԂŌĂяo‚³‚ê‚邱‚Æ‚Í‚È‚­CŒÄ‚яo‚³‚ꂽê‡‚Ì“®ì‚͕ۏØ
    1249 ‚·‚é•K—v‚ª‚È‚¢D
    1250 
    1251 ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÅCPUƒƒbƒNó‘Ô‚É‘JˆÚ‚µ‚½ê‡‚ɂ́CCPUƒƒbƒN‰ðœó‘Ô
    1252 ‚É–ß‚é‚̂̓^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÉŒÀ‚ç‚êC”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÅCPUƒƒbƒN‰ð
    1253 œó‘Ԃɖ߂邱‚Æ‚Í‚È‚¢DŒ¾‚¢Š·‚¦‚é‚ƁCt_unlock_cpu‚ªŒÄ‚яo‚³‚ê‚é‚̂́C
    1254 t_lock_cpu‚É‚æ‚Á‚ÄCPUƒƒbƒNó‘Ô‚É‚È‚Á‚Ä‚¢‚鎞‚Å‚ ‚éDi_lock_cpu‚É‚æ‚Á‚Ä
    1255 CPUƒƒbƒNó‘Ô‚É‚È‚Á‚Ä‚¢‚鎞‚ɂ́Ct_unlock_cpu‚ªŒÄ‚яo‚³‚ê‚邱‚Æ‚Í‚È‚¢D
    1256 
    1257 “¯—l‚ɁC”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÅCPUƒƒbƒNó‘Ô‚É‘JˆÚ‚µ‚½ê‡‚ɂ́CCPUƒƒb
    1258 ƒN‰ðœó‘Ô‚É–ß‚é‚Ì‚Í”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÉŒÀ‚ç‚êCƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚Å
    1259 CPUƒƒbƒN‰ðœó‘Ԃɖ߂邱‚Æ‚Í‚È‚¢DŒ¾‚¢Š·‚¦‚é‚ƁCi_unlock_cpu‚ªŒÄ‚яo‚³
    1260 ‚ê‚é‚̂́Ci_lock_cpu‚É‚æ‚Á‚ÄCPUƒƒbƒNó‘Ô‚É‚È‚Á‚Ä‚¢‚鎞‚Å‚ ‚éD
    1261 t_lock_cpu‚É‚æ‚Á‚ÄCPUƒƒbƒNó‘Ô‚É‚È‚Á‚Ä‚¢‚鎞‚ɂ́Ci_unlock_cpu‚ªŒÄ‚яo
    1262 ‚³‚ê‚邱‚Æ‚Í‚È‚¢D
    1263 
    1264 ‚±‚ê‚ç‚̊֐”‚ðŽÀŒ»‚·‚éÛ‚ɂ́Cu1.6 ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚̏o“üˆ—‚Ì
    1265 ŽÀŒ»‚ÉŠÖ‚·‚鐧–ñv‚̐߂ɋLq‚³‚ê‚Ä‚¢‚鐧–ñ‚ɏ]‚í‚È‚¯‚ê‚΂Ȃç‚È‚¢D
     1197CPUロック状態から,CPUロック解除状態へ遷移させる関数.これらの関数は,
     1198CPUロック解除状態で呼び出されることはなく,呼び出された場合の動作は保証
     1199する必要がない.
     1200
     1201タスクコンテキストでCPUロック状態に遷移した場合には,CPUロック解除状態
     1202に戻るのはタスクコンテキストに限られ,非タスクコンテキストでCPUロック解
     1203除状態に戻ることはない.言い換えると,t_unlock_cpuが呼び出されるのは,
     1204t_lock_cpuによってCPUロック状態になっている時である.i_lock_cpuによって
     1205CPUロック状態になっている時には,t_unlock_cpuが呼び出されることはない.
     1206
     1207同様に,非タスクコンテキストでCPUロック状態に遷移した場合には,CPUロッ
     1208ク解除状態に戻るのは非タスクコンテキストに限られ,タスクコンテキストで
     1209CPUロック解除状態に戻ることはない.言い換えると,i_unlock_cpuが呼び出さ
     1210れるのは,i_lock_cpuによってCPUロック状態になっている時である.
     1211t_lock_cpuによってCPUロック状態になっている時には,i_unlock_cpuが呼び出
     1212されることはない.
     1213
     1214これらの関数を実現する際には,「1.6 クリティカルセクションの出入処理の
     1215実現に関する制約」の節に記述されている制約に従わなければならない.
    12661216
    12671217(6-3-3-7) bool_t t_sense_lock(void)
     
    12691219(6-3-3-9) bool_t x_sense_lock(void)
    12701220
    1271 Œ»Ý‚̃VƒXƒeƒ€ó‘Ô‚ªCCPUƒƒbƒNó‘Ԃ̏ꍇ‚ÍtrueCCPUƒƒbƒN‰ðœó‘Ԃ̏ê
    1272 ‡‚É‚Ífalse‚ð•Ô‚·ŠÖ”D
    1273 
    1274 ‚±‚ê‚ç‚̊֐”‚ª‘SŠ„ž‚݃ƒbƒNó‘ԂŌĂяo‚³‚ê‚éó‹µ‚͍l‚¦‚é•K—v‚ª‚È‚¢‚±
    1275 ‚Æ‚©‚çC‘SŠ„ž‚݃ƒbƒNó‘Ô‚ÆCPUƒƒbƒNó‘Ô‚ð‹æ•Ê‚Å‚«‚é•K—v‚Í‚È‚¢DNMIˆÈ
    1276 ŠO‚ɃJ[ƒlƒ‹‚ÌŠÇ—ŠO‚ÌŠ„ž‚Ý‚ðÝ‚¯‚È‚¢ê‡‚ɂ́C‘SŠ„ž‚݃ƒbƒNó‘Ô‚Æ
    1277 CPUƒƒbƒNó‘Ô‚ª‘S‚­“¯ˆê‚̏ó‘Ô‚Å‚à‚©‚Ü‚í‚È‚¢D
    1278 
    1279 6.4 Š„ž‚Ý‚ÉŠÖ˜A‚·‚éƒVƒXƒeƒ€ó‘Ô‚ÌŠÇ—
    1280 
    1281 6.4.1 Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚ÌŠÇ—
    1282 
    1283 ƒ^[ƒQƒbƒgˆË‘¶•”‚́CŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðÝ’è‚·‚é‹@”\‚ƁCŠ„ž‚Ý—Dæ“xƒ}
    1284 ƒXƒN‚ðŽQÆ‚·‚é‹@”\‚ð’ñ‹Ÿ‚·‚éD
     1221現在のシステム状態が,CPUロック状態の場合はtrue,CPUロック解除状態の場
     1222合にはfalseを返す関数.
     1223
     1224これらの関数が全割込みロック状態で呼び出される状況は考える必要がないこ
     1225とから,全割込みロック状態とCPUロック状態を区別できる必要はない.NMI以
     1226外にカーネルの管理外の割込みを設けない場合には,全割込みロック状態と
     1227CPUロック状態が全く同一の状態でもかまわない.
     1228
     12296.4 割込みに関連するシステム状態の管理
     1230
     12316.4.1 割込み優先度マスクの管理
     1232
     1233ターゲット依存部は,割込み優先度マスクを設定する機能と,割込み優先度マ
     1234スクを参照する機能を提供する.
    12851235
    12861236(6-4-1-1) void x_set_ipm(PRI intpri)
     
    12881238(6-4-1-3) void i_set_ipm(PRI intpri)
    12891239
    1290 Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚Ì’l‚ðintpri‚ɐݒ肷‚éŠÖ”D
    1291 
    1292 ‚±‚ê‚ç‚̊֐”‚́CCPUƒƒbƒNó‘Ô‚Å‚àCPUƒƒbƒN‰ðœó‘Ô‚Å‚àŒÄ‚яo‚¹‚é‚悤‚É
    1293 ŽÀ‘•‚·‚é‚Ì‚ª–]‚Ü‚µ‚¢D‚½‚¾‚µCx_set_ipm‚Æt_set_ipm‚́Cƒ^[ƒQƒbƒg”ñˆË‘¶
    1294 •”‚ªCPUƒƒbƒN‰ðœó‘ԂŌĂяo‚·‚±‚Æ‚Í‚È‚¢‚½‚߁CCPUƒƒbƒN‰ðœó‘ԂŌĂÑ
    1295 o‚³‚ꂽê‡‚Ì“®ì‚͕ۏ؂·‚é•K—v‚ª‚È‚¢Di_set_ipm‚́CCPUƒƒbƒNó‘Ô‚Å‚à
    1296 CPUƒƒbƒN‰ðœó‘Ô‚Å‚àŒÄ‚яo‚¹‚é‚悤‚ÉŽÀ‘•‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    1297 
    1298 ‚Ü‚½C‚±‚ê‚ç‚̊֐”‚́CVALID_INTPRI_CHGIPM(intpri)‚ªtrue‚ð•Ô‚·intpri‚É‘Î
    1299 ‚µ‚Ă̂݌Ă΂ê‚éDintpri‚É‚»‚¤‚Å‚È‚¢’l‚ª“n‚³‚ꂽê‡‚Ì“®ì‚͕ۏ؂·‚é•K
    1300 —v‚ª‚È‚¢D
     1240割込み優先度マスクの値をintpriに設定する関数.
     1241
     1242これらの関数は,CPUロック状態でもCPUロック解除状態でも呼び出せるように
     1243実装するのが望ましい.ただし,x_set_ipmとt_set_ipmは,ターゲット非依存
     1244部がCPUロック解除状態で呼び出すことはないため,CPUロック解除状態で呼び
     1245出された場合の動作は保証する必要がない.i_set_ipmは,CPUロック状態でも
     1246CPUロック解除状態でも呼び出せるように実装しなければならない.
     1247
     1248また,これらの関数は,VALID_INTPRI_CHGIPM(intpri)がtrueを返すintpriに対
     1249してのみ呼ばれる.intpriにそうでない値が渡された場合の動作は保証する必
     1250要がない.
    13011251
    13021252(6-4-1-4) PRI x_get_ipm(void)
     
    13041254(6-4-1-6) PRI i_get_ipm(void)
    13051255
    1306 Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚Ì’l‚ðŽQÆ‚µ‚Ä•Ô‚·ŠÖ”D
    1307 
    1308 ‚±‚ê‚ç‚̊֐”‚́CCPUƒƒbƒNó‘Ô‚Å‚àCPUƒƒbƒN‰ðœó‘Ô‚Å‚àŒÄ‚яo‚¹‚é‚悤‚É
    1309 ŽÀ‘•‚·‚é‚Ì‚ª–]‚Ü‚µ‚¢D‚½‚¾‚µCx_get_ipm‚Æt_get_ipm‚́Cƒ^[ƒQƒbƒg”ñˆË‘¶
    1310 •”‚ªCPUƒƒbƒN‰ðœó‘ԂŌĂяo‚·‚±‚Æ‚Í‚È‚¢‚½‚߁CCPUƒƒbƒN‰ðœó‘ԂŌĂÑ
    1311 o‚³‚ꂽê‡‚Ì“®ì‚͕ۏ؂·‚é•K—v‚ª‚È‚¢Di_get_ipm‚́CCPUƒƒbƒNó‘Ô‚Å‚à
    1312 CPUƒƒbƒN‰ðœó‘Ô‚Å‚àŒÄ‚яo‚¹‚é‚悤‚ÉŽÀ‘•‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    1313 
    1314 Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚ð—p‚¢‚ăJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚Ý‚ð‚·‚×‚Äƒ}ƒXƒN‚µ‚½ó‘Ԃ́C
    1315 CPUƒƒbƒNó‘Ô‚Æ‹æ•Ê‚Å‚«‚邱‚Æ‚ª•K—v‚Å‚ ‚éD‹ï‘Ì“I‚ɂ́CCPUƒƒbƒN‰ðœó
    1316 ‘Ô‚É‚¨‚¢‚āCx_set_ipm‚ð—p‚¢‚ăJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚Ý‚ð‚·‚×‚Äƒ}ƒXƒN‚µ‚½ê‡
    1317 ‚Å‚àCx_sense_lock‚Ífalse‚ð•Ô‚·D
    1318 
    1319 ‚»‚ê‚ɑ΂µ‚āCŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ð—p‚¢‚ÄNMI‚ðœ‚­‚·‚ׂĂ̊„ž‚Ý‚ðƒ}ƒXƒN
    1320 ‚Å‚«‚éê‡C‚»‚̏ó‘Ô‚Æ‘SŠ„ž‚݃ƒbƒNó‘Ô‚ð‹æ•Ê‚Å‚«‚é•K—v‚Í‚È‚­C‘S‚­“¯
    1321 ˆê‚̏ó‘Ô‚Å‚à‚©‚Ü‚í‚È‚¢D
    1322 
    1323 6.4.2 Š„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚ÌŠÇ—
    1324 
    1325 ƒ^[ƒQƒbƒgˆË‘¶•”‚́CŠ„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚ðƒZƒbƒg‚·‚é‹@”\‚ƃNƒŠƒA‚·‚é‹@
    1326 ”\‚ð’ñ‹Ÿ‚·‚éD
     1256割込み優先度マスクの値を参照して返す関数.
     1257
     1258これらの関数は,CPUロック状態でもCPUロック解除状態でも呼び出せるように
     1259実装するのが望ましい.ただし,x_get_ipmとt_get_ipmは,ターゲット非依存
     1260部がCPUロック解除状態で呼び出すことはないため,CPUロック解除状態で呼び
     1261出された場合の動作は保証する必要がない.i_get_ipmは,CPUロック状態でも
     1262CPUロック解除状態でも呼び出せるように実装しなければならない.
     1263
     1264割込み優先度マスクを用いてカーネル管理の割込みをすべてマスクした状態は,
     1265CPUロック状態と区別できることが必要である.具体的には,CPUロック解除状
     1266態において,x_set_ipmを用いてカーネル管理の割込みをすべてマスクした場合
     1267でも,x_sense_lockはfalseを返す.
     1268
     1269それに対して,割込み優先度マスクを用いてNMIを除くすべての割込みをマスク
     1270できる場合,その状態と全割込みロック状態を区別できる必要はなく,全く同
     1271一の状態でもかまわない.
     1272
     12736.4.2 割込み要求禁止フラグの管理
     1274
     1275ターゲット依存部は,割込み要求禁止フラグをセットする機能とクリアする機
     1276能を提供する.
    13271277
    13281278(6-4-2-1) bool_t VALID_INTNO_DISINT(INTNO intno)
    13291279
    1330 intno‚ªCdis_int^ena_int‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Ä—LŒø‚È’l‚Å‚ ‚éê‡‚É
    1331 trueC‚»‚¤‚Å‚È‚¢ê‡‚Éfalse‚ð•Ô‚·ƒ}ƒNƒDŠ„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚ªƒZƒbƒg^
    1332 ƒNƒŠƒA‚Å‚«‚È‚¢intno‚ɑ΂µ‚ẮC‚±‚̃}ƒNƒ‚ªfalse‚ð•Ô‚·‚悤‚É‚·‚éD
     1280intnoが,dis_int/ena_intに対する割込み番号として有効な値である場合に
     1281true,そうでない場合にfalseを返すマクロ.割込み要求禁止フラグがセット/
     1282クリアできないintnoに対しては,このマクロがfalseを返すようにする.
    13331283
    13341284(6-4-2-2) bool_t x_disable_int(INTNO intno)
     
    13361286(6-4-2-4) bool_t i_disable_int(INTNO intno)
    13371287
    1338 intno‚ÅŽw’肳‚ꂽŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ɑ΂·‚銄ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚ðƒZƒbƒg‚µC
    1339 true‚ð•Ô‚·ŠÖ”DŽw’肳‚ꂽŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ɑ΂µ‚āCŠ„ž‚Ý‘®«‚ªÝ’肳
    1340 ‚ê‚Ä‚¢‚È‚¢ê‡‚ɂ́Cfalse‚ð•Ô‚·D
    1341 
    1342 ‚±‚ê‚ç‚̊֐”‚́Cƒ^[ƒQƒbƒg”ñˆË‘¶•”‚ªCPUƒƒbƒN‰ðœó‘ԂŌĂяo‚·‚±‚Æ‚Í‚È
    1343 ‚¢‚½‚߁CCPUƒƒbƒN‰ðœó‘ԂŌĂяo‚³‚ꂽê‡‚Ì“®ì‚͕ۏ؂·‚é•K—v‚ª‚È‚¢D
    1344 ‚½‚¾‚µCƒ^[ƒQƒbƒgˆË‘¶•”‚©‚çCPUƒƒbƒN‰ðœó‘ԂŌĂяo‚·ê‡‚ɂ́C•ÛØ‚·
    1345 ‚é•K—v‚ª‚ ‚éD
    1346 
    1347 ‚Ü‚½C‚±‚ê‚ç‚̊֐”‚́CVALID_INTNO_DISINT(intno)‚ªtrue‚Æ‚È‚éintno‚ɑ΂µ
    1348 ‚Ă̂݌Ă΂ê‚éDintno‚É‚»‚¤‚Å‚È‚¢’l‚ª“n‚³‚ꂽê‡‚Ì“®ì‚͕ۏ؂·‚é•K—v‚ª
    1349 ‚È‚¢D
    1350 
    1351 dis_intƒT[ƒrƒXƒR[ƒ‹‚ðƒTƒ|[ƒg‚·‚éê‡iTOPPERS_SUPPORT_DIS_INT‚ðƒ}ƒN
    1352 ƒ’è‹`‚·‚éê‡j‚ɂ́Ct_disable_int‚ª—pˆÓ‚³‚ê‚Ä‚¢‚È‚¯‚ê‚΂Ȃç‚È‚¢D
     1288intnoで指定された割込み要求ラインに対する割込み要求禁止フラグをセットし,
     1289trueを返す関数.指定された割込み要求ラインに対して,割込み属性が設定さ
     1290れていない場合には,falseを返す.
     1291
     1292これらの関数は,ターゲット非依存部がCPUロック解除状態で呼び出すことはな
     1293いため,CPUロック解除状態で呼び出された場合の動作は保証する必要がない.
     1294ただし,ターゲット依存部からCPUロック解除状態で呼び出す場合には,保証す
     1295る必要がある.
     1296
     1297また,これらの関数は,VALID_INTNO_DISINT(intno)がtrueとなるintnoに対し
     1298てのみ呼ばれる.intnoにそうでない値が渡された場合の動作は保証する必要が
     1299ない.
     1300
     1301dis_intサービスコールをサポートする場合(TOPPERS_SUPPORT_DIS_INTをマク
     1302ロ定義する場合)には,t_disable_intが用意されていなければならない.
    13531303
    13541304(6-4-2-5) bool_t x_enable_int(INTNO intno)
     
    13561306(6-4-2-7) bool_t i_enable_int(INTNO intno)
    13571307
    1358 intno‚ÅŽw’肳‚ꂽŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ɑ΂·‚銄ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚ðƒNƒŠƒA‚µC
    1359 true‚ð•Ô‚·ŠÖ”DŽw’肳‚ꂽŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ɑ΂µ‚āCŠ„ž‚Ý‘®«‚ªÝ’肳
    1360 ‚ê‚Ä‚¢‚È‚¢ê‡‚ɂ́Cfalse‚ð•Ô‚·D
    1361 
    1362 ‚±‚ê‚ç‚̊֐”‚́Cƒ^[ƒQƒbƒg”ñˆË‘¶•”‚ªCPUƒƒbƒN‰ðœó‘ԂŌĂяo‚·‚±‚Æ‚Í‚È
    1363 ‚¢‚½‚߁CCPUƒƒbƒN‰ðœó‘ԂŌĂяo‚³‚ꂽê‡‚Ì“®ì‚͕ۏ؂·‚é•K—v‚ª‚È‚¢D
    1364 ‚½‚¾‚µCƒ^[ƒQƒbƒgˆË‘¶•”‚©‚çCPUƒƒbƒN‰ðœó‘ԂŌĂяo‚·ê‡‚ɂ́C•ÛØ‚·
    1365 ‚é•K—v‚ª‚ ‚éD
    1366 
    1367 ‚Ü‚½C‚±‚ê‚ç‚̊֐”‚́CVALID_INTNO_DISINT(intno)‚ªtrue‚Æ‚È‚éintno‚ɑ΂µ
    1368 ‚Ă̂݌Ă΂ê‚éDintno‚É‚»‚¤‚Å‚È‚¢’l‚ª“n‚³‚ꂽê‡‚Ì“®ì‚͕ۏ؂·‚é•K—v‚ª
    1369 ‚È‚¢D
    1370 
    1371 ena_intƒT[ƒrƒXƒR[ƒ‹‚ðƒTƒ|[ƒg‚·‚éê‡iTOPPERS_SUPPORT_ENA_INT‚ðƒ}ƒN
    1372 ƒ’è‹`‚·‚éê‡j‚ɂ́Ct_enable_int‚ª—pˆÓ‚³‚ê‚Ä‚¢‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    1373 
    1374 6.4.3 Š„ž‚Ý—v‹‚̃NƒŠƒA
     1308intnoで指定された割込み要求ラインに対する割込み要求禁止フラグをクリアし,
     1309trueを返す関数.指定された割込み要求ラインに対して,割込み属性が設定さ
     1310れていない場合には,falseを返す.
     1311
     1312これらの関数は,ターゲット非依存部がCPUロック解除状態で呼び出すことはな
     1313いため,CPUロック解除状態で呼び出された場合の動作は保証する必要がない.
     1314ただし,ターゲット依存部からCPUロック解除状態で呼び出す場合には,保証す
     1315る必要がある.
     1316
     1317また,これらの関数は,VALID_INTNO_DISINT(intno)がtrueとなるintnoに対し
     1318てのみ呼ばれる.intnoにそうでない値が渡された場合の動作は保証する必要が
     1319ない.
     1320
     1321ena_intサービスコールをサポートする場合(TOPPERS_SUPPORT_ENA_INTをマク
     1322ロ定義する場合)には,t_enable_intが用意されていなければならない.
     1323
     13246.4.3 割込み要求のクリア
    13751325
    13761326(6-4-3-1) void x_clear_int(INTNO intno)
     
    13781328(6-4-3-3) void i_clear_int(INTNO intno)
    13791329
    1380 intno‚ÅŽw’肳‚ꂽŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ªƒGƒbƒWƒgƒŠƒK‚Å‚ ‚éê‡‚ɁCƒgƒŠƒK‚³‚ê
    1381 ‚½Š„ž‚Ý—v‹‚ðƒNƒŠƒA‚·‚éŠÖ”Dintno‚ÅŽw’肳‚ꂽŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ªƒŒƒxƒ‹
    1382 ƒgƒŠƒK‚Å‚ ‚éê‡‚ɂ͉½‚à‚µ‚È‚¢D
    1383 
    1384 SSPƒJ[ƒlƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚ł́C‚±‚ê‚ç‚̊֐”‚ðŒÄ‚яo‚µ‚Ä‚¢‚È‚¢‚ªC
    1385 ƒ^[ƒQƒbƒgˆË‘¶•”‚âƒVƒXƒeƒ€ƒT[ƒrƒX‚ŌĂяo‚·‰Â”\«‚ª‚‚¢‚½‚߁C—pˆÓ‚·‚é
    1386 ‚±‚Æ‚Æ‚µ‚Ä‚¢‚éD‚»‚Ì‚½‚߁C‚±‚ê‚ç‚̊֐”‚ª‚ǂ̂悤‚ȃVƒXƒeƒ€ó‘ԂŌĂяo
    1387 ‚¹‚é‚©‚́Cƒ^[ƒQƒbƒgˆË‘¶•”“à‚ňêŠÑ‚µ‚Ä‚¢‚ê‚΂悢D
    1388 
    1389 6.4.4 Š„ž‚Ý—v‹‚̃vƒ[ƒu
     1330intnoで指定された割込み要求ラインがエッジトリガである場合に,トリガされ
     1331た割込み要求をクリアする関数.intnoで指定された割込み要求ラインがレベル
     1332トリガである場合には何もしない.
     1333
     1334SSPカーネルのターゲット非依存部では,これらの関数を呼び出していないが,
     1335ターゲット依存部やシステムサービスで呼び出す可能性が高いため,用意する
     1336こととしている.そのため,これらの関数がどのようなシステム状態で呼び出
     1337せるかは,ターゲット依存部内で一貫していればよい.
     1338
     13396.4.4 割込み要求のプローブ
    13901340
    13911341(6-4-4-1) bool_t x_probe_int(INTNO intno)
     
    13931343(6-4-4-3) bool_t i_probe_int(INTNO intno)
    13941344
    1395 intno‚ÅŽw’肳‚ꂽŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ɑ΂µ‚āCŠ„ž‚Ý‚ª—v‹‚³‚ê‚Ä‚¢‚éê‡‚É
    1396 trueC‚»‚¤‚Å‚È‚¢ê‡‚Éfalse‚ð•Ô‚·ŠÖ”D
    1397 
    1398 SSPƒJ[ƒlƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚ł́C‚±‚ê‚ç‚̊֐”‚ðŒÄ‚яo‚µ‚Ä‚¢‚È‚¢‚ªC
    1399 ƒ^[ƒQƒbƒgˆË‘¶•”‚âƒVƒXƒeƒ€ƒT[ƒrƒX‚ŌĂяo‚·‰Â”\«‚ª‚‚¢‚½‚߁C—pˆÓ‚·‚é
    1400 ‚±‚Æ‚Æ‚µ‚Ä‚¢‚éD‚»‚Ì‚½‚߁C‚±‚ê‚ç‚̊֐”‚ª‚ǂ̂悤‚ȃVƒXƒeƒ€ó‘ԂŌĂяo
    1401 ‚¹‚é‚©‚́Cƒ^[ƒQƒbƒgˆË‘¶•”“à‚ňêŠÑ‚µ‚Ä‚¢‚ê‚΂悢D
    1402 
    1403 6.4.5 Š„ž‚݃nƒ“ƒhƒ‰‚̐擪ˆ—‚Æ––”öˆ—
     1345intnoで指定された割込み要求ラインに対して,割込みが要求されている場合に
     1346true,そうでない場合にfalseを返す関数.
     1347
     1348SSPカーネルのターゲット非依存部では,これらの関数を呼び出していないが,
     1349ターゲット依存部やシステムサービスで呼び出す可能性が高いため,用意する
     1350こととしている.そのため,これらの関数がどのようなシステム状態で呼び出
     1351せるかは,ターゲット依存部内で一貫していればよい.
     1352
     13536.4.5 割込みハンドラの先頭処理と末尾処理
    14041354
    14051355(6-4-5-1) void i_begin_int(INTNO intno)
    14061356
    1407 intno‚ÅŽw’肳‚ꂽŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ɑ΂·‚銄ž‚݃nƒ“ƒhƒ‰‚̐擪‚ōs‚¤‚ׂ«
    1408 ˆ—‚ðs‚¤ŠÖ”D‚±‚±‚ōs‚¤‚ׂ«ˆ—‚Æ‚µ‚ẮCŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ªƒGƒbƒWƒg
    1409 ƒŠƒK‚Å‚ ‚éê‡‚̃gƒŠƒK‚³‚ꂽŠ„ž‚Ý—v‹‚̃NƒŠƒA‚ª‹“‚°‚ç‚ê‚éD
    1410 
    1411 intno‚ɑ΂µ‚Ä“o˜^‚³‚ꂽŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚·Š„ž‚݃nƒ“ƒhƒ‰‚Ì
    1412 æ“ª‚ŌĂяo‚³‚ê‚éD‚»‚Ì‚½‚ß‚±‚̊֐”‚́CŠ„ž‚݃nƒ“ƒhƒ‰‚̐擪i’ʏí‚Í
    1413 CPUƒƒbƒN‰ðœó‘ԁj‚ŌĂяo‚¹‚é‚悤‚ÉŽÀ‘•‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
     1357intnoで指定された割込み要求ラインに対する割込みハンドラの先頭で行うべき
     1358処理を行う関数.ここで行うべき処理としては,割込み要求ラインがエッジト
     1359リガである場合のトリガされた割込み要求のクリアが挙げられる.
     1360
     1361intnoに対して登録された割込みサービスルーチンを呼び出す割込みハンドラの
     1362先頭で呼び出される.そのためこの関数は,割込みハンドラの先頭(通常は
     1363CPUロック解除状態)で呼び出せるように実装しなければならない.
    14141364
    14151365(6-4-5-2) void i_end_int(INTNO intno)
    14161366
    1417 intno‚ÅŽw’肳‚ꂽŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ɑ΂·‚銄ž‚݃nƒ“ƒhƒ‰‚Ì––”ö‚ōs‚¤‚ׂ«
    1418 ˆ—‚ðs‚¤ŠÖ”D‚±‚±‚ōs‚¤‚ׂ«ˆ—‚Æ‚µ‚ẮCŠ„ž‚݃Rƒ“ƒgƒ[ƒ‰iIRCj‚É
    1419 ‘΂·‚銄ž‚ݏˆ—‚̏I—¹‚ð’Ê’m‚ª‹“‚°‚ç‚ê‚éD
    1420 
    1421 intno‚ɑ΂µ‚Ä“o˜^‚³‚ꂽŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚·Š„ž‚݃nƒ“ƒhƒ‰‚Ì
    1422 ––”ö‚ŌĂяo‚³‚ê‚éD‚»‚Ì‚½‚ß‚±‚̊֐”‚́CŠ„ž‚݃nƒ“ƒhƒ‰‚Ì––”öi’ʏí‚Í
    1423 CPUƒƒbƒN‰ðœó‘ԁj‚ŌĂяo‚¹‚é‚悤‚ÉŽÀ‘•‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    1424 
    1425 6.5 ƒ^ƒXƒNƒfƒBƒXƒpƒbƒ`ƒƒ
    1426 
    1427 
    1428 6.5.1 ƒfƒBƒXƒpƒbƒ`ƒƒ‚Ì“®ìŠJŽn
     1367intnoで指定された割込み要求ラインに対する割込みハンドラの末尾で行うべき
     1368処理を行う関数.ここで行うべき処理としては,割込みコントローラ(IRC)に
     1369対する割込み処理の終了を通知が挙げられる.
     1370
     1371intnoに対して登録された割込みサービスルーチンを呼び出す割込みハンドラの
     1372末尾で呼び出される.そのためこの関数は,割込みハンドラの末尾(通常は
     1373CPUロック解除状態)で呼び出せるように実装しなければならない.
     1374
     13756.5 タスクディスパッチャ
     1376
     1377
     13786.5.1 ディスパッチャの動作開始
    14291379
    14301380(6-5-1-1) void start_dispatch(void)
    14311381
    1432 ƒfƒBƒXƒpƒbƒ`ƒƒ‚Ì“®ìŠJŽnistart_dispatchj‚́CƒJ[ƒlƒ‹‹N“®Žž‚ɁCƒJ[ƒl
    1433 ƒ‹‚̏‰Šú‰»ˆ—‚©‚çŒÄ‚яo‚³‚ê‚éDstart_dispatch‚́CƒŠƒ^[ƒ“‚·‚邱‚Æ‚Ì‚È
    1434 ‚¢ŠÖ”‚Å‚ ‚éD
    1435 
    1436 start_dispatch‚́C”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ŁCNMI‚ðœ‚­‚·‚ׂĂ̊„ž‚Ý‚ðƒ}ƒX
    1437 ƒN‚µ‚½ó‘ԁi‘SŠ„ž‚݃ƒbƒNó‘Ô‚Æ“¯“™‚̏ó‘ԁj‚ŌĂяo‚³‚ê‚éDstart_dispatch
    1438 “à‚ŁCƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦CCPUƒƒbƒNó‘ԁEŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S
    1439 ‰ðœó‘Ô‚É‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    1440 
    1441 ƒRƒ“ƒeƒLƒXƒg‚ðØ‚è‘Ö‚¦‚½Œã‚̓^[ƒQƒbƒg”ñˆË‘¶•”ŠÖ”dispatcher‚ðŒÄ‚яo‚·D
    1442 
    1443 start_dispatch‚̏ˆ—“à—e‚ÍŽŸ‚Ì’Ê‚èDdispatcher‚©‚珈—‚ª•Ô‚邱‚Ƃ͍l—Ê‚·‚é•K—v‚Í
    1444 ‚È‚¢D
     1382ディスパッチャの動作開始(start_dispatch)は,カーネル起動時に,カーネ
     1383ルの初期化処理から呼び出される.start_dispatchは,リターンすることのな
     1384い関数である.
     1385
     1386start_dispatchは,非タスクコンテキストで,NMIを除くすべての割込みをマス
     1387クした状態(全割込みロック状態と同等の状態)で呼び出される.start_dispatch
     1388内で,タスクコンテキストに切り換え,CPUロック状態・割込み優先度マスク全
     1389解除状態にしなければならない.
     1390
     1391コンテキストを切り替えた後はターゲット非依存部関数dispatcherを呼び出す.
     1392
     1393start_dispatchの処理内容は次の通り.dispatcherから処理が返ることは考量する必要は
     1394ない.
    14451395
    14461396----------------------------------------
     
    14481398start_dispatch(void)
    14491399{
    1450         ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦‚é
    1451         CPUƒƒbƒNó‘ԁEŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚É‚·‚é
    1452         dispatcher‚É•ªŠò‚·‚é
     1400        タスクコンテキストに切り換える
     1401        CPUロック状態・割込み優先度マスク全解除状態にする
     1402        dispatcherに分岐する
    14531403}
    14541404----------------------------------------
    14551405
    1456 6.6 Š„ž‚݃nƒ“ƒhƒ‰
    1457 
    1458 6.6.1 Š„ž‚݃nƒ“ƒhƒ‰‚̏o“üŒûˆ—
    1459 
    1460 ƒJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚݂̏o“üŒûˆ—‚Ì•û–@‚́CƒvƒƒZƒbƒT‚É‚æ‚Á‚Ä‘å‚«‚­ˆÙ‚È
    1461 ‚邪C‚¨‚¨‚æ‚»‚̏ˆ—“à—e‚ÍŽŸ‚Ì’Ê‚èD
     14066.6 割込みハンドラ
     1407
     14086.6.1 割込みハンドラの出入口処理
     1409
     1410カーネル管理の割込みの出入口処理の方法は,プロセッサによって大きく異な
     1411るが,おおよその処理内容は次の通り.
    14621412
    14631413----------------------------------------
    14641414void
    1465 <Š„ž‚݂̏o“üŒûˆ—>(void)
     1415<割込みの出入口処理>(void)
    14661416{
    1467         ­‚È‚­‚Æ‚àƒJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚Ý‚ð‹ÖŽ~‚µ‚½ó‘Ô‚É‚·‚é c (*f)
    1468         ƒXƒNƒ‰ƒbƒ`ƒŒƒWƒXƒ^‚ðƒXƒ^ƒbƒN‚É•Û‘¶‚·‚é
    1469         if (ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÅŠ„ž‚Ý”­¶) {
    1470                 ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦‚é
     1417        少なくともカーネル管理の割込みを禁止した状態にする … (*f)
     1418        スクラッチレジスタをスタックに保存する
     1419        if (タスクコンテキストで割込み発生) {
     1420                非タスクコンテキストに切り換える
    14711421        }
    14721422
    1473         ‚±‚ÌŠ„ž‚Ý‚æ‚è‚à—Dæ“x‚̍‚‚¢Š„ž‚Ý‚Ì‚Ý‚ðŽó‚¯•t‚¯‚ç‚ê‚é‚悤‚É‚µ‚āC
    1474                                                                                                 CPUƒƒbƒN‰ðœó‘Ô‚É‚·‚é
     1423        この割込みよりも優先度の高い割込みのみを受け付けられるようにして,
     1424                                                                                                CPUロック解除状態にする
    14751425#ifdef LOG_INH_ENTER
    1476         log_inh_enter(Š„ž‚݃nƒ“ƒhƒ‰”ԍ†);
     1426        log_inh_enter(割込みハンドラ番号);
    14771427#endif /* LOG_INH_ENTER */
    1478         Š„ž‚݃nƒ“ƒhƒ‰‚ðŒÄ‚яo‚·
     1428        割込みハンドラを呼び出す
    14791429#ifdef LOG_INH_LEAVE
    1480         log_inh_leave(Š„ž‚݃nƒ“ƒhƒ‰”ԍ†);
     1430        log_inh_leave(割込みハンドラ番号);
    14811431#endif /* LOG_INH_LEAVE */
    14821432
    14831433  ret_int:
    1484         if (ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÅŠ„ž‚Ý”­¶) {
    1485                 i­‚È‚­‚Æ‚àjƒJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚Ý‚ð‹ÖŽ~‚µ‚½ó‘Ô‚É‚·‚é c (*d)
     1434        if (タスクコンテキストで割込み発生) {
     1435                (少なくとも)カーネル管理の割込みを禁止した状態にする … (*d)
    14861436                if (reqflg) {
    14871437                        reqflg = false;
    1488                         CPUƒƒbƒNó‘Ô‚É‚·‚é c (*e)
    1489                         search_schedtsk‚ðŒÄ‚яo‚µCÅ‚—Dæ‡ˆÊƒ^ƒXƒN‚ð‹‚ß‚é
    1490                         Å‚—Dæ‡ˆÊ‚̃^ƒXƒNID‚ðˆø”‚É‚µ‚Ärun_task‚É•ªŠò‚·‚é
     1438                        CPUロック状態にする … (*e)
     1439                        search_schedtskを呼び出し,最高優先順位タスクを求める
     1440                        最高優先順位のタスクIDを引数にしてrun_taskに分岐する
    14911441                }
    14921442        }
    1493         Š„ž‚ݏˆ—‚©‚ç‚̃Šƒ^[ƒ“Œã‚ɁCCPUƒƒbƒN‰ðœó‘Ô‚É–ß‚é‚悤‚ɏ€”õ‚·‚é
    1494         ƒXƒNƒ‰ƒbƒ`ƒŒƒWƒXƒ^‚ðƒXƒ^ƒbƒN‚©‚ç•œ‹A‚·‚é
    1495         Š„ž‚ݏˆ—‚©‚ç‚̃Šƒ^[ƒ“
     1443        割込み処理からのリターン後に,CPUロック解除状態に戻るように準備する
     1444        スクラッチレジスタをスタックから復帰する
     1445        割込み処理からのリターン
    14961446}
    14971447----------------------------------------
    14981448
    1499 Š„ž‚Ý‚ÌŽó•t‚¯‚É‚æ‚è‚·‚ׂĂ̊„ž‚Ý‚ª‹ÖŽ~‚³‚ê‚È‚¢ƒvƒƒZƒbƒT‚ł́C(*f)‚É
    1500 ‚¨‚¢‚āC­‚È‚­‚Æ‚àƒJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚Ý‚ð‹ÖŽ~‚·‚éD‚±‚Ì——R‚ÍŽŸ‚Ì’Ê‚è‚Å
    1501 ‚ ‚éD
    1502 
    1503 Š„ž‚Ý‚Ì“üŒûˆ—‚É‚¨‚¢‚āCƒXƒ^ƒbƒN‚ð”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN‚É
    1504 Ø‚芷‚¦‚é‘O‚É‘½dŠ„ž‚Ý‚ª”­¶‚·‚é‚ƁCƒ^ƒXƒN‚̃Xƒ^ƒbƒN—̈悪Žg—p‚³‚ê‚éD
    1505 ã‹L‚̂悤‚ȃvƒƒZƒbƒT‚ł́CƒXƒ^ƒbƒN‚̐؊·‚¦‘O‚ɁCÅ‘å‚ÅŠ„ž‚Ý—Dæ“x‚Ì
    1506 ’i”•ª‚Ì‘½dŠ„ž‚Ý‚ª”­¶‚·‚邱‚Æ‚ð–h‚®‚±‚Æ‚Í‚Å‚«‚¸CŠeƒ^ƒXƒN‚̃Xƒ^ƒbƒN
    1507 —̈æ‚ðŠm•Û‚·‚éÛ‚ɁC‚»‚Ì•ª‚ðŒ©ž‚ñ‚ÅŠm•Û‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢DŠeƒ^ƒXƒN‚Ì
    1508 ƒXƒ^ƒbƒN—̈æ‚ð‚È‚é‚ׂ­¬‚³‚­‚·‚邽‚߂ɂ́CƒXƒ^ƒbƒN‚ð‚È‚é‚ׂ­Žg—p‚µ‚È‚¢
    1509 “à‚ɁC‘½dŠ„ž‚Ý‚ð‹ÖŽ~‚·‚é‚Ì‚ª–]‚Ü‚µ‚¢D‚»‚Ì‚½‚߁CƒXƒNƒ‰ƒbƒ`ƒŒƒWƒXƒ^‚ð
    1510 ƒXƒ^ƒbƒN‚É•Û‘¶‚·‚é‘O‚ɁCŠ„ž‚Ý‚ð‹ÖŽ~‚·‚éD‚½‚¾‚µCŠ„ž‚Ý‚Ì‹ÖŽ~ˆ—‚É•K
    1511 —v‚ȍŒáŒÀ‚̃ŒƒWƒXƒ^‚ɂ‚¢‚ẮCŠ„ž‚Ý‚Ì‹ÖŽ~‚ɐ旧‚Á‚ăXƒ^ƒbƒN‚É•Û‘¶‚·
    1512 ‚é•K—v‚ª‚ ‚éD
    1513 
    1514 “¯—l‚Ì‚±‚Ƃ́CƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚É‚à“–‚Ä‚Í‚Ü‚éD‚·‚È‚í‚¿CƒJ[ƒlƒ‹
    1515 ŠÇ—ŠO‚ÌŠ„ž‚݂ɂ‚¢‚Ä‚àCƒXƒ^ƒbƒN‚ð‚È‚é‚ׂ­Žg—p‚µ‚È‚¢“à‚É‹ÖŽ~‚·‚é‚Ì‚ª
    1516 –]‚Ü‚µ‚¢D‚±‚Ì‚±‚Æ‚©‚çCƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ðŽg—p‚·‚éê‡‚ɂ́C(*f)
    1517 ‚É‚¨‚¢‚āC‚·‚ׂĂ̊„ž‚Ý‚ð‹ÖŽ~‚µ‚½ó‘Ô‚É‚·‚é‚Ì‚ª–]‚Ü‚µ‚¢‚±‚Æ‚É‚È‚éD‚Ü
    1518 ‚½CƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚ݏˆ—‚É‚¨‚¢‚Ä‚àC”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒb
    1519 ƒN‚ɐ؂芷‚¦‚邱‚Æ‚ª–]‚Ü‚µ‚¢‚ªC‚±‚ê‚̓J[ƒlƒ‹‚ÌŠÇŠŠO‚Å‚ ‚éD
    1520 
    1521 (*d)‚É‚¨‚¢‚ẮCƒJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚Ý‚ð‹ÖŽ~‚·‚邾‚¯‚ŁCCPUƒƒbƒNó‘Ô‚É‚·
    1522 ‚é•K—v‚Í‚È‚¢D—Ⴆ‚΁CCPUƒƒbƒNó‘Ô‚Å‚ ‚邱‚Æ‚ðŽ¦‚·•Ï”‚ð—pˆÓ‚µ‚Ä‚¢‚éê
    1523 ‡‚ɂ́C(*d)‚ÌŽž“_‚Å‚Í‚»‚̕ϐ”‚ðCPUƒƒbƒNó‘Ô‚ðŽ¦‚·’l‚ɕύX‚·‚é•K—v‚Í‚È
    1524 ‚­C(*e)‚É‚¨‚¢‚ĕύX‚·‚ê‚΂悢D
    1525 
    1526 Š„ž‚݂̏o“üŒûˆ—‚ðƒAƒZƒ“ƒuƒŠŒ¾Œê‚Å‹Lq‚·‚éê‡‚ɂ́CƒgƒŒ[ƒXƒƒOŽæ“¾
    1527 ˆ—‚́Cu6.2 ƒgƒŒ[ƒXƒƒO‹@”\‚ւ̑Ήžv‚̐߂ŋLq‚µ‚½•û–@‚ŃR[ƒfƒBƒ“
    1528 ƒO‚·‚邱‚ƁD
    1529 
    1530 6.6.2 Š„ž‚݃nƒ“ƒhƒ‰–ˆ‚̏o“üŒûˆ—‚̐¶¬
    1531 
    1532 Š„ž‚݃xƒNƒgƒ‹‚ðƒn[ƒhƒEƒFƒA‚ÅŽÀŒ»‚µ‚Ä‚¢‚éê‡‚ȂǁCŠ„ž‚݃nƒ“ƒhƒ‰–ˆ‚É
    1533 o“üŒûˆ—‚ð—pˆÓ‚µ‚½•û‚ªŒø—¦‚ª—Ç‚¢ƒ^[ƒQƒbƒg‚Ì‚½‚߂ɁCŠ„ž‚݃nƒ“ƒhƒ‰–ˆ
    1534 ‚ɏo“üŒûˆ—‚𐶐¬‚·‚é‹@\‚ð—pˆÓ‚µ‚Ä‚¢‚éD
    1535 
    1536 ˆÈ‰º‚̃}ƒNƒ‚́C•W€‚ÌŠ„ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ð—p‚¢‚½ê‡‚̂݁Cƒ^[
    1537 ƒQƒbƒg”ñˆË‘¶•”‚ÅŽg‚í‚ê‚éDŠ„ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ðƒ^[ƒQƒbƒgˆË‘¶•”
    1538 ‚Å—pˆÓ‚µC‚»‚Ì’†‚Å‚±‚ê‚ç‚̃}ƒNƒ‚ðŽg‚í‚È‚¢ê‡‚ɂ́C‚±‚ê‚ç‚̃}ƒNƒ‚ð—p
    1539 ˆÓ‚·‚é•K—v‚Í‚È‚¢D
     1449割込みの受付けによりすべての割込みが禁止されないプロセッサでは,(*f)に
     1450おいて,少なくともカーネル管理の割込みを禁止する.この理由は次の通りで
     1451ある.
     1452
     1453割込みの入口処理において,スタックを非タスクコンテキスト用のスタックに
     1454切り換える前に多重割込みが発生すると,タスクのスタック領域が使用される.
     1455上記のようなプロセッサでは,スタックの切換え前に,最大で割込み優先度の
     1456段数分の多重割込みが発生することを防ぐことはできず,各タスクのスタック
     1457領域を確保する際に,その分を見込んで確保しなければならない.各タスクの
     1458スタック領域をなるべく小さくするためには,スタックをなるべく使用しない
     1459内に,多重割込みを禁止するのが望ましい.そのため,スクラッチレジスタを
     1460スタックに保存する前に,割込みを禁止する.ただし,割込みの禁止処理に必
     1461要な最低限のレジスタについては,割込みの禁止に先立ってスタックに保存す
     1462る必要がある.
     1463
     1464同様のことは,カーネル管理外の割込みにも当てはまる.すなわち,カーネル
     1465管理外の割込みについても,スタックをなるべく使用しない内に禁止するのが
     1466望ましい.このことから,カーネル管理外の割込みを使用する場合には,(*f)
     1467において,すべての割込みを禁止した状態にするのが望ましいことになる.ま
     1468た,カーネル管理外の割込み処理においても,非タスクコンテキスト用のスタッ
     1469クに切り換えることが望ましいが,これはカーネルの管轄外である.
     1470
     1471(*d)においては,カーネル管理の割込みを禁止するだけで,CPUロック状態にす
     1472る必要はない.例えば,CPUロック状態であることを示す変数を用意している場
     1473合には,(*d)の時点ではその変数をCPUロック状態を示す値に変更する必要はな
     1474く,(*e)において変更すればよい.
     1475
     1476割込みの出入口処理をアセンブリ言語で記述する場合には,トレースログ取得
     1477処理は,「6.2 トレースログ機能への対応」の節で記述した方法でコーディン
     1478グすること.
     1479
     14806.6.2 割込みハンドラ毎の出入口処理の生成
     1481
     1482割込みベクトルをハードウェアで実現している場合など,割込みハンドラ毎に
     1483出入口処理を用意した方が効率が良いターゲットのために,割込みハンドラ毎
     1484に出入口処理を生成する機構を用意している.
     1485
     1486以下のマクロは,標準の割込み管理機能の初期化処理を用いた場合のみ,ター
     1487ゲット非依存部で使われる.割込み管理機能の初期化処理をターゲット依存部
     1488で用意し,その中でこれらのマクロを使わない場合には,これらのマクロを用
     1489意する必要はない.
    15401490
    15411491(6-6-2-1) INT_ENTRY(inhno, inthdr)
    15421492
    1543 Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚ªinhnoCŠ„ž‚݃nƒ“ƒhƒ‰‚̊֐”–¼‚ªinthdr‚Å‚ ‚銄ž‚݃n
    1544 ƒ“ƒhƒ‰‚̏o“üŒûˆ—‚̃‰ƒxƒ‹‚ðì‚éƒ}ƒNƒDINTHDR_ENTRY‚ð—p‚¢‚ÄŠ„ž‚݃nƒ“
    1545 ƒhƒ‰–ˆ‚ɏo“üŒûˆ—‚𐶐¬‚·‚éê‡‚ɂ́CŽŸ‚̂悤‚É’è‹`‚·‚éD
     1493割込みハンドラ番号がinhno,割込みハンドラの関数名がinthdrである割込みハ
     1494ンドラの出入口処理のラベルを作るマクロ.INTHDR_ENTRYを用いて割込みハン
     1495ドラ毎に出入口処理を生成する場合には,次のように定義する.
    15461496
    15471497#define INT_ENTRY(inhno, inthdr)        _kernel_##inthdr##_##inhno
    15481498
    1549 Š„ž‚݃nƒ“ƒhƒ‰–ˆ‚ɏo“üŒûˆ—‚ðì‚é•K—v‚ª‚È‚¢ê‡‚ɂ́CŽŸ‚̂悤‚É’è‹`‚µ
    1550 ‚āCŠ„ž‚݃nƒ“ƒhƒ‰‚̊֐”–¼‚ð‚»‚Ì‚Ü‚Ü•Ô‚·D
     1499割込みハンドラ毎に出入口処理を作る必要がない場合には,次のように定義し
     1500て,割込みハンドラの関数名をそのまま返す.
    15511501
    15521502#define INT_ENTRY(inhno, inthdr)        inthdr
     
    15541504(6-6-2-2) INTHDR_ENTRY(inhno, inhno_num, inthdr)
    15551505
    1556 Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚ªinhnoCŠ„ž‚݃nƒ“ƒhƒ‰‚̊֐”–¼‚ªinthdr‚Å‚ ‚銄ž‚݃n
    1557 ƒ“ƒhƒ‰‚̏o“üŒûˆ—‚𐶐¬‚·‚éƒ}ƒNƒDinhno_num‚ɂ́CƒAƒZƒ“ƒuƒŠŒ¾Œê‹Lq—p
    1558 ‚ɁCŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚ª”’l‚Å“n‚³‚ê‚éDŠ„ž‚݃nƒ“ƒhƒ‰–ˆ‚ɏo“üŒûˆ—‚ð
    1559 ì‚é•K—v‚ª‚È‚¢ê‡‚ɂ́C‹ó‚É’è‹`‚·‚éD
    1560 
    1561 6.6.3 Š„ž‚݃nƒ“ƒhƒ‰‚̐ݒè
    1562 
    1563 (6-6-3-1) bool_t VALID_INHNO_DEFINH(INHNO inhno)iƒIƒvƒVƒ‡ƒ“j
    1564 
    1565 inhno‚ªCDEF_INH‚ɑ΂·‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†‚Æ‚µ‚Ä—LŒø‚È’l‚Å‚ ‚éê‡‚É
    1566 trueC‚»‚¤‚Å‚È‚¢ê‡‚Éfalse‚ð•Ô‚·ƒ}ƒNƒD
    1567 
    1568 SSPƒJ[ƒlƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚ł́C‚±‚̃}ƒNƒ‚ÍŽg‚í‚ê‚Ä‚¢‚È‚¢‚½‚߁Cƒ^[
    1569 ƒQƒbƒgˆË‘¶•”‚ÅŽg‚í‚È‚¢‚È‚çC—pˆÓ‚·‚é•K—v‚ª‚È‚¢D
     1506割込みハンドラ番号がinhno,割込みハンドラの関数名がinthdrである割込みハ
     1507ンドラの出入口処理を生成するマクロ.inhno_numには,アセンブリ言語記述用
     1508に,割込みハンドラ番号が数値で渡される.割込みハンドラ毎に出入口処理を
     1509作る必要がない場合には,空に定義する.
     1510
     15116.6.3 割込みハンドラの設定
     1512
     1513(6-6-3-1) bool_t VALID_INHNO_DEFINH(INHNO inhno)(オプション)
     1514
     1515inhnoが,DEF_INHに対する割込みハンドラ番号として有効な値である場合に
     1516true,そうでない場合にfalseを返すマクロ.
     1517
     1518SSPカーネルのターゲット非依存部では,このマクロは使われていないため,ター
     1519ゲット依存部で使わないなら,用意する必要がない.
    15701520
    15711521(6-6-3-2) void x_define_inh(INHNO inhno, FP int_entry)
    15721522
    1573 inhno‚ÅŽw’肳‚ꂽŠ„ž‚݃nƒ“ƒhƒ‰‚̏o“üŒûˆ—‚̔Ԓn‚ðint_entry‚ɐݒ肷‚éD
    1574 
    1575 ‚±‚̊֐”‚́C•W€‚ÌŠ„ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ð—p‚¢‚½ê‡‚̂݁Cƒ^[ƒQƒb
    1576 ƒg”ñˆË‘¶•”‚©‚çŒÄ‚яo‚³‚ê‚éDŠ„ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ðƒ^[ƒQƒbƒgˆË‘¶
    1577 •”‚Å—pˆÓ‚µC‚»‚Ì’†‚Å‚±‚̊֐”‚ðŒÄ‚яo‚³‚È‚¢ê‡‚ɂ́C‚±‚̊֐”‚ð—pˆÓ‚·‚é
    1578 •K—v‚Í‚È‚¢D
    1579 
    1580 ‚±‚̊֐”‚́Cƒ^[ƒQƒbƒg”ñˆË‘¶•”‚̃J[ƒlƒ‹‰Šú‰»ˆ—‚©‚çŒÄ‚яo‚³‚ê‚邽‚߁C
    1581 ƒJ[ƒlƒ‹‚̏‰Šú‰»ˆ—iNMI‚ðœ‚­‚·‚ׂĂ̊„ž‚Ý‚ªƒ}ƒXƒN‚³‚ê‚Ä‚¢‚éj‚©‚çŒÄ
    1582 ‚яo‚¹‚é‚悤‚ÉŽÀ‘•‚·‚ê‚΂悢D
    1583 
    1584 Žw’肳‚ꂽŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚ªDEF_INH‚ɑ΂·‚é‚à‚Ì‚Æ‚µ‚Ä—LŒø‚È’l‚Å‚È‚¢ê
    1585 ‡‚Ì“®ì‚͕ۏ؂·‚é•K—v‚ª‚È‚¢iassert‚ŃGƒ‰[‚Æ‚·‚é‚Ì‚ª–]‚Ü‚µ‚¢jD‚±‚ê
    1586 ‚́CƒRƒ“ƒtƒBƒMƒ
    1587 ƒŒ[ƒ^‚ªCƒpƒX2‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”
    1588 ‚Å’è‹`‚·‚éINHNO_DEFINH_VALID‚ð—p‚¢‚ăGƒ‰[‚ðŒŸo‚·‚邽‚ß‚Å‚ ‚éD
    1589 
    1590 6.6.4 Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚Ì‘®«‚̐ݒè
    1591 
    1592 (6-6-4-1) bool_t VALID_INTNO_CFGINT(INTNO intno)iƒIƒvƒVƒ‡ƒ“j
    1593 
    1594 intno‚ªCCFG_INT‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Ä—LŒø‚È’l‚Å‚ ‚éê‡‚ÉtrueC‚»‚¤
    1595 ‚Å‚È‚¢ê‡‚Éfalse‚ð•Ô‚·ƒ}ƒNƒDŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚Ì‘®«‚ðÝ’è‚Å‚«‚È‚¢
    1596 intno‚ɑ΂µ‚ẮC‚±‚̃}ƒNƒ‚ªfalse‚ð•Ô‚·‚悤‚É‚·‚éD
    1597 
    1598 SSPƒJ[ƒlƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚ł́C‚±‚̃}ƒNƒ‚ÍŽg‚í‚ê‚Ä‚¢‚È‚¢‚½‚߁Cƒ^[
    1599 ƒQƒbƒgˆË‘¶•”‚ÅŽg‚í‚È‚¢‚È‚çC—pˆÓ‚·‚é•K—v‚ª‚È‚¢D
     1523inhnoで指定された割込みハンドラの出入口処理の番地をint_entryに設定する.
     1524
     1525この関数は,標準の割込み管理機能の初期化処理を用いた場合のみ,ターゲッ
     1526ト非依存部から呼び出される.割込み管理機能の初期化処理をターゲット依存
     1527部で用意し,その中でこの関数を呼び出さない場合には,この関数を用意する
     1528必要はない.
     1529
     1530この関数は,ターゲット非依存部のカーネル初期化処理から呼び出されるため,
     1531カーネルの初期化処理(NMIを除くすべての割込みがマスクされている)から呼
     1532び出せるように実装すればよい.
     1533
     1534指定された割込みハンドラ番号がDEF_INHに対するものとして有効な値でない場
     1535合の動作は保証する必要がない(assertでエラーとするのが望ましい).これ
     1536は,コンフィギュレータが,パス2のテンプレートファイルのターゲット依存部
     1537で定義するINHNO_DEFINH_VALIDを用いてエラーを検出するためである.
     1538
     15396.6.4 割込み要求ラインの属性の設定
     1540
     1541(6-6-4-1) bool_t VALID_INTNO_CFGINT(INTNO intno)(オプション)
     1542
     1543intnoが,CFG_INTに対する割込み番号として有効な値である場合にtrue,そう
     1544でない場合にfalseを返すマクロ.割込み要求ラインの属性を設定できない
     1545intnoに対しては,このマクロがfalseを返すようにする.
     1546
     1547SSPカーネルのターゲット非依存部では,このマクロは使われていないため,ター
     1548ゲット依存部で使わないなら,用意する必要がない.
    16001549
    16011550(6-6-4-2) void x_config_int(INTNO intno, ATR intatr, PRI intpri)
    16021551
    1603 intno‚ÅŽw’肳‚ꂽŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ÌŠ„ž‚Ý‘®«‚ðCintatr‚ÅŽw’肳‚ꂽ’Ê‚è
    1604 ‚ɐݒ肷‚éD‚Ü‚½CŠ„ž‚Ý—Dæ“x‚ðCintpri‚ÅŽw’肳‚ꂽ’l‚ɐݒ肷‚éD
    1605 
    1606 ‚±‚̊֐”‚́C•W€‚ÌŠ„ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ð—p‚¢‚½ê‡‚̂݁Cƒ^[ƒQƒb
    1607 ƒg”ñˆË‘¶•”‚©‚çŒÄ‚яo‚³‚ê‚éDŠ„ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ðƒ^[ƒQƒbƒgˆË‘¶
    1608 •”‚Å—pˆÓ‚µC‚»‚Ì’†‚Å‚±‚̊֐”‚ðŒÄ‚яo‚³‚È‚¢ê‡‚ɂ́C‚±‚̊֐”‚ð—pˆÓ‚·‚é
    1609 •K—v‚Í‚È‚¢D
    1610 
    1611 ‚±‚̊֐”‚́Cƒ^[ƒQƒbƒg”ñˆË‘¶•”‚̃J[ƒlƒ‹‰Šú‰»ˆ—‚©‚çŒÄ‚яo‚³‚ê‚邽‚߁C
    1612 ƒJ[ƒlƒ‹‚̏‰Šú‰»ˆ—iNMI‚ðœ‚­‚·‚ׂĂ̊„ž‚Ý‚ªƒ}ƒXƒN‚³‚ê‚Ä‚¢‚éj‚©‚çŒÄ
    1613 ‚яo‚¹‚é‚悤‚ÉŽÀ‘•‚·‚ê‚΂悢D
    1614 
    1615 intatr‚Æ‚µ‚Đݒè‚Å‚«‚銄ž‚Ý‘®«‚ÍŽŸ‚Ì’Ê‚èD
    1616 
    1617         TA_ENAINT               0x01    Š„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚ðƒNƒŠƒA
    1618         TA_EDGE                 0x02    ƒGƒbƒWƒgƒŠƒK
    1619 
    1620 ‚±‚Ì‘¼‚ɁCƒ^[ƒQƒbƒg’è‹`‚ÅŠ„ž‚Ý‘®«‚ð’ljÁ‚µ‚Ä‚à‚æ‚¢Dƒ^[ƒQƒbƒg’è‹`‚Å
    1621 ’ljÁ‚·‚邽‚߂ɁCˆÈ‰º‚Ì‘®«–¼‚ª—\–ñ‚³‚ê‚Ä‚¢‚éD
    1622 
    1623         TA_POSEDGE                              ƒ|ƒWƒeƒBƒuƒGƒbƒWƒgƒŠƒK
    1624         TA_NEGEDGE                              ƒlƒKƒeƒBƒuƒGƒbƒWƒgƒŠƒK
    1625         TA_BOTHEDGE                             —¼ƒGƒbƒWƒgƒŠƒK
    1626         TA_LOWLEVEL                             ƒ[ƒŒƒxƒ‹ƒgƒŠƒK
    1627         TA_HIGHLEVEL                    ƒnƒCƒŒƒxƒ‹ƒgƒŠƒK
    1628 
    1629 ‚±‚ê‚ç‚Ì‘®«–¼‚ðƒ^[ƒQƒbƒg’è‹`‚ŒljÁ‚·‚éê‡‚ɂ́C‚»‚Ì‘®«’l‚ðŒˆ’è‚µC
    1630 ’è‹`‚ðtarget_kernel.hi‚Ü‚½‚́C‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹j‚ÉŠÜ
    1631 ‚ß‚éD‚Ü‚½CƒRƒ“ƒtƒBƒMƒ
    1632 ƒŒ[ƒ^ƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚©‚çŽQÆ‚Å‚«‚é‚悤‚ɁC
    1633 target_def.csvi‚Ü‚½‚́C‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹j‚Ɋ܂߁CƒR
    1634 ƒ“ƒtƒBƒMƒ
    1635 ƒŒ[ƒ^ƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚ŃGƒ‰[‚Æ‚È‚ç
    1636 ‚È‚¢‚悤‚ɁCtarget.tfi‚Ü‚½‚́C‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹j‚Å
    1637 TARGET_INTATR‚ɐݒ肷‚éD
    1638 
    1639 Žw’肳‚ꂽŠ„ž‚ݔԍ†‚ªCFG_INT‚ɑ΂·‚é‚à‚Ì‚Æ‚µ‚Ä—LŒø‚È’l‚Å‚È‚¢ê‡‚âC‚»
    1640 ‚ÌŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ɑ΂µ‚Đݒè‚Å‚«‚È‚¢‘®«‚ðŽw’肵‚½ê‡CÝ’è‚Å‚«‚È‚¢
    1641 Š„ž‚Ý—Dæ“x‚ðŽw’肵‚½ê‡‚Ì“®ì‚͕ۏ؂·‚é•K—v‚ª‚È‚¢iassert‚ŃGƒ‰[‚Æ
    1642 ‚·‚é‚Ì‚ª–]‚Ü‚µ‚¢jD‚±‚̂悤‚ȃP[ƒX‚́CƒRƒ“ƒtƒBƒMƒ
    1643 ƒŒ[ƒ^‚ŃGƒ‰[‚ðŒŸ
    1644 o‚·‚ׂ«‚Å‚ ‚éDƒRƒ“ƒtƒBƒMƒ
    1645 ƒŒ[ƒ^ƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒg”ñˆË
    1646 ‘¶•”‚́CƒpƒX2‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”‚Å’è‹`‚·‚é
    1647 INTNO_CFGINT_VALIDCTARGET_INTATRCINTPRI_CFGINT_VALID‚ð—p‚¢‚ăGƒ‰[‚ð
    1648 ŒŸo‚·‚邪C•W€‚ÌŠ„ž‚Ý‘®«iTA_ENAINTCTA_EDGEj‚ªÝ’è‚Å‚«‚È‚¢ê‡‚âC
    1649 Ý’è‚Å‚«‚È‚¢‘®«‚⊄ž‚Ý—Dæ“x‚ªŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚É‚æ‚Á‚ĈقȂéê‡‚ɂ́C
    1650 ƒRƒ“ƒtƒBƒMƒ
    1651 ƒŒ[ƒ^ƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”‚ÅŒŸo‚µ‚È‚¯‚ê
    1652 ‚΂Ȃç‚È‚¢D
    1653 
    1654 6.6.5 Š„ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚̕ύX
    1655 
    1656 (6-6-5-1) OMIT_INITIALIZE_INTERRUPTiƒIƒvƒVƒ‡ƒ“j
    1657 
    1658 Š„ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ðƒ^[ƒQƒbƒgˆË‘¶•”‚Å—pˆÓ‚µCƒ^[ƒQƒbƒg”ñˆË‘¶
    1659 •”‚ÉŠÜ‚Ü‚ê‚é•W€‚ÌŠ„ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ð—p‚¢‚È‚¢ê‡‚ɂ́C‚±‚̃V
    1660 ƒ“ƒ{ƒ‹‚ðƒ}ƒNƒ’è‹`‚·‚éD
    1661 
    1662 ‚±‚̃Vƒ“ƒ{ƒ‹‚ðƒ}ƒNƒ’è‹`‚·‚é‚ƁCINHINIBCINTINIBCinitialize_interrupt
    1663 ‚Ì’è‹`‚ªCƒJ[ƒlƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚©‚çŽæ‚菜‚©‚ê‚éD‚Ü‚½C
    1664 TNUM_INHNOCtnum_inhnoCinhinib_tableCTNUM_INTNOCtnum_intnoC
    1665 intinib_table‚Ì’è‹`‚ƁCŠ„ž‚݃nƒ“ƒhƒ‰–ˆ‚̏o“üŒûˆ—‚𐶐¬‚·‚邽‚ß‚Ì‹Lq
    1666 iINTHDR_ENTRYƒ}ƒNƒ‚̃ŠƒXƒgj‚ªCƒRƒ“ƒtƒBƒMƒ
    1667 ƒŒ[ƒ^‚̃pƒX2‚̃eƒ“ƒvƒŒ[
    1668 ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚É‚æ‚Á‚Äkernel_cfg.c‚ɐ¶¬‚³‚ê‚È‚­‚È‚éD
    1669 ‚½‚¾‚µCƒRƒ“ƒtƒBƒMƒ
    1670 ƒŒ[ƒ^‚̃pƒX2‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶
    1671 •”‚ŁCUSE_INHINIB_TABLE‚ÆUSE_INTINIB_TABLE‚ðÝ’è‚·‚邱‚ƂŁC‚»‚̈ꕔ
    1672 •ª‚ðkernel_cfg.c‚ɐ¶¬‚·‚邱‚Æ‚ª‰Â”\‚Å‚ ‚éD
    1673 
    1674 (6-6-5-2) void initialize_interrupt(void)iƒIƒvƒVƒ‡ƒ“j
    1675 
    1676 OMIT_INITIALIZE_INTERRUPT‚ðƒ}ƒNƒ’è‹`‚µ‚½ê‡‚ɂ́C‚±‚̊֐”‚ðƒ^[ƒQƒbƒg
    1677 ˆË‘¶•”‚Å—pˆÓ‚·‚éDOMIT_INITIALIZE_INTERRUPT‚ðƒ}ƒNƒ’è‹`‚·‚邱‚Æ‚É‚æ‚èŽæ
    1678 ‚菜‚©‚ê‚é‚»‚Ì‘¼‚̃f[ƒ^Œ^C•Ï”Cƒ}ƒNƒ‚́C‚±‚̊֐”‚ÅŽg—p‚·‚éê‡‚É‚Ì
    1679 ‚Ý—pˆÓ‚·‚ê‚΂悢D
    1680 
    1681 6.6.6 ƒfƒtƒHƒ‹ƒg‚ÌŠ„ž‚݃nƒ“ƒhƒ‰
    1682 
    1683 (6-6-6-1) default_int_handler(void)iƒIƒvƒVƒ‡ƒ“j
    1684 
    1685 ƒRƒ“ƒtƒBƒMƒ
    1686 ƒŒ[ƒ^‚É‚æ‚芄ž‚݃nƒ“ƒhƒ‰‚̃e[ƒuƒ‹‚𐶐¬‚·‚éê‡‚Ȃǂɂ́C
    1687 Š„ž‚݃nƒ“ƒhƒ‰‚ð“o˜^‚µ‚È‚©‚Á‚½Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚ɑ΂µ‚āCƒfƒtƒHƒ‹ƒg‚Ì
    1688 Š„ž‚݃nƒ“ƒhƒ‰‚Æ‚µ‚āCdefault_int_handler‚ð“o˜^‚·‚éD
    1689 
    1690 default_int_handler‚́C•W€‚Ì‚à‚Ì‚ðƒ^[ƒQƒbƒgˆË‘¶•”‚Å—pˆÓ‚·‚邪Cƒ†[ƒU
    1691 ‚ª—pˆÓ‚µ‚½‚à‚Ì‚Å’u‚«Š·‚¦‚ç‚ê‚é‚悤‚ɁCOMIT_DEFAULT_INT_HANDLER‚ðƒ}ƒNƒ
    1692 ’è‹`‚µ‚½ê‡‚ɂ́Cƒ^[ƒQƒbƒgˆË‘¶•”‚Å’è‹`‚µ‚È‚¢‚悤‚É‚·‚éD‚È‚¨Cƒ†[ƒU
    1693 ‚ª—pˆÓ‚·‚éê‡‚Ì–¼Ì‚́C_kernel_default_int_handler‚Æ‚È‚éD
    1694 
    1695 6.6.7 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý
    1696 
    1697 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚́CƒJ[ƒlƒ‹“à‚ÌŠ„ž‚ݏo“üŒûˆ—‚ðŒo—R‚¹
    1698 ‚¸‚ÉŽÀs‚·‚é‚Ì‚ªŠî–{‚Å‚ ‚éD
    1699 
    1700 ‚½‚¾‚µC‚·‚ׂĂ̊„ž‚Ý‚Å“¯‚¶ƒAƒhƒŒƒX‚É•ªŠò‚·‚éƒvƒƒZƒbƒT‚ł́CƒJ[ƒlƒ‹
    1701 “à‚ÌŠ„ž‚ݏo“üŒûˆ—‚ð‘S‚­Œo—R‚¹‚¸‚ɃJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚ðŽÀ
    1702 s‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚½‚߁CŠ„ž‚ݏo“üŒûˆ—‚Ì‚È‚é‚ׂ­‘‚¢ƒ^ƒCƒ~ƒ“ƒO‚ŁC
    1703 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚Å‚ ‚é‚©‚ð”»•Ê‚µCˆ—“à—e‚𕪂¯‚é•K—v‚ª‚ ‚éD‹ï
    1704 ‘Ì“I‚ɂ́CƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂̏o“üŒûˆ—‚ł́CƒI[ƒoƒ‰ƒ“ƒnƒ“ƒhƒ‰‚Ì
    1705 ’âŽ~‚Æ“®ìŠJŽn‚ðs‚Á‚Ä‚Í‚È‚ç‚È‚¢D‚Ü‚½Creqflg‚ðƒ`ƒFƒbƒN‚µCƒ^ƒXƒNØŠ·
    1706 ‚¦‚âƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚̌ďo‚µ‚ðs‚¤•K—v‚ª‚È‚¢D‚³‚ç‚ɁCNMI‚̏o“üŒû
    1707 ˆ—‚ł́CƒgƒŒ[ƒXƒƒOŽæ“¾ˆ—ilog_inh_enter‚¨‚æ‚Ñlog_inh_leavej‚ðŒÄ
    1708 ‚яo‚µ‚Ä‚Í‚È‚ç‚È‚¢D
    1709 
    1710 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚ðŽÀs‚·‚éÛ‚ɁCƒJ[ƒlƒ‹“à‚ÌŠ„ž‚ݏo“üŒû
    1711 ˆ—‚̈ꕔ•ª‚ðŒo—R‚·‚éê‡‚ɂ́CCPU—áŠO‚ª‹N‚±‚é‰Â”\«‚ð‹É—ÍŒ¸‚ç‚·‚Æ‚Æ‚à
    1712 ‚ɁCCPU—áŠO‚ð‹N‚±‚·‰Â”\«‚ª‚ ‚éê‡‚ɂ́C‚»‚̉”\«‚ðƒ^[ƒQƒbƒgˆË‘¶•”‚Ì
    1713 ƒ†[ƒU[ƒYƒ}ƒjƒ
    1714 ƒAƒ‹‚É‹LÚ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    1715 
    1716 ŽŸ‚ɁCƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂̐ݒè•û–@‚ÉŠÖ‚µ‚āCuTOPPERSV¢‘ãƒJ[ƒlƒ‹
    1717 “‡Žd—l‘v‚́u6.6.8 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂̐ݒè•û–@v‚̐߂Ì3‚‚̕û–@
    1718 ‚Ì‚¢‚¸‚ê‚ðÌ—p‚·‚é‚©‚ðŒˆ’è‚·‚éD
    1719 
    1720 (a-1)‚Ü‚½‚Í(a-2)‚ðÌ—p‚µCƒJ[ƒlƒ‹ŠÇ—ŠO‚Æ‚µ‚½Š„ž‚݂ɑ΂µ‚āCƒJ[ƒlƒ‹
    1721 ‚ÌAPI‚É‚æ‚銄ž‚݃nƒ“ƒhƒ‰‚Ì“o˜^‚ÆŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚Ì‘®«‚̐ݒè‚ðƒTƒ|[ƒg
    1722 ‚µ‚È‚¢ê‡‚ɂ́C‚»‚ê‚É‘ã‚í‚é•û–@‚ðƒ^[ƒQƒbƒgˆË‘¶•”‚̃†[ƒU[ƒYƒ}ƒjƒ
    1723 ƒA
    1724 ƒ‹‚É‹Lq‚·‚éD
    1725 
    1726 (a-1)‚Ü‚½‚Í(a-2)‚ðÌ—p‚µ‚ăJ[ƒlƒ‹‚ÌAPI‚É‚æ‚銄ž‚݃nƒ“ƒhƒ‰‚Ì“o˜^‚⊄ž
    1727 ‚Ý—v‹ƒ‰ƒCƒ“‚Ì‘®«‚̐ݒè‚ðƒTƒ|[ƒg‚·‚éê‡‚âC(b)‚ðÌ—p‚µ‚½ê‡‚ɂ́Cƒ^[
    1728 ƒQƒbƒgˆË‘¶•”‚É‚¨‚¢‚Ä‚»‚ê‚ðŽÀŒ»‚·‚é•K—v‚ª‚ ‚éD
    1729 
    1730 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂ɑ΂µ‚āCDEF_INH‚É‚æ‚銄ž‚݃nƒ“ƒhƒ‰‚Ì“o˜^‚ðƒTƒ|[
    1731 ƒg‚·‚é‚ɂ́CŽŸ‚̐ݒ肪•K—v‚É‚È‚éD
    1732 
    1733 ETARGET_INHATR‚ɁCTA_NONKERNEL‚ðÝ’è‚·‚éD
    1734 
    1735 E(a-1)‚Ü‚½‚Í(a-2)‚ðÌ—p‚µ‚½ê‡‚ɂ́CINHNO_DEFINH_VALID‚ɁCƒJ[ƒlƒ‹ŠÇ
    1736 @—ŠO‚Æ‚µ‚½Š„ž‚݂ɑΉž‚·‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†‚ðŠÜ‚ß‚éD‚Ü‚½C
    1737 @VALID_INHNO_DEFINH‚ðCƒJ[ƒlƒ‹ŠÇ—ŠO‚Æ‚µ‚½Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚ð—LŒø‚È
    1738 @’l‚Æ”»’è‚·‚é‚悤‚É‚·‚éD
    1739 
    1740 E(a-1)‚Ü‚½‚Í(a-2)‚ðÌ—p‚µ‚½ê‡‚ɂ́CINHNO_FIX_KERNEL‚ɃJ[ƒlƒ‹ŠÇ—‚Æ
    1741 @‚µ‚½Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚̃ŠƒXƒg‚ðCINHNO_FIX_NONKERNEL‚ɃJ[ƒlƒ‹ŠÇ—ŠO
    1742 @‚Æ‚µ‚½Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚̃ŠƒXƒgÝ’è‚·‚éD
    1743 
    1744 EDEF_INH‚ªƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂ɑΉž‚Å‚«‚é‚悤‚É‚·‚éD•W€‚ÌŠ„ž‚ÝŠÇ
    1745 @—‹@”\‚̏‰Šú‰»ˆ—‚ð—p‚¢‚éê‡‚ɂ́Cx_define_inh‚ðƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„
    1746 @ž‚݂ɑΉž‚³‚¹‚éD
    1747 
    1748 E•K—v‚ȏꍇ‚ɂ́CTA_NONKERNEL‘®«‚ªÝ’肳‚ꂽŠ„ž‚݃nƒ“ƒhƒ‰‚ðƒJ[ƒlƒ‹
    1749 @ŠÇ—ŠO‚ƈµ‚¤‚悤‚ɁCƒJ[ƒlƒ‹“à‚ÌŠ„ž‚ݏo“üŒûˆ—‚ðC³‚·‚éD•W€‚ÌŠ„
    1750 @ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ð—p‚¢‚éê‡CƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂ɑ΂µ‚Ä
    1751 @‚́CƒJ[ƒlƒ‹“à‚ÌŠ„ž‚ݏo“üŒûˆ—‚𐶐¬‚¹‚¸CƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ª“o˜^‚µ
    1752 @‚½Š„ž‚݃nƒ“ƒhƒ‰‚𒼐ڌĂяo‚·‚悤‚ɁCƒ^[ƒQƒbƒg”ñˆË‘¶•”‚É‚æ‚èÝ’肳
    1753 @‚ê‚邽‚߁Cƒ^[ƒQƒbƒgˆË‘¶•”‚ł͑Ήž‚·‚é•K—v‚ª‚È‚¢D
    1754 
    1755 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂ɑ΂µ‚āCCFG_INT‚É‚æ‚銄ž‚Ý—v‹ƒ‰ƒCƒ“‚Ì‘®«‚̐Ý
    1756 ’è‚ðƒTƒ|[ƒg‚·‚é‚ɂ́CŽŸ‚̐ݒ肪•K—v‚É‚È‚éD
    1757 
    1758 E(a-1)‚Ü‚½‚Í(a-2)‚ðÌ—p‚µ‚½ê‡‚ɂ́CINTNO_CFGINT_VALID‚ɁCƒJ[ƒlƒ‹ŠÇ
    1759 @—ŠO‚Æ‚µ‚½Š„ž‚݂ɑΉž‚·‚銄ž‚ݔԍ†‚ðŠÜ‚ß‚éD‚Ü‚½CVALID_INTNO_CFGINT
    1760 @‚ðCƒJ[ƒlƒ‹ŠÇ—ŠO‚Æ‚µ‚½Š„ž‚ݔԍ†‚ð—LŒø‚È’l‚Æ”»’è‚·‚é‚悤‚É‚·‚éD
    1761 
    1762 E(a-1)‚Ü‚½‚Í(a-2)‚ðÌ—p‚µ‚½ê‡‚ɂ́CINTNO_FIX_KERNEL‚ɃJ[ƒlƒ‹ŠÇ—‚Æ
    1763 @‚µ‚½Š„ž‚ݔԍ†‚̃ŠƒXƒg‚ðCINTNO_FIX_NONKERNEL‚ɃJ[ƒlƒ‹ŠÇ—ŠO‚Æ‚µ‚½Š„
    1764 @ž‚ݔԍ†‚̃ŠƒXƒgÝ’è‚·‚éD
    1765 
    1766 EINTPRI_CFGINT_VALID‚ɁCƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚Æ‚È‚é—Dæ“x‚ðŠÜ‚ß‚éD
    1767 
    1768 ECFG_INT‚ªƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂ɑΉž‚Å‚«‚é‚悤‚É‚·‚éD•W€‚ÌŠ„ž‚ÝŠÇ
    1769 @—‹@”\‚̏‰Šú‰»ˆ—‚ð—p‚¢‚éê‡‚ɂ́Cx_config_int‚ðƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„
    1770 @ž‚݂ɑΉž‚³‚¹‚éD
    1771 
    1772 chg_ipm‚É‚æ‚èCiNMIˆÈŠO‚́jƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ðƒ}ƒXƒN‚Å‚«‚é‚悤‚É
    1773 ‚·‚éê‡‚ɂ́CŽŸ‚̐ݒ肪•K—v‚É‚È‚éD
    1774 
    1775 EVALID_INTPRI_CHGIPM‚ðCƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚Æ‚È‚é—Dæ“x‚ð—LŒø‚È’l‚Æ
    1776 @”»’è‚·‚é‚悤‚É‚·‚éD
    1777 
    1778 Et_set_ipm‚ðCƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚Æ‚È‚é—Dæ“x‚ðˆµ‚¦‚é‚悤‚É‚·‚éD
    1779 
    1780 6.7 CPU—áŠOƒnƒ“ƒhƒ‰‚ÆCPU—áŠO”­¶Žž‚̃VƒXƒeƒ€ó‘Ô‚ÌŽQÆ
    1781 
    1782 6.7.1 CPU—áŠOƒnƒ“ƒhƒ‰‚̏o“üŒûˆ—
    1783 
    1784 CPU—áŠO‚̏o“üŒûˆ—‚Ì•û–@‚̓vƒƒZƒbƒT‚É‚æ‚Á‚Ä‘å‚«‚­ˆÙ‚Ȃ邪C‚¨‚¨‚æ‚»‚Ì
    1785 ˆ—“à—e‚ÍŽŸ‚Ì’Ê‚èD
     1552intnoで指定された割込み要求ラインの割込み属性を,intatrで指定された通り
     1553に設定する.また,割込み優先度を,intpriで指定された値に設定する.
     1554
     1555この関数は,標準の割込み管理機能の初期化処理を用いた場合のみ,ターゲッ
     1556ト非依存部から呼び出される.割込み管理機能の初期化処理をターゲット依存
     1557部で用意し,その中でこの関数を呼び出さない場合には,この関数を用意する
     1558必要はない.
     1559
     1560この関数は,ターゲット非依存部のカーネル初期化処理から呼び出されるため,
     1561カーネルの初期化処理(NMIを除くすべての割込みがマスクされている)から呼
     1562び出せるように実装すればよい.
     1563
     1564intatrとして設定できる割込み属性は次の通り.
     1565
     1566        TA_ENAINT               0x01    割込み要求禁止フラグをクリア
     1567        TA_EDGE                 0x02    エッジトリガ
     1568
     1569この他に,ターゲット定義で割込み属性を追加してもよい.ターゲット定義で
     1570追加するために,以下の属性名が予約されている.
     1571
     1572        TA_POSEDGE                              ポジティブエッジトリガ
     1573        TA_NEGEDGE                              ネガティブエッジトリガ
     1574        TA_BOTHEDGE                             両エッジトリガ
     1575        TA_LOWLEVEL                             ローレベルトリガ
     1576        TA_HIGHLEVEL                    ハイレベルトリガ
     1577
     1578これらの属性名をターゲット定義で追加する場合には,その属性値を決定し,
     1579定義をtarget_kernel.h(または,そこからインクルードされるファイル)に含
     1580める.また,コンフィギュレータテンプレートファイルから参照できるように,
     1581target_def.csv(または,そこからインクルードされるファイル)に含め,コ
     1582ンフィギュレータテンプレートファイルのターゲット非依存部でエラーとなら
     1583ないように,target.tf(または,そこからインクルードされるファイル)で
     1584TARGET_INTATRに設定する.
     1585
     1586指定された割込み番号がCFG_INTに対するものとして有効な値でない場合や,そ
     1587の割込み要求ラインに対して設定できない属性を指定した場合,設定できない
     1588割込み優先度を指定した場合の動作は保証する必要がない(assertでエラーと
     1589するのが望ましい).このようなケースは,コンフィギュレータでエラーを検
     1590出すべきである.コンフィギュレータテンプレートファイルのターゲット非依
     1591存部は,パス2のテンプレートファイルのターゲット依存部で定義する
     1592INTNO_CFGINT_VALID,TARGET_INTATR,INTPRI_CFGINT_VALIDを用いてエラーを
     1593検出するが,標準の割込み属性(TA_ENAINT,TA_EDGE)が設定できない場合や,
     1594設定できない属性や割込み優先度が割込み要求ラインによって異なる場合には,
     1595コンフィギュレータテンプレートファイルのターゲット依存部で検出しなけれ
     1596ばならない.
     1597
     15986.6.5 割込み管理機能の初期化処理の変更
     1599
     1600(6-6-5-1) OMIT_INITIALIZE_INTERRUPT(オプション)
     1601
     1602割込み管理機能の初期化処理をターゲット依存部で用意し,ターゲット非依存
     1603部に含まれる標準の割込み管理機能の初期化処理を用いない場合には,このシ
     1604ンボルをマクロ定義する.
     1605
     1606このシンボルをマクロ定義すると,INHINIB,INTINIB,initialize_interrupt
     1607の定義が,カーネルのターゲット非依存部から取り除かれる.また,
     1608TNUM_INHNO,tnum_inhno,inhinib_table,TNUM_INTNO,tnum_intno,
     1609intinib_tableの定義と,割込みハンドラ毎の出入口処理を生成するための記述
     1610(INTHDR_ENTRYマクロのリスト)が,コンフィギュレータのパス2のテンプレー
     1611トファイルのターゲット非依存部によってkernel_cfg.cに生成されなくなる.
     1612ただし,コンフィギュレータのパス2のテンプレートファイルのターゲット依存
     1613部で,USE_INHINIB_TABLEとUSE_INTINIB_TABLEを設定することで,その一部
     1614分をkernel_cfg.cに生成することが可能である.
     1615
     1616(6-6-5-2) void initialize_interrupt(void)(オプション)
     1617
     1618OMIT_INITIALIZE_INTERRUPTをマクロ定義した場合には,この関数をターゲット
     1619依存部で用意する.OMIT_INITIALIZE_INTERRUPTをマクロ定義することにより取
     1620り除かれるその他のデータ型,変数,マクロは,この関数で使用する場合にの
     1621み用意すればよい.
     1622
     16236.6.6 デフォルトの割込みハンドラ
     1624
     1625(6-6-6-1) default_int_handler(void)(オプション)
     1626
     1627コンフィギュレータにより割込みハンドラのテーブルを生成する場合などには,
     1628割込みハンドラを登録しなかった割込みハンドラ番号に対して,デフォルトの
     1629割込みハンドラとして,default_int_handlerを登録する.
     1630
     1631default_int_handlerは,標準のものをターゲット依存部で用意するが,ユーザ
     1632が用意したもので置き換えられるように,OMIT_DEFAULT_INT_HANDLERをマクロ
     1633定義した場合には,ターゲット依存部で定義しないようにする.なお,ユーザ
     1634が用意する場合の名称は,_kernel_default_int_handlerとなる.
     1635
     16366.6.7 カーネル管理外の割込み
     1637
     1638カーネル管理外の割込みハンドラは,カーネル内の割込み出入口処理を経由せ
     1639ずに実行するのが基本である.
     1640
     1641ただし,すべての割込みで同じアドレスに分岐するプロセッサでは,カーネル
     1642内の割込み出入口処理を全く経由せずにカーネル管理外の割込みハンドラを実
     1643行することができないため,割込み出入口処理のなるべく早いタイミングで,
     1644カーネル管理外の割込みであるかを判別し,処理内容を分ける必要がある.具
     1645体的には,カーネル管理外の割込みの出入口処理では,オーバランハンドラの
     1646停止と動作開始を行ってはならない.また,reqflgをチェックし,タスク切換
     1647えやタスク例外処理ルーチンの呼出しを行う必要がない.さらに,NMIの出入口
     1648処理では,トレースログ取得処理(log_inh_enterおよびlog_inh_leave)を呼
     1649び出してはならない.
     1650
     1651カーネル管理外の割込みハンドラを実行する際に,カーネル内の割込み出入口
     1652処理の一部分を経由する場合には,CPU例外が起こる可能性を極力減らすととも
     1653に,CPU例外を起こす可能性がある場合には,その可能性をターゲット依存部の
     1654ユーザーズマニュアルに記載しなければならない.
     1655
     1656次に,カーネル管理外の割込みの設定方法に関して,「TOPPERS新世代カーネル
     1657統合仕様書」の「6.6.8 カーネル管理外の割込みの設定方法」の節の3つの方法
     1658のいずれを採用するかを決定する.
     1659
     1660(a-1)または(a-2)を採用し,カーネル管理外とした割込みに対して,カーネル
     1661のAPIによる割込みハンドラの登録と割込み要求ラインの属性の設定をサポート
     1662しない場合には,それに代わる方法をターゲット依存部のユーザーズマニュア
     1663ルに記述する.
     1664
     1665(a-1)または(a-2)を採用してカーネルのAPIによる割込みハンドラの登録や割込
     1666み要求ラインの属性の設定をサポートする場合や,(b)を採用した場合には,ター
     1667ゲット依存部においてそれを実現する必要がある.
     1668
     1669カーネル管理外の割込みに対して,DEF_INHによる割込みハンドラの登録をサポー
     1670トするには,次の設定が必要になる.
     1671
     1672・TARGET_INHATRに,TA_NONKERNELを設定する.
     1673
     1674・(a-1)または(a-2)を採用した場合には,INHNO_DEFINH_VALIDに,カーネル管
     1675 理外とした割込みに対応する割込みハンドラ番号を含める.また,
     1676 VALID_INHNO_DEFINHを,カーネル管理外とした割込みハンドラ番号を有効な
     1677 値と判定するようにする.
     1678
     1679・(a-1)または(a-2)を採用した場合には,INHNO_FIX_KERNELにカーネル管理と
     1680 した割込みハンドラ番号のリストを,INHNO_FIX_NONKERNELにカーネル管理外
     1681 とした割込みハンドラ番号のリスト設定する.
     1682
     1683・DEF_INHがカーネル管理外の割込みに対応できるようにする.標準の割込み管
     1684 理機能の初期化処理を用いる場合には,x_define_inhをカーネル管理外の割
     1685 込みに対応させる.
     1686
     1687・必要な場合には,TA_NONKERNEL属性が設定された割込みハンドラをカーネル
     1688 管理外と扱うように,カーネル内の割込み出入口処理を修正する.標準の割
     1689 込み管理機能の初期化処理を用いる場合,カーネル管理外の割込みに対して
     1690 は,カーネル内の割込み出入口処理を生成せず,アプリケーションが登録し
     1691 た割込みハンドラを直接呼び出すように,ターゲット非依存部により設定さ
     1692 れるため,ターゲット依存部では対応する必要がない.
     1693
     1694カーネル管理外の割込みに対して,CFG_INTによる割込み要求ラインの属性の設
     1695定をサポートするには,次の設定が必要になる.
     1696
     1697・(a-1)または(a-2)を採用した場合には,INTNO_CFGINT_VALIDに,カーネル管
     1698 理外とした割込みに対応する割込み番号を含める.また,VALID_INTNO_CFGINT
     1699 を,カーネル管理外とした割込み番号を有効な値と判定するようにする.
     1700
     1701・(a-1)または(a-2)を採用した場合には,INTNO_FIX_KERNELにカーネル管理と
     1702 した割込み番号のリストを,INTNO_FIX_NONKERNELにカーネル管理外とした割
     1703 込み番号のリスト設定する.
     1704
     1705・INTPRI_CFGINT_VALIDに,カーネル管理外の割込みとなる優先度を含める.
     1706
     1707・CFG_INTがカーネル管理外の割込みに対応できるようにする.標準の割込み管
     1708 理機能の初期化処理を用いる場合には,x_config_intをカーネル管理外の割
     1709 込みに対応させる.
     1710
     1711chg_ipmにより,(NMI以外の)カーネル管理外の割込みをマスクできるように
     1712する場合には,次の設定が必要になる.
     1713
     1714・VALID_INTPRI_CHGIPMを,カーネル管理外の割込みとなる優先度を有効な値と
     1715 判定するようにする.
     1716
     1717・t_set_ipmを,カーネル管理外の割込みとなる優先度を扱えるようにする.
     1718
     17196.7 CPU例外ハンドラとCPU例外発生時のシステム状態の参照
     1720
     17216.7.1 CPU例外ハンドラの出入口処理
     1722
     1723CPU例外の出入口処理の方法はプロセッサによって大きく異なるが,おおよその
     1724処理内容は次の通り.
    17861725
    17871726----------------------------------------
    17881727void
    1789 <CPU—áŠO‚̏o“üŒûˆ—>(void)
     1728<CPU例外の出入口処理>(void)
    17901729{
    1791         ƒXƒNƒ‰ƒbƒ`ƒŒƒWƒXƒ^‚ðƒXƒ^ƒbƒN‚É•Û‘¶‚·‚é
    1792         if (ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌCPU—áŠO) {
    1793                 if (ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÅCPU—áŠO”­¶) {
    1794                         ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦‚é
     1730        スクラッチレジスタをスタックに保存する
     1731        if (カーネル管理外のCPU例外) {
     1732                if (タスクコンテキストでCPU例外発生) {
     1733                        非タスクコンテキストに切り換える
    17951734                }
    1796                 ƒVƒXƒeƒ€ó‘ԁiƒRƒ“ƒeƒLƒXƒg‚͏œ‚­j‚ðCCPU—áŠO”­¶Žž‚̏ó‘Ô‚É‚·‚é
    1797                 CPU—áŠOƒnƒ“ƒhƒ‰‚ðCCPU—áŠO‚̏î•ñ‚ð‹L‰¯‚µ‚Ä‚¢‚é—̈æ‚̐擪”Ô’n‚ð
    1798                                                                         ƒpƒ‰ƒ[ƒ^ip_excinfj‚Æ‚µ‚ČĂяo‚·
    1799                 if (ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÅCPU—áŠO”­¶) {
    1800                         ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦‚é
     1735                システム状態(コンテキストは除く)を,CPU例外発生時の状態にする
     1736                CPU例外ハンドラを,CPU例外の情報を記憶している領域の先頭番地を
     1737                                                                        パラメータ(p_excinf)として呼び出す
     1738                if (タスクコンテキストでCPU例外発生) {
     1739                        タスクコンテキストに切り換える
    18011740                }
    1802                 CPU—áŠOˆ—‚©‚ç‚̃Šƒ^[ƒ“Œã‚ɁCCPU—áŠO”­¶Žž‚̃VƒXƒeƒ€ó‘Ô‚É
    1803                                                                                                         –ß‚é‚悤‚ɏ€”õ‚·‚é
     1741                CPU例外処理からのリターン後に,CPU例外発生時のシステム状態に
     1742                                                                                                        戻るように準備する
    18041743        }
    18051744        else {
    1806                 if (ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÅCPU—áŠO”­¶) {
    1807                         ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦‚é
     1745                if (タスクコンテキストでCPU例外発生) {
     1746                        非タスクコンテキストに切り換える
    18081747                }
    1809                 ƒVƒXƒeƒ€ó‘ԁiƒRƒ“ƒeƒLƒXƒg‚͏œ‚­j‚ðCCPU—áŠO”­¶Žž‚̏ó‘Ô‚É‚·‚é
    1810                         @iCPU—áŠO”­¶Žž‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚æ‚è‚à—Dæ“x‚̍‚‚¢Š„ž‚Ý
    1811                                 ‚Ì‚Ý‚ðŽó‚¯•t‚¯‚ç‚ê‚é‚悤‚É‚µ‚āCCPUƒƒbƒN‰ðœó‘Ô‚É‚·‚éj
     1748                システム状態(コンテキストは除く)を,CPU例外発生時の状態にする
     1749                         (CPU例外発生時の割込み優先度マスクよりも優先度の高い割込み
     1750                                のみを受け付けられるようにして,CPUロック解除状態にする)
    18121751
    18131752#ifdef LOG_EXC_ENTER
    1814                 log_exc_enter(CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†);
     1753                log_exc_enter(CPU例外ハンドラ番号);
    18151754#endif /* LOG_EXC_ENTER */
    1816                 CPU—áŠOƒnƒ“ƒhƒ‰‚ðCCPU—áŠO‚̏î•ñ‚ð‹L‰¯‚µ‚Ä‚¢‚é—̈æ‚̐擪”Ô’n‚ð
    1817                                                                         ƒpƒ‰ƒ[ƒ^ip_excinfj‚Æ‚µ‚ČĂяo‚·
     1755                CPU例外ハンドラを,CPU例外の情報を記憶している領域の先頭番地を
     1756                                                                        パラメータ(p_excinf)として呼び出す
    18181757#ifdef LOG_EXC_LEAVE
    1819                 log_exc_leave(CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†);
     1758                log_exc_leave(CPU例外ハンドラ番号);
    18201759#endif /* LOG_EXC_LEAVE */
    18211760
    18221761          ret_exc:
    1823                 if (ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÅCPU—áŠO”­¶) {
    1824                         i­‚È‚­‚Æ‚àjƒJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚Ý‚ð‹ÖŽ~‚µ‚½ó‘Ô‚É‚·‚é c (*d)
    1825                         ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦‚é
     1762                if (タスクコンテキストでCPU例外発生) {
     1763                        (少なくとも)カーネル管理の割込みを禁止した状態にする … (*d)
     1764                        タスクコンテキストに切り換える
    18261765                        if (reqflg) {
    18271766                                reqflg = false;
    1828                                 CPUƒƒbƒNó‘Ô‚É‚·‚é c (*e)
    1829                                 search_schedtsk‚ðŒÄ‚яo‚µCÅ‚—Dæ‡ˆÊƒ^ƒXƒN‚ð‹‚ß‚é
    1830                                 Å‚—Dæ‡ˆÊ‚̃^ƒXƒNID‚ðˆø”‚É‚µ‚Ärun_task‚É•ªŠò‚·‚é
     1767                                CPUロック状態にする … (*e)
     1768                                search_schedtskを呼び出し,最高優先順位タスクを求める
     1769                                最高優先順位のタスクIDを引数にしてrun_taskに分岐する
    18311770                        }
    18321771                }
    1833                 CPU—áŠOˆ—‚©‚ç‚̃Šƒ^[ƒ“Œã‚ɁCCPUƒƒbƒN‰ðœó‘Ô‚É–ß‚é‚悤‚ɏ€”õ‚·‚é
     1772                CPU例外処理からのリターン後に,CPUロック解除状態に戻るように準備する
    18341773        }
    1835         ƒXƒNƒ‰ƒbƒ`ƒŒƒWƒXƒ^‚ðƒXƒ^ƒbƒN‚©‚ç•œ‹A‚·‚é
    1836         CPU—áŠOˆ—‚©‚ç‚̃Šƒ^[ƒ“
     1774        スクラッチレジスタをスタックから復帰する
     1775        CPU例外処理からのリターン
    18371776}
    18381777----------------------------------------
    18391778
    1840 CPU—áŠOƒnƒ“ƒhƒ‰‚́C”ñƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦‚邱‚Æ‚ðœ‚¢‚ẮCCPU—áŠO”­
    1841 ¶Žž‚Æ“¯‚¶ƒVƒXƒeƒ€ó‘ԂŌĂяo‚³‚È‚¯‚ê‚΂Ȃç‚È‚¢D—Ⴆ‚΁CCPU—áŠO‚ªCPU
    1842 ƒƒbƒNó‘Ô‚Å”­¶‚µ‚½ê‡‚É‚ÍCPUƒƒbƒNó‘ԁCCPUƒƒbƒN‰ðœó‘Ô‚Å”­¶‚µ‚½
    1843 ê‡‚É‚ÍCPUƒƒbƒN‰ðœó‘ԂŁCCPU—áŠOƒnƒ“ƒhƒ‰‚ðŒÄ‚яo‚³‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    1844 CPUƒƒbƒNó‘Ô‚Å”­¶‚µ‚½CPU—áŠO‚́CƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌCPU—áŠO‚ƂȂ邽‚߁CƒJ[
    1845 ƒlƒ‹ŠÇ—‚ÌCPU—áŠOƒnƒ“ƒhƒ‰‚ɂ‚¢‚ẮCCPUƒƒbƒN‰ðœó‘ԂŌĂяo‚·‚±‚Æ‚É
    1846 ‚È‚éD
    1847 
    1848 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌCPU—áŠO‚Å‚ ‚邱‚Ƃ́Cexc_sense_unlock‚ªfalse‚ð•Ô‚·ðŒ
    1849 ‚ƁCƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚Å‚ ‚邱‚Ƃ𒲂ׂȂ¢‚¾‚¯‚̈Ⴂ‚Å‚ ‚èC‚Ù‚Ú“¯‚¶ƒR[
    1850 ƒh‚Å”»’è‚·‚邱‚Æ‚ª‚Å‚«‚éD
    1851 
    1852 ã‚̃R[ƒh‚ł́CƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌCPU—áŠO‚ɑ΂µ‚āCƒgƒŒ[ƒXƒƒOŽæ“¾ˆ—
    1853 ilog_exc_enter‚¨‚æ‚Ñlog_exc_leavej‚ðŒÄ‚яo‚µ‚Ä‚¢‚È‚¢‚ªC‘SŠ„ž‚݃ƒb
    1854 ƒNó‘Ô‚©NMI‚̏ˆ—’†‚ÉCPU—áŠO‚ª”­¶‚µ‚½ê‡‚ðœŠO‚·‚ê‚΁CŒÄ‚яo‚µ‚Ä‚à‚©
    1855 ‚Ü‚í‚È‚¢D‘SŠ„ž‚݃ƒbƒNó‘Ô‚©NMI‚̏ˆ—’†‚É”­¶‚µ‚½CPU—áŠO‚̏ꍇ‚ɂ́C
    1856 ƒgƒŒ[ƒXƒƒOŽæ“¾ˆ—‚ðŒÄ‚яo‚µ‚Ä‚Í‚È‚ç‚È‚¢D
    1857 
    1858 CPU—áŠOƒnƒ“ƒhƒ‰‚ðŽÀs‚·‚éÛ‚ÉŒo—R‚·‚é•”•ª‚ł́CCPU—áŠO‚ª‹N‚±‚é‰Â”\«‚ð
    1859 ‹É—ÍŒ¸‚ç‚·‚Æ‚Æ‚à‚ɁCCPU—áŠO‚ð‹N‚±‚·‰Â”\«‚ª‚ ‚éê‡i—Ⴆ‚΁CƒXƒNƒ‰ƒbƒ`
    1860 ƒŒƒWƒXƒ^‚ðƒXƒ^ƒbƒN‚É•Û‘¶‚·‚鎞‚ɁCƒoƒXƒGƒ‰[‚È‚Ç‚ÌCPU—áŠO‚ª”­¶‚·‚é‰Â”\
    1861 «‚ªl‚¦‚ç‚ê‚éj‚ɂ́C‚»‚̉”\«‚ðƒ^[ƒQƒbƒgˆË‘¶•”‚̃†[ƒU[ƒYƒ}ƒjƒ
    1862 ƒA
    1863 ƒ‹‚É‹LÚ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    1864 
    1865 ret_excˆÈ~‚̏ˆ—‚́CŠ„ž‚݂̏o“üŒûˆ—‚Ìret_intˆÈ~‚̏ˆ—‚Æ“¯‚¶‚Å‚ ‚é
    1866 ‚½‚߁Cƒ^[ƒQƒbƒg‚É‚æ‚Á‚ẮC‹¤’ʂ̃‹[ƒ`ƒ“‚ð—p‚¢‚邱‚Æ‚ª‚Å‚«‚é‰Â”\«‚ª
    1867 ‚ ‚éD
    1868 
    1869 CPU—áŠO‚̏o“üŒûˆ—‚ðƒAƒZƒ“ƒuƒŠŒ¾Œê‚Å‹Lq‚·‚éê‡‚ɂ́CƒgƒŒ[ƒXƒƒOŽæ“¾
    1870 ˆ—‚́Cu6.2 ƒgƒŒ[ƒXƒƒO‹@”\‚ւ̑Ήžv‚̐߂ŋLq‚µ‚½•û–@‚ŃR[ƒfƒBƒ“
    1871 ƒO‚·‚邱‚ƁD
    1872 
    1873 6.7.2 CPU—áŠOƒnƒ“ƒhƒ‰‚̏o“üŒûˆ—‚̐¶¬
    1874 
    1875 CPU—áŠOƒxƒNƒgƒ‹‚ðƒn[ƒhƒEƒFƒA‚ÅŽÀŒ»‚µ‚Ä‚¢‚éê‡‚ȂǁCCPU—áŠOƒnƒ“ƒhƒ‰–ˆ
    1876 ‚ɏo“üŒûˆ—‚ð—pˆÓ‚µ‚½•û‚ªŒø—¦‚ª—Ç‚¢ƒ^[ƒQƒbƒg‚Ì‚½‚߂ɁCCPU—áŠOƒnƒ“ƒhƒ‰
    1877 –ˆ‚ɏo“üŒûˆ—‚𐶐¬‚·‚é‹@\‚ð—pˆÓ‚µ‚Ä‚¢‚éD
    1878 
    1879 ˆÈ‰º‚̃}ƒNƒ‚́C•W€‚ÌCPU—áŠOŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ð—p‚¢‚½ê‡‚̂݁Cƒ^[
    1880 ƒQƒbƒg”ñˆË‘¶•”‚ÅŽg‚í‚ê‚éDCPU—áŠOŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ðƒ^[ƒQƒbƒgˆË‘¶•”
    1881 ‚Å—pˆÓ‚µC‚»‚Ì’†‚Å‚±‚ê‚ç‚̃}ƒNƒ‚ðŽg‚í‚È‚¢ê‡‚ɂ́C‚±‚ê‚ç‚̃}ƒNƒ‚ð—p
    1882 ˆÓ‚·‚é•K—v‚Í‚È‚¢D
     1779CPU例外ハンドラは,非コンテキストに切り換えることを除いては,CPU例外発
     1780生時と同じシステム状態で呼び出さなければならない.例えば,CPU例外がCPU
     1781ロック状態で発生した場合にはCPUロック状態,CPUロック解除状態で発生した
     1782場合にはCPUロック解除状態で,CPU例外ハンドラを呼び出さなければならない.
     1783CPUロック状態で発生したCPU例外は,カーネル管理外のCPU例外となるため,カー
     1784ネル管理のCPU例外ハンドラについては,CPUロック解除状態で呼び出すことに
     1785なる.
     1786
     1787カーネル管理外のCPU例外であることは,exc_sense_unlockがfalseを返す条件
     1788と,タスクコンテキストであることを調べないだけの違いであり,ほぼ同じコー
     1789ドで判定することができる.
     1790
     1791上のコードでは,カーネル管理外のCPU例外に対して,トレースログ取得処理
     1792(log_exc_enterおよびlog_exc_leave)を呼び出していないが,全割込みロッ
     1793ク状態かNMIの処理中にCPU例外が発生した場合を除外すれば,呼び出してもか
     1794まわない.全割込みロック状態かNMIの処理中に発生したCPU例外の場合には,
     1795トレースログ取得処理を呼び出してはならない.
     1796
     1797CPU例外ハンドラを実行する際に経由する部分では,CPU例外が起こる可能性を
     1798極力減らすとともに,CPU例外を起こす可能性がある場合(例えば,スクラッチ
     1799レジスタをスタックに保存する時に,バスエラーなどのCPU例外が発生する可能
     1800性が考えられる)には,その可能性をターゲット依存部のユーザーズマニュア
     1801ルに記載しなければならない.
     1802
     1803ret_exc以降の処理は,割込みの出入口処理のret_int以降の処理と同じである
     1804ため,ターゲットによっては,共通のルーチンを用いることができる可能性が
     1805ある.
     1806
     1807CPU例外の出入口処理をアセンブリ言語で記述する場合には,トレースログ取得
     1808処理は,「6.2 トレースログ機能への対応」の節で記述した方法でコーディン
     1809グすること.
     1810
     18116.7.2 CPU例外ハンドラの出入口処理の生成
     1812
     1813CPU例外ベクトルをハードウェアで実現している場合など,CPU例外ハンドラ毎
     1814に出入口処理を用意した方が効率が良いターゲットのために,CPU例外ハンドラ
     1815毎に出入口処理を生成する機構を用意している.
     1816
     1817以下のマクロは,標準のCPU例外管理機能の初期化処理を用いた場合のみ,ター
     1818ゲット非依存部で使われる.CPU例外管理機能の初期化処理をターゲット依存部
     1819で用意し,その中でこれらのマクロを使わない場合には,これらのマクロを用
     1820意する必要はない.
    18831821
    18841822(6-7-2-1) EXC_ENTRY(excno, exchdr)
    18851823
    1886 CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚ªexcnoCCPU—áŠOƒnƒ“ƒhƒ‰‚̊֐”–¼‚ªexchdr‚Å‚ ‚éCPU—á
    1887 ŠOƒnƒ“ƒhƒ‰‚̏o“üŒûˆ—‚̃‰ƒxƒ‹‚ðì‚éƒ}ƒNƒDEXCHDR_ENTRY‚ð—p‚¢‚ÄCPU—áŠO
    1888 ƒnƒ“ƒhƒ‰–ˆ‚ɏo“üŒûˆ—‚𐶐¬‚·‚éê‡‚ɂ́CŽŸ‚̂悤‚É’è‹`‚·‚éD
     1824CPU例外ハンドラ番号がexcno,CPU例外ハンドラの関数名がexchdrであるCPU例
     1825外ハンドラの出入口処理のラベルを作るマクロ.EXCHDR_ENTRYを用いてCPU例外
     1826ハンドラ毎に出入口処理を生成する場合には,次のように定義する.
    18891827
    18901828#define EXC_ENTRY(excno, exchdr)        _kernel_##exchdr##_##excno
    18911829
    1892 CPU—áŠOƒnƒ“ƒhƒ‰–ˆ‚ɏo“üŒûˆ—‚ðì‚é•K—v‚ª‚È‚¢ê‡‚ɂ́CŽŸ‚̂悤‚É’è‹`‚µ
    1893 ‚āCCPU—áŠOƒnƒ“ƒhƒ‰‚̊֐”–¼‚ð‚»‚Ì‚Ü‚Ü•Ô‚·D
     1830CPU例外ハンドラ毎に出入口処理を作る必要がない場合には,次のように定義し
     1831て,CPU例外ハンドラの関数名をそのまま返す.
    18941832
    18951833#define EXC_ENTRY(excno, exchdr)        exchdr
     
    18971835(6-7-2-2) EXCHDR_ENTRY(excno, excno_num, exchdr)
    18981836
    1899 CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚ªexcnoCCPU—áŠOƒnƒ“ƒhƒ‰‚̊֐”–¼‚ªexchdr‚Å‚ ‚éCPU—á
    1900 ŠOƒnƒ“ƒhƒ‰‚̏o“üŒûˆ—‚𐶐¬‚·‚éƒ}ƒNƒDexcno_num‚ɂ́CƒAƒZƒ“ƒuƒŠŒ¾Œê‹L
    1901 q—p‚ɁCCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚ª”’l‚Å“n‚³‚ê‚éDCPU—áŠOƒnƒ“ƒhƒ‰–ˆ‚ɏo“üŒû
    1902 ˆ—‚ðì‚é•K—v‚ª‚È‚¢ê‡‚ɂ́C‹ó‚É’è‹`‚·‚éD
    1903 
    1904 6.7.3 CPU—áŠOƒnƒ“ƒhƒ‰‚̐ݒè
    1905 
    1906 (6-7-3-1) bool_t VALID_EXCNO_DEFEXC(EXCNO excno)iƒIƒvƒVƒ‡ƒ“j
    1907 
    1908 excno‚ªCDEF_EXC‚ɑ΂·‚éCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚Æ‚µ‚Ä—LŒø‚È’l‚Å‚ ‚éê‡‚É
    1909 trueC‚»‚¤‚Å‚È‚¢ê‡‚Éfalse‚ð•Ô‚·ƒ}ƒNƒD
    1910 
    1911 SSPƒJ[ƒlƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚ł́C‚±‚̃}ƒNƒ‚ÍŽg‚í‚ê‚Ä‚¢‚È‚¢‚½‚߁Cƒ^[
    1912 ƒQƒbƒgˆË‘¶•”‚ÅŽg‚í‚È‚¢‚È‚çC—pˆÓ‚·‚é•K—v‚ª‚È‚¢D
     1837CPU例外ハンドラ番号がexcno,CPU例外ハンドラの関数名がexchdrであるCPU例
     1838外ハンドラの出入口処理を生成するマクロ.excno_numには,アセンブリ言語記
     1839述用に,CPU例外ハンドラ番号が数値で渡される.CPU例外ハンドラ毎に出入口
     1840処理を作る必要がない場合には,空に定義する.
     1841
     18426.7.3 CPU例外ハンドラの設定
     1843
     1844(6-7-3-1) bool_t VALID_EXCNO_DEFEXC(EXCNO excno)(オプション)
     1845
     1846excnoが,DEF_EXCに対するCPU例外ハンドラ番号として有効な値である場合に
     1847true,そうでない場合にfalseを返すマクロ.
     1848
     1849SSPカーネルのターゲット非依存部では,このマクロは使われていないため,ター
     1850ゲット依存部で使わないなら,用意する必要がない.
    19131851
    19141852(6-7-3-2) void x_define_exc(EXCNO excno, FP exc_entry)
    19151853
    1916 excno‚ÅŽw’肳‚ꂽCPU—áŠOƒnƒ“ƒhƒ‰‚̏o“üŒûˆ—‚̔Ԓn‚ðexc_entry‚ɐݒ肷‚éD
    1917 
    1918 ‚±‚̊֐”‚́C•W€‚ÌCPU—áŠOŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ð—p‚¢‚½ê‡‚̂݁Cƒ^[ƒQƒb
    1919 ƒg”ñˆË‘¶•”‚©‚çŒÄ‚яo‚³‚ê‚éDCPU—áŠOŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ðƒ^[ƒQƒbƒgˆË‘¶
    1920 •”‚Å—pˆÓ‚µC‚»‚Ì’†‚Å‚±‚̊֐”‚ðŒÄ‚яo‚³‚È‚¢ê‡‚ɂ́C‚±‚̊֐”‚ð—pˆÓ‚·‚é
    1921 •K—v‚Í‚È‚¢D
    1922 
    1923 ‚±‚̊֐”‚́Cƒ^[ƒQƒbƒg”ñˆË‘¶•”‚̃J[ƒlƒ‹‰Šú‰»ˆ—‚©‚çŒÄ‚яo‚³‚ê‚邽‚߁C
    1924 ƒJ[ƒlƒ‹‚̏‰Šú‰»ˆ—iNMI‚ðœ‚­‚·‚ׂĂ̊„ž‚Ý‚ªƒ}ƒXƒN‚³‚ê‚Ä‚¢‚éj‚©‚çŒÄ
    1925 ‚яo‚¹‚é‚悤‚ÉŽÀ‘•‚·‚ê‚΂悢D
    1926 
    1927 Žw’肳‚ꂽCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚ªDEF_EXC‚ɑ΂·‚é‚à‚Ì‚Æ‚µ‚Ä—LŒø‚È’l‚Å‚È‚¢
    1928 ê‡‚Ì“®ì‚͕ۏ؂·‚é•K—v‚ª‚È‚¢iassert‚ŃGƒ‰[‚Æ‚·‚é‚Ì‚ª–]‚Ü‚µ‚¢jD‚±
    1929 ‚ê‚́CƒRƒ“ƒtƒBƒMƒ
    1930 ƒŒ[ƒ^‚ªCƒpƒX2‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶
    1931 •”‚Å’è‹`‚·‚éEXCNO_DEFEXC_VALID‚ð—p‚¢‚ăGƒ‰[‚ðŒŸo‚·‚邽‚ß‚Å‚ ‚éD
    1932 
    1933 6.7.4 CPU—áŠOŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚̕ύX
    1934 
    1935 (6-7-4-1) OMIT_INITIALIZE_EXCEPTIONiƒIƒvƒVƒ‡ƒ“j
    1936 
    1937 CPU—áŠOŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ðƒ^[ƒQƒbƒgˆË‘¶•”‚Å—pˆÓ‚µCƒ^[ƒQƒbƒg”ñˆË‘¶
    1938 •”‚ÉŠÜ‚Ü‚ê‚é•W€‚ÌŠ„ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»ˆ—‚ð—p‚¢‚È‚¢ê‡‚ɂ́C‚±‚̃V
    1939 ƒ“ƒ{ƒ‹‚ðƒ}ƒNƒ’è‹`‚·‚éD
    1940 
    1941 ‚±‚̃Vƒ“ƒ{ƒ‹‚ðƒ}ƒNƒ’è‹`‚·‚é‚ƁCEXCINIB‚Æinitialize_exception‚Ì’è‹`‚ªC
    1942 ƒJ[ƒlƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚©‚çŽæ‚菜‚©‚ê‚éD‚Ü‚½CTNUM_EXCNOC
    1943 tnum_excnoCexcinib_table‚Ì’è‹`‚ƁCCPU—áŠOƒnƒ“ƒhƒ‰–ˆ‚̏o“üŒûˆ—‚𐶐¬
    1944 ‚·‚邽‚ß‚Ì‹LqiEXCHDR_ENTRYƒ}ƒNƒ‚̃ŠƒXƒgj‚ðCƒRƒ“ƒtƒBƒMƒ
    1945 ƒŒ[ƒ^‚̃p
    1946 ƒX2‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚É‚æ‚Á‚Äkernel_cfg.c‚ɐ¶¬
    1947 ‚³‚ê‚È‚­‚È‚éD
    1948 
    1949 (6-7-4-2) void initialize_exception(void)iƒIƒvƒVƒ‡ƒ“j
    1950 
    1951 OMIT_INITIALIZE_EXCEPTION‚ðƒ}ƒNƒ’è‹`‚µ‚½ê‡‚ɂ́C‚±‚̊֐”‚ðƒ^[ƒQƒbƒg
    1952 ˆË‘¶•”‚Å—pˆÓ‚·‚éDOMIT_INITIALIZE_EXCEPTION‚ðƒ}ƒNƒ’è‹`‚·‚邱‚Æ‚É‚æ‚èŽæ
    1953 ‚菜‚©‚ê‚é‚»‚Ì‘¼‚̃f[ƒ^Œ^C•Ï”Cƒ}ƒNƒ‚́C‚±‚̊֐”‚ÅŽg—p‚·‚éê‡‚É‚Ì
    1954 ‚Ý—pˆÓ‚·‚ê‚΂悢D
    1955 
    1956 6.7.5 ƒfƒtƒHƒ‹ƒg‚ÌCPU—áŠOƒnƒ“ƒhƒ‰
    1957 
    1958 (6-7-5-1) default_exc_handler(void)iƒIƒvƒVƒ‡ƒ“j
    1959 
    1960 ƒRƒ“ƒtƒBƒMƒ
    1961 ƒŒ[ƒ^‚É‚æ‚èCPU—áŠOƒnƒ“ƒhƒ‰‚̃e[ƒuƒ‹‚𐶐¬‚·‚éê‡‚Ȃǂɂ́C
    1962 CPU—áŠOƒnƒ“ƒhƒ‰‚ð“o˜^‚µ‚È‚©‚Á‚½CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚ɑ΂µ‚āCƒfƒtƒHƒ‹ƒg
    1963 ‚ÌCPU—áŠOƒnƒ“ƒhƒ‰‚Æ‚µ‚āCdefault_exc_handler‚ð“o˜^‚·‚éD
    1964 
    1965 default_exc_handler‚́C•W€‚Ì‚à‚Ì‚ðƒ^[ƒQƒbƒgˆË‘¶•”‚Å—pˆÓ‚·‚邪Cƒ†[ƒU
    1966 ‚ª—pˆÓ‚µ‚½‚à‚Ì‚Å’u‚«Š·‚¦‚ç‚ê‚é‚悤‚ɁCOMIT_DEFAULT_EXC_HANDLER‚ðƒ}ƒNƒ
    1967 ’è‹`‚µ‚½ê‡‚ɂ́Cƒ^[ƒQƒbƒgˆË‘¶•”‚Å’è‹`‚µ‚È‚¢‚悤‚É‚·‚éD‚È‚¨Cƒ†[ƒU
    1968 ‚ª—pˆÓ‚·‚éê‡‚Ì–¼Ì‚́C_kernel_default_exc_handler‚Æ‚È‚éD
    1969 
    1970 6.8 ƒJ[ƒlƒ‹‚Ì‹N“®EI—¹‚ƃXƒ^ƒbƒN—̈æ‚È‚Ç
    1971 
    1972 (6-8-1) ƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    1973 [ƒ‹
    1974 
    1975 ƒJ[ƒlƒ‹‚̃Xƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    1976 [ƒ‹‚́CƒVƒXƒeƒ€‚̃ŠƒZƒbƒgŒã‚ɍŏ‰‚ÉŽÀs
    1977 ‚³‚ê‚éƒvƒƒOƒ‰ƒ€‚Å‚ ‚éDƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    1978 [ƒ‹‚́C•W€“I‚ɂ́CƒvƒƒZƒb
    1979 ƒTˆË‘¶•”‚Ü‚½‚̓`ƒbƒvˆË‘¶•”‚Å—pˆÓ‚µˆÈ‰º‚̏ˆ—‚ðs‚¤‚ªC‚»‚ê‚É‚±‚¾‚í‚é•K
    1980 —v‚Í‚È‚¢D‹ï‘Ì“I‚ɂ́CŠJ”­ŠÂ‹«‚É—pˆÓ‚³‚ê‚Ä‚¢‚éƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    1981 [ƒ‹
    1982 ‚ð—p‚¢‚é•û–@i‚±‚̏ꍇCƒ^[ƒQƒbƒgˆË‘¶•”‚ÅmainŠÖ”‚ð—pˆÓ‚·‚é•K—v‚ª‚ ‚éj
    1983 ‚âCƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Å—pˆÓ‚·‚éê‡‚ªl‚¦‚ç‚ê‚éD
    1984 
    1985 (a) ƒvƒƒZƒbƒTó‘Ԃ̏‰Šú‰»
    1986 
    1987 ƒvƒƒZƒbƒTƒ‚[ƒhCƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^CƒtƒŒ[ƒ€ƒ|ƒCƒ“ƒ^“™CƒvƒƒZƒbƒT‚̏ó
    1988 ‘Ô‚ð‰Šú‰»‚·‚éD‚Ü‚½CNMI‚ðœ‚­‚·‚ׂĂ̊„ž‚Ý‚ðƒ}ƒXƒN‚µ‚½ó‘ԁi‘SŠ„ž‚Ý
    1989 ƒƒbƒNó‘Ô‚Æ“¯“™‚̏ó‘ԁj‚Æ‚·‚éDDRAMƒRƒ“ƒgƒ[ƒ‰‚̏‰Šú‰»‚ȂǁCƒƒ‚ƒŠ‚ð
    1990 ƒAƒNƒZƒX‚·‚邽‚ß‚É•K—v‚ȏ‰Šú‰»ˆ—‚ð‚±‚±‚ōs‚Á‚Ä‚à‚æ‚¢iŽŸ‚Ì
    1991 hardware_init_hook‚ōs‚Á‚Ä‚à‚æ‚¢jD
    1992 
    1993 (b) hardware_init_hook‚ðŒÄ‚яo‚·
    1994 
    1995 ƒVƒXƒeƒ€‚̃ŠƒZƒbƒgŒã‚·‚®‚ɍs‚¤•K—v‚Ì‚ ‚éƒ^[ƒQƒbƒgƒVƒXƒeƒ€ˆË‘¶‚̏‰Šú‰»
    1996 ˆ—‚ðs‚¤‚½‚߂ɁChardware_init_hook‚ðŒÄ‚яo‚·Dhardware_init_hook‚ª—p
    1997 ˆÓ‚³‚ê‚Ä‚¢‚È‚¢ê‡‚́C‰½‚à‚µ‚È‚¢DGNUŠJ”­ŠÂ‹«‚ł́CƒŠƒ“ƒJƒXƒNƒŠƒvƒg’†‚Ì
    1998 weak definition‚É‚æ‚èChardware_init_hook‚ª—pˆÓ‚³‚ê‚Ä‚¢‚È‚¢ê‡‚Ì’l‚ð0
    1999 ‚Æ‚·‚邱‚ƂŁC‚±‚ê‚ðŽÀŒ»‚Å‚«‚éDweak definition‚Ì‹@”\‚ðŽ‚½‚È‚¢ŠJ”­ŠÂ‹«
    2000 ‚ł́Chardware_init_hook‚ð•K‚¸ŒÄ‚яo‚·‚±‚Æ‚É‚·‚éD
    2001 
    2002 hardware_init_hook‚́Cƒ^[ƒQƒbƒgˆË‘¶•”‚Å—pˆÓ‚·‚é‚Ì‚ª•W€‚Å‚ ‚邪CƒVƒX
    2003 ƒeƒ€‚̃ŠƒZƒbƒgŒã‚·‚®‚ɍs‚¤•K—v‚Ì‚ ‚鏉Šú‰»ˆ—‚ð’ljÁ‚·‚邽‚߂ɁCƒAƒvƒŠ
    2004 ƒP[ƒVƒ‡ƒ“‚Å—pˆÓ‚µ‚½‚à‚Ì‚ð—p‚¢‚éê‡‚à‚ ‚éD
    2005 
    2006 ƒƒ‚ƒŠƒAƒNƒZƒX‚É•K—v‚ȏ‰Šú‰»ˆ—‚ðhardware_init_hook‚ōs‚¤ê‡‚ɂ́C‚±
    2007 ‚ê‚ðŒÄ‚яo‚·Žž“_‚сƒ‚ƒŠ‚ɃAƒNƒZƒX‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚½‚߁CŠÖ”iƒTƒuƒ‹[
    2008 ƒ`ƒ“j‚ðŒÄ‚яo‚·‚½‚߂ɃXƒ^ƒbƒN‚ðŽg—p‚·‚éƒvƒƒZƒbƒT‚ł́C–ß‚è”Ô’n‚ð”Ä—p
    2009 ƒŒƒWƒXƒ^‚É“ü‚ê‚ČĂяo‚·‚Æ‚¢‚Á‚½H•v‚ª•K—v‚Å‚ ‚éD‚±‚̏ꍇC
    2010 hardware_init_hook‚ðCŒ¾Œê‚Å‹Lq‚·‚邱‚Æ‚Í‚Å‚«‚È‚­‚Ȃ邪C‚â‚Þ‚ð‚¦‚È‚¢D
    2011 
    2012 (c) bssƒZƒNƒVƒ‡ƒ“‚ÆdataƒZƒNƒVƒ‡ƒ“‚̏‰Šú‰»
    2013 
    2014 bssƒZƒNƒVƒ‡ƒ“‚ðƒNƒŠƒA‚µCdataƒZƒNƒVƒ‡ƒ“‚ɏ‰Šú’l‚ðÝ’è‚·‚éD
    2015 
    2016 ‚½‚¾‚µCƒJ[ƒlƒ‹–{‘̂́Ckerflg‚ªfalsei0j‚ɏ‰Šú‰»‚³‚ê‚邱‚ƈȊO‚ɁC
    2017 ‚±‚ê‚ç‚̃ZƒNƒVƒ‡ƒ“‚ª‰Šú‰»‚³‚ê‚邱‚ƂɈˑ¶‚µ‚Ä‚¢‚È‚¢‚½‚߁CƒXƒ^[ƒgƒAƒb
    2018 ƒvƒ‚ƒWƒ
    2019 [ƒ‹‚ðƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Å—pˆÓ‚·‚éê‡‚ŁCƒVƒXƒeƒ€ƒT[ƒrƒX‚âƒAƒv
    2020 ƒŠƒP[ƒVƒ‡ƒ“‚ª‚±‚ê‚ç‚̃ZƒNƒVƒ‡ƒ“‚ª‰Šú‰»‚³‚ê‚邱‚ƂɈˑ¶‚µ‚Ä‚¢‚È‚¢ê‡
    2021 ‚ɂ́CƒVƒXƒeƒ€‚Ì‹N“®ŽžŠÔ‚ð’Zk‚·‚邽‚߂ɁCkerflg‚ðfalse‚ɏ‰Šú‰»‚·‚邾‚¯
    2022 ‚ŏ\•ª‚Å‚ ‚éD
    2023 
    2024 (d) software_init_hook‚ðŒÄ‚яo‚·
    2025 
    2026 ŠJ”­ŠÂ‹«i“Á‚Ƀ‰ƒCƒuƒ‰ƒŠj‚Ɉˑ¶‚µ‚Ä•K—v‚ȏ‰Šú‰»ˆ—‚ðs‚¤‚½‚߂ɁC
    2027 software_init_hook‚ðŒÄ‚яo‚·Dsoftware_init_hook‚ª—pˆÓ‚³‚ê‚Ä‚¢‚È‚¢ê‡
    2028 ‚́C‰½‚à‚µ‚È‚¢DGNUŠJ”­ŠÂ‹«‚ł́CƒŠƒ“ƒJƒXƒNƒŠƒvƒg’†‚Ìweak definition‚É
    2029 ‚æ‚èCsoftware_init_hook‚ª—pˆÓ‚³‚ê‚Ä‚¢‚È‚¢ê‡‚Ì’l‚ð0‚Æ‚·‚邱‚ƂŁC‚±‚ê
    2030 ‚ðŽÀŒ»‚Å‚«‚éDweak definition‚Ì‹@”\‚ðŽ‚½‚È‚¢ŠJ”­ŠÂ‹«‚ł́C
    2031 software_init_hook‚ð•K‚¸ŒÄ‚яo‚·‚±‚Æ‚É‚·‚éD
    2032 
    2033 software_init_hook‚́Cƒ^[ƒQƒbƒgˆË‘¶•”‚Å—pˆÓ‚·‚é‚Ì‚ª•W€‚Å‚ ‚éD
    2034 
    2035 (e) sta_ker‚Ö•ªŠò
    2036 
    2037 sta_ker‚ðŒÄ‚яo‚·Dsta_ker‚́CNMI‚ðœ‚­‚·‚ׂĂ̊„ž‚Ý‚ðƒ}ƒXƒN‚µ‚½ó‘Ô
    2038 i‘SŠ„ž‚݃ƒbƒNó‘Ô‚Æ“¯“™‚̏ó‘ԁj‚ŌĂяo‚³‚È‚¯‚ê‚΂Ȃç‚È‚¢Dsta_ker‚©
    2039 ‚ç‚̓Šƒ^[ƒ“‚·‚邱‚Æ‚ª‚È‚¢‚½‚߁CƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    2040 [ƒ‹‚É–ß‚Á‚Ä‚­‚邱
    2041 ‚Ƃ͍l‚¦‚é•K—v‚ª‚È‚¢D
     1854excnoで指定されたCPU例外ハンドラの出入口処理の番地をexc_entryに設定する.
     1855
     1856この関数は,標準のCPU例外管理機能の初期化処理を用いた場合のみ,ターゲッ
     1857ト非依存部から呼び出される.CPU例外管理機能の初期化処理をターゲット依存
     1858部で用意し,その中でこの関数を呼び出さない場合には,この関数を用意する
     1859必要はない.
     1860
     1861この関数は,ターゲット非依存部のカーネル初期化処理から呼び出されるため,
     1862カーネルの初期化処理(NMIを除くすべての割込みがマスクされている)から呼
     1863び出せるように実装すればよい.
     1864
     1865指定されたCPU例外ハンドラ番号がDEF_EXCに対するものとして有効な値でない
     1866場合の動作は保証する必要がない(assertでエラーとするのが望ましい).こ
     1867れは,コンフィギュレータが,パス2のテンプレートファイルのターゲット依存
     1868部で定義するEXCNO_DEFEXC_VALIDを用いてエラーを検出するためである.
     1869
     18706.7.4 CPU例外管理機能の初期化処理の変更
     1871
     1872(6-7-4-1) OMIT_INITIALIZE_EXCEPTION(オプション)
     1873
     1874CPU例外管理機能の初期化処理をターゲット依存部で用意し,ターゲット非依存
     1875部に含まれる標準の割込み管理機能の初期化処理を用いない場合には,このシ
     1876ンボルをマクロ定義する.
     1877
     1878このシンボルをマクロ定義すると,EXCINIBとinitialize_exceptionの定義が,
     1879カーネルのターゲット非依存部から取り除かれる.また,TNUM_EXCNO,
     1880tnum_excno,excinib_tableの定義と,CPU例外ハンドラ毎の出入口処理を生成
     1881するための記述(EXCHDR_ENTRYマクロのリスト)を,コンフィギュレータのパ
     1882ス2のテンプレートファイルのターゲット非依存部によってkernel_cfg.cに生成
     1883されなくなる.
     1884
     1885(6-7-4-2) void initialize_exception(void)(オプション)
     1886
     1887OMIT_INITIALIZE_EXCEPTIONをマクロ定義した場合には,この関数をターゲット
     1888依存部で用意する.OMIT_INITIALIZE_EXCEPTIONをマクロ定義することにより取
     1889り除かれるその他のデータ型,変数,マクロは,この関数で使用する場合にの
     1890み用意すればよい.
     1891
     18926.7.5 デフォルトのCPU例外ハンドラ
     1893
     1894(6-7-5-1) default_exc_handler(void)(オプション)
     1895
     1896コンフィギュレータによりCPU例外ハンドラのテーブルを生成する場合などには,
     1897CPU例外ハンドラを登録しなかったCPU例外ハンドラ番号に対して,デフォルト
     1898のCPU例外ハンドラとして,default_exc_handlerを登録する.
     1899
     1900default_exc_handlerは,標準のものをターゲット依存部で用意するが,ユーザ
     1901が用意したもので置き換えられるように,OMIT_DEFAULT_EXC_HANDLERをマクロ
     1902定義した場合には,ターゲット依存部で定義しないようにする.なお,ユーザ
     1903が用意する場合の名称は,_kernel_default_exc_handlerとなる.
     1904
     19056.8 カーネルの起動・終了とスタック領域など
     1906
     1907(6-8-1) スタートアップモジュール
     1908
     1909カーネルのスタートアップモジュールは,システムのリセット後に最初に実行
     1910されるプログラムである.スタートアップモジュールは,標準的には,プロセッ
     1911サ依存部またはチップ依存部で用意し以下の処理を行うが,それにこだわる必
     1912要はない.具体的には,開発環境に用意されているスタートアップモジュール
     1913を用いる方法(この場合,ターゲット依存部でmain関数を用意する必要がある)
     1914や,アプリケーションで用意する場合が考えられる.
     1915
     1916(a) プロセッサ状態の初期化
     1917
     1918プロセッサモード,スタックポインタ,フレームポインタ等,プロセッサの状
     1919態を初期化する.また,NMIを除くすべての割込みをマスクした状態(全割込み
     1920ロック状態と同等の状態)とする.DRAMコントローラの初期化など,メモリを
     1921アクセスするために必要な初期化処理をここで行ってもよい(次の
     1922hardware_init_hookで行ってもよい).
     1923
     1924(b) hardware_init_hookを呼び出す
     1925
     1926システムのリセット後すぐに行う必要のあるターゲットシステム依存の初期化
     1927処理を行うために,hardware_init_hookを呼び出す.hardware_init_hookが用
     1928意されていない場合は,何もしない.GNU開発環境では,リンカスクリプト中の
     1929weak definitionにより,hardware_init_hookが用意されていない場合の値を0
     1930とすることで,これを実現できる.weak definitionの機能を持たない開発環境
     1931では,hardware_init_hookを必ず呼び出すことにする.
     1932
     1933hardware_init_hookは,ターゲット依存部で用意するのが標準であるが,シス
     1934テムのリセット後すぐに行う必要のある初期化処理を追加するために,アプリ
     1935ケーションで用意したものを用いる場合もある.
     1936
     1937メモリアクセスに必要な初期化処理をhardware_init_hookで行う場合には,こ
     1938れを呼び出す時点でメモリにアクセスすることができないため,関数(サブルー
     1939チン)を呼び出すためにスタックを使用するプロセッサでは,戻り番地を汎用
     1940レジスタに入れて呼び出すといった工夫が必要である.この場合,
     1941hardware_init_hookをC言語で記述することはできなくなるが,やむをえない.
     1942
     1943(c) bssセクションとdataセクションの初期化
     1944
     1945bssセクションをクリアし,dataセクションに初期値を設定する.
     1946
     1947ただし,カーネル本体は,kerflgがfalse(=0)に初期化されること以外に,
     1948これらのセクションが初期化されることに依存していないため,スタートアッ
     1949プモジュールをアプリケーションで用意する場合で,システムサービスやアプ
     1950リケーションがこれらのセクションが初期化されることに依存していない場合
     1951には,システムの起動時間を短縮するために,kerflgをfalseに初期化するだけ
     1952で十分である.
     1953
     1954(d) software_init_hookを呼び出す
     1955
     1956開発環境(特にライブラリ)に依存して必要な初期化処理を行うために,
     1957software_init_hookを呼び出す.software_init_hookが用意されていない場合
     1958は,何もしない.GNU開発環境では,リンカスクリプト中のweak definitionに
     1959より,software_init_hookが用意されていない場合の値を0とすることで,これ
     1960を実現できる.weak definitionの機能を持たない開発環境では,
     1961software_init_hookを必ず呼び出すことにする.
     1962
     1963software_init_hookは,ターゲット依存部で用意するのが標準である.
     1964
     1965(e) sta_kerへ分岐
     1966
     1967sta_kerを呼び出す.sta_kerは,NMIを除くすべての割込みをマスクした状態
     1968(全割込みロック状態と同等の状態)で呼び出さなければならない.sta_kerか
     1969らはリターンすることがないため,スタートアップモジュールに戻ってくるこ
     1970とは考える必要がない.
    20421971
    20431972(6-8-2) void target_initialize(void)
    20441973
    2045 ƒ^[ƒQƒbƒgˆË‘¶•”‚̏‰Šú‰»‚ðs‚¤ŠÖ”Dsta_ker‚̍ŏ‰‚ŌĂяo‚³‚ê‚éDƒvƒƒZƒb
    2046 ƒTEƒ`ƒbƒvEŠJ”­ŠÂ‹«ˆË‘¶‚̏‰Šú‰»ˆ—‚ðC‚»‚ê‚ç‚̈ˑ¶•”‚ɐ؂蕪‚¯‚邱‚Æ
    2047 ‚à‰Â”\‚Å‚ ‚éD
    2048 
    2049 ‚±‚̊֐”‚́C‚ ‚­‚Ü‚Å‚àƒJ[ƒlƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”‚̏‰Šú‰»ˆ—‚ðs‚¤‚½‚ß
    2050 ‚Ì‚à‚Ì‚Å‚ ‚éDƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚É•K—v‚ȏ‰Šú‰»ˆ—‚́C‰Šú‰»ƒ‹[ƒ`ƒ“‚ōs
    2051 ‚¤‚Ì‚ªŠî–{‚Å‚ ‚邪CƒVƒXƒeƒ€‚̃ŠƒZƒbƒgŒã‚·‚®‚ɍs‚¤•K—v‚ª‚ ‚éê‡‚ɂ́C
    2052 hardware_init_hook‚ð—p‚¢‚éD
     1974ターゲット依存部の初期化を行う関数.sta_kerの最初で呼び出される.プロセッ
     1975サ・チップ・開発環境依存の初期化処理を,それらの依存部に切り分けること
     1976も可能である.
     1977
     1978この関数は,あくまでもカーネルのターゲット依存部の初期化処理を行うため
     1979のものである.アプリケーションに必要な初期化処理は,初期化ルーチンで行
     1980うのが基本であるが,システムのリセット後すぐに行う必要がある場合には,
     1981hardware_init_hookを用いる.
    20531982
    20541983(6-8-3) void call_exit_kernel(void)
    20551984
    2056 ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦‚āCexit_kernel‚Ö•ªŠò‚·‚éŠÖ”Dext_ker‚©
    2057 ‚çŒÄ‚яo‚³‚ê‚éDexit_kernel‚©‚ç‚̓Šƒ^[ƒ“‚·‚邱‚Æ‚ª‚È‚¢‚½‚߁C‚±‚̊֐”‚É
    2058 –ß‚Á‚Ä‚­‚邱‚Ƃ͍l‚¦‚é•K—v‚ª‚È‚¢D
    2059 
    2060 ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦‚é‚̂́CI—¹ˆ—ƒ‹[ƒ`ƒ“‚ðC”ñƒ^ƒXƒNƒRƒ“
    2061 ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN‚ÅŽÀs‚·‚邽‚ß‚Å‚ ‚éDI—¹ˆ—ƒ‹[ƒ`ƒ“‚ðƒ^ƒXƒN—p‚Ì
    2062 ƒXƒ^ƒbƒN‚ÅŽÀs‚·‚é‚ƁCŠeƒ^ƒXƒN‚̃Xƒ^ƒbƒN—̈æ‚̃TƒCƒY‚ðŒˆ’è‚·‚éÛ‚ɁCI
    2063 —¹ˆ—ƒ‹[ƒ`ƒ“‚ªŽg—p‚·‚éƒXƒ^ƒbƒN—̈æ‚ðl—¶‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D‚±‚ê‚ɂ́C
    2064 I—¹ˆ—ƒ‹[ƒ`ƒ“‚ªŽg—p‚·‚éƒXƒ^ƒbƒN—̈悪‘å‚«‚¢ê‡‚ÉŠeƒ^ƒXƒN‚̃Xƒ^ƒbƒN
    2065 —̈æ‚𖳑ʂɑ傫‚­‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚±‚ƂɉÁ‚¦‚āCˆÓ}‚µ‚È‚¢ƒXƒ^ƒbƒNƒI[
    2066 ƒo[ƒtƒ[‚ª”­¶‚·‚é‰Â”\«‚ð‚‚ß‚é‚Æ‚¢‚¤–â‘肪‚ ‚éD
    2067 
    2068 ‚±‚̊֐”‚́C‘SŠ„ž‚݃ƒbƒNó‘ԂŌĂ΂ê‚邽‚߁C‘SŠ„ž‚݃ƒbƒNó‘Ô‚©‚çŒÄ
    2069 ‚яo‚·‚±‚Æ‚ª‚Å‚«‚È‚¢ŠÖ”‚ðŒÄ‚΂Ȃ¢‚悤‚ÉŽÀ‘•‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
     1985非タスクコンテキストに切り換えて,exit_kernelへ分岐する関数.ext_kerか
     1986ら呼び出される.exit_kernelからはリターンすることがないため,この関数に
     1987戻ってくることは考える必要がない.
     1988
     1989非タスクコンテキストに切り換えるのは,終了処理ルーチンを,非タスクコン
     1990テキスト用のスタックで実行するためである.終了処理ルーチンをタスク用の
     1991スタックで実行すると,各タスクのスタック領域のサイズを決定する際に,終
     1992了処理ルーチンが使用するスタック領域を考慮しなければならない.これには,
     1993終了処理ルーチンが使用するスタック領域が大きい場合に各タスクのスタック
     1994領域を無駄に大きくしなければならないことに加えて,意図しないスタックオー
     1995バーフローが発生する可能性を高めるという問題がある.
     1996
     1997この関数は,全割込みロック状態で呼ばれるため,全割込みロック状態から呼
     1998び出すことができない関数を呼ばないように実装しなければならない.
    20701999
    20712000(6-8-4) void target_exit(void)
    20722001
    2073 ƒ^[ƒQƒbƒgˆË‘¶•”‚̏I—¹ˆ—‚ðs‚¤ŠÖ”D‚±‚̊֐”‚́CƒJ[ƒlƒ‹I—¹ˆ—‚̍Å
    2074 Œã‚ɌĂяo‚³‚êCƒŠƒ^[ƒ“‚µ‚Ä‚Í‚È‚ç‚È‚¢DƒvƒƒZƒbƒTEƒ`ƒbƒvEŠJ”­ŠÂ‹«ˆË
    2075 ‘¶‚̏I—¹ˆ—‚ðC‚»‚ê‚ç‚̈ˑ¶•”‚ɐ؂蕪‚¯‚邱‚Æ‚à‰Â”\‚Å‚ ‚éD
    2076 
    2077 ‚±‚̊֐”‚ł́CÅ‰‚ɁCatexit‚É‚æ‚Á‚Ä“o˜^‚³‚ꂽŠÖ”‚ƃfƒXƒgƒ‰ƒNƒ^‚ðŒÄ‚Ñ
    2078 o‚·‚±‚Æ‚ðˆÓ}‚µ‚Ä‚¨‚èC•W€“I‚ɂ́Csoftware_term_hook‚ðŒÄ‚яo‚·D
    2079 software_term_hook‚ª—pˆÓ‚³‚ê‚Ä‚¢‚È‚¢ê‡‚́C‰½‚à‚µ‚È‚¢DGNUŠJ”­ŠÂ‹«‚ł́C
    2080 ƒŠƒ“ƒJƒXƒNƒŠƒvƒg’†‚Ìweak definition‚É‚æ‚èCsoftware_term_hook‚ª—pˆÓ‚³‚ê
    2081 ‚Ä‚¢‚È‚¢ê‡‚Ì’l‚ð0‚Æ‚·‚邱‚ƂŁC‚±‚ê‚ðŽÀŒ»‚Å‚«‚éDweak definition‚Ì‹@
    2082 ”\‚ðŽ‚½‚È‚¢ŠJ”­ŠÂ‹«‚ł́Csoftware_term_hook‚ð•K‚¸ŒÄ‚яo‚·‚±‚Æ‚É‚·‚éD
    2083 
    2084 ‚±‚̊֐”‚́C‘SŠ„ž‚݃ƒbƒNó‘ԂŌĂ΂ê‚邽‚߁C‘SŠ„ž‚݃ƒbƒNó‘Ô‚©‚çŒÄ
    2085 ‚яo‚·‚±‚Æ‚ª‚Å‚«‚È‚¢ŠÖ”‚ðŒÄ‚΂Ȃ¢‚悤‚ÉŽÀ‘•‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    2086 
    2087 –{ŠÖ”‚𖳌Àƒ‹[ƒv‚ÅŽÀ‘•‚·‚éÛ‚́CˆÈ‰º‚ÌŒ`Ž®‚Æ‚·‚邱‚Æ(TECS‚̃p[ƒT‚Ì
    2088 §ŒÀ‚ɍ‡‚킹‚邽‚߁jD
     2002ターゲット依存部の終了処理を行う関数.この関数は,カーネル終了処理の最
     2003後に呼び出され,リターンしてはならない.プロセッサ・チップ・開発環境依
     2004存の終了処理を,それらの依存部に切り分けることも可能である.
     2005
     2006この関数では,最初に,atexitによって登録された関数とデストラクタを呼び
     2007出すことを意図しており,標準的には,software_term_hookを呼び出す.
     2008software_term_hookが用意されていない場合は,何もしない.GNU開発環境では,
     2009リンカスクリプト中のweak definitionにより,software_term_hookが用意され
     2010ていない場合の値を0とすることで,これを実現できる.weak definitionの機
     2011能を持たない開発環境では,software_term_hookを必ず呼び出すことにする.
     2012
     2013この関数は,全割込みロック状態で呼ばれるため,全割込みロック状態から呼
     2014び出すことができない関数を呼ばないように実装しなければならない.
     2015
     2016本関数を無限ループで実装する際は,以下の形式とすること(TECSのパーサの
     2017制限に合わせるため).
    20892018
    20902019void
     
    20932022       
    20942023        /*
    2095          * ƒ^[ƒQƒbƒgˆË‘¶‚̏ˆ—
     2024         * ターゲット依存の処理
    20962025         */
    20972026       
     
    21032032
    21042033
    2105 6.9 ƒJ[ƒlƒ‹“à•”‚̃`ƒ
    2106 [ƒjƒ“ƒO
    2107 
    2108 6.9.1 ƒrƒbƒgƒ}ƒbƒvƒT[ƒ`
    2109 
    2110 (6-9-1-1) OMIT_BITMAP_SEARCHiƒIƒvƒVƒ‡ƒ“j
    2111 (6-9-1-2) uint_t bitmap_search(uint16_t bitmap)iƒIƒvƒVƒ‡ƒ“j
    2112 
    2113 ƒ^[ƒQƒbƒg”ñˆË‘¶•”‚ŁCuint16_tŒ^‚̐®”’libitmapj’†‚Ì1‚̃rƒbƒg‚Ì“àCÅ
    2114 ‚à‰ºˆÊi‰Ej‚Ì‚à‚Ì‚ðƒT[ƒ`‚µC‚»‚̃rƒbƒg”ԍ†‚ð•Ô‚·ŠÖ”bitmap_search‚ð—p
    2115 ˆÓ‚µ‚Ä‚¢‚éD‚±‚±‚ŁCƒrƒbƒg”ԍ†‚͍ʼnºˆÊƒrƒbƒg‚ð0‚Æ‚µCbitmap‚É0‚ðŽw’肵
    2116 ‚Ä‚Í‚È‚ç‚È‚¢‚à‚Ì‚Æ‚µ‚Ä‚¢‚éD
    2117 
    2118 ƒrƒbƒgƒT[ƒ`–½—ß‚ðŽ‚ÂƒvƒƒZƒbƒT‚ł́Cbitmap_search‚ðCƒrƒbƒgƒT[ƒ`–½—ß
    2119 ‚ðŽg‚¤‚悤‚ɏ‘‚«’¼‚µ‚½•û‚ªŒø—¦‚ª—Ç‚¢ê‡‚ª‚ ‚éD‚±‚̂悤‚ȏꍇ‚ɂ́Cƒ^[
    2120 ƒQƒbƒgˆË‘¶•”‚ŃrƒbƒgƒT[ƒ`–½—ß‚ðŽg‚Á‚½bitmap_search‚ð’è‹`‚µC
    2121 OMIT_BITMAP_SEARCH‚ðƒ}ƒNƒ’è‹`‚·‚éD
    2122 
    2123 •W€ƒ‰ƒCƒuƒ‰ƒŠ‚ɃrƒbƒgƒT[ƒ`–½—ß‚ð—p‚¢‚½ffs‚ª‚ ‚éê‡Cbitmap_search‚ð
    2124 (ffs(bitmap) - 1)‚É’è‹`‚·‚é‚Æ‚æ‚¢D
    2125 
    2126 (6-9-1-3) uint16_t PRIMAP_BIT(PRI pri)iƒIƒvƒVƒ‡ƒ“j
    2127 
    2128 ƒrƒbƒgƒT[ƒ`–½—߂̃T[ƒ`•ûŒü‚ª‹t‚È‚Ç‚Ì——R‚ŁC—Dæ“x‚ƃrƒbƒg‚Ƃ̑Ήž‚ð
    2129 •ÏX‚µ‚½‚¢ê‡‚ɂ́CPRIMAP_BIT‚ðƒ}ƒNƒ’è‹`‚·‚éD
    2130 
    2131 6.10 ƒJ[ƒlƒ‹ŽÀ‘•‚ÉŠÖ‚·‚é‚»‚Ì‘¼‚Ì’è‹`
    2132 
    2133 6.10.1 ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈æ
     20346.9 カーネル内部のチューニング
     2035
     20366.9.1 ビットマップサーチ
     2037
     2038(6-9-1-1) OMIT_BITMAP_SEARCH(オプション)
     2039(6-9-1-2) uint_t bitmap_search(uint16_t bitmap)(オプション)
     2040
     2041ターゲット非依存部で,uint16_t型の整数値(bitmap)中の1のビットの内,最
     2042も下位(右)のものをサーチし,そのビット番号を返す関数bitmap_searchを用
     2043意している.ここで,ビット番号は最下位ビットを0とし,bitmapに0を指定し
     2044てはならないものとしている.
     2045
     2046ビットサーチ命令を持つプロセッサでは,bitmap_searchを,ビットサーチ命令
     2047を使うように書き直した方が効率が良い場合がある.このような場合には,ター
     2048ゲット依存部でビットサーチ命令を使ったbitmap_searchを定義し,
     2049OMIT_BITMAP_SEARCHをマクロ定義する.
     2050
     2051標準ライブラリにビットサーチ命令を用いたffsがある場合,bitmap_searchを
     2052(ffs(bitmap) - 1)に定義するとよい.
     2053
     2054(6-9-1-3) uint16_t PRIMAP_BIT(PRI pri)(オプション)
     2055
     2056ビットサーチ命令のサーチ方向が逆などの理由で,優先度とビットとの対応を
     2057変更したい場合には,PRIMAP_BITをマクロ定義する.
     2058
     20596.10 カーネル実装に関するその他の定義
     2060
     20616.10.1 非タスクコンテキスト用のスタック領域
    21342062
    21352063(6-10-1-1) DEFAULT_ISTKSZ
    21362064
    2137 DEF_ICS‚É‚æ‚è”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈悪Žw’肳‚ê‚È‚¢ê‡‚́C
    2138 ƒfƒtƒHƒ‹ƒg‚̃Xƒ^ƒbƒN—̈æ‚̃TƒCƒYD
    2139 
    2140 ¦
    2141 (6-10-1-2) DEFAULT_ISTKiƒIƒvƒVƒ‡ƒ“j
    2142 
    2143 DEF_ICS‚É‚æ‚è”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈悪Žw’肳‚ê‚È‚¢ê‡‚́C
    2144 ƒfƒtƒHƒ‹ƒg‚̃Xƒ^ƒbƒN—̈æ‚̐擪”Ô’nD‚±‚̃}ƒNƒ‚ª’è‹`‚³‚ê‚È‚¢ê‡‚ɂ́C
    2145 ƒTƒCƒY‚ªDEFAULT_ISTKSZ‚̃Xƒ^ƒbƒN—̈悪C”z—ñ‚É‚æ‚èŠm•Û‚³‚ê‚éD
    2146 
    2147 (6-10-1-3) STK_T *TOPPERS_ISTKPT(STK_T *istk, SIZE istksz)iƒIƒvƒVƒ‡ƒ“j
    2148 
    2149 ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚̏‰Šú’l‚ð•ÛŽ‚·‚é•Ï”iistkptj
    2150 ‚ð—p‚¢‚éê‡‚ɁC‚±‚̃Vƒ“ƒ{ƒ‹‚ɁCƒXƒ^ƒbƒN—̈æ‚̐擪”Ô’niistkj‚ƃXƒ^ƒb
    2151 ƒN—̈æ‚̃TƒCƒYiistkszj‚©‚çCƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚̏‰Šú’l‚ð‹‚ß‚éƒ}ƒNƒ‚ð
    2152 ’è‹`‚·‚éD
    2153 
    2154 6.10.2 ‹óƒ‰ƒxƒ‹‚Ì’è‹`
    2155 
    2156 (6-10-2-1) TOPPERS_EMPTY_LABEL(type, symbol)iƒIƒvƒVƒ‡ƒ“j
    2157 
    2158 ƒŠƒ“ƒNƒGƒ‰[‚ð–h‚®‚½‚߂ɁCƒf[ƒ^Œ^type‚Ì”z—ñ‚Å‚ ‚é•Ï”symbol‚É’è‹`‚ð—^
    2159 ‚¦‚邽‚߂̃}ƒNƒD—^‚¦‚½’è‹`‚ªŽQÆ‚³‚ê‚邱‚Æ‚Í‚È‚¢‚½‚߁C‚ǂ̂悤‚È’è‹`
    2160 ‚ð—^‚¦‚Ä‚à‚æ‚¢D
    2161 
    2162 ƒfƒtƒHƒ‹ƒg‚ł́Csymbol‚ðC—v‘fŒ^‚ªtype‚ŃTƒCƒY‚ª0‚Ì”z—ñ‚É’è‹`‚µ‚Ä‚¢‚éD
    2163 ƒTƒCƒY‚ª0‚Ì”z—ñ‚ªƒGƒ‰[‚Æ‚È‚ç‚È‚¢ƒRƒ“ƒpƒCƒ‰iGCC‚Í‚±‚ê‚ÉŠY“–j‚ð—p‚¢‚é
    2164 ê‡‚ɂ́Cƒ^[ƒQƒbƒgˆË‘¶•”‚Å’è‹`‚·‚é•K—v‚Í‚È‚¢D
    2165 
    2166 6.11 ƒgƒŒ[ƒXƒƒO‹@”\‚ÉŠÖ‚·‚éÝ’è
    2167 
    2168 SSPƒJ[ƒlƒ‹‚̃\[ƒXƒR[ƒh‚ɂ́CƒJ[ƒlƒ‹‚ÌŽÀsƒgƒŒ[ƒXƒƒO‚ðŽæ“¾‚·‚邽‚ß
    2169 ‚̃}ƒNƒ“™‚ª–„‚ߍž‚ñ‚Å‚ ‚éDƒfƒtƒHƒ‹ƒg‚ł́C‚±‚ê‚ç‚̃}ƒNƒ‚Í‹ó‚É’è‹`‚³
    2170 ‚ê‚ăgƒŒ[ƒXƒƒO‚̎擾‚͍s‚í‚È‚¢‚ªC‚±‚ê‚ç‚̃}ƒNƒ‚ð“KØ‚É’è‹`‚·‚邱‚Æ
    2171 ‚ŃgƒŒ[ƒXƒƒO‚̎擾‚ðs‚¤‚±‚Æ‚ª‚Å‚«‚éD
    2172 
    2173 6.11.1 Žæ“¾‚Å‚«‚éƒgƒŒ[ƒXƒƒO‚ÌŽí—ނƃ}ƒNƒ
    2174 
    2175 Žæ“¾‚Å‚«‚éƒgƒŒ[ƒXƒƒO‚ÌŽí—ނƁC‚»‚ê‚ðŽæ“¾‚·‚邽‚ß‚É’è‹`‚·‚éƒ}ƒNƒ‚ÍŽŸ
    2176 ‚Ì’Ê‚è‚Å‚ ‚éD
    2177 
    2178 (a) ƒJ[ƒlƒ‹‚Ì“®ìŠJŽn‚ƏI—¹
    2179 
    2180 ŽŸ‚̃}ƒNƒ‚ð’è‹`‚·‚邱‚ƂŁCƒJ[ƒlƒ‹‚Ì“®ìŠJŽnŽž‚ƏI—¹Žž‚̃gƒŒ[ƒXƒƒO
    2181 ‚ðŽæ“¾‚·‚邱‚Æ‚ª‚Å‚«‚éD
    2182 
    2183         LOG_KER_ENTER           ƒJ[ƒlƒ‹‚ª“®ì‚ðŠJŽn‚·‚é’¼‘Oi‰Šú‰»‚ÌŠ®—¹Œãj
    2184         LOG_KER_LEAVE           ƒJ[ƒlƒ‹‚̏I—¹iext_kerj‚ªŒÄ‚΂ꂽ’¼ŒãiI—¹ˆ
    2185                                                 —‚ÌŽÀs‘Oj
    2186 
    2187 (b) ˆ—’PˆÊ‚ÌŽÀsŠJŽn‚ƏI—¹
    2188 
    2189 ŽŸ‚̃}ƒNƒ‚ð’è‹`‚·‚邱‚ƂŁCŠ„ž‚݃nƒ“ƒhƒ‰iINHjCŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`
    2190 ƒ“iISRjCŽüŠúƒnƒ“ƒhƒ‰iCYCjCƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰iALMjCCPU—áŠOƒnƒ“ƒh
    2191 ƒ‰iEXCjCƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“iTEXj‚ÌŽÀsŠJŽn‘O‚ƏI—¹Œã‚̃gƒŒ[ƒX
    2192 ƒƒO‚ðŽæ“¾‚·‚邱‚Æ‚ª‚Å‚«‚éD
    2193 
    2194         LOG_<ˆ—’PˆÊ—ª†>_ENTER        ˆ—’PˆÊ‚ÌŽÀsŠJŽn’¼‘O
    2195         LOG_<ˆ—’PˆÊ—ª†>_LEAVE        ˆ—’PˆÊ‚̏I—¹’¼Œã
    2196 
    2197 Š„ž‚݃nƒ“ƒhƒ‰‚́CƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ª“o˜^‚µ‚½‚à‚Ì‚Ì‚Ý‚ð‘ΏۂƂµCŠ„ž‚Ý
    2198 ƒT[ƒrƒXƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚·‚½‚߂ɃJ[ƒlƒ‹“à‚ɐ¶¬‚³‚ê‚é‚à‚̂͑ΏۂƂµ‚È
    2199 ‚¢Dƒ^ƒXƒN‚ÌŽÀsŠJŽn‚ƏI—¹‚́C‘¼‚Ì•û–@‚Ŏ擾‚Å‚«‚邽‚߁C‚±‚Ì•û–@‚Í—pˆÓ
    2200 ‚µ‚Ä‚¢‚È‚¢D
    2201 
    2202 ‚È‚¨CŠ„ž‚݃nƒ“ƒhƒ‰‚ÆCPU—áŠOƒnƒ“ƒhƒ‰‚ÌŽÀsŠJŽn‚ƏI—¹‚̃gƒŒ[ƒXƒƒOŽæ“¾
    2203 ‚́Cƒ^[ƒQƒbƒgˆË‘¶•”‚ÅŽÀ‘•‚·‚é•K—v‚ª‚ ‚éDÚ‚µ‚­‚́Cu6.2 ƒgƒŒ[ƒXƒƒO
    2204 ‹@”\‚ւ̑Ήžvu6.6.1 Š„ž‚݃nƒ“ƒhƒ‰‚̏o“üŒûˆ—vu6.7.2 CPU—áŠOƒnƒ“ƒh
    2205 ƒ‰‚̏o“üŒûˆ—v‚̐߂ðŽQÆ‚·‚邱‚ƁD
    2206 
    2207 (c) ƒ^ƒXƒNó‘Ԃ̕ω»
    2208 
    2209 ŽŸ‚̃}ƒNƒ‚ð’è‹`‚·‚邱‚ƂŁCƒ^ƒXƒNó‘Ô‚ª•Ï‰»‚µ‚½Žž‚̃gƒŒ[ƒXƒƒO‚ðŽæ“¾
    2210 ‚·‚邱‚Æ‚ª‚Å‚«‚éD‚½‚¾‚µCŽÀsó‘Ô‚ÆŽÀs‰Â”\ó‘Ô‚ÌŠÔ‚Ì‘JˆÚ‚́C‘¼‚Ì•û–@
    2211 ‚Ŏ擾‚Å‚«‚邽‚߁C‚±‚̃}ƒNƒ‚ł͎擾‚Å‚«‚È‚¢D
    2212 
    2213         LOG_TSKSTAT             ƒ^ƒXƒNó‘Ԃ̕ω»
    2214 
    2215 (d) ƒfƒBƒXƒpƒbƒ`ƒƒ‚ÌŽÀsŠJŽn‚ƏI—¹
    2216 
    2217 ŽŸ‚̃}ƒNƒ‚ð’è‹`‚·‚邱‚ƂŁCƒfƒBƒXƒpƒbƒ`ƒƒ‚ªŽÀsŠJŽn‚·‚鎞‚ƁCI—¹‚·‚é
    2218 Žž‚̃gƒŒ[ƒXƒƒO‚ðŽæ“¾‚·‚邱‚Æ‚ª‚Å‚«‚éD
    2219 
    2220         LOG_DSP_ENTER   ƒfƒBƒXƒpƒbƒ`ƒƒ‚ÌŽÀsŠJŽn
    2221         LOG_DSP_LEAVE   ƒfƒBƒXƒpƒbƒ`ƒƒ‚̏I—¹
    2222 
    2223 ƒfƒBƒXƒpƒbƒ`ƒƒ‚ÌŽÀsŠJŽn‚́Cƒ^ƒXƒN‚ªŽÀsó‘Ô‚©‚çŽÀs‰Â”\ó‘Ô‚É‘JˆÚ‚·‚é
    2224 ƒ^ƒCƒ~ƒ“ƒO‚Å‚ ‚邽‚߁CŽÀs‰Â”\ó‘Ô‚Ö‘JˆÚ‚·‚éƒ^ƒXƒN‚ÌTCB‚ւ̃|ƒCƒ“ƒ^‚ðƒp
    2225 ƒ‰ƒ[ƒ^‚Æ‚·‚éD‹t‚ɁCƒfƒBƒXƒpƒbƒ`ƒƒ‚̏I—¹‚́Cƒ^ƒXƒN‚ªŽÀs‰Â”\ó‘Ô‚©‚ç
    2226 ŽÀsó‘Ô‚É‘JˆÚ‚·‚éƒ^ƒCƒ~ƒ“ƒO‚Å‚ ‚邽‚߁CŽÀsó‘Ô‚Ö‘JˆÚ‚·‚éƒ^ƒXƒN‚ÌTCB‚Ö
    2227 ‚̃|ƒCƒ“ƒ^‚ðƒpƒ‰ƒ[ƒ^‚Æ‚·‚éD
    2228 
    2229 SSPƒJ[ƒlƒ‹‚ł́CŽÀs‚Å‚«‚éƒ^ƒXƒN‚ª‚È‚­CƒJ[ƒlƒ‹‚ªƒAƒCƒhƒ‹ó‘Ô‚É‚È‚éê
    2230 ‡‚ɂ́CƒfƒBƒXƒpƒbƒ`ƒƒ‚Ì’†‚É—¯‚Ü‚éD‚»‚Ì‚½‚߁CƒAƒCƒhƒ‹ó‘Ô‚Ö‚Ì‘JˆÚ‚ƃA
    2231 ƒCƒhƒ‹ó‘Ô‚©‚瑼‚̏ó‘Ô‚Ö‚Ì‘JˆÚ‚́C‚±‚̃}ƒNƒ‚ł͎擾‚Å‚«‚È‚¢D
    2232 
    2233 ‚È‚¨CƒfƒBƒXƒpƒbƒ`ƒƒ‚ÌŽÀsŠJŽn‚ƏI—¹‚̃gƒŒ[ƒXƒƒOŽæ“¾‚́Cƒ^[ƒQƒbƒgˆË
    2234 ‘¶•”‚ÅŽÀ‘•‚·‚é•K—v‚ª‚ ‚éDÚ‚µ‚­‚́C‚Ɓu6.5.2 ƒfƒBƒXƒpƒbƒ`ƒƒ–{‘́v‚̐߂ð
    2235 ŽQÆ‚·‚邱‚ƁD
    2236 
    2237 (e) ƒT[ƒrƒXƒR[ƒ‹‚Ì“üŒû‚ƏoŒû
    2238 
    2239 ŽŸ‚̃}ƒNƒ‚ð’è‹`‚·‚邱‚ƂŁCŠeƒT[ƒrƒXƒR[ƒ‹‚Ì“üŒû‚ƏoŒû‚̃gƒŒ[ƒXƒƒO
    2240 ‚ðŽæ“¾‚·‚邱‚Æ‚ª‚Å‚«‚éD
    2241 
    2242         LOG_<ƒT[ƒrƒXƒR[ƒ‹‚̑啶Žš•\‹L>_ENTER          ƒT[ƒrƒXƒR[ƒ‹–¼‚Ì“üŒû
    2243         LOG_<ƒT[ƒrƒXƒR[ƒ‹‚̑啶Žš•\‹L>_LEAVE          ƒT[ƒrƒXƒR[ƒ‹–¼‚̏oŒû
    2244 
    2245 ‚»‚ꂼ‚ê‚̃}ƒNƒ‚Ì–¼Ì‚âƒpƒ‰ƒ[ƒ^‚̏ڍׂɂ‚¢‚ẮCƒJ[ƒlƒ‹‚̃\[ƒXƒR[
    2246 ƒh‚ðŽQÆ‚·‚邱‚ƁD
    2247 
    2248 6.12 ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚Ì‚½‚߂̃Šƒl[ƒ€‹Lq
    2249 
    2250 ƒJ[ƒlƒ‹“à•”‚ɕ‚¶‚ÄŽg‚í‚ê‚éŠÖ”‚â•Ï”‚È‚Ç‚Ì–¼Ì‚ŁCƒIƒuƒWƒFƒNƒgƒtƒ@ƒC
    2251 ƒ‹‚̃Vƒ“ƒ{ƒ‹•\‚É“o˜^‚³‚ê‚ÄŠO•”‚©‚çŽQÆ‚Å‚«‚é–¼Ì‚́CCŒ¾ŒêƒŒƒxƒ‹‚ŁCæ“ª
    2252 ‚ª"_kernel_"‚Ü‚½‚Í"_KERNEL_"‚Å‚ ‚é–¼Ì‚Æ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚ªCSSPƒJ[ƒl
    2253 ƒ‹‚ł́Cƒ\[ƒXƒR[ƒh‚ðƒRƒ“ƒpƒNƒg‚É•Û‚¿‚‚‚±‚ê‚ðŽÀŒ»‚·‚邽‚߂ɁCƒŠƒl[
    2254 ƒ€‹Lqƒtƒ@ƒCƒ‹‚𓱓ü‚µ‚Ä‚¢‚éD
    2255 
    2256 ‹ï‘Ì“I‚ɂ́CƒŠƒl[ƒ€‚·‚ׂ«–¼Ì‚ðƒŠƒXƒgƒAƒbƒv‚µ‚½xxx_rename.def‚ð—pˆÓ‚µC
    2257 ‚±‚̃tƒ@ƒCƒ‹‚©‚çƒc[ƒ‹iutils/genrenamej‚É‚æ‚èC–¼Ì‚ðƒŠƒl[ƒ€‚·‚邽‚ß
    2258 ‚̃}ƒNƒ’è‹`‚ðŠÜ‚Þxxx_rename.h‚ƁC‚»‚ê‚ç‚̃}ƒNƒ’è‹`‚ð‰ðœ‚·‚邽‚ß‚Ì
    2259 xxx_unrename.h‚𐶐¬‚·‚éDƒc[ƒ‹‚Ì‹N“®•û–@‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
     2065DEF_ICSにより非タスクコンテキスト用のスタック領域が指定されない場合の,
     2066デフォルトのスタック領域のサイズ.
     2067
     2068
     2069(6-10-1-2) DEFAULT_ISTK(オプション)
     2070
     2071DEF_ICSにより非タスクコンテキスト用のスタック領域が指定されない場合の,
     2072デフォルトのスタック領域の先頭番地.このマクロが定義されない場合には,
     2073サイズがDEFAULT_ISTKSZのスタック領域が,配列により確保される.
     2074
     2075(6-10-1-3) STK_T *TOPPERS_ISTKPT(STK_T *istk, SIZE istksz)(オプション)
     2076
     2077非タスクコンテキスト用のスタックポインタの初期値を保持する変数(istkpt)
     2078を用いる場合に,このシンボルに,スタック領域の先頭番地(istk)とスタッ
     2079ク領域のサイズ(istksz)から,スタックポインタの初期値を求めるマクロを
     2080定義する.
     2081
     20826.10.2 空ラベルの定義
     2083
     2084(6-10-2-1) TOPPERS_EMPTY_LABEL(type, symbol)(オプション)
     2085
     2086リンクエラーを防ぐために,データ型typeの配列である変数symbolに定義を与
     2087えるためのマクロ.与えた定義が参照されることはないため,どのような定義
     2088を与えてもよい.
     2089
     2090デフォルトでは,symbolを,要素型がtypeでサイズが0の配列に定義している.
     2091サイズが0の配列がエラーとならないコンパイラ(GCCはこれに該当)を用いる
     2092場合には,ターゲット依存部で定義する必要はない.
     2093
     20946.11 トレースログ機能に関する設定
     2095
     2096SSPカーネルのソースコードには,カーネルの実行トレースログを取得するため
     2097のマクロ等が埋め込んである.デフォルトでは,これらのマクロは空に定義さ
     2098れてトレースログの取得は行わないが,これらのマクロを適切に定義すること
     2099でトレースログの取得を行うことができる.
     2100
     21016.11.1 取得できるトレースログの種類とマクロ
     2102
     2103取得できるトレースログの種類と,それを取得するために定義するマクロは次
     2104の通りである.
     2105
     2106(a) カーネルの動作開始と終了
     2107
     2108次のマクロを定義することで,カーネルの動作開始時と終了時のトレースログ
     2109を取得することができる.
     2110
     2111        LOG_KER_ENTER           カーネルが動作を開始する直前(初期化の完了後)
     2112        LOG_KER_LEAVE           カーネルの終了(ext_ker)が呼ばれた直後(終了処
     2113                                                理の実行前)
     2114
     2115(b) 処理単位の実行開始と終了
     2116
     2117次のマクロを定義することで,割込みハンドラ(INH),割込みサービスルーチ
     2118ン(ISR),周期ハンドラ(CYC),アラームハンドラ(ALM),CPU例外ハンド
     2119ラ(EXC),タスク例外処理ルーチン(TEX)の実行開始前と終了後のトレース
     2120ログを取得することができる.
     2121
     2122        LOG_<処理単位略号>_ENTER      処理単位の実行開始直前
     2123        LOG_<処理単位略号>_LEAVE      処理単位の終了直後
     2124
     2125割込みハンドラは,アプリケーションが登録したもののみを対象とし,割込み
     2126サービスルーチンを呼び出すためにカーネル内に生成されるものは対象としな
     2127い.タスクの実行開始と終了は,他の方法で取得できるため,この方法は用意
     2128していない.
     2129
     2130なお,割込みハンドラとCPU例外ハンドラの実行開始と終了のトレースログ取得
     2131は,ターゲット依存部で実装する必要がある.詳しくは,「6.2 トレースログ
     2132機能への対応」「6.6.1 割込みハンドラの出入口処理」「6.7.2 CPU例外ハンド
     2133ラの出入口処理」の節を参照すること.
     2134
     2135(c) タスク状態の変化
     2136
     2137次のマクロを定義することで,タスク状態が変化した時のトレースログを取得
     2138することができる.ただし,実行状態と実行可能状態の間の遷移は,他の方法
     2139で取得できるため,このマクロでは取得できない.
     2140
     2141        LOG_TSKSTAT             タスク状態の変化
     2142
     2143(d) ディスパッチャの実行開始と終了
     2144
     2145次のマクロを定義することで,ディスパッチャが実行開始する時と,終了する
     2146時のトレースログを取得することができる.
     2147
     2148        LOG_DSP_ENTER   ディスパッチャの実行開始
     2149        LOG_DSP_LEAVE   ディスパッチャの終了
     2150
     2151ディスパッチャの実行開始は,タスクが実行状態から実行可能状態に遷移する
     2152タイミングであるため,実行可能状態へ遷移するタスクのTCBへのポインタをパ
     2153ラメータとする.逆に,ディスパッチャの終了は,タスクが実行可能状態から
     2154実行状態に遷移するタイミングであるため,実行状態へ遷移するタスクのTCBへ
     2155のポインタをパラメータとする.
     2156
     2157SSPカーネルでは,実行できるタスクがなく,カーネルがアイドル状態になる場
     2158合には,ディスパッチャの中に留まる.そのため,アイドル状態への遷移とア
     2159イドル状態から他の状態への遷移は,このマクロでは取得できない.
     2160
     2161なお,ディスパッチャの実行開始と終了のトレースログ取得は,ターゲット依
     2162存部で実装する必要がある.詳しくは,と「6.5.2 ディスパッチャ本体」の節を
     2163参照すること.
     2164
     2165(e) サービスコールの入口と出口
     2166
     2167次のマクロを定義することで,各サービスコールの入口と出口のトレースログ
     2168を取得することができる.
     2169
     2170        LOG_<サービスコールの大文字表記>_ENTER               サービスコール名の入口
     2171        LOG_<サービスコールの大文字表記>_LEAVE               サービスコール名の出口
     2172
     2173それぞれのマクロの名称やパラメータの詳細については,カーネルのソースコー
     2174ドを参照すること.
     2175
     21766.12 カーネル実装のターゲット依存部のためのリネーム記述
     2177
     2178カーネル内部に閉じて使われる関数や変数などの名称で,オブジェクトファイ
     2179ルのシンボル表に登録されて外部から参照できる名称は,C言語レベルで,先頭
     2180が"_kernel_"または"_KERNEL_"である名称としなければならないが,SSPカーネ
     2181ルでは,ソースコードをコンパクトに保ちつつこれを実現するために,リネー
     2182ム記述ファイルを導入している.
     2183
     2184具体的には,リネームすべき名称をリストアップしたxxx_rename.defを用意し,
     2185このファイルからツール(utils/genrename)により,名称をリネームするため
     2186のマクロ定義を含むxxx_rename.hと,それらのマクロ定義を解除するための
     2187xxx_unrename.hを生成する.ツールの起動方法は次の通りである.
    22602188
    22612189        % genrename xxx
    22622190
    2263 xxx_rename.def‚ɂ́CƒŠƒl[ƒ€‚·‚ׂ«–¼Ì‚ð1s‚É1‚‹Lq‚·‚éDxxxx‚Æ‚¢‚¤–¼
    2264 Ì‚ª‹Lq‚³‚ê‚Ä‚¢‚éê‡Cxxx_rename.h‚É‚ÍŽŸ‚̂悤‚È‹Lq‚ª¶¬‚³‚ê‚éD
     2191xxx_rename.defには,リネームすべき名称を1行に1つ記述する.xxxxという名
     2192称が記述されている場合,xxx_rename.hには次のような記述が生成される.
    22652193
    22662194#define xxxx                            _kernel_xxxx
     
    22692197#endif /* TOPPERS_LABEL_ASM */
    22702198
    2271 ‚Ü‚½Cxxx_unrename.h‚É‚ÍŽŸ‚̂悤‚È‹Lq‚ª¶¬‚³‚ê‚éD
     2199また,xxx_unrename.hには次のような記述が生成される.
    22722200
    22732201#undef xxxx
     
    22762204#endif /* TOPPERS_LABEL_ASM */
    22772205
    2278 xxx_rename.def‚Ì’†‚ɂ́C‘¼‚̃Šƒl[ƒ€‹Lq‚ðŽæ‚荞‚Þ‚½‚߂ɁCuINCLUDE
    2279 "yyy"v‚Ü‚½‚́uINCLUDE <yyy>v‚Æ‚¢‚¤‹Lq‚ðŠÜ‚߂邱‚Æ‚ª‚Å‚«‚éD‚±‚Ì‹Lq
    2280 ‚ª‚³‚ê‚Ä‚¢‚éê‡Cxxx_rename.h‚ɂ́u#include "yyy_rename.h"v‚Ü‚½‚Í
    2281 u#include <yyy_rename.h>v‚Æ‚¢‚¤‹Lq‚ªCxxx_unrename.h‚ɂ́u#include
    2282 "yyy_unrename.h"v‚Ü‚½‚́u#include <yyy_unrename.h>v‚Æ‚¢‚¤‹Lq‚ª¶¬‚³
    2283 ‚ê‚éD
    2284 
    2285 xxx_rename.def‚Ì’†‚Ì"#"‚ÅŽn‚Ü‚és‚̓Rƒƒ“ƒg‚Æ‚µ‚Ä“Ç‚Ý”ò‚΂³‚ê‚éD‚Ü‚½C
    2286 ‹ós‚à–³Ž‹‚³‚ê‚éD
    2287 
    2288 ƒJ[ƒlƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚ÅŽg‚í‚ê‚é–¼Ì‚ðƒŠƒl[ƒ€‚·‚邽‚߂ɁCkernel
    2289 ƒfƒBƒŒƒNƒgƒŠ‚ɁCkernel_rename.def‚ƁC‚»‚±‚©‚琶¬‚µ‚½kernel_rename.h‚¨
    2290 ‚æ‚Ñkernel_unrename.h‚ª—pˆÓ‚³‚ê‚Ä‚¢‚éDkernel_rename.def‚ɂ́C
    2291 uINCLUDE "target"v‚Æ‚¢‚¤‹Lq‚ªŠÜ‚Ü‚ê‚Ä‚¨‚èCƒ^[ƒQƒbƒgˆË‘¶•”‚̃Šƒl[
    2292 ƒ€‹Lq‚ðŽæ‚荞‚ނ悤‚É‚È‚Á‚Ä‚¢‚éDƒ^[ƒQƒbƒgˆË‘¶•”‚Å’è‹`‚µCƒ^[ƒQƒbƒg
    2293 ”ñˆË‘¶•”‚ÅŽQÆ‚³‚ê‚é–¼Ì‚́Cƒ^[ƒQƒbƒgˆË‘¶•”‚̃Šƒl[ƒ€‹Lq‚ÉŠÜ‚ß‚éD
    2294 
    2295 ƒ^[ƒQƒbƒgˆË‘¶•”‚ł́Cƒ^[ƒQƒbƒgˆË‘¶•”‚ÅŽg‚í‚ê‚é–¼Ì‚ðƒŠƒl[ƒ€‚·‚邽‚ß
    2296 ‚ɁCtarget_rename.def‚ƁC‚»‚±‚©‚琶¬‚µ‚½target_rename.h‚¨‚æ‚Ñ
    2297 target_unrename.h‚ð—pˆÓ‚·‚éDƒ^[ƒQƒbƒgˆË‘¶•”‚©‚çƒvƒƒZƒbƒTEƒ`ƒbƒvEŠJ
    2298 ”­ŠÂ‹«ˆË‘¶•”‚ðØ‚蕪‚¯‚éê‡‚ɂ́Ctarget_rename.def‚ÉINCLUDE‹Lq‚ð“ü‚êC
    2299 ƒvƒƒZƒbƒTEƒ`ƒbƒvEŠJ”­ŠÂ‹«ˆË‘¶•”‚̃Šƒl[ƒ€‹Lq‚ðŽæ‚荞‚ނ悤‚É‚·‚éD
    2300 
    2301 6.13 ƒ^ƒCƒ}ƒhƒ‰ƒCƒo
    2302 
    2303 ƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚́CƒJ[ƒlƒ‹‚Ƀ^ƒCƒ€ƒeƒBƒbƒN‚ð’Ê’m‚·‚邽‚߂̃^ƒCƒ}ƒhƒ‰ƒC
    2304 ƒo‚Å‚ ‚éD
    2305 
    2306 6.13.1 ƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚̃tƒ@ƒCƒ‹\¬
    2307 
    2308 ƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚ð‘g‚ݍž‚Þ‚½‚߂̐ÓIAPI‚ð‹Lq‚µ‚½ƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    2309 ƒŒ[
    2310 ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ðCtarget_timer.cfg‚É—pˆÓ‚·‚éD‚±‚̃tƒ@ƒCƒ‹‚ɂ́Cƒ^ƒCƒ}
    2311 ƒhƒ‰ƒCƒo‚ð‰Šú‰»‚·‚邽‚߂̏‰Šú‰»ƒ‹[ƒ`ƒ“‚̒ljÁCƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚ðI—¹‚³
    2312 ‚¹‚邽‚߂̏I—¹ˆ—ƒ‹[ƒ`ƒ“‚̒ljÁCƒ^ƒCƒ}Š„ž‚Ý‚Ì‚½‚ß‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚Ì
    2313 ’è‹`i‚Ü‚½‚́CŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚̒ljÁjCƒ^ƒCƒ}Š„ž‚Ý‚Ì‚½‚ß‚ÌŠ„ž
    2314 ‚Ý—v‹ƒ‰ƒCƒ“‚Ì‘®«‚̐ݒè‚̐ÓIAPI‚È‚Ç‚ðŠÜ‚Þ‚±‚Æ‚É‚È‚éD
    2315 
    2316 ƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚ðŒÄ‚яo‚·‚½‚ß‚É•K—v‚È’è‹`‚ðŠÜ‚Þƒwƒbƒ_ƒtƒ@ƒCƒ‹‚ðC
    2317 target_timer.h‚É—pˆÓ‚·‚éD‚Ü‚½Cƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚ÌŽÀ‘•ƒtƒ@ƒCƒ‹‚ð
    2318 target_timer.c‚É—pˆÓ‚·‚éD
    2319 
    2320 ƒ^ƒCƒ€ƒeƒBƒbƒN‚Ì’Ê’m‚É‚æ‚ès‚¤ˆ—‚Ì‘½‚­‚́Cƒ^ƒXƒN‚Ì‹N“®‚â‘Ò‚¿‰ðœ‚ðs
    2321 ‚¤‚à‚Ì‚Å‚ ‚邽‚߁Cƒ^ƒCƒ}Š„ž‚Ý‚ÌŠ„ž‚Ý—Dæ“x‚́CŠ„ž‚Ý‚Ì’†‚ōŒá‚Ì—Dæ
    2322 “x‚ŏ\•ª‚Å‚ ‚éD‚½‚¾‚µCŽüŠúƒnƒ“ƒhƒ‰‚âƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ÌŽÀsŠJŽn’x‚ꂪ
    2323 –â‘è‚É‚È‚éê‡‚ɂ́Cƒ^ƒCƒ}Š„ž‚Ý‚ÌŠ„ž‚Ý—Dæ“x‚ð‚æ‚荂‚¢’l‚ɐݒ肵‚½‚¢D
    2324 ‚»‚±‚ŁCƒ^ƒCƒ}Š„ž‚Ý‚ÌŠ„ž‚Ý—Dæ“x‚ð•ÏX‚·‚é•û–@‚ðCƒ^[ƒQƒbƒgˆË‘¶•”‚Ì
    2325 ƒ†[ƒU[ƒYƒ}ƒjƒ
    2326 ƒAƒ‹‚É‹LÚ‚·‚ׂ«‚Å‚ ‚éD
    2327 
    2328 6.13.2 ƒ^ƒCƒ}‚̏‰Šú‰»EI—¹ˆ—EŠ„ž‚ݏˆ—
     2206xxx_rename.defの中には,他のリネーム記述を取り込むために,「INCLUDE
     2207"yyy"」または「INCLUDE <yyy>」という記述を含めることができる.この記述
     2208がされている場合,xxx_rename.hには「#include "yyy_rename.h"」または
     2209「#include <yyy_rename.h>」という記述が,xxx_unrename.hには「#include
     2210"yyy_unrename.h"」または「#include <yyy_unrename.h>」という記述が生成さ
     2211れる.
     2212
     2213xxx_rename.defの中の"#"で始まる行はコメントとして読み飛ばされる.また,
     2214空行も無視される.
     2215
     2216カーネルのターゲット非依存部で使われる名称をリネームするために,kernel
     2217ディレクトリに,kernel_rename.defと,そこから生成したkernel_rename.hお
     2218よびkernel_unrename.hが用意されている.kernel_rename.defには,
     2219「INCLUDE "target"」という記述が含まれており,ターゲット依存部のリネー
     2220ム記述を取り込むようになっている.ターゲット依存部で定義し,ターゲット
     2221非依存部で参照される名称は,ターゲット依存部のリネーム記述に含める.
     2222
     2223ターゲット依存部では,ターゲット依存部で使われる名称をリネームするため
     2224に,target_rename.defと,そこから生成したtarget_rename.hおよび
     2225target_unrename.hを用意する.ターゲット依存部からプロセッサ・チップ・開
     2226発環境依存部を切り分ける場合には,target_rename.defにINCLUDE記述を入れ,
     2227プロセッサ・チップ・開発環境依存部のリネーム記述を取り込むようにする.
     2228
     22296.13 タイマドライバ
     2230
     2231タイマドライバは,カーネルにタイムティックを通知するためのタイマドライ
     2232バである.
     2233
     22346.13.1 タイマドライバのファイル構成
     2235
     2236タイマドライバを組み込むための静的APIを記述したシステムコンフィギュレー
     2237ションファイルを,target_timer.cfgに用意する.このファイルには,タイマ
     2238ドライバを初期化するための初期化ルーチンの追加,タイマドライバを終了さ
     2239せるための終了処理ルーチンの追加,タイマ割込みのための割込みハンドラの
     2240定義(または,割込みサービスルーチンの追加),タイマ割込みのための割込
     2241み要求ラインの属性の設定の静的APIなどを含むことになる.
     2242
     2243タイマドライバを呼び出すために必要な定義を含むヘッダファイルを,
     2244target_timer.hに用意する.また,タイマドライバの実装ファイルを
     2245target_timer.cに用意する.
     2246
     2247タイムティックの通知により行う処理の多くは,タスクの起動や待ち解除を行
     2248うものであるため,タイマ割込みの割込み優先度は,割込みの中で最低の優先
     2249度で十分である.ただし,周期ハンドラやアラームハンドラの実行開始遅れが
     2250問題になる場合には,タイマ割込みの割込み優先度をより高い値に設定したい.
     2251そこで,タイマ割込みの割込み優先度を変更する方法を,ターゲット依存部の
     2252ユーザーズマニュアルに記載すべきである.
     2253
     22546.13.2 タイマの初期化・終了処理・割込み処理
    23292255
    23302256(6-13-2-1) void target_timer_initialize(intptr_t exinf)
    23312257
    2332 ƒ^ƒCƒ}‚ð‰Šú‰»‚µCƒ^ƒCƒ}Š„ž‚Ý‚ðŽüŠú“I‚É”­¶‚³‚¹‚éŠÖ”Dƒ^ƒCƒ}Š„ž‚Ý‚Ì
    2333 ŽüŠú‚́CTIC_NUME‚ÆTIC_DENO‚ÅŽw’肳‚ꂽŽžŠÔ‚ƈê’v‚³‚¹‚éiu5.3 ƒ^ƒCƒ€
    2334 ƒeƒBƒbƒN‚Ì’è‹`v‚̐߂ðŽQÆjD
    2335 
    2336 ‚±‚̊֐”‚́Ctarget_timer.cfg’†‚É‹Lq‚·‚éÃ“IAPI‚É‚æ‚èC‰Šú‰»ƒ‹[ƒ`ƒ“‚Æ
    2337 ‚µ‚ăJ[ƒlƒ‹‚É“o˜^‚·‚邱‚Æ‚ð‘z’肵‚Ä‚¢‚éD
     2258タイマを初期化し,タイマ割込みを周期的に発生させる関数.タイマ割込みの
     2259周期は,TIC_NUMEとTIC_DENOで指定された時間と一致させる(「5.3 タイム
     2260ティックの定義」の節を参照).
     2261
     2262この関数は,target_timer.cfg中に記述する静的APIにより,初期化ルーチンと
     2263してカーネルに登録することを想定している.
    23382264
    23392265(6-13-2-2) void target_timer_terminate(intptr_t exinf)
    23402266
    2341 ƒ^ƒCƒ}‚Ì“®ì‚ð’âŽ~‚³‚¹Cƒ^ƒCƒ}Š„ž‚݂𔭐¶‚µ‚È‚¢‚悤‚É‚·‚éŠÖ”D
    2342 
    2343 ‚±‚̊֐”‚́Ctarget_timer.cfg’†‚É‹Lq‚·‚éÃ“IAPI‚É‚æ‚èCI—¹ˆ—ƒ‹[ƒ`ƒ“
    2344 ‚Æ‚µ‚ăJ[ƒlƒ‹‚É“o˜^‚·‚邱‚Æ‚ð‘z’肵‚Ä‚¢‚éD
     2267タイマの動作を停止させ,タイマ割込みを発生しないようにする関数.
     2268
     2269この関数は,target_timer.cfg中に記述する静的APIにより,終了処理ルーチン
     2270としてカーネルに登録することを想定している.
    23452271
    23462272(6-13-2-3) void target_timer_handler(void)
    2347     ‚Ü‚½‚Í void target_timer_isr(intptr_t exinf)
    2348 
    2349 ƒ^ƒCƒ}Š„ž‚Ý‚É‚æ‚è‹N“®‚³‚ê‚銄ž‚ݏˆ—ƒvƒƒOƒ‰ƒ€DŠ„ž‚݃nƒ“ƒhƒ‰‚Æ‚µ‚Ä
    2350 ŽÀŒ»‚·‚éê‡‚É‚Ítarget_timer_handlerCŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚Æ‚µ‚ÄŽÀŒ»
    2351 ‚·‚éê‡‚É‚Ítarget_timer_isr‚Ì–¼Ì‚Æ‚·‚éDƒ^[ƒQƒbƒg”ñˆË‘¶•”‚Ì
    2352 signal_time‚ðŒÄ‚яo‚·D
    2353 
    2354 target_timer_handler‚́C•W€“I‚É‚ÍŽŸ‚̂悤‚É’è‹`‚·‚éD
     2273    または void target_timer_isr(intptr_t exinf)
     2274
     2275タイマ割込みにより起動される割込み処理プログラム.割込みハンドラとして
     2276実現する場合にはtarget_timer_handler,割込みサービスルーチンとして実現
     2277する場合にはtarget_timer_isrの名称とする.ターゲット非依存部の
     2278signal_timeを呼び出す.
     2279
     2280target_timer_handlerは,標準的には次のように定義する.
    23552281
    23562282----------------------------------------
     
    23582284target_timer_handler(void)
    23592285{
    2360         i_begin_int(<ƒ^ƒCƒ}Š„ž‚Ý‚ÌŠ„ž‚ݔԍ†>);
     2286        i_begin_int(<タイマ割込みの割込み番号>);
    23612287        signal_time();
    2362         i_end_int(<ƒ^ƒCƒ}Š„ž‚Ý‚ÌŠ„ž‚ݔԍ†>);
     2288        i_end_int(<タイマ割込みの割込み番号>);
    23632289}
    23642290----------------------------------------
    23652291
    2366 ‚±‚̊֐”‚́Ctarget_timer.cfg’†‚É‹Lq‚·‚éÃ“IAPI‚É‚æ‚èCŠ„ž‚݃nƒ“ƒhƒ‰‚Ü
    2367 ‚½‚ÍŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚Æ‚µ‚ăJ[ƒlƒ‹‚É“o˜^‚·‚邱‚Æ‚ð‘z’肵‚Ä‚¢‚éD
    2368 
    2369 6.13.3 «”\•]‰¿—pƒVƒXƒeƒ€Žž‚ÌŽQÆ‚Ì‚½‚ß‚Ì‹@”\
    2370 
    2371 «”\•]‰¿—pƒVƒXƒeƒ€Žž‚ÌŽQÆ‹@”\iget_utmj‚ðƒTƒ|[ƒg‚·‚éê‡‚ɂ́Cƒ^ƒC
    2372 ƒ}ƒhƒ‰ƒCƒo‚ŁCˆÈ‰º‚̃f[ƒ^Œ^‚âŠÖ”‚È‚Ç‚ð—pˆÓ‚·‚éD
     2292この関数は,target_timer.cfg中に記述する静的APIにより,割込みハンドラま
     2293たは割込みサービスルーチンとしてカーネルに登録することを想定している.
     2294
     22956.13.3 性能評価用システム時刻の参照のための機能
     2296
     2297性能評価用システム時刻の参照機能(get_utm)をサポートする場合には,タイ
     2298マドライバで,以下のデータ型や関数などを用意する.
    23732299
    23742300(6-13-3-1) CLOCK
    23752301
    2376 ƒ^ƒCƒ}’l‚Ì“à•”•\Œ»‚Ì‚½‚߂̃f[ƒ^Œ^D
     2302タイマ値の内部表現のためのデータ型.
    23772303
    23782304(6-13-3-2) CLOCK target_timer_get_current(void)
    23792305
    2380 ƒ^ƒCƒ}‚ÌŒ»Ý’l‚ð“ǂݏo‚µC“à•”•\Œ»‚Å•Ô‚·ŠÖ”Dƒ^ƒCƒ}’l‚́CŽžŠÔ‚ÌŒo‰ß‚Æ
    2381 ‚Æ‚à‚É‘‰Á‚·‚邱‚Æ‚ð‘z’肵‚Ä‚¢‚éDƒn[ƒhƒEƒFƒA‚̃^ƒCƒ}‚ªCƒ^ƒCƒ}’l‚ªŒ¸
    2382 ­‚·‚é‚à‚Ì‚Å‚ ‚éê‡‚ɂ́C‚±‚̊֐”“à‚Å‘‰Á‚·‚é’l‚Æ‚È‚é‚悤‚É•ÏŠ·‚·‚éD
     2306タイマの現在値を読み出し,内部表現で返す関数.タイマ値は,時間の経過と
     2307ともに増加することを想定している.ハードウェアのタイマが,タイマ値が減
     2308少するものである場合には,この関数内で増加する値となるように変換する.
    23832309
    23842310(6-13-3-3) bool_t target_timer_probe_int(void)
    23852311
    2386 ƒ^ƒCƒ}Š„ž‚Ý—v‹‚ðƒ`ƒFƒbƒN‚·‚éŠÖ”Dƒ^ƒCƒ}Š„ž‚Ý‚ª—v‹‚³‚ê‚Ä‚¢‚éê‡‚É
    2387 trueC—v‹‚³‚ê‚Ä‚¢‚È‚¢ê‡‚Éfalse‚ð•Ô‚·D
     2312タイマ割込み要求をチェックする関数.タイマ割込みが要求されている場合に
     2313true,要求されていない場合にfalseを返す.
    23882314
    23892315(6-13-3-4) TO_USEC(clock)
    23902316
    2391 ƒ^ƒCƒ}’l‚Ì“à•”•\Œ»‚ðC1ƒÊ•b’PˆÊ‚É•ÏŠ·‚·‚邽‚߂̃}ƒNƒi‚Ü‚½‚͊֐”jD
    2392 targettimer_get_current‚œǂݏo‚µ‚½’l‚ðCƒ^ƒCƒ}Š„ž‚Ý”­¶‚©‚ç‚ÌŒo‰ßŽžŠÔ
    2393 i’PˆÊ: 1ƒÊ•bj‚É•ÏŠ·‚·‚邽‚ß‚É—p‚¢‚éD
    2394 
    2395 7. ƒRƒ“ƒtƒBƒMƒ
    2396 ƒŒ[ƒ^Ý’èƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”
    2397 
    2398 7.1 Ý’èƒtƒ@ƒCƒ‹‚ƃ^[ƒQƒbƒgˆË‘¶•”‚̈ʒu•t‚¯
    2399 
    2400 SSPƒJ[ƒlƒ‹‚̃Rƒ“ƒtƒBƒMƒ
    2401 ƒŒ[ƒ^‚́CÝ’èƒtƒ@ƒCƒ‹‚Ì‹Lq‚ɏ]‚Á‚ătƒ@ƒCƒ‹‚Ì
    2402 ¶¬‚¨‚æ‚уGƒ‰[ƒ`ƒFƒbƒN‚ðs‚¤DƒRƒ“ƒtƒBƒMƒ
    2403 ƒŒ[ƒ^‚̐ݒèƒtƒ@ƒCƒ‹‚ɂ́C
    2404 ˆÈ‰º‚Ì4‚‚ª‚ ‚éD
    2405 
    2406 (a) Ã“IAPIƒe[ƒuƒ‹
    2407 
    2408 Ã“IAPI‚̈ꗗ‚ƁCŠeÃ“IAPI‚̃pƒ‰ƒ[ƒ^‚ɂ‚¢‚Ä‹Lq‚µ‚½ƒtƒ@ƒCƒ‹DÃ“I
    2409 API‚ðŠg’£‚·‚éê‡ˆÈŠO‚͕ύX‚·‚é•K—v‚ª‚È‚¢‚½‚߁Cƒ^[ƒQƒbƒg”ñˆË‘¶•”‚Å—pˆÓ
    2410 ‚µ‚Ä‚¢‚éikernel/kernel_api.csvjD
    2411 
    2412 (b) ’lŽæ“¾ƒVƒ“ƒ{ƒ‹ƒe[ƒuƒ‹
    2413 
    2414 ƒRƒ“ƒtƒBƒMƒ
    2415 ƒŒ[ƒ^‚̃pƒX1‚É‚¨‚¢‚āCƒpƒ‰ƒ[ƒ^ŒvŽZ—pCŒ¾Œêƒtƒ@ƒCƒ‹‚ɏo—Í
    2416 ‚µC’l‚ð‹‚ß‚½‚¢ƒVƒ“ƒ{ƒ‹iˆê”Ê‚É‚ÍŽ®j‚ð‹Lq‚·‚邽‚߂̃tƒ@ƒCƒ‹Dƒ^[ƒQƒb
    2417 ƒg”ñˆË‘¶•”‚ł́Cƒ^[ƒQƒbƒg‚Ɉˑ¶‚¹‚¸‚É•K—v‚Æ‚È‚éƒVƒ“ƒ{ƒ‹‚ð‹Lq‚µ‚½ƒtƒ@
    2418 ƒCƒ‹‚ð—pˆÓ‚µ‚Ä‚¢‚éikernel/kernel_def.csvjD
    2419 
    2420 ƒ^[ƒQƒbƒg‚Ɉˑ¶‚µ‚Ä•K—v‚Æ‚È‚éƒVƒ“ƒ{ƒ‹‚ª‚ ‚éê‡‚ɂ́CtargetƒfƒBƒŒƒNƒg
    2421 ƒŠ‚É’u‚©‚ꂽtarget_def.csv’†‚É‹Lq‚·‚éDtarget_def.csv’†‚É‹Lq‚µ‚Ä’l‚ð
    2422 ‹‚߂邱‚Æ‚ª‚Å‚«‚éƒVƒ“ƒ{ƒ‹‚́Ckernel/kernel_int.h‚¨‚æ‚Ñ‚»‚±‚©‚çƒCƒ“ƒNƒ‹[
    2423 ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹‚Å’è‹`‚³‚ê‚Ä‚¢‚È‚¯‚ê‚΂Ȃç‚È‚¢Dkernel_int.h‚©‚ç‚́C
    2424 target_stddef.hCtarget_kernel.hCtarget_config.h‚ðiŠÔÚ“I‚ɁjƒCƒ“ƒNƒ‹[
    2425 ƒh‚µ‚Ä‚¢‚邽‚߁C‚±‚ê‚ç‚̃tƒ@ƒCƒ‹‚¨‚æ‚Ñ‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒC
    2426 ƒ‹‚Å’è‹`‚³‚ê‚éƒ^[ƒQƒbƒgˆË‘¶‚̃Vƒ“ƒ{ƒ‹‚́Ctarget_def.csv’†‚É‹Lq‚·‚邱
    2427 ‚Æ‚ª‚Å‚«‚éD
    2428 
    2429 ‚±‚±‚Å’l‚ð‹‚ß‚½ƒVƒ“ƒ{ƒ‹‚Ì’l‚́CƒRƒ“ƒtƒBƒMƒ
    2430 ƒŒ[ƒ^‚̃pƒX2‚¨‚æ‚уpƒX3‚Ì
    2431 ƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹’†‚ÅŽQÆ‚·‚邱‚Æ‚ª‚Å‚«‚éD
    2432 
    2433 (c) ƒpƒX2‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹
    2434 
    2435 ƒRƒ“ƒtƒBƒMƒ
    2436 ƒŒ[ƒ^‚̃pƒX2‚́Cƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚ɏ]‚Á‚āCƒJ[ƒlƒ‹‚̍\
    2437 ¬E‰Šú‰»ƒtƒ@ƒCƒ‹ikernel_cfg.cjC\¬E‰Šú‰»ƒwƒbƒ_ƒtƒ@ƒCƒ‹
    2438 ikernel_cfg.hj‚Ȃǂ𐶐¬‚·‚éD‚±‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚́Cƒ^[ƒQƒbƒg
    2439 ”ñˆË‘¶•”‚ƃ^[ƒQƒbƒgˆË‘¶•”‚ɐ؂蕪‚¯‚Ä‚ ‚邪C‘¼‚̃tƒ@ƒCƒ‹‚̃^[ƒQƒbƒg
    2440 ˆË‘¶•”‚Æ‚Í‹t‚ɁCƒ^[ƒQƒbƒgˆË‘¶•”‚©‚çƒ^[ƒQƒbƒg”ñˆË‘¶•”‚ðƒCƒ“ƒNƒ‹[ƒh‚·
    2441 ‚éŒ`‚É‚È‚Á‚Ä‚¢‚éD
    2442 
    2443 ‹ï‘Ì“I‚ɂ́CtargetƒfƒBƒŒƒNƒgƒŠ‚É’u‚©‚ꂽtarget.tf‚ŁC•K—v‚ȕϐ”‚ð’è‹`‚µ
    2444 ‚½ŒãCƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”ikernel/kernel.tfj‚ðƒC
    2445 ƒ“ƒNƒ‹[ƒh‚·‚éDkernel.tf‚ł́CƒJ[ƒlƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚ÅŽg—p‚·‚é•Ï
    2446 ”’è‹`“™‚𐶐¬‚·‚éDkernel.tf‚ðƒCƒ“ƒNƒ‹[ƒh‚µ‚½ŒãCtarget.tf‚ł́CƒJ[
    2447 ƒlƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”‚ÅŽg—p‚·‚é•Ï”’è‹`“™‚𐶐¬‚·‚éDtarget.tf‚©‚çCƒv
    2448 ƒƒZƒbƒTˆË‘¶•”Cƒ`ƒbƒvˆË‘¶•”‚ðCŠJ”­ŠÂ‹«ˆË‘¶•”‚ðØ‚蕪‚¯‚Ä‚à‚æ‚¢D
    2449 
    2450 (d) ƒpƒX3‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹
    2451 
    2452 ƒRƒ“ƒtƒBƒMƒ
    2453 ƒŒ[ƒ^‚̃pƒX3‚́Cƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚ɏ]‚Á‚āCÃ“IAPI‚̈ê
    2454 ”ʒ萔Ž®ƒpƒ‰ƒ[ƒ^‚̃`ƒFƒbƒN‚ðs‚¤D‚±‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚àCƒ^[ƒQƒb
    2455 ƒg”ñˆË‘¶•”‚ƃ^[ƒQƒbƒgˆË‘¶•”‚ɐ؂蕪‚¯‚Ä‚ ‚èCƒ^[ƒQƒbƒgˆË‘¶•”‚©‚çƒ^[
    2456 ƒQƒbƒg”ñˆË‘¶•”‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚éŒ`‚É‚È‚Á‚Ä‚¢‚éD
    2457 
    2458 ‹ï‘Ì“I‚ɂ́CtargetƒfƒBƒŒƒNƒgƒŠ‚É’u‚©‚ꂽtarget_check.tf‚ŁC•K—v‚ȕϐ”‚ð
    2459 ’è‹`‚µ‚½ŒãCƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”
    2460 ikernel/kernel_check.tfj‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚éDkernel_check.tf‚ł́CƒJ[
    2461 ƒlƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚ŏ‰Šú‰»ƒuƒƒbƒN‚ɏo—Í‚µ‚½ˆê”ʒ萔Ž®ƒpƒ‰ƒ[ƒ^
    2462 ‚̃`ƒFƒbƒN‚ðs‚¤Dkernel_check.tf‚ðƒCƒ“ƒNƒ‹[ƒh‚µ‚½ŒãCtarget_check.tf
    2463 ‚ł́Cƒ^[ƒQƒbƒg‚Ɉˑ¶‚·‚éƒ`ƒFƒbƒN‚ðs‚¤Dtarget_check.tf‚©‚çCƒvƒƒZƒb
    2464 ƒTˆË‘¶•”Cƒ`ƒbƒvˆË‘¶•”‚ðCŠJ”­ŠÂ‹«ˆË‘¶•”‚ðØ‚蕪‚¯‚Ä‚à‚æ‚¢D
    2465 
    2466 ‚È‚¨CƒRƒ“ƒtƒBƒMƒ
    2467 ƒŒ[ƒ^‚̏ڍ׎d—l‚Ɛݒèƒtƒ@ƒCƒ‹‚Ì‹Lq•û–@‚ɂ‚¢‚ẮC
    2468 •Ê“rPDFƒtƒ@ƒCƒ‹‚ÌŒ`‚Å”z•z‚µ‚Ä‚¢‚éuTOPPERSV¢‘ãƒJ[ƒlƒ‹—pƒRƒ“ƒtƒBƒMƒ
    2469 
    2470 ƒŒ[ƒ^Žd—lv‚¨‚æ‚сuTOPPERSV¢‘ãƒJ[ƒlƒ‹—pƒRƒ“ƒtƒBƒMƒ
    2471 ƒŒ[ƒ^“à‘ ƒ}ƒNƒ
    2472 ƒvƒƒZƒbƒTŽd—lv‚ðŽQÆ‚·‚邱‚ƁD
    2473 
    2474 7.2 ƒpƒX2‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”
    2475 
    2476 ˆÈ‰º‚ł́CƒpƒX2‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”‚ð‹Lq‚·‚éã‚Å•K
    2477 —v‚ÈŽ–€‚ɂ‚¢‚Äà–¾‚·‚éD
    2478 
    2479 7.2.1 ƒ^[ƒQƒbƒg”ñˆË‘¶•”‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚é‘O‚É’è‹`‚·‚ׂ«•Ï”
    2480 
    2481 target.tf‚©‚çkernel.tf‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚é‘O‚ɁCŽŸ‚̕ϐ”‚ð’è‹`‚µ‚Ä‚¨‚©‚È
    2482 ‚¯‚ê‚΂Ȃç‚È‚¢D
    2483 
    2484 (7-2-1) INTNO_ATTISR_VALID              ATT_ISR‚ÅŽg—p‚Å‚«‚銄ž‚ݔԍ†
    2485 (7-2-2) INHNO_ATTISR_VALID              INTNO_ATTISR_VALID‚ɑΉž‚·‚銄žƒnƒ“ƒhƒ‰”ԍ†
    2486 (7-2-3) INHNO_DEFINH_VALID              DEF_INT‚ÅŽg—p‚Å‚«‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†
    2487 (7-2-4) EXCNO_DEFEXC_VALID              DEF_EXC‚ÅŽg—p‚Å‚«‚éCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†
    2488 (7-2-5) INTNO_CFGINT_VALID              CFG_INT‚ÅŽg—p‚Å‚«‚銄ž‚ݔԍ†
    2489 (7-2-6) INTPRI_CFGINT_VALID             CFG_INT‚ÅŽg—p‚Å‚«‚銄ž‚Ý—Dæ“x
    2490 
    2491 API‚ÅŽg—p‚Å‚«‚銄ž‚ݔԍ†^Š„ž‚݃nƒ“ƒhƒ‰”ԍ†^CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†^Š„
    2492 ž‚Ý—Dæ“x‚̃ŠƒXƒg‚ðCŠe•Ï”‚É’è‹`‚·‚éDINHNO_ATTISR_VALID‚ɂ́C
    2493 INTNO_ATTISR_VALID‚ɃŠƒXƒgƒAƒbƒv‚µ‚½Š„ž‚ݔԍ†‚ɑΉž‚·‚銄ž‚݃nƒ“ƒhƒ‰
    2494 ”ԍ†‚̃ŠƒXƒg‚ð’è‹`‚·‚éD
    2495 
    2496 (7-2-7) TARGET_TSKATRiƒIƒvƒVƒ‡ƒ“j             ƒ^[ƒQƒbƒg’è‹`‚̃^ƒXƒN‘®«
    2497 (7-2-8) TARGET_ISRATRiƒIƒvƒVƒ‡ƒ“j             ƒ^[ƒQƒbƒg’è‹`‚ÌISR‘®«
    2498 (7-2-9) TARGET_INHATRiƒIƒvƒVƒ‡ƒ“j             ƒ^[ƒQƒbƒg’è‹`‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‘®«
    2499 (7-2-10) TARGET_INTATRiƒIƒvƒVƒ‡ƒ“j    ƒ^[ƒQƒbƒg’è‹`‚ÌŠ„ž‚Ý‘®«
    2500 (7-2-11) TARGET_EXCATRiƒIƒvƒVƒ‡ƒ“j    ƒ^[ƒQƒbƒg’è‹`‚ÌCPU—áŠOƒnƒ“ƒhƒ‰‘®«
    2501 
    2502 ŠeƒIƒuƒWƒFƒNƒg‚Ì‘®«‚ðCƒ^[ƒQƒbƒg’è‹`‚ÉŠg’£‚·‚éê‡‚ɁCŠY“–‚·‚éƒIƒuƒWƒF
    2503 ƒNƒg‘®«‚ðŽ¦‚·•Ï”‚ɁCŠg’£‚ÉŽg—p‚·‚éƒrƒbƒg‚̘_—˜a‚ð’è‹`‚·‚éD‚±‚ê‚É‚æ
    2504 ‚èCŠg’£‚ÉŽg—p‚·‚éƒrƒbƒg‚ªÝ’肳‚ê‚Ä‚¢‚éê‡‚ɁCƒGƒ‰[‚É‚È‚é‚Ì‚ð–h‚®D
    2505 
    2506 (7-2-12) INTNO_FIX_KERNELiƒIƒvƒVƒ‡ƒ“j         ƒJ[ƒlƒ‹ŠÇ—‚ɌŒ肳‚ê‚Ä‚¢‚é
    2507                                                                                         Š„ž‚ݔԍ†
    2508 (7-2-13) INHNO_FIX_KERNELiƒIƒvƒVƒ‡ƒ“j         ƒJ[ƒlƒ‹ŠÇ—‚ɌŒ肳‚ê‚Ä‚¢‚é
    2509                                                                                         Š„ž‚݃nƒ“ƒhƒ‰”ԍ†
    2510 (7-2-14) INHNO_FIX_NONKERNELiƒIƒvƒVƒ‡ƒ“j      ƒJ[ƒlƒ‹ŠÇ—ŠO‚ɌŒ肳‚ê‚Ä‚¢‚é
    2511                                                                                         Š„ž‚ݔԍ†
    2512 (7-2-15) INHNO_FIX_NONKERNELiƒIƒvƒVƒ‡ƒ“j      ƒJ[ƒlƒ‹ŠÇ—ŠO‚ɌŒ肳‚ê‚Ä‚¢‚é
    2513                                                                                         Š„ž‚݃nƒ“ƒhƒ‰”ԍ†
    2514 
    2515 ƒJ[ƒlƒ‹ŠÇ—‚Ü‚½‚̓J[ƒlƒ‹ŠÇ—ŠO‚ɌŒ肳‚ê‚Ä‚¢‚銄ž‚Ý‚ª‚ ‚éê‡‚ɂ́C
    2516 ‚»‚ê‚ç‚ÌŠ„ž‚ݔԍ†‚ÆŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚̃ŠƒXƒg‚ðCŠe•Ï”‚É’è‹`‚·‚éD
    2517 
    2518 (7-2-16) USE_INHINIB_TABLEiƒIƒvƒVƒ‡ƒ“j
    2519 
    2520 OMIT_INITIALIZE_INTERRUPT‚ð’è‹`‚µ‚½‚ªCŠ„ž‚݃nƒ“ƒhƒ‰‚̏‰Šú‰»‚É•K—v‚ȏî
    2521 •ñ‚ðkernel_cfg.c‚ɐ¶¬‚µ‚½‚¢ê‡‚ɂ́C‚±‚̕ϐ”‚ð1‚ɐݒ肷‚éD‹ï‘Ì“I‚ɂ́C
    2522 TNUM_INHNOCtnum_inhnoCinhinib_table‚Ì’è‹`‚ƁCŠ„ž‚݃nƒ“ƒhƒ‰–ˆ‚̏o“üŒû
    2523 ˆ—‚𐶐¬‚·‚邽‚ß‚Ì‹LqiINTHDR_ENTRYƒ}ƒNƒ‚̃ŠƒXƒgj‚ªCƒ^[ƒQƒbƒg”ñ
    2524 ˆË‘¶•”‚É‚æ‚Á‚ж¬‚³‚ê‚éD
    2525 
    2526 (7-2-17) USE_INTINIB_TABLEiƒIƒvƒVƒ‡ƒ“j
    2527 
    2528 OMIT_INITIALIZE_INTERRUPT‚ð’è‹`‚µ‚½‚ªCŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚̏‰Šú‰»‚É•K—v‚È
    2529 î•ñ‚ðkernel_cfg.c‚ɐ¶¬‚µ‚½‚¢ê‡‚ɂ́C‚±‚̕ϐ”‚ð1‚ɐݒ肷‚éD‹ï‘Ì“I‚É
    2530 ‚́CTNUM_INTNOCtnum_intnoCintinib_table‚Ì’è‹`‚ªCƒ^[ƒQƒbƒg”ñˆË‘¶•”‚É
    2531 ‚æ‚Á‚ж¬‚³‚ê‚éD
    2532 
    2533 (7-2-18) TARGET_MIN_STKSZiƒIƒvƒVƒ‡ƒ“j
    2534 
    2535 ƒ^[ƒQƒbƒg’è‹`‚ŁCƒ^ƒXƒN‚̃Xƒ^ƒbƒNƒTƒCƒY‚̍ŏ¬’l‚ðÝ’è‚·‚éê‡‚ɂ́C‚±
    2536 ‚̕ϐ”‚ðƒXƒ^ƒbƒNƒTƒCƒY‚̍ŏ¬’l‚É’è‹`‚·‚éD
    2537 
    2538 (7-2-19) CHECK_STKSZ_ALIGNiƒIƒvƒVƒ‡ƒ“j
    2539 
    2540 ƒXƒ^ƒbƒN—̈æ‚̃TƒCƒY‚ª‚ ‚é’l‚Ì”{”‚Å‚È‚¯‚ê‚΂Ȃç‚È‚¢ê‡‚ɁC‚±‚̕ϐ”‚ð
    2541 ‚»‚Ì’l‚É’è‹`‚·‚éD‚±‚̕ϐ”‚ð’è‹`‚·‚邱‚ƂŁCkernel.tf‚É‚¨‚¢‚āCƒXƒ^ƒbƒN
    2542 —̈æ‚̃TƒCƒY‚ª³‚µ‚­‚È‚¢i‚±‚̕ϐ”‚É’è‹`‚µ‚½’l‚Ì”{”‚Å‚È‚¢jê‡‚̃Gƒ‰[
    2543 ‚ðƒ`ƒFƒbƒN‚·‚é‚悤‚É‚È‚éDƒ`ƒFƒbƒN‚ª•K—v‚È‚¢ê‡‚ɂ́C‚±‚̕ϐ”‚ð’è‹`‚µ
    2544 ‚È‚¢D
    2545 
    2546 7.2.2 ƒ^[ƒQƒbƒg”ñˆË‘¶•”‚Å’è‹`‚³‚ê‚é•Ï”
    2547 
    2548 kernel.tf‚Ì’†‚Å‚ÍŽŸ‚̕ϐ”‚ª’è‹`‚³‚ê‚邽‚߁Ckernel.tf‚ðƒCƒ“ƒNƒ‹[ƒh‚µ‚½
    2549 ŒãCtarget.tf‚Ì’†‚Å‚±‚ê‚ç‚ðŽQÆ‚·‚邱‚Æ‚ª‚Å‚«‚éD
    2550 
    2551 (7-2-1) INTNO[inhno]            inhno‚ð‘Ήž‚·‚éintno‚É•ÏŠ·‚·‚邽‚߂̘A‘z”z—ñ
    2552 (7-2-2) INHNO[intno]            intno‚ð‘Ήž‚·‚éinhno‚É•ÏŠ·‚·‚邽‚߂̘A‘z”z—ñ
    2553 
    2554 7.3 ƒpƒX3‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”
    2555 
    2556 ˆÈ‰º‚ł́CƒpƒX3‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”‚ð‹Lq‚·‚éã‚Å•K
    2557 —v‚ÈŽ–€‚ɂ‚¢‚Äà–¾‚·‚éD
    2558 
    2559 target_check.tf‚©‚çkernel_check.tf‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚é‘O‚ɁC•K—v‚ɉž‚¶‚āC
    2560 ŽŸ‚̕ϐ”‚ð’è‹`‚µ‚Ä‚¨‚©‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    2561 
    2562 (7-3-1) CHECK_FUNC_ALIGNiƒIƒvƒVƒ‡ƒ“j@ŠÖ”‚̃Aƒ‰ƒCƒ“’PˆÊ
    2563 (7-3-2) CHECK_FUNC_NONNULLiƒIƒvƒVƒ‡ƒ“jŠÖ”‚Ì”ñNULLƒ`ƒFƒbƒN
    2564 (7-3-3) CHECK_STACK_ALIGNiƒIƒvƒVƒ‡ƒ“j ƒXƒ^ƒbƒN—̈æ‚̃Aƒ‰ƒCƒ“’PˆÊ
    2565 (7-3-4) CHECK_STACK_NONNULLiƒIƒvƒVƒ‡ƒ“jƒXƒ^ƒbƒN—̈æ‚Ì”ñNULLƒ`ƒFƒbƒN
    2566 (7-3-5) CHECK_MPF_ALIGNiƒIƒvƒVƒ‡ƒ“j   ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹—̈æ‚̃Aƒ‰ƒCƒ“’PˆÊ
    2567 (7-3-6) CHECK_MPF_NONNULLiƒIƒvƒVƒ‡ƒ“j ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹—̈æ‚Ì”ñNULLƒ`ƒFƒbƒN
    2568 
    2569 ŠÖ”^ƒXƒ^ƒbƒN—̈æ^ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹—̈æ‚̐擪”Ô’n‚̃Aƒ‰ƒCƒ“ƒƒ“ƒg‚Ì
    2570 ƒ`ƒFƒbƒN‚ðs‚¤ê‡‚ɂ́C‚»‚ꂼ‚êCCHECK_FUNC_ALIGN^CHECK_STACK_ALIGN^
    2571 CHECK_MPF_ALIGN‚ðƒAƒ‰ƒCƒ“’PˆÊ‚É’è‹`‚·‚éDŠÖ”^ƒXƒ^ƒbƒN—̈æ^ŒÅ’è’·ƒƒ‚
    2572 ƒŠƒv[ƒ‹—̈æ‚̐擪”Ô’n‚ªNULL‚Å‚È‚¢‚©‚̃`ƒFƒbƒN‚ðs‚¤ê‡‚ɂ́C‚»‚ꂼ‚ê
    2573 CHECK_FUNC_NONNULL^CHECK_STACK_NONNULL^CHECK_MPF_NONNULL‚ð1‚É’è‹`‚·‚éD
    2574 ƒ`ƒFƒbƒN‚ª•K—v‚È‚¢ê‡‚ɂ́CŠY“–‚·‚é•Ï”‚ð’è‹`‚µ‚È‚¢D
    2575 
    2576 7.4 cfg1_out.c‚̃Šƒ“ƒN‚É•K—v‚ȃXƒ^ƒu‚Ì’è‹`ƒtƒ@ƒCƒ‹
    2577 
    2578 ƒRƒ“ƒtƒBƒMƒ
    2579 ƒŒ[ƒ^‚ÉŠÖ‚µ‚ă^[ƒQƒbƒgˆË‘¶‚É—pˆÓ‚·‚é•K—v‚ª‚ ‚éƒtƒ@ƒCƒ‹‚Æ
    2580 ‚µ‚āCÝ’èƒtƒ@ƒCƒ‹ˆÈŠO‚ɁCcfg1_out.c‚ðƒŠƒ“ƒN‚·‚邽‚ß‚É•K—v‚ȃXƒ^ƒu‚Ì’è
    2581 ‹`ƒtƒ@ƒCƒ‹‚ª‚ ‚éD
    2582 
    2583 ƒRƒ“ƒtƒBƒMƒ
    2584 ƒŒ[ƒ^‚̃pƒX1‚ł́CÃ“IAPI‚̐®”’萔Ž®ƒpƒ‰ƒ[ƒ^‚Ì’l‚ðCƒRƒ“
    2585 ƒpƒCƒ‰‚ð—p‚¢‚Ä‹‚߂邽‚߂ɁCcfg1_out.c‚𐶐¬‚·‚éD‚±‚ê‚ðƒRƒ“ƒpƒCƒ‹CƒŠ
    2586 ƒ“ƒN‚µ‚ăIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚𐶐¬‚·‚éÛ‚ɁCƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    2587 [ƒ‹‚©
    2588 ‚çŽQÆ‚³‚ê‚éƒVƒ“ƒ{ƒ‹‚Ì’è‹`‚ð—^‚¦‚é•K—v‚ª‚ ‚éD
    2589 
    2590 ‚±‚Ì’è‹`‚ð—^‚¦‚邽‚߂ɁCcfg1_out.c‚©‚çCƒ^[ƒQƒbƒgˆË‘¶•”‚Ì
    2591 target_cfg1_out.h‚ðƒCƒ“ƒNƒ‹[ƒh‚µ‚Ä‚¢‚éDtarget_cfg1_out.hi‚Ü‚½‚́C‚»
    2592 ‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹j‚ɂ́CƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    2593 [ƒ‹‚©‚çŽQ
    2594 Æ‚³‚ê‚éƒVƒ“ƒ{ƒ‹‚̃Xƒ^ƒu‚Ì’è‹`‚ðŠÜ‚ß‚éD“TŒ^“I‚ɂ́CˆÈ‰º‚̂悤‚È’è‹`‚ð
    2595 ŠÜ‚ß‚é•K—v‚ª‚ ‚éD
     2317タイマ値の内部表現を,1μ秒単位に変換するためのマクロ(または関数).
     2318targettimer_get_currentで読み出した値を,タイマ割込み発生からの経過時間
     2319(単位: 1μ秒)に変換するために用いる.
     2320
     23217. コンフィギュレータ設定ファイルのターゲット依存部
     2322
     23237.1 設定ファイルとターゲット依存部の位置付け
     2324
     2325SSPカーネルのコンフィギュレータは,設定ファイルの記述に従ってファイルの
     2326生成およびエラーチェックを行う.コンフィギュレータの設定ファイルには,
     2327以下の4つがある.
     2328
     2329(a) 静的APIテーブル
     2330
     2331静的APIの一覧と,各静的APIのパラメータについて記述したファイル.静的
     2332APIを拡張する場合以外は変更する必要がないため,ターゲット非依存部で用意
     2333している(kernel/kernel_api.csv).
     2334
     2335(b) 値取得シンボルテーブル
     2336
     2337コンフィギュレータのパス1において,パラメータ計算用C言語ファイルに出力
     2338し,値を求めたいシンボル(一般には式)を記述するためのファイル.ターゲッ
     2339ト非依存部では,ターゲットに依存せずに必要となるシンボルを記述したファ
     2340イルを用意している(kernel/kernel_def.csv).
     2341
     2342ターゲットに依存して必要となるシンボルがある場合には,targetディレクト
     2343リに置かれたtarget_def.csv中に記述する.target_def.csv中に記述して値を
     2344求めることができるシンボルは,kernel/kernel_int.hおよびそこからインクルー
     2345ドされるファイルで定義されていなければならない.kernel_int.hからは,
     2346target_stddef.h,target_kernel.h,target_config.hを(間接的に)インクルー
     2347ドしているため,これらのファイルおよびそこからインクルードされるファイ
     2348ルで定義されるターゲット依存のシンボルは,target_def.csv中に記述するこ
     2349とができる.
     2350
     2351ここで値を求めたシンボルの値は,コンフィギュレータのパス2およびパス3の
     2352テンプレートファイル中で参照することができる.
     2353
     2354(c) パス2のテンプレートファイル
     2355
     2356コンフィギュレータのパス2は,テンプレートファイルに従って,カーネルの構
     2357成・初期化ファイル(kernel_cfg.c),構成・初期化ヘッダファイル
     2358(kernel_cfg.h)などを生成する.このテンプレートファイルは,ターゲット
     2359非依存部とターゲット依存部に切り分けてあるが,他のファイルのターゲット
     2360依存部とは逆に,ターゲット依存部からターゲット非依存部をインクルードす
     2361る形になっている.
     2362
     2363具体的には,targetディレクトリに置かれたtarget.tfで,必要な変数を定義し
     2364た後,テンプレートファイルのターゲット非依存部(kernel/kernel.tf)をイ
     2365ンクルードする.kernel.tfでは,カーネルのターゲット非依存部で使用する変
     2366数定義等を生成する.kernel.tfをインクルードした後,target.tfでは,カー
     2367ネルのターゲット依存部で使用する変数定義等を生成する.target.tfから,プ
     2368ロセッサ依存部,チップ依存部を,開発環境依存部を切り分けてもよい.
     2369
     2370(d) パス3のテンプレートファイル
     2371
     2372コンフィギュレータのパス3は,テンプレートファイルに従って,静的APIの一
     2373般定数式パラメータのチェックを行う.このテンプレートファイルも,ターゲッ
     2374ト非依存部とターゲット依存部に切り分けてあり,ターゲット依存部からター
     2375ゲット非依存部をインクルードする形になっている.
     2376
     2377具体的には,targetディレクトリに置かれたtarget_check.tfで,必要な変数を
     2378定義した後,テンプレートファイルのターゲット非依存部
     2379(kernel/kernel_check.tf)をインクルードする.kernel_check.tfでは,カー
     2380ネルのターゲット非依存部で初期化ブロックに出力した一般定数式パラメータ
     2381のチェックを行う.kernel_check.tfをインクルードした後,target_check.tf
     2382では,ターゲットに依存するチェックを行う.target_check.tfから,プロセッ
     2383サ依存部,チップ依存部を,開発環境依存部を切り分けてもよい.
     2384
     2385なお,コンフィギュレータの詳細仕様と設定ファイルの記述方法については,
     2386別途PDFファイルの形で配布している「TOPPERS新世代カーネル用コンフィギュ
     2387レータ仕様」および「TOPPERS新世代カーネル用コンフィギュレータ内蔵マクロ
     2388プロセッサ仕様」を参照すること.
     2389
     23907.2 パス2のテンプレートファイルのターゲット依存部
     2391
     2392以下では,パス2のテンプレートファイルのターゲット依存部を記述する上で必
     2393要な事項について説明する.
     2394
     23957.2.1 ターゲット非依存部をインクルードする前に定義すべき変数
     2396
     2397target.tfからkernel.tfをインクルードする前に,次の変数を定義しておかな
     2398ければならない.
     2399
     2400(7-2-1) INTNO_ATTISR_VALID              ATT_ISRで使用できる割込み番号
     2401(7-2-2) INHNO_ATTISR_VALID              INTNO_ATTISR_VALIDに対応する割込ハンドラ番号
     2402(7-2-3) INHNO_DEFINH_VALID              DEF_INTで使用できる割込みハンドラ番号
     2403(7-2-4) EXCNO_DEFEXC_VALID              DEF_EXCで使用できるCPU例外ハンドラ番号
     2404(7-2-5) INTNO_CFGINT_VALID              CFG_INTで使用できる割込み番号
     2405(7-2-6) INTPRI_CFGINT_VALID             CFG_INTで使用できる割込み優先度
     2406
     2407APIで使用できる割込み番号/割込みハンドラ番号/CPU例外ハンドラ番号/割
     2408込み優先度のリストを,各変数に定義する.INHNO_ATTISR_VALIDには,
     2409INTNO_ATTISR_VALIDにリストアップした割込み番号に対応する割込みハンドラ
     2410番号のリストを定義する.
     2411
     2412(7-2-7) TARGET_TSKATR(オプション)            ターゲット定義のタスク属性
     2413(7-2-8) TARGET_ISRATR(オプション)            ターゲット定義のISR属性
     2414(7-2-9) TARGET_INHATR(オプション)            ターゲット定義の割込みハンドラ属性
     2415(7-2-10) TARGET_INTATR(オプション)   ターゲット定義の割込み属性
     2416(7-2-11) TARGET_EXCATR(オプション)   ターゲット定義のCPU例外ハンドラ属性
     2417
     2418各オブジェクトの属性を,ターゲット定義に拡張する場合に,該当するオブジェ
     2419クト属性を示す変数に,拡張に使用するビットの論理和を定義する.これによ
     2420り,拡張に使用するビットが設定されている場合に,エラーになるのを防ぐ.
     2421
     2422(7-2-12) INTNO_FIX_KERNEL(オプション)                カーネル管理に固定されている
     2423                                                                                        割込み番号
     2424(7-2-13) INHNO_FIX_KERNEL(オプション)                カーネル管理に固定されている
     2425                                                                                        割込みハンドラ番号
     2426(7-2-14) INHNO_FIX_NONKERNEL(オプション)     カーネル管理外に固定されている
     2427                                                                                        割込み番号
     2428(7-2-15) INHNO_FIX_NONKERNEL(オプション)     カーネル管理外に固定されている
     2429                                                                                        割込みハンドラ番号
     2430
     2431カーネル管理またはカーネル管理外に固定されている割込みがある場合には,
     2432それらの割込み番号と割込みハンドラ番号のリストを,各変数に定義する.
     2433
     2434(7-2-16) USE_INHINIB_TABLE(オプション)
     2435
     2436OMIT_INITIALIZE_INTERRUPTを定義したが,割込みハンドラの初期化に必要な情
     2437報をkernel_cfg.cに生成したい場合には,この変数を1に設定する.具体的には,
     2438TNUM_INHNO,tnum_inhno,inhinib_tableの定義と,割込みハンドラ毎の出入口
     2439処理を生成するための記述(INTHDR_ENTRYマクロのリスト)が,ターゲット非
     2440依存部によって生成される.
     2441
     2442(7-2-17) USE_INTINIB_TABLE(オプション)
     2443
     2444OMIT_INITIALIZE_INTERRUPTを定義したが,割込み要求ラインの初期化に必要な
     2445情報をkernel_cfg.cに生成したい場合には,この変数を1に設定する.具体的に
     2446は,TNUM_INTNO,tnum_intno,intinib_tableの定義が,ターゲット非依存部に
     2447よって生成される.
     2448
     2449(7-2-18) TARGET_MIN_STKSZ(オプション)
     2450
     2451ターゲット定義で,タスクのスタックサイズの最小値を設定する場合には,こ
     2452の変数をスタックサイズの最小値に定義する.
     2453
     2454(7-2-19) CHECK_STKSZ_ALIGN(オプション)
     2455
     2456スタック領域のサイズがある値の倍数でなければならない場合に,この変数を
     2457その値に定義する.この変数を定義することで,kernel.tfにおいて,スタック
     2458領域のサイズが正しくない(この変数に定義した値の倍数でない)場合のエラー
     2459をチェックするようになる.チェックが必要ない場合には,この変数を定義し
     2460ない.
     2461
     24627.2.2 ターゲット非依存部で定義される変数
     2463
     2464kernel.tfの中では次の変数が定義されるため,kernel.tfをインクルードした
     2465後,target.tfの中でこれらを参照することができる.
     2466
     2467(7-2-1) INTNO[inhno]            inhnoを対応するintnoに変換するための連想配列
     2468(7-2-2) INHNO[intno]            intnoを対応するinhnoに変換するための連想配列
     2469
     24707.3 パス3のテンプレートファイルのターゲット依存部
     2471
     2472以下では,パス3のテンプレートファイルのターゲット依存部を記述する上で必
     2473要な事項について説明する.
     2474
     2475target_check.tfからkernel_check.tfをインクルードする前に,必要に応じて,
     2476次の変数を定義しておかなければならない.
     2477
     2478(7-3-1) CHECK_FUNC_ALIGN(オプション) 関数のアライン単位
     2479(7-3-2) CHECK_FUNC_NONNULL(オプション)関数の非NULLチェック
     2480(7-3-3) CHECK_STACK_ALIGN(オプション)        スタック領域のアライン単位
     2481(7-3-4) CHECK_STACK_NONNULL(オプション)スタック領域の非NULLチェック
     2482(7-3-5) CHECK_MPF_ALIGN(オプション)  固定長メモリプール領域のアライン単位
     2483(7-3-6) CHECK_MPF_NONNULL(オプション)        固定長メモリプール領域の非NULLチェック
     2484
     2485関数/スタック領域/固定長メモリプール領域の先頭番地のアラインメントの
     2486チェックを行う場合には,それぞれ,CHECK_FUNC_ALIGN/CHECK_STACK_ALIGN/
     2487CHECK_MPF_ALIGNをアライン単位に定義する.関数/スタック領域/固定長メモ
     2488リプール領域の先頭番地がNULLでないかのチェックを行う場合には,それぞれ
     2489CHECK_FUNC_NONNULL/CHECK_STACK_NONNULL/CHECK_MPF_NONNULLを1に定義する.
     2490チェックが必要ない場合には,該当する変数を定義しない.
     2491
     24927.4 cfg1_out.cのリンクに必要なスタブの定義ファイル
     2493
     2494コンフィギュレータに関してターゲット依存に用意する必要があるファイルと
     2495して,設定ファイル以外に,cfg1_out.cをリンクするために必要なスタブの定
     2496義ファイルがある.
     2497
     2498コンフィギュレータのパス1では,静的APIの整数定数式パラメータの値をCコン
     2499パイラを用いて求めるために,cfg1_out.cを生成する.これをコンパイル,リ
     2500ンクしてオブジェクトファイルを生成する際に,スタートアップモジュールか
     2501ら参照されるシンボルの定義を与える必要がある.
     2502
     2503この定義を与えるために,cfg1_out.cから,ターゲット依存部の
     2504target_cfg1_out.hをインクルードしている.target_cfg1_out.h(または,そ
     2505こからインクルードされるファイル)には,スタートアップモジュールから参
     2506照されるシンボルのスタブの定義を含める.典型的には,以下のような定義を
     2507含める必要がある.
    25962508
    25972509----------------------------------------
     
    26142526
    26152527
    2616 8. ƒVƒXƒeƒ€ƒT[ƒrƒX“™‚̃^[ƒQƒbƒgˆË‘¶•”
    2617 
    2618 8.1 ƒVƒXƒeƒ€ƒT[ƒrƒX‚̃^[ƒQƒbƒgˆË‘¶•”
    2619 
    2620 ƒVƒŠƒAƒ‹ƒ|[ƒg”‚âƒVƒXƒeƒ€ƒƒOƒ^ƒXƒNŠÖ˜A‚̒萔‚ȂǁCƒVƒXƒeƒ€ƒT[ƒrƒX‚Ì
    2621 \¬‚ðŒˆ’è‚·‚邽‚ß‚Ì’è‹`‚ðtarget_syssvc.h‚Ü‚½‚Í‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê
    2622 ‚éƒtƒ@ƒCƒ‹iƒvƒƒZƒbƒTEƒ`ƒbƒvEŠJ”­ŠÂ‹«ˆË‘¶•”‚Å—pˆÓ‚³‚ê‚éƒwƒbƒ_ƒtƒ@ƒC
    2623 ƒ‹‚Ȃǁj‚ÉŠÜ‚ß‚éD
    2624 
    2625 ‚È‚¨CTOPPERS‘gž‚݃Rƒ“ƒ|[ƒlƒ“ƒgƒVƒXƒeƒ€‚ª“±“ü‚³‚ê‚é‚ƁC‚±‚̃tƒ@ƒCƒ‹‚Ì
    2626 “à—e‚̓Rƒ“ƒ|[ƒlƒ“ƒg‹Lqƒtƒ@ƒCƒ‹‚É‹Lq‚³‚ê‚邱‚Æ‚É‚È‚èC‚±‚̃tƒ@ƒCƒ‹‚Í
    2627 –³‚­‚È‚éi‚Ü‚½‚́C‘啝‚ɏk¬‚³‚ê‚éjŒ©ž‚Ý‚Å‚ ‚éD
    2628 
    2629 8.2  ƒVƒXƒeƒ€ƒƒO‹@”\‚̃^[ƒQƒbƒgˆË‘¶’è‹`
    2630 
    2631 ƒVƒXƒeƒ€ƒƒO‹@”\‚ðŽg—p‚·‚éê‡‚ŁCƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    2632 [ƒ‹‚ÅbssƒZƒNƒVƒ‡
    2633 ƒ“‚̃NƒŠƒA‚ðÈ—ª‚µ‚Ä‚¢‚éê‡‚ɂ́Csyslog_logmask‚Æsyslog_lowmask_not‚ð
    2634 0‚ɏ‰Šú‰»‚·‚éƒR[ƒh‚ð’ljÁ‚·‚éD‚±‚ê‚́CƒVƒXƒeƒ€ƒƒO‹@”\‚ª‰Šú‰»‚³‚ê‚é‘O
    2635 ‚ɏo—Í‚³‚ꂽƒƒOî•ñ‚ðC’჌ƒxƒ‹o—Í‹@”\‚ð—p‚¢‚ďo—Í‚·‚邽‚ß‚Å‚ ‚éD
    2636 
    2637 ƒ^[ƒQƒbƒgˆË‘¶•”‚Å’ñ‹Ÿ‚·‚ׂ«ƒVƒXƒeƒ€ƒƒO‹@”\‚Ì‚½‚ß‚Ì’è‹`‚ÍŽŸ‚Ì’Ê‚è‚Å‚ 
    2638 ‚éD
     25288. システムサービス等のターゲット依存部
     2529
     25308.1 システムサービスのターゲット依存部
     2531
     2532シリアルポート数やシステムログタスク関連の定数など,システムサービスの
     2533構成を決定するための定義をtarget_syssvc.hまたはそこからインクルードされ
     2534るファイル(プロセッサ・チップ・開発環境依存部で用意されるヘッダファイ
     2535ルなど)に含める.
     2536
     2537なお,TOPPERS組込みコンポーネントシステムが導入されると,このファイルの
     2538内容はコンポーネント記述ファイルに記述されることになり,このファイルは
     2539無くなる(または,大幅に縮小される)見込みである.
     2540
     25418.2  システムログ機能のターゲット依存定義
     2542
     2543システムログ機能を使用する場合で,スタートアップモジュールでbssセクショ
     2544ンのクリアを省略している場合には,syslog_logmaskとsyslog_lowmask_notを
     25450に初期化するコードを追加する.これは,システムログ機能が初期化される前
     2546に出力されたログ情報を,低レベル出力機能を用いて出力するためである.
     2547
     2548ターゲット依存部で提供すべきシステムログ機能のための定義は次の通りであ
     2549る.
    26392550
    26402551(8-2-1)  TCNT_SYSLOG_BUFFER
    26412552
    2642 ƒVƒXƒeƒ€ƒƒO‹@”\‚̃ƒOƒoƒbƒtƒ@‚̃TƒCƒY‚ð’è‹`‚·‚éƒ}ƒNƒD’è‹`‚µ‚È‚¢ê‡
    2643 ‚̃fƒtƒHƒ‹ƒg’l‚Í32D
     2553システムログ機能のログバッファのサイズを定義するマクロ.定義しない場合
     2554のデフォルト値は32.
    26442555
    26452556(8-2-2)  void target_fput_log(char c)
    26462557
    2647 ƒVƒXƒeƒ€ƒƒO‚̒჌ƒxƒ‹o—Í‚Ì‚½‚ß‚Ì•¶Žšo—͊֐”Dƒ^[ƒQƒbƒgˆË‘¶‚Ì•û–@‚ŁC
    2648 •¶Žšc‚ð•\Ž¦/o—Í/•Û‘¶‚·‚éD
    2649 
    2650 ‚±‚̊֐”‚́CƒŠƒGƒ“ƒgƒ‰ƒ“ƒg‚ÉŽÀ‘•‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D‚±‚̊֐”“à‚Å”r‘¼§
    2651 Œä‚ª•K—v‚ȏꍇ‚ɂ́CSIL‚ð—p‚¢‚Ä‘SŠ„ž‚݃ƒbƒNó‘Ô‚É‚·‚邱‚ƁD‚Ü‚½C‘SŠ„
    2652 ž‚݃ƒbƒNó‘ԂŌĂ΂ê‚éê‡‚ª‚ ‚邽‚߁C‘SŠ„ž‚݃ƒbƒNó‘Ô‚©‚çŒÄ‚яo‚·
    2653 ‚±‚Æ‚ª‚Å‚«‚È‚¢ŠÖ”‚ðŒÄ‚΂Ȃ¢‚悤‚ÉŽÀ‘•‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    2654 
    2655 ’჌ƒxƒ‹o—Í‚ðƒVƒŠƒAƒ‹ƒ|[ƒgŒo—R‚ōs‚¤ê‡‚ŁCƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒh
    2656 ƒ‰ƒCƒo‚ƃ|[ƒg‚ð‹¤—p‚µ‚È‚¢‚±‚Æ‚ª–]‚Ü‚µ‚¢‚ªCƒ|[ƒg”‚ª‘«‚è‚È‚¢‚½‚ß‚É‚â
    2657 ‚Þ‚ð‚¦‚¸‹¤—p‚·‚éê‡‚ɂ́C—¼ŽÒ‚ª‹£‡‚µ‚È‚¢‚悤‚É’ˆÓ‚ª•K—v‚Å‚ ‚éD‹ï‘Ì
    2658 “I‚ɂ́C—¼ŽÒ‚ª“¯‚¶Ý’è‚ŃVƒŠƒAƒ‹I/OƒfƒoƒCƒX‚ðŽg‚¤‚悤‚É‚µCƒVƒŠƒAƒ‹ƒCƒ“
    2659 ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚Ì“®ì’†‚ɒ჌ƒxƒ‹o—Í‚ªs‚í‚ê‚Ä‚à·‚µŽx‚¦‚È‚¢‚悤‚É
    2660 ÝŒv‚·‚éD‚Ü‚½C’჌ƒxƒ‹o—Í‚ª“®ìŠJŽnŒã‚ɃVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒC
    2661 ƒo‚ªƒVƒŠƒAƒ‹I/OƒfƒoƒCƒX‚ð‰Šú‰»‚·‚é‚ƁC•¶Žš‰»‚¯‚ª‹N‚±‚é‰Â”\«‚ª‚ ‚邽‚߁C
    2662 ‹¤—p‚·‚éƒ|[ƒg‚́C’჌ƒxƒ‹o—Í‹@”\‘¤‚ŏ‰Šú‰»‚µCƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒX
    2663 ƒhƒ‰ƒCƒo‚ł͏‰Šú‰»‚µ‚È‚¢‚悤‚É‚·‚é‚Æ‚æ‚¢D
    2664 
    2665 ‚È‚¨C‚±‚̊֐”‚Ì–{‘Ì‚ðC‚ǂ̃tƒ@ƒCƒ‹‚É‹Lq‚·‚é‚©‚ª–â‘è‚É‚È‚éDƒVƒXƒeƒ€
    2666 ƒT[ƒrƒX‚̃^[ƒQƒbƒgˆË‘¶•”‚ɂ́C•W€‚ł́CŠÖ”’è‹`‚ð‹Lq‚·‚邽‚߂̃tƒ@
    2667 ƒCƒ‹‚ð—pˆÓ‚µ‚Ä‚¢‚È‚¢Dƒ^[ƒQƒbƒgˆË‘¶‚Å—pˆÓ‚µ‚Ä‚à‚æ‚¢‚ªC—áŠO“I‚ɁCƒJ[
    2668 ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶ƒ‚ƒWƒ
    2669 [ƒ‹itarget_config.cj‚É‹Lq‚µ‚Ä‚à‚æ‚¢D
    2670 ‚±‚̏ꍇCtarget_fput_log‚ðCƒŠƒl[ƒ€‹Lqitarget_rename.def‚Ȃǁj‚ÉŠÜ
    2671 ‚ß‚Ä‚Í‚È‚ç‚È‚¢D
    2672 
    2673 8.3  ƒƒOƒ^ƒXƒN‚̃^[ƒQƒbƒgˆË‘¶’è‹`
    2674 
    2675 ƒ^[ƒQƒbƒgˆË‘¶•”‚Å’ñ‹Ÿ‚·‚ׂ«ƒƒOƒ^ƒXƒN‚Ì‚½‚ß‚Ì’è‹`‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD‚±
    2676 ‚ê‚ç‚Ì’è‹`‚́Ctarget_syssvc.h‚Ü‚½‚Í‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹‚É
    2677 ŠÜ‚ß‚éD
    2678 
    2679 (8-3-1)  LOGTASK_PRIORITYiƒIƒvƒVƒ‡ƒ“j
    2680 
    2681 ƒƒOƒ^ƒXƒN‚Ì—Dæ“x‚ð’è‹`‚·‚éƒ}ƒNƒD’è‹`‚µ‚È‚¢ê‡‚̃fƒtƒHƒ‹ƒg’l‚Í3D
    2682 
    2683 (8-3-2)  LOGTASK_STACK_SIZEiƒIƒvƒVƒ‡ƒ“j
    2684 
    2685 ƒƒOƒ^ƒXƒN‚̃Xƒ^ƒbƒNƒTƒCƒY‚ð’è‹`‚·‚éƒ}ƒNƒD’è‹`‚µ‚È‚¢ê‡‚̃fƒtƒHƒ‹ƒg
    2686 ’l‚Í1024D
    2687 
    2688 (8-3-3)  LOGTASK_PORTIDiƒIƒvƒVƒ‡ƒ“j
    2689 
    2690 ƒƒOƒ^ƒXƒN‚̏o—͐æ‚̃VƒŠƒAƒ‹ƒ|[ƒg”ԍ†D’è‹`‚µ‚È‚¢ê‡‚̃fƒtƒHƒ‹ƒg’l‚Í1D
    2691 
    2692 (8-3-4)  LOGTASK_INTERVALiƒIƒvƒVƒ‡ƒ“j
    2693 
    2694 ƒƒOƒ^ƒXƒN‚Ì“®ìŠÔŠui’PˆÊ‚̓~ƒŠ•bjD’è‹`‚µ‚È‚¢ê‡‚̃fƒtƒHƒ‹ƒg’l‚Í10D
    2695 
    2696 (8-3-5)  LOGTASK_FLUSH_WAITiƒIƒvƒVƒ‡ƒ“j
    2697 
    2698 ƒƒOo—Í‚ð‘Ò‚¿‡‚킹‚鏈—‚É‚¨‚¢‚āCƒ^ƒXƒN‚ð‘Ò‚½‚¹‚é’PˆÊ‚ƂȂ鎞ŠÔi’P
    2699 ˆÊ‚̓~ƒŠ•bjD’è‹`‚µ‚È‚¢ê‡‚̃fƒtƒHƒ‹ƒg’l‚Í1D
    2700 
    2701 8.4 ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚̃^[ƒQƒbƒgˆË‘¶•”
    2702 
    2703 ƒ^[ƒQƒbƒgˆË‘¶•”‚Å’ñ‹Ÿ‚·‚ׂ«ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚Ì‚½‚ß‚Ì’è‹`
    2704 ‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD‚±‚ê‚ç‚Ì’è‹`‚́C•Ê‚ÉŽw’肪‚È‚¢ŒÀ‚èCtarget_serial.h‚Ü
    2705 ‚½‚Í‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹‚Ɋ܂߁C•K—v‚ȃRƒ“ƒtƒBƒMƒ
    2706 ƒŒ[ƒVƒ‡
    2707 ƒ“î•ñ‚ðtarget_serial.cfg‚É‹Lq‚·‚éDŠÖ”‚ÌŽÀ‘Ì‚ª•K—v‚ȏꍇ‚ɂ́C
    2708 target_serial.c“™‚̃tƒ@ƒCƒ‹‚ð—pˆÓ‚·‚éD
    2709 
    2710 ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚Ì’†‚ŁCƒ^[ƒQƒbƒg‚̃VƒŠƒAƒ‹I/OƒfƒoƒCƒX‚É
    2711 ˆË‘¶‚·‚é•”•ª‚ðCƒVƒŠƒAƒ‹I/OƒfƒoƒCƒXƒhƒ‰ƒCƒo‚ƌĂԁDƒVƒŠƒAƒ‹I/OƒfƒoƒCƒX
    2712 ƒhƒ‰ƒCƒo‚́C‚¨‚¨‚æ‚»CITRONƒfƒoƒCƒXƒhƒ‰ƒCƒoÝŒvƒKƒCƒhƒ‰ƒCƒ“‚ÌPDIC‚É‘Š“–
    2713 ‚·‚éDPDIC‚É‘Š“–‚·‚éƒtƒ@ƒCƒ‹‚ŁC‘¼‚̃VƒXƒeƒ€‚É‚à‹¤’Ê‚ÉŽg‚¦‚é‰Â”\«‚ª‚ 
    2714 ‚éê‡‚ɂ́CpdicƒfƒBƒŒƒNƒgƒŠ‚É’u‚­D
    2715 
    2716 8.4.1 •Ï”Cƒf[ƒ^Œ^CŠÇ—ŠÖ”
     2558システムログの低レベル出力のための文字出力関数.ターゲット依存の方法で,
     2559文字cを表示/出力/保存する.
     2560
     2561この関数は,リエントラントに実装しなければならない.この関数内で排他制
     2562御が必要な場合には,SILを用いて全割込みロック状態にすること.また,全割
     2563込みロック状態で呼ばれる場合があるため,全割込みロック状態から呼び出す
     2564ことができない関数を呼ばないように実装しなければならない.
     2565
     2566低レベル出力をシリアルポート経由で行う場合で,シリアルインタフェースド
     2567ライバとポートを共用しないことが望ましいが,ポート数が足りないためにや
     2568むをえず共用する場合には,両者が競合しないように注意が必要である.具体
     2569的には,両者が同じ設定でシリアルI/Oデバイスを使うようにし,シリアルイン
     2570タフェースドライバの動作中に低レベル出力が行われても差し支えないように
     2571設計する.また,低レベル出力が動作開始後にシリアルインタフェースドライ
     2572バがシリアルI/Oデバイスを初期化すると,文字化けが起こる可能性があるため,
     2573共用するポートは,低レベル出力機能側で初期化し,シリアルインタフェース
     2574ドライバでは初期化しないようにするとよい.
     2575
     2576なお,この関数の本体を,どのファイルに記述するかが問題になる.システム
     2577サービスのターゲット依存部には,標準では,関数定義を記述するためのファ
     2578イルを用意していない.ターゲット依存で用意してもよいが,例外的に,カー
     2579ネル実装のターゲット依存モジュール(target_config.c)に記述してもよい.
     2580この場合,target_fput_logを,リネーム記述(target_rename.defなど)に含
     2581めてはならない.
     2582
     25838.3  ログタスクのターゲット依存定義
     2584
     2585ターゲット依存部で提供すべきログタスクのための定義は次の通りである.こ
     2586れらの定義は,target_syssvc.hまたはそこからインクルードされるファイルに
     2587含める.
     2588
     2589(8-3-1)  LOGTASK_PRIORITY(オプション)
     2590
     2591ログタスクの優先度を定義するマクロ.定義しない場合のデフォルト値は3.
     2592
     2593(8-3-2)  LOGTASK_STACK_SIZE(オプション)
     2594
     2595ログタスクのスタックサイズを定義するマクロ.定義しない場合のデフォルト
     2596値は1024.
     2597
     2598(8-3-3)  LOGTASK_PORTID(オプション)
     2599
     2600ログタスクの出力先のシリアルポート番号.定義しない場合のデフォルト値は1.
     2601
     2602(8-3-4)  LOGTASK_INTERVAL(オプション)
     2603
     2604ログタスクの動作間隔(単位はミリ秒).定義しない場合のデフォルト値は10.
     2605
     2606(8-3-5)  LOGTASK_FLUSH_WAIT(オプション)
     2607
     2608ログ出力を待ち合わせる処理において,タスクを待たせる単位となる時間(単
     2609位はミリ秒).定義しない場合のデフォルト値は1.
     2610
     26118.4 シリアルインタフェースドライバのターゲット依存部
     2612
     2613ターゲット依存部で提供すべきシリアルインタフェースドライバのための定義
     2614は次の通りである.これらの定義は,別に指定がない限り,target_serial.hま
     2615たはそこからインクルードされるファイルに含め,必要なコンフィギュレーショ
     2616ン情報をtarget_serial.cfgに記述する.関数の実体が必要な場合には,
     2617target_serial.c等のファイルを用意する.
     2618
     2619シリアルインタフェースドライバの中で,ターゲットのシリアルI/Oデバイスに
     2620依存する部分を,シリアルI/Oデバイスドライバと呼ぶ.シリアルI/Oデバイス
     2621ドライバは,おおよそ,ITRONデバイスドライバ設計ガイドラインのPDICに相当
     2622する.PDICに相当するファイルで,他のシステムにも共通に使える可能性があ
     2623る場合には,pdicディレクトリに置く.
     2624
     26258.4.1 変数,データ型,管理関数
    27172626
    27182627(8-4-1) TNUM_PORT
    27192628
    2720 ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚ªƒTƒ|[ƒg‚·‚éƒVƒŠƒAƒ‹ƒ|[ƒg”‚ð’è‹`‚·‚é
    2721 ƒ}ƒNƒD‚±‚̃}ƒNƒ‚Ì’è‹`‚́Ctarget_syssvc.h‚Ü‚½‚Í‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³
    2722 ‚ê‚éƒtƒ@ƒCƒ‹‚ÉŠÜ‚ß‚éD
    2723 
    2724 (8-4-2) void sio_initialize(intptr_t exinf)iƒIƒvƒVƒ‡ƒ“j
    2725 
    2726 ƒVƒŠƒAƒ‹I/OƒfƒoƒCƒXƒhƒ‰ƒCƒo‚̏‰Šú‰»ˆ—Dtarget_serial.cfg‚ɁC‚±‚̊֐”
    2727 ‚ð‰Šú‰»ƒ‹[ƒ`ƒ“‚Æ‚µ‚Ä“o˜^‚·‚éÃ“IAPI‚ðŠÜ‚ß‚éD
    2728 
    2729 (8-4-3) void sio_terminate(intptr_t exinf)iƒIƒvƒVƒ‡ƒ“j
    2730 
    2731 ƒVƒŠƒAƒ‹I/OƒfƒoƒCƒXƒhƒ‰ƒCƒo‚̏I—¹ˆ—Dtarget_serial.cfg‚ɁC‚±‚̊֐”‚ð
    2732 I—¹ˆ—ƒ‹[ƒ`ƒ“‚Æ‚µ‚Ä“o˜^‚·‚éÃ“IAPI‚ðŠÜ‚ß‚éD
     2629シリアルインタフェースドライバがサポートするシリアルポート数を定義する
     2630マクロ.このマクロの定義は,target_syssvc.hまたはそこからインクルードさ
     2631れるファイルに含める.
     2632
     2633(8-4-2) void sio_initialize(intptr_t exinf)(オプション)
     2634
     2635シリアルI/Oデバイスドライバの初期化処理.target_serial.cfgに,この関数
     2636を初期化ルーチンとして登録する静的APIを含める.
     2637
     2638(8-4-3) void sio_terminate(intptr_t exinf)(オプション)
     2639
     2640シリアルI/Oデバイスドライバの終了処理.target_serial.cfgに,この関数を
     2641終了処理ルーチンとして登録する静的APIを含める.
    27332642
    27342643(8-4-4) void sio_isr(intptr_t exinf)
    27352644
    2736 ƒVƒŠƒAƒ‹I/OƒfƒoƒCƒX‚ÌŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“Dtarget_serial.cfg‚ɁC‚±‚Ì
    2737 ŠÖ”‚ðŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚Æ‚µ‚Ä“o˜^‚·‚éÃ“IAPI‚ðŠÜ‚ß‚éD‚Ü‚½C‚»‚̐Ã
    2738 “IAPI‚É•K—v‚ȃVƒŠƒAƒ‹I/OƒfƒoƒCƒX‚ÌŠ„ž‚ݔԍ†‚Ȃǂ́Ctarget_serial.h‚Ń}
    2739 ƒNƒ’è‹`‚·‚éDŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚Å‚Í‚È‚­CŠ„ž‚݃nƒ“ƒhƒ‰‚Æ‚·‚邱‚Æ
    2740 ‚à‚Å‚«‚éD
     2645シリアルI/Oデバイスの割込みサービスルーチン.target_serial.cfgに,この
     2646関数を割込みサービスルーチンとして登録する静的APIを含める.また,その静
     2647的APIに必要なシリアルI/Oデバイスの割込み番号などは,target_serial.hでマ
     2648クロ定義する.割込みサービスルーチンではなく,割込みハンドラとすること
     2649もできる.
    27412650
    27422651(8-4-5) SIOPCB
    27432652
    2744 ƒVƒŠƒAƒ‹I/Oƒ|[ƒgŠÇ—ƒuƒƒbƒN‚̃f[ƒ^Œ^itarget_serial.h‚ɂ́Cƒf[ƒ^Œ^
    2745 ‚̐錾‚¾‚¯ŠÜ‚Ü‚ê‚Ä‚¢‚ê‚΂悢jD
    2746 
    2747 (8-4-6) SIO_RDY_SND‚ÆSIO_RDY_RCV
    2748 
    2749 ‘—M‰Â”\ƒR[ƒ‹ƒoƒbƒN‚ÌŽ¯•Ê”ԍ†‚ðSIO_RDY_SND‚ɁCŽóM’Ê’mƒR[ƒ‹ƒoƒbƒN‚ÌŽ¯
    2750 •Ê”ԍ†‚ðSIO_RDY_RCV‚Ƀ}ƒNƒ’è‹`‚·‚éDƒR[ƒ‹ƒoƒbƒN‚Ì‹ÖŽ~^‹–‰Â‚ðs‚È‚¤ƒT[
    2751 ƒrƒXƒR[ƒ‹isio_ena_cbr‚Æsio_dis_cbrj‚Å—p‚¢‚éD
    2752 
    2753 8.4.2 ƒfƒoƒCƒXƒT[ƒrƒXƒ‹[ƒ`ƒ“
    2754 
    2755 ˆÈ‰º‚̃fƒoƒCƒXƒT[ƒrƒ‹ƒ‹[ƒ`ƒ“‚́Ci­‚È‚­‚Æ‚àjƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚ç‚Ì
    2756 Š„ž‚Ý‚ªƒ}ƒXƒN‚³‚ꂽó‘ԂŌĂяo‚³‚ê‚éD‚Ü‚½Cƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒgC”ñƒ^
    2757 ƒXƒNƒRƒ“ƒeƒLƒXƒg‚Ì‚¢‚¸‚ê‚ŌĂяo‚³‚ê‚éê‡‚à‚ ‚éi‚¢‚¸‚ê‚ŌĂяo‚³‚ê‚Ä
    2758 ‚à“®ì‚·‚é‚悤‚É‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢jD
     2653シリアルI/Oポート管理ブロックのデータ型(target_serial.hには,データ型
     2654の宣言だけ含まれていればよい).
     2655
     2656(8-4-6) SIO_RDY_SNDSIO_RDY_RCV
     2657
     2658送信可能コールバックの識別番号をSIO_RDY_SNDに,受信通知コールバックの識
     2659別番号をSIO_RDY_RCVにマクロ定義する.コールバックの禁止/許可を行なうサー
     2660ビスコール(sio_ena_cbrとsio_dis_cbr)で用いる.
     2661
     26628.4.2 デバイスサービスルーチン
     2663
     2664以下のデバイスサービルルーチンは,(少なくとも)シリアルI/Oポートからの
     2665割込みがマスクされた状態で呼び出される.また,タスクコンテキスト,非タ
     2666スクコンテキストのいずれで呼び出される場合もある(いずれで呼び出されて
     2667も動作するようにしなければならない).
    27592668
    27602669(8-4-2-1) SIOPCB *sio_opn_por(ID siopid, intptr_t exinf)
    27612670
    2762 siopid‚ÅŽw’肳‚ê‚éƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚ðƒI[ƒvƒ“‚·‚éŠÖ”Dexinf‚̓VƒŠƒAƒ‹
    2763 I/Oƒ|[ƒg‚ɑ΂·‚éŠg’£î•ñ‚ŁCƒR[ƒ‹ƒoƒbƒN‚ðŒÄ‚ÔŽž‚Ƀ|[ƒg‚ð‹æ•Ê‚·‚邽
    2764 ‚ß‚É“n‚·D
     2671siopidで指定されるシリアルI/Oポートをオープンする関数.exinfはシリアル
     2672I/Oポートに対する拡張情報で,コールバックを呼ぶ時にポートを区別するた
     2673めに渡す.
    27652674
    27662675(8-4-2-2) void sio_cls_por(SIOPCB *siopcb)
    27672676
    2768 siopcb‚ÅŽw’肳‚ê‚éƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚ðƒNƒ[ƒY‚·‚éŠÖ”D
     2677siopcbで指定されるシリアルI/Oポートをクローズする関数.
    27692678
    27702679(8-4-2-3) bool_t sio_snd_chr(SIOPCB *siopcb, char c)
    27712680
    2772 siopcb‚ÅŽw’肳‚ê‚éƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚ɁCc‚ÅŽ¦‚³‚ê‚镶Žš‚𑗐M‚·‚éŠÖ”D
    2773 •¶Žš‚𑗐MƒŒƒWƒXƒ^‚É“ü‚ꂽê‡‚É‚Ítrue‚ðC‘O‚É‘—M‚µ‚½•¶Žš‚Ì‘—M‚ªI‚í‚Á
    2774 ‚Ä‚¢‚È‚¢‚½‚߂ɁC•¶Žš‚𑗐MƒŒƒWƒXƒ^‚É“ü‚ê‚ç‚ê‚È‚©‚Á‚½ê‡‚É‚Ífalse‚ð•Ô‚·D
     2681siopcbで指定されるシリアルI/Oポートに,cで示される文字を送信する関数.
     2682文字を送信レジスタに入れた場合にはtrueを,前に送信した文字の送信が終わっ
     2683ていないために,文字を送信レジスタに入れられなかった場合にはfalseを返す.
    27752684
    27762685(8-4-2-4) int_t sio_rcv_chr(SIOPCB *siopcb)
    27772686
    2778 siopcb‚ÅŽw’肳‚ê‚éƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚當Žš‚ð“ǂފ֐”D•¶Žš‚ðŽóM‚µ‚Ä‚¢
    2779 ‚½ê‡C“Ç‚ñ‚¾•¶Žš‚̃R[ƒh‚͐³‚Ì’l‚Æ‚µ‚Ä•Ô‚µC•¶Žš‚ðŽóM‚µ‚Ä‚¢‚È‚¢ê‡
    2780 ‚É‚Í-1‚ð•Ô‚·D
     2687siopcbで指定されるシリアルI/Oポートから文字を読む関数.文字を受信してい
     2688た場合,読んだ文字のコードは正の値として返し,文字を受信していない場合
     2689には-1を返す.
    27812690
    27822691(8-4-2-5) void sio_ena_cbr(SIOPCB *siopcb, uint_t cbrtn)
    27832692
    2784 siopcb‚ÅŽw’肳‚ê‚éƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚ç‚́Ccbrtn‚ÅŽw’肳‚ê‚éƒR[ƒ‹ƒoƒb
    2785 ƒN‚ð‹–‰Â‚·‚éDcbrtn‚ɂ́CSIO_RDY_SND‚©SIO_RDY_RCV‚ðŽw’è‚Å‚«‚éD
     2693siopcbで指定されるシリアルI/Oポートからの,cbrtnで指定されるコールバッ
     2694クを許可する.cbrtnには,SIO_RDY_SNDかSIO_RDY_RCVを指定できる.
    27862695
    27872696(8-4-2-6) void sio_dis_cbr(SIOPCB *siopcb, uint_t cbrtn)
    27882697
    2789 siopcb‚ÅŽw’肳‚ê‚éƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚ç‚́Ccbrtn‚ÅŽw’肳‚ê‚éƒR[ƒ‹ƒoƒb
    2790 ƒN‚ð‹ÖŽ~‚·‚éDcbrtn‚ɂ́CSIO_RDY_SND‚©SIO_RDY_RCV‚ðŽw’è‚Å‚«‚éD
    2791 
    2792 8.4.3 ƒR[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“
    2793 
    2794 ƒ^[ƒQƒbƒgˆË‘¶•”‚́C•K—v‚ȃ^ƒCƒ~ƒ“ƒO‚ŁCƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo
    2795 ‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚ÉŠÜ‚Ü‚ê‚éˆÈ‰º‚̃R[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚Ñ‚¾‚³
    2796 ‚È‚¯‚ê‚΂Ȃç‚È‚¢D‚½‚¾‚µC‚»‚ꂼ‚ê‚̃R[ƒ‹ƒoƒbƒN‚ª‹ÖŽ~‚³‚ê‚Ä‚¢‚鎞‚́C
    2797 ƒR[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚µ‚Ä‚Í‚È‚ç‚È‚¢D
    2798 
    2799 ƒR[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“‚́Ci­‚È‚­‚Æ‚àjƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚ç‚ÌŠ„ž‚Ý‚ª‹Ö
    2800 Ž~‚³‚ꂽó‘ԂŁC”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ŌĂяo‚·Dexinf‚ɂ́CƒVƒŠƒAƒ‹I/O
    2801 ƒ|[ƒg‚̃I[ƒvƒ“Žž‚ÉŽw’肳‚ꂽŠg’£î•ñ‚ð“n‚·D
     2698siopcbで指定されるシリアルI/Oポートからの,cbrtnで指定されるコールバッ
     2699クを禁止する.cbrtnには,SIO_RDY_SNDかSIO_RDY_RCVを指定できる.
     2700
     27018.4.3 コールバックルーチン
     2702
     2703ターゲット依存部は,必要なタイミングで,シリアルインタフェースドライバ
     2704のターゲット非依存部に含まれる以下のコールバックルーチンを呼び出びださ
     2705なければならない.ただし,それぞれのコールバックが禁止されている時は,
     2706コールバックルーチンを呼び出してはならない.
     2707
     2708コールバックルーチンは,(少なくとも)シリアルI/Oポートからの割込みが禁
     2709止された状態で,非タスクコンテキストで呼び出す.exinfには,シリアルI/O
     2710ポートのオープン時に指定された拡張情報を渡す.
    28022711
    28032712(8-4-3-1) void sio_irdy_snd(intptr_t exinf)
    28042713
    2805 ‘—M‰Â”\ƒR[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“DƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚ɑ΂µ‚Ä•¶Žš‚ª‘—M‚Å‚«‚é
    2806 ó‘Ô‚É‚È‚Á‚½ê‡‚ɌĂяo‚·DƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚́C‚±‚̃R[
    2807 ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“‚Ì’†‚ŁCsio_snd_chr‚ðŒÄ‚яo‚µ‚ÄŽŸ‚Ì•¶Žš‚𑗐M‚·‚é‚©C‘—
    2808 M‚·‚ׂ«•¶Žš‚ª‚È‚¢ê‡‚É‚Í‘—M‰Â”\ƒR[ƒ‹ƒoƒbƒN‚ð‹ÖŽ~‚·‚éD
     2714送信可能コールバックルーチン.シリアルI/Oポートに対して文字が送信できる
     2715状態になった場合に呼び出す.シリアルインタフェースドライバは,このコー
     2716ルバックルーチンの中で,sio_snd_chrを呼び出して次の文字を送信するか,送
     2717信すべき文字がない場合には送信可能コールバックを禁止する.
    28092718
    28102719(8-4-3-2) void sio_irdy_rcv(intptr_t exinf)
    28112720
    2812 ŽóM’Ê’mƒR[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“DƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚當Žš‚ðŽóM‚µ‚½ê‡‚É
    2813 ŒÄ‚яo‚·DƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚́C‚±‚̃R[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“‚Ì
    2814 ’†‚ŁC•K‚¸sio_rcv_chr‚ðŒÄ‚яo‚µ‚ÄŽóM‚µ‚½•¶Žš‚ðŽæ‚èo‚·D
    2815 
    2816 8.5 ƒJ[ƒlƒ‹‹N“®ƒƒbƒZ[ƒW‚̏o—͂̃^[ƒQƒbƒgˆË‘¶’è‹`
    2817 
    2818 ƒ^[ƒQƒbƒgˆË‘¶•”‚Å’ñ‹Ÿ‚·‚ׂ«ƒJ[ƒlƒ‹‹N“®ƒƒbƒZ[ƒW‚̏o—Í‚Ì‚½‚ß‚Ì’è‹`‚Í
    2819 ŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
     2721受信通知コールバックルーチン.シリアルI/Oポートから文字を受信した場合に
     2722呼び出す.シリアルインタフェースドライバは,このコールバックルーチンの
     2723中で,必ずsio_rcv_chrを呼び出して受信した文字を取り出す.
     2724
     27258.5 カーネル起動メッセージの出力のターゲット依存定義
     2726
     2727ターゲット依存部で提供すべきカーネル起動メッセージの出力のための定義は
     2728次の通りである.
    28202729
    28212730(8-5-1) TARGET_NAME
    28222731
    2823 ƒ^[ƒQƒbƒg‚Ì–¼Ì‚É’è‹`‚·‚éD
    2824 
    2825 (8-5-2) TARGET_COPYRIGHTiƒIƒvƒVƒ‡ƒ“j
    2826 
    2827 ƒJ[ƒlƒ‹‹N“®ƒƒbƒZ[ƒW‚ɁCƒ^[ƒQƒbƒgˆË‘¶•”‚Ì’˜ìŒ •\Ž¦‚ð’ljÁ‚·‚邽‚ß‚Ì
    2828 ƒ}ƒNƒDƒfƒtƒHƒ‹ƒg‚ł́Cƒ^[ƒQƒbƒgˆË‘¶•”‚Ì’˜ìŒ •\Ž¦‚ð’ljÁ‚µ‚È‚¢D
    2829 
    2830 8.6 ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚ƃeƒXƒgƒvƒƒOƒ‰ƒ€‚̃^[ƒQƒbƒgˆË‘¶’è‹`
    2831 
    2832 ƒ^[ƒQƒbƒgˆË‘¶•”‚Å’ñ‹Ÿ‚·‚ׂ«ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚¨‚æ‚уeƒXƒgƒvƒƒOƒ‰ƒ€‚Ì
    2833 ‚½‚ß‚Ì’è‹`‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD‚±‚ê‚ç‚Ì’è‹`‚́Ctarget_test.hi‚Ü‚½‚Í‚»‚ê‚ç
    2834 ‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹j‚ÉŠÜ‚ß‚éD
    2835 
    2836 (8-6-1) STACK_SIZEiƒIƒvƒVƒ‡ƒ“j
    2837 
    2838 ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚¨‚æ‚уeƒXƒgƒvƒƒOƒ‰ƒ€‚̃^ƒXƒN‚̃Xƒ^ƒbƒNƒTƒCƒY‚ð’è‹`
    2839 ‚·‚éƒ}ƒNƒD’è‹`‚µ‚È‚¢ê‡‚̃fƒtƒHƒ‹ƒg’l‚Í4096DƒfƒtƒHƒ‹ƒgÝ’è‚ł̓ƒ‚
    2840 ƒŠ‚ª•s‘«‚·‚éê‡‚âCƒVƒ~ƒ
    2841 ƒŒ[ƒVƒ‡ƒ“ŠÂ‹«‚È‚Ç‚Å‘å‚«‚¢ƒXƒ^ƒbƒN—̈悪•K—v
    2842 ‚ȏꍇ‚ɂ́Cƒ^[ƒQƒbƒgˆË‘¶•”‚Å‚±‚̃}ƒNƒ‚ðÝ’è‚·‚éƒXƒ^ƒbƒNƒTƒCƒY‚É’è‹`
    2843 ‚·‚éD
    2844 
    2845 (8-6-2) CPUEXC1iƒIƒvƒVƒ‡ƒ“j
    2846 
    2847 ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚¨‚æ‚уeƒXƒgƒvƒƒOƒ‰ƒ€‚Å—p‚¢‚éCPU—áŠO‚ÌCPU—áŠOƒnƒ“ƒh
    2848 ƒ‰”ԍ†‚ð’è‹`‚·‚éƒ}ƒNƒD‚±‚̃}ƒNƒ‚ð’è‹`‚µ‚È‚¢ê‡CCPU—áŠOƒnƒ“ƒhƒ‰‚ðŽg
    2849 ‚¤•”•ª‚ªƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚©‚珜ŠO‚³‚ê‚éDCPU—áŠOƒnƒ“ƒhƒ‰‚̃eƒXƒg‚ð‚·‚é
    2850 ƒeƒXƒgƒvƒƒOƒ‰ƒ€‚̓Rƒ“ƒpƒCƒ‹‚Å‚«‚È‚¢D
    2851 
    2852 (8-6-3) RAISE_CPU_EXCEPTIONiƒIƒvƒVƒ‡ƒ“j
    2853 
    2854 CPUEXC1‚É’è‹`‚µ‚½CPU—áŠO‚𔭐¶‚³‚¹‚éCŒ¾Œê‚̃vƒƒOƒ‰ƒ€‚ð’è‹`‚·‚éƒ}ƒNƒD
    2855 CPUEXC1‚ð’è‹`‚µ‚½ê‡‚É‚Í•K‚¸’è‹`‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    2856 
    2857 (8-6-4) CANNOT_RETURN_CPUEXCiƒIƒvƒVƒ‡ƒ“j
    2858 
    2859 ƒ^[ƒQƒbƒgƒVƒXƒeƒ€‚̐§–ñ‚É‚æ‚èCCPU—áŠOƒnƒ“ƒhƒ‰‚©‚烊ƒ^[ƒ“‚µ‚½Œã‚ɁCƒ^
    2860 ƒXƒN‚ÌŽÀs‚ðŒp‘±‚Å‚«‚È‚¢ê‡‚É’è‹`‚·‚éƒ}ƒNƒD‚±‚̃}ƒNƒ‚ð’è‹`‚·‚é‚ƁC
    2861 CPU—áŠOƒnƒ“ƒhƒ‰‚̃eƒXƒg‚ð‚·‚éƒeƒXƒgƒvƒƒOƒ‰ƒ€‚©‚çCCPU—áŠOƒnƒ“ƒhƒ‰‚©‚ç
    2862 ƒŠƒ^[ƒ“‚µ‚½Œã‚̏ˆ—‚ªœŠO‚³‚ê‚éDƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚ÌŠY“–•”•ª‚͐³‚µ‚­
    2863 “®ì‚µ‚È‚¢D
    2864 
    2865 (8-6-5) TASK_PORTIDiƒIƒvƒVƒ‡ƒ“j
    2866 
    2867 ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚É‚¨‚¢‚āCƒRƒ}ƒ“ƒh•¶Žš‚ð“ǂݍž‚ÞƒVƒŠƒAƒ‹ƒ|[ƒg”ԍ†‚ð
    2868 ’è‹`‚·‚éƒ}ƒNƒD’è‹`‚µ‚È‚¢ê‡‚̃fƒtƒHƒ‹ƒg’l‚Í1D
    2869 
    2870 (8-6-6) LOOP_REFiƒIƒvƒVƒ‡ƒ“j
    2871 
    2872 ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚É‚¨‚¢‚āCƒvƒƒZƒbƒT‚Ì‘¬“x‚ðŒv‘ª‚·‚邽‚߂̃‹[ƒv‰ñ”
    2873 ‚ð’è‹`‚·‚éƒ}ƒNƒD’è‹`‚µ‚È‚¢ê‡‚̃fƒtƒHƒ‹ƒg’l‚Í1000000DƒfƒtƒHƒ‹ƒgÝ’è
    2874 ‚ł́C’l‚ª‘å‚«‰ß‚¬‚ÄŒv‘ª‚ÉŽžŠÔ‚ª‚©‚©‚è‚·‚¬‚éê‡‚âC’l‚ª¬‚³‰ß‚¬‚ÄŒv‘ª
    2875 Œ‹‰Ê‚ªˆÀ’肵‚È‚¢ê‡‚ɁCƒ^[ƒQƒbƒgˆË‘¶•”‚Å‚±‚̃}ƒNƒ‚ðÝ’è‚·‚郋[ƒv‰ñ
    2876 ”‚É’è‹`‚·‚éD
    2877 
    2878 (8-6-7) MEASURE_TWICEiƒIƒvƒVƒ‡ƒ“j
    2879 
    2880 ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚É‚¨‚¢‚āCƒvƒƒZƒbƒT‚Ì‘¬“x‚ð2“xŒv‘ª‚·‚éê‡‚É’è‹`‚·‚é
    2881 ƒ}ƒNƒDƒVƒ~ƒ
    2882 ƒŒ[ƒVƒ‡ƒ“ŠÂ‹«‚ȂǃvƒƒZƒbƒT‚Ì‘¬“x‚ª•Ï“®‚·‚éŠÂ‹«‚ŁC1“x‚Ì
    2883 Œv‘ª‚Å‚ÍŒv‘ªŒ‹‰Ê‚ªˆÀ’肵‚È‚¢ê‡‚É’è‹`‚·‚éD
    2884 
    2885 (8-6-8) TASK_LOOPiƒIƒvƒVƒ‡ƒ“j
    2886 
    2887 ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚É‚¨‚¢‚āCƒvƒƒZƒbƒT‚Ì‘¬“x‚ðŒv‘ª‚¹‚¸‚ɁCƒ^ƒXƒN“à‚Å‚Ì
    2888 ƒ‹[ƒv‰ñ”‚ðŒÅ’è‚·‚éê‡‚ɁCƒ‹[ƒv‰ñ”‚ð’è‹`‚·‚éƒ}ƒNƒDƒ‹[ƒv‘S‘Ì‚ÌŽÀ
    2889 sŽžŠÔ‚ª0.4•b’ö“x‚É‚È‚é‚悤‚ȃ‹[ƒv‰ñ”‚ðC‚±‚̃}ƒNƒ‚É’è‹`‚·‚éD
    2890 
    2891 9. ‚»‚Ì‘¼
    2892 
    2893 9.1 ƒhƒLƒ
    2894 ƒƒ“ƒg
    2895 
    2896 ƒ^[ƒQƒbƒgˆË‘¶•”‚̃†[ƒU[ƒYƒ}ƒjƒ
    2897 ƒAƒ‹‚ðCtarget_user.txt‚É—pˆÓ‚·‚éDƒv
    2898 ƒƒZƒbƒTEƒ`ƒbƒvEŠJ”­ŠÂ‹«ˆË‘¶•”‚̃†[ƒU[ƒYƒ}ƒjƒ
    2899 ƒAƒ‹‚ðØ‚蕪‚¯‚Ä‚à‚æ
    2900 ‚¢‚µCƒtƒ@ƒCƒ‹‚ª‘å‚«‚­‚È‚éê‡‚É‚Í•¡”‚̃tƒ@ƒCƒ‹‚É•ªŠ„‚µ‚Ä‚æ‚¢‚ªC‚»‚Ì
    2901 ê‡‚ɂ́Ctarget_user.txt’†‚É‚»‚ê‚ç‚̃tƒ@ƒCƒ‹–¼‚ð‹Lq‚·‚邱‚ƁD
    2902 
    2903 ƒ^[ƒQƒbƒgˆË‘¶•”‚̃†[ƒU[ƒYƒ}ƒjƒ
    2904 ƒAƒ‹‚ɂ́C­‚È‚­‚Æ‚àŽŸ‚̂悤‚È“à—e‚ð
    2905 ‹Lq‚·‚邱‚Æ‚ª–]‚Ü‚µ‚¢D
    2906 
    2907 (1) ‘Ήž‚µ‚Ä‚¢‚éƒ^[ƒQƒbƒgƒVƒXƒeƒ€‚ÌŽí—ށE\¬Cƒo[ƒWƒ‡ƒ“”ԍ†
    2908         Eƒ^[ƒQƒbƒgƒn[ƒhƒEƒFƒAiƒ{[ƒh“™j‚Ì–¼Ì‚ƑΉž‚µ‚Ä‚¢‚é\¬
    2909         Eƒ^[ƒQƒbƒg—ªÌ
    2910         Eƒ^[ƒQƒbƒg”ñˆË‘¶•”‚̃o[ƒWƒ‡ƒ“”ԍ†
    2911         EƒvƒƒZƒbƒTCƒ`ƒbƒvCŠJ”­ŠÂ‹«ˆË‘¶•”‚̍\¬‚ƃo[ƒWƒ‡ƒ“”ԍ†
    2912         EŽg—p‚·‚éPDIC‚ƃo[ƒWƒ‡ƒ“”ԍ†
    2913 
    2914 (2) Žg—p‚·‚éŠJ”­ŠÂ‹«‚Æ“®ìŒŸØ‚µ‚½ðŒiƒo[ƒWƒ‡ƒ“CƒIƒvƒVƒ‡ƒ““™j
    2915         EŒ¾Œêˆ—ŒniƒRƒ“ƒpƒCƒ‰CƒAƒZƒ“ƒuƒ‰CƒŠƒ“ƒJ“™j
    2916         EƒfƒoƒbƒOŠÂ‹«
    2917 
    2918 (3) ƒ^[ƒQƒbƒg’è‹`Ž–€‚Ì‹K’è
    2919 
    2920 (3-1) ƒf[ƒ^Œ^‚ÉŠÖ‚·‚é‹K’è
    2921         Eint_tŒ^Clong_tŒ^‚̃TƒCƒY
    2922         EcharŒ^Cint_least8_tŒ^Cvoid *Œ^Cintptr_tŒ^‚̃TƒCƒY
    2923         Eint8_tŒ^Cuint8_tŒ^Cint64_tŒ^Cuint64_tŒ^Cint128_tŒ^C
    2924         @uint128_tŒ^Cfloat32_tŒ^Cdouble64_tŒ^‚̃Tƒ|[ƒg‚Ì—L–³
    2925 
    2926 (3-2) Š„ž‚ݏˆ—‚ÉŠÖ‚·‚é‹K’è
    2927         EŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚ÆŠ„ž‚ݔԍ†‚ÌŠ„“–‚āC—¼ŽÒ‚̑Ήž
    2928         EŠ„ž‚Ý—Dæ“x‚Ì’iŠK”iTMIN_INTPRI‚Ì’lj
    2929         Edis_int‚Æena_int‚̃Tƒ|[ƒg‚Ì—L–³C‚»‚̐§ŒÀŽ–€
    2930         ECFG_INT‚̐§ŒÀŽ–€‚ÆŠg’£iƒ^[ƒQƒbƒg’è‹`‚ÅŽg—p‚Å‚«‚銄ž‚Ý‘®«j
    2931         ETOPPERS•W€Š„ž‚ݏˆ—ƒ‚ƒfƒ‹‚©‚ç‚Ì‚»‚Ì‘¼‚̈í’E
    2932 
    2933 (3-3) ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ÉŠÖ‚·‚é‹K’è
    2934         ETMIN_INTPRI‚͌Œ肩Ý’è‚Å‚«‚é‚©C‚»‚̐ݒè•û–@
    2935         ENMIˆÈŠO‚ɃJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ðÝ‚¯‚é‚©iÝ‚¯‚ç‚ê‚é‚悤‚É‚·‚é‚©j
    2936         EƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂̐ݒè•û–@
    2937         EƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂ɑ΂µ‚ÄDEF_INHCCFG_INT‚ðƒTƒ|[ƒg‚·‚é‚©
    2938         EƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚ªŽÀsŠJŽn‚³‚ê‚鎞‚̃VƒXƒeƒ€ó‘Ô‚Æ
    2939         @ƒRƒ“ƒeƒLƒXƒg
    2940         EŠ„ž‚݃nƒ“ƒhƒ‰‚̏I—¹Žž‚ɍs‚í‚ê‚鏈—
    2941         EƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚Ì‹Lq•û–@
    2942         EƒJ[ƒlƒ‹“à‚ÌŠ„ž‚ݏo“üŒûˆ—‚Å‹N‚±‚é‰Â”\«‚Ì‚ ‚éCPU—áŠO
    2943 
    2944 (3-4) CPU—áŠOˆ—‚ÉŠÖ‚·‚é‹K’è
    2945         ECPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚ÌŠ„“–‚Ä
    2946         EŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðTMIN_INTPRI‚Æ“¯‚¶‚©‚»‚ê‚æ‚è‚à‚‚¢’l‚ɐݒ肵‚Ä
    2947         @‚¢‚éó‘Ô‚Å”­¶‚µ‚½CPU—áŠO‚ðCƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌCPU—áŠO‚ƈµ‚¤‚©
    2948         EƒJ[ƒlƒ‹“à‚ÌCPU—áŠOo“üŒûˆ—‚Å‹N‚±‚é‰Â”\«‚Ì‚ ‚éCPU—áŠO
    2949 
    2950 (3-5) «”\•]‰¿—pƒVƒXƒeƒ€Žž‚ÌŽQÆ‚ÉŠÖ‚·‚é‹K’è
    2951         Eget_utm‚̃Tƒ|[ƒg‚Ì—L–³C‚»‚̐§ŒÀŽ–€
    2952 
    2953 (3-6) ‚»‚Ì‘¼
    2954         E‚»‚Ì‘¼‚̐§ŒÀŽ–€
    2955         E‚»‚Ì‘¼‚ÌŠg’£‹@”\
    2956 
    2957 (4) ƒJ[ƒlƒ‹‚Ì‹N“®^I—¹ˆ—‚ÉŠÖ‚·‚éî•ñ
    2958         E—pˆÓ‚µ‚Ä‚¢‚éƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    2959 [ƒ‹‚̏ˆ—“à—e
    2960         EƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    2961 [ƒ‹‚©‚çhardware_init_hook‚ðŒÄ‚яo‚µ‚Ä‚¢‚éê
    2962         @‡‚ɂ́Chardware_init_hook‚ðƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Å—pˆÓ‚·‚éê‡‚̍쐬
    2963         @•û–@‚␧ŒÀŽ–€‚È‚Ç
    2964         EƒJ[ƒlƒ‹‚ðI—¹‚µ‚½Œã‚̐U•‘‚¢
    2965 
    2966 (5) ƒƒ‚ƒŠƒ}ƒbƒv
    2967         EƒfƒtƒHƒ‹ƒg‚̃ƒ‚ƒŠƒ}ƒbƒvC‚»‚̕ύX•û–@
    2968 
    2969 (6) ƒ^ƒCƒ}ƒhƒ‰ƒCƒoŠÖ˜A‚̏î•ñ
    2970         Eƒ^ƒCƒ€ƒeƒBƒbƒN‚ÌŽüŠúC‚»‚̕ύX•û–@
    2971         EŽg—p‚·‚郊ƒ\[ƒXiƒ^ƒCƒ}j
    2972         Eƒ^ƒCƒ}Š„ž‚Ý‚ÌŠ„ž‚Ý—Dæ“x‚̕ύX•û–@
    2973         EƒI[ƒoƒ‰ƒ“ƒ^ƒCƒ}Š„ž‚Ý‚ÌŠ„ž‚Ý—Dæ“x‚̕ύX•û–@
    2974 
    2975 (7) ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚̏î•ñ
    2976         EŽg—p‚·‚郊ƒ\[ƒXiSIOƒRƒ“ƒgƒ[ƒ‰j
    2977         E’ʐMƒpƒ‰ƒ[ƒ^iƒ{[ƒŒ[ƒgCƒrƒbƒg”CƒpƒŠƒeƒB‚Ì—L–³CƒXƒgƒbƒvƒrƒbƒgj
    2978 
    2979 (8) ƒVƒXƒeƒ€\’zŽè‡
    2980 
    2981 (9) ƒ^[ƒQƒbƒgƒVƒXƒeƒ€ŒÅ—L‚Ì’ˆÓŽ–€
    2982         Eƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÉŠÜ‚Ü‚ê‚郌ƒWƒXƒ^CŠÜ‚Ü‚ê‚È‚¢ƒŒƒWƒXƒ^
    2983 
    2984 (10) —ÞŽ—‚̃^[ƒQƒbƒg‚Ƀ|[ƒeƒBƒ“ƒO‚·‚éŠJ”­ŽÒŒü‚¯‚ÌŽQlî•ñ
    2985 
    2986 (11) ƒfƒBƒŒƒNƒgƒŠ\¬Eƒtƒ@ƒCƒ‹\¬
    2987 
    2988 (12) ƒo[ƒWƒ‡ƒ“—š—ð
    2989 
    2990 ‚Ü‚½C•K—v‚ɉž‚¶‚āCƒ^[ƒQƒbƒgˆË‘¶•”‚̐݌vƒƒ‚‚ðCtarget_design.txt‚É—p
    2991 ˆÓ‚·‚éDƒvƒƒZƒbƒTEƒ`ƒbƒvEŠJ”­ŠÂ‹«ˆË‘¶•”‚ÉŠÖ‚·‚éÝŒvƒƒ‚‚ðØ‚蕪‚¯‚Ä
    2992 ‚à‚æ‚¢‚µCƒtƒ@ƒCƒ‹‚ª‘å‚«‚­‚È‚éê‡‚É‚Í•¡”‚̃tƒ@ƒCƒ‹‚É•ªŠ„‚µ‚Ä‚à‚æ‚¢‚ªC
    2993 ‚»‚̏ꍇ‚ɂ́Ctarget_design.txt’†‚É‚»‚ê‚ç‚̃tƒ@ƒCƒ‹–¼‚ð‹Lq‚·‚邱‚ƁD
    2994 
    2995 9.2 ƒpƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹
    2996 
    2997 ƒŠƒŠ[ƒXƒpƒbƒP[ƒWiŒÂ•ÊƒpƒbƒP[ƒW‚¨‚æ‚ъȈՃpƒbƒP[ƒWj‚ðì¬‚·‚邽‚ß
    2998 ‚ɁCƒpƒbƒP[ƒW‚ÉŠÜ‚ß‚éƒtƒ@ƒCƒ‹‚ð‹Lq‚µ‚½ƒpƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹‚ð—pˆÓ‚·
    2999 ‚éDƒpƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹‚Ì–¼Ì‚́CŒÂ•ÊƒpƒbƒP[ƒW—p‚ðMANIFESTCŠÈˆÕƒpƒb
    3000 ƒP[ƒW—p‚ðE_PACKAGE‚Æ‚·‚éD
    3001 
    3002 —Ⴆ‚΁Carch/arm_gccƒfƒBƒŒƒNƒgƒŠ‚É’u‚©‚ꂽMANIFESTƒtƒ@ƒCƒ‹‚ð—p‚¢‚ȕÊ
    3003 ƒpƒbƒP[ƒW‚ðì¬‚·‚éê‡‚ɂ́CŽŸ‚̃Rƒ}ƒ“ƒh‚ðŽÀs‚·‚éD
     2732ターゲットの名称に定義する.
     2733
     2734(8-5-2) TARGET_COPYRIGHT(オプション)
     2735
     2736カーネル起動メッセージに,ターゲット依存部の著作権表示を追加するための
     2737マクロ.デフォルトでは,ターゲット依存部の著作権表示を追加しない.
     2738
     27398.6 サンプルプログラムとテストプログラムのターゲット依存定義
     2740
     2741ターゲット依存部で提供すべきサンプルプログラムおよびテストプログラムの
     2742ための定義は次の通りである.これらの定義は,target_test.h(またはそれら
     2743からインクルードされるファイル)に含める.
     2744
     2745(8-6-1) STACK_SIZE(オプション)
     2746
     2747サンプルプログラムおよびテストプログラムのタスクのスタックサイズを定義
     2748するマクロ.定義しない場合のデフォルト値は4096.デフォルト設定ではメモ
     2749リが不足する場合や,シミュレーション環境などで大きいスタック領域が必要
     2750な場合には,ターゲット依存部でこのマクロを設定するスタックサイズに定義
     2751する.
     2752
     2753(8-6-2) CPUEXC1(オプション)
     2754
     2755サンプルプログラムおよびテストプログラムで用いるCPU例外のCPU例外ハンド
     2756ラ番号を定義するマクロ.このマクロを定義しない場合,CPU例外ハンドラを使
     2757う部分がサンプルプログラムから除外される.CPU例外ハンドラのテストをする
     2758テストプログラムはコンパイルできない.
     2759
     2760(8-6-3) RAISE_CPU_EXCEPTION(オプション)
     2761
     2762CPUEXC1に定義したCPU例外を発生させるC言語のプログラムを定義するマクロ.
     2763CPUEXC1を定義した場合には必ず定義しなければならない.
     2764
     2765(8-6-4) CANNOT_RETURN_CPUEXC(オプション)
     2766
     2767ターゲットシステムの制約により,CPU例外ハンドラからリターンした後に,タ
     2768スクの実行を継続できない場合に定義するマクロ.このマクロを定義すると,
     2769CPU例外ハンドラのテストをするテストプログラムから,CPU例外ハンドラから
     2770リターンした後の処理が除外される.サンプルプログラムの該当部分は正しく
     2771動作しない.
     2772
     2773(8-6-5) TASK_PORTID(オプション)
     2774
     2775サンプルプログラムにおいて,コマンド文字を読み込むシリアルポート番号を
     2776定義するマクロ.定義しない場合のデフォルト値は1.
     2777
     2778(8-6-6) LOOP_REF(オプション)
     2779
     2780サンプルプログラムにおいて,プロセッサの速度を計測するためのループ回数
     2781を定義するマクロ.定義しない場合のデフォルト値は1000000.デフォルト設定
     2782では,値が大き過ぎて計測に時間がかかりすぎる場合や,値が小さ過ぎて計測
     2783結果が安定しない場合に,ターゲット依存部でこのマクロを設定するループ回
     2784数に定義する.
     2785
     2786(8-6-7) MEASURE_TWICE(オプション)
     2787
     2788サンプルプログラムにおいて,プロセッサの速度を2度計測する場合に定義する
     2789マクロ.シミュレーション環境などプロセッサの速度が変動する環境で,1度の
     2790計測では計測結果が安定しない場合に定義する.
     2791
     2792(8-6-8) TASK_LOOP(オプション)
     2793
     2794サンプルプログラムにおいて,プロセッサの速度を計測せずに,タスク内での
     2795ループ回数を固定する場合に,ループ回数を定義するマクロ.ループ全体の実
     2796行時間が0.4秒程度になるようなループ回数を,このマクロに定義する.
     2797
     27989. その他
     2799
     28009.1 ドキュメント
     2801
     2802ターゲット依存部のユーザーズマニュアルを,target_user.txtに用意する.プ
     2803ロセッサ・チップ・開発環境依存部のユーザーズマニュアルを切り分けてもよ
     2804いし,ファイルが大きくなる場合には複数のファイルに分割してよいが,その
     2805場合には,target_user.txt中にそれらのファイル名を記述すること.
     2806
     2807ターゲット依存部のユーザーズマニュアルには,少なくとも次のような内容を
     2808記述することが望ましい.
     2809
     2810(1) 対応しているターゲットシステムの種類・構成,バージョン番号
     2811        ・ターゲットハードウェア(ボード等)の名称と対応している構成
     2812        ・ターゲット略称
     2813        ・ターゲット非依存部のバージョン番号
     2814        ・プロセッサ,チップ,開発環境依存部の構成とバージョン番号
     2815        ・使用するPDICとバージョン番号
     2816
     2817(2) 使用する開発環境と動作検証した条件(バージョン,オプション等)
     2818        ・言語処理系(コンパイラ,アセンブラ,リンカ等)
     2819        ・デバッグ環境
     2820
     2821(3) ターゲット定義事項の規定
     2822
     2823(3-1) データ型に関する規定
     2824        ・int_t型,long_t型のサイズ
     2825        ・char型,int_least8_t型,void *型,intptr_t型のサイズ
     2826        ・int8_t型,uint8_t型,int64_t型,uint64_t型,int128_t型,
     2827         uint128_t型,float32_t型,double64_t型のサポートの有無
     2828
     2829(3-2) 割込み処理に関する規定
     2830        ・割込みハンドラ番号と割込み番号の割当て,両者の対応
     2831        ・割込み優先度の段階数(TMIN_INTPRIの値)
     2832        ・dis_intとena_intのサポートの有無,その制限事項
     2833        ・CFG_INTの制限事項と拡張(ターゲット定義で使用できる割込み属性)
     2834        ・TOPPERS標準割込み処理モデルからのその他の逸脱
     2835
     2836(3-3) カーネル管理外の割込みに関する規定
     2837        ・TMIN_INTPRIは固定か設定できるか,その設定方法
     2838        ・NMI以外にカーネル管理外の割込みを設けるか(設けられるようにするか)
     2839        ・カーネル管理外の割込みの設定方法
     2840        ・カーネル管理外の割込みに対してDEF_INH,CFG_INTをサポートするか
     2841        ・カーネル管理外の割込みハンドラが実行開始される時のシステム状態と
     2842         コンテキスト
     2843        ・割込みハンドラの終了時に行われる処理
     2844        ・カーネル管理外の割込みハンドラの記述方法
     2845        ・カーネル内の割込み出入口処理で起こる可能性のあるCPU例外
     2846
     2847(3-4) CPU例外処理に関する規定
     2848        ・CPU例外ハンドラ番号の割当て
     2849        ・割込み優先度マスクをTMIN_INTPRIと同じかそれよりも高い値に設定して
     2850         いる状態で発生したCPU例外を,カーネル管理外のCPU例外と扱うか
     2851        ・カーネル内のCPU例外出入口処理で起こる可能性のあるCPU例外
     2852
     2853(3-5) 性能評価用システム時刻の参照に関する規定
     2854        ・get_utmのサポートの有無,その制限事項
     2855
     2856(3-6) その他
     2857        ・その他の制限事項
     2858        ・その他の拡張機能
     2859
     2860(4) カーネルの起動/終了処理に関する情報
     2861        ・用意しているスタートアップモジュールの処理内容
     2862        ・スタートアップモジュールからhardware_init_hookを呼び出している場
     2863         合には,hardware_init_hookをアプリケーションで用意する場合の作成
     2864         方法や制限事項など
     2865        ・カーネルを終了した後の振舞い
     2866
     2867(5) メモリマップ
     2868        ・デフォルトのメモリマップ,その変更方法
     2869
     2870(6) タイマドライバ関連の情報
     2871        ・タイムティックの周期,その変更方法
     2872        ・使用するリソース(タイマ)
     2873        ・タイマ割込みの割込み優先度の変更方法
     2874        ・オーバランタイマ割込みの割込み優先度の変更方法
     2875
     2876(7) シリアルインタフェースドライバの情報
     2877        ・使用するリソース(SIOコントローラ)
     2878        ・通信パラメータ(ボーレート,ビット数,パリティの有無,ストップビット)
     2879
     2880(8) システム構築手順
     2881
     2882(9) ターゲットシステム固有の注意事項
     2883        ・タスクコンテキストに含まれるレジスタ,含まれないレジスタ
     2884
     2885(10) 類似のターゲットにポーティングする開発者向けの参考情報
     2886
     2887(11) ディレクトリ構成・ファイル構成
     2888
     2889(12) バージョン履歴
     2890
     2891また,必要に応じて,ターゲット依存部の設計メモを,target_design.txtに用
     2892意する.プロセッサ・チップ・開発環境依存部に関する設計メモを切り分けて
     2893もよいし,ファイルが大きくなる場合には複数のファイルに分割してもよいが,
     2894その場合には,target_design.txt中にそれらのファイル名を記述すること.
     2895
     28969.2 パッケージ記述ファイル
     2897
     2898リリースパッケージ(個別パッケージおよび簡易パッケージ)を作成するため
     2899に,パッケージに含めるファイルを記述したパッケージ記述ファイルを用意す
     2900る.パッケージ記述ファイルの名称は,個別パッケージ用をMANIFEST,簡易パッ
     2901ケージ用をE_PACKAGEとする.
     2902
     2903例えば,arch/arm_gccディレクトリに置かれたMANIFESTファイルを用いて個別
     2904パッケージを作成する場合には,次のコマンドを実行する.
    30042905
    30052906        % utils/makerelease arch/arm_gcc/MANIFEST
    30062907
    3007 ‚±‚̃Rƒ}ƒ“ƒh‚É‚æ‚èCRELEASE/ssp_arch_arm_gcc-<ƒo[ƒWƒ‡ƒ“”ԍ†>.tar.gz‚ª
    3008 ì¬‚³‚ê‚éD‚Ü‚½Ctarget/at91skyeye_gccƒfƒBƒŒƒNƒgƒŠ‚É’u‚©‚ꂽE_PACKAGE
    3009 ƒtƒ@ƒCƒ‹‚ð—p‚¢‚ĊȈՃpƒbƒP[ƒW‚ðì¬‚·‚éê‡‚ɂ́CŽŸ‚̃Rƒ}ƒ“ƒh‚ðŽÀs‚·
    3010 ‚éD
     2908このコマンドにより,RELEASE/ssp_arch_arm_gcc-<バージョン番号>.tar.gzが
     2909作成される.また,target/at91skyeye_gccディレクトリに置かれたE_PACKAGE
     2910ファイルを用いて簡易パッケージを作成する場合には,次のコマンドを実行す
     2911る.
    30112912
    30122913        % utils/makerelease target/cq_starm_gcc/E_PACKAGE
    30132914
    3014 ‚±‚̃Rƒ}ƒ“ƒh‚É‚æ‚èCRELEASE/ssp_cq_starm_gcc_gcc-<ƒo[ƒWƒ‡ƒ“”ԍ†>.tar.gz
    3015 ‚ªì¬‚³‚ê‚éiRELEASEƒfƒBƒŒƒNƒgƒŠ‚ª‚È‚¢ê‡‚ɂ́CƒfƒBƒŒƒNƒgƒŠ‚ªì‚ç‚ê
    3016 ‚éjD
    3017 
    3018 ‚È‚¨Cmakereleaseƒ†[ƒeƒBƒŠƒeƒB‚́CSSPƒJ[ƒlƒ‹‚̃\[ƒXƒtƒ@ƒCƒ‹‚ª’u‚©‚ê
    3019 ‚½ƒfƒBƒŒƒNƒgƒŠ‚ªCssp‚Æ‚¢‚¤–¼Ì‚Å‚ ‚邱‚Æ‚ð‰¼’è‚µ‚Ä‚¢‚éiˆÙ‚È‚é–¼Ì‚̏ê
    3020 ‡‚Å‚àƒpƒbƒP[ƒW‚͍쐬‚Å‚«‚邪CƒpƒbƒP[ƒW‚ð“WŠJ‚µ‚½Žž‚É“WŠJ‚³‚ê‚éƒfƒB
    3021 ƒŒƒNƒgƒŠ‚ªssp‚Å‚È‚­‚È‚éjD‚Ü‚½C•W€‚ÌtarƒRƒ}ƒ“ƒh‚ªGNU tar‚Å‚ ‚邱‚Æ
    3022 i³Šm‚ɂ́CzƒIƒvƒVƒ‡ƒ“‚ɑΉž‚µ‚Ä‚¢‚邱‚Ɓj‚ð‘z’肵‚Ä‚¢‚éD
    3023 
    3024 ƒpƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹‚ɂ́CƒpƒbƒP[ƒW‚ÉŠÜ‚ß‚éƒtƒ@ƒCƒ‹–¼‚ðCƒpƒbƒP[ƒW
    3025 ‹Lqƒtƒ@ƒCƒ‹‚ª’u‚©‚ꂽƒfƒBƒŒƒNƒgƒŠ‚©‚ç‚Ì‘Š‘΃pƒX–¼‚ŁC1s‚É1‚‚¸‚‹Lq
    3026 ‚·‚éD‚Ü‚½C•K—v‚ɉž‚¶‚āCˆÈ‰º‚̃fƒBƒŒƒNƒeƒBƒu‚ðŠÜ‚ß‚éD
    3027 
    3028 (a) E_PACKAGE <ŠÈˆÕƒpƒbƒP[ƒW–¼>
    3029 
    3030 ŠÈˆÕƒpƒbƒP[ƒW–¼‚ðŽw’è‚·‚éDŠÈˆÕƒpƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹iE_PACKAGEj‚̐æ
    3031 “ª‚É‹Lq‚·‚éDŠÈˆÕƒpƒbƒP[ƒW–¼‚́Cssp_<ƒ^[ƒQƒbƒg—ªÌ>‚Æ‚·‚éD—Ⴆ‚΁C
    3032 ƒ^[ƒQƒbƒg—ªÌ‚ªcq_starm_gcc‚̏ꍇ‚ɂ́Cssp_cq_starm_gcc‚Æ‚È‚éDŒÂ
    3033 •ÊƒpƒbƒP[ƒW‚Æ‹æ•Ê‚·‚邽‚߂ɁCŠÈˆÕƒpƒbƒP[ƒW‚̃tƒ@ƒCƒ‹–¼‚É‚Í"target"‚ð
    3034 ŠÜ‚ß‚È‚¢D
    3035 
    3036 (b) PACKAGE <ŒÂ•ÊƒpƒbƒP[ƒW–¼>
    3037 
    3038 ŒÂ•ÊƒpƒbƒP[ƒW–¼‚ðŽw’è‚·‚éDŒÂ•ÊƒpƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹iMANIFESTj‚̐æ
    3039 “ª‚É‹Lq‚·‚éD‚Ü‚½C‚»‚±‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éŠeƒtƒ@ƒCƒ‹‚̐擪‚É‚à‹Lq
    3040 ‚µC‚»‚ê‚ðƒCƒ“ƒNƒ‹[ƒh‚µ‚Ä‚¢‚éŒÂ•ÊƒpƒbƒP[ƒW–¼‚ðŽw’è‚·‚éDƒ^[ƒQƒbƒgˆË
    3041 ‘¶•”‚̌•ʃpƒbƒP[ƒW–¼‚́CŒÂ•ÊƒpƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹‚ª’u‚©‚ꂽƒfƒBƒŒƒN
    3042 ƒgƒŠ‚Ì‘Š‘΃pƒX’†‚Ì"/"‚ð"_"‚É’u‚«Š·‚¦‚½•¶Žš—ñ‚ðC"ssp_"‚ÌŒã‚ɂ‚Ȃ°‚½‚à
    3043 ‚Ì‚Æ‚·‚éD—Ⴆ‚΁CŒÂ•ÊƒpƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹‚ªarch/arm_gcc/MANIFEST‚̏ê
    3044 ‡‚ɂ́Cssp_arch_arm_gcc‚Æ‚È‚éD
    3045 
    3046 (c) VERSION <ƒo[ƒWƒ‡ƒ“”ԍ†>
    3047 
    3048 ƒpƒbƒP[ƒW‚̃o[ƒWƒ‡ƒ“”ԍ†‚ðŽw’è‚·‚éDŠÈˆÕƒpƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹‚¨‚æ‚Ñ
    3049 ŒÂ•ÊƒpƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹‚Ì’†‚É‹Lq‚·‚éDŠÈˆÕƒpƒbƒP[ƒW‚É‚¨‚¢‚āCƒo[
    3050 ƒWƒ‡ƒ“”ԍ†‚ðƒpƒbƒP[ƒW‰»‚µ‚½“ú•t‚Æ‚·‚éê‡‚ɂ́CƒpƒbƒP[ƒW”ԍ†‚Ì‘ã‚í‚è
    3051 ‚É%date‚Æ‹Lq‚·‚éD
    3052 
    3053 ƒo[ƒWƒ‡ƒ“”ԍ†‚Ì•t—^•û–@‚ɂ‚¢‚ẮCuTOPPERS/SSPƒJ[ƒlƒ‹ ƒ†[ƒU[ƒYƒ}
    3054 ƒjƒ
    3055 ƒAƒ‹v‚́u2.2 ŠÈˆÕƒpƒbƒP[ƒWv‚¨‚æ‚сu2.3 ŒÂ•ÊƒpƒbƒP[ƒWv‚̐߂ðŽQ
    3056 Æ‚·‚邱‚ƁD
    3057 
    3058 (d) INCLUDE <ƒtƒ@ƒCƒ‹–¼>
    3059 
    3060 •Ê‚̃pƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚éDŠÈˆÕƒpƒbƒP[ƒW‹Lqƒtƒ@ƒC
    3061 ƒ‹‚©‚ç‚́CŒÂ•ÊƒpƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹‚Ì‚Ý‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚é‚Ì‚ðŒ´‘¥‚Æ‚·
    3062 ‚éDŒÂ•ÊƒpƒbƒP[ƒW‹Lqƒtƒ@ƒCƒ‹‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹’†‚ÅŽw’肳
    3063 ‚ê‚éŒÂ•ÊƒpƒbƒP[ƒW–¼‚́C‚·‚ׂĈê’v‚µ‚Ä‚¢‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    3064 
    3065 
    3066 10. ƒŠƒtƒ@ƒŒƒ“ƒX
    3067 
    3068 10.1 ƒ^[ƒQƒbƒgˆË‘¶•”‚̃tƒ@ƒCƒ‹ˆê——
    3069 
    3070 •W€“I‚ȃ^[ƒQƒbƒgˆË‘¶•”‚̃tƒ@ƒCƒ‹\¬‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    3071 
    3072 Makefile.target         Makefile‚̃^[ƒQƒbƒgˆË‘¶•”i‚QÍjD
    3073 
    3074 target_stddef.h         TOPPERS‹¤’Ê’è‹`it_stddef.hj‚̃^[ƒQƒbƒgˆË‘¶•”i‚R
    3075                                         ÍjDƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ƃJ[ƒlƒ‹‚Ì—¼•û‚©‚çƒCƒ“ƒNƒ‹[
    3076                                         ƒh‚³‚ê‚éD
    3077 target_sil.h            ƒVƒXƒeƒ€ƒCƒ“ƒ^ƒtƒF[ƒXƒŒƒCƒ„isil.hj‚̃^[ƒQƒbƒgˆË
    3078                                         ‘¶•”i‚SÍjDƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ƃJ[ƒlƒ‹‚Ì—¼•û‚©‚ç
    3079                                         ƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éD
    3080 target_kernel.h         ƒJ[ƒlƒ‹APIikernel.hj‚̃^[ƒQƒbƒgˆË‘¶•”i‚TÍjD
    3081                                         ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ƃJ[ƒlƒ‹‚Ì—¼•û‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³
    3082                                         ‚ê‚éD
    3083 
    3084 target_config.h         ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚̃wƒbƒ_ƒtƒ@ƒCƒ‹i‚U
    3085                                         ÍjDƒJ[ƒlƒ‹‚Ì‚Ý‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éD
    3086 target_config.c         ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚ÌCŒ¾Œê‚Å‹Lq‚³‚ê‚é
    3087                                         •”•ªi‚UÍCƒIƒvƒVƒ‡ƒ“jD
    3088 target_support.S        ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚̃AƒZƒ“ƒuƒŠŒ¾Œê‚Å‹L
    3089                                         q‚³‚ê‚é•”•ªi‚UÍCƒIƒvƒVƒ‡ƒ“jD
    3090 target_rename.def       ƒJ[ƒlƒ‹ŽÀ‘•‚̃^[ƒQƒbƒgˆË‘¶•”‚Ì‚½‚߂̃Šƒl[ƒ€‹Lq
    3091                                         i6.12ßjD
    3092 target_rename.h         target_rename.def‚©‚琶¬‚³‚ê‚éƒtƒ@ƒCƒ‹i6.12ßjD
    3093 target_unrename.h       target_rename.def‚©‚琶¬‚³‚ê‚éƒtƒ@ƒCƒ‹i6.12ßjD
    3094 target_timer.cfg        ƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚̃VƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    3095 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@
    3096                                         ƒCƒ‹i6.13ßjD
    3097 target_timer.h          ƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚̃wƒbƒ_ƒtƒ@ƒCƒ‹i6.13ßjDƒJ[ƒlƒ‹
    3098                                         ‚Ì‚Ý‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éD
    3099 target_timer.c          ƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚ÌŽÀ‘•ƒtƒ@ƒCƒ‹i6.13ßCƒIƒvƒVƒ‡ƒ“jD
    3100 ƒVƒXƒeƒ€—ªÌ.h          ƒ^[ƒQƒbƒg‚̃n[ƒhƒEƒFƒAŽ‘Œ¹iŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚â
    3101                                         CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†CƒfƒoƒCƒXƒŒƒWƒXƒ^‚̔Ԓn‚Ȃǁj‚Ì
    3102                                         ’è‹`‚ðŠÜ‚Þƒwƒbƒ_ƒtƒ@ƒCƒ‹DƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ƃJ[ƒl
    3103                                         ƒ‹‚Ì—¼•û‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éi‚UÍCƒIƒvƒVƒ‡ƒ“jD
    3104 
    3105 target_def.csv          ƒRƒ“ƒtƒBƒMƒ
    3106 ƒŒ[ƒ^‚Ì’lŽæ“¾ƒVƒ“ƒ{ƒ‹ƒe[ƒuƒ‹‚̃^[ƒQƒb
    3107                                         ƒgˆË‘¶•”i‚VÍCƒIƒvƒVƒ‡ƒ“jD
    3108 target.tf                       ƒRƒ“ƒtƒBƒMƒ
    3109 ƒŒ[ƒ^‚̃pƒX2‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚Ì
    3110                                         ƒ^[ƒQƒbƒgˆË‘¶•”i7.2ßjD
    3111 target_check.tf         ƒRƒ“ƒtƒBƒMƒ
    3112 ƒŒ[ƒ^‚̃pƒX3‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹i7.3
    3113                                         ßjD
    3114 target_cfg1_out.h       cfg1_out.c‚̃Šƒ“ƒN‚É•K—v‚ȃXƒ^ƒu‚Ì’è‹`ƒtƒ@ƒCƒ‹i7.4
    3115                                         ßjD
    3116 
    3117 target_syssvc.h         ƒVƒXƒeƒ€ƒT[ƒrƒX‚̃^[ƒQƒbƒgˆË‘¶’è‹`i8.0ßjD
    3118 target_serial.cfg       ƒVƒŠƒAƒ‹ƒhƒ‰ƒCƒo‚̃VƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    3119 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@
    3120                                         ƒCƒ‹i8.3ßjD
    3121 target_serial.h         ƒVƒŠƒAƒ‹ƒhƒ‰ƒCƒo‚̃wƒbƒ_ƒtƒ@ƒCƒ‹i8.3ßjDƒVƒŠƒAƒ‹
    3122                                         ƒhƒ‰ƒCƒo‚Ì‚Ý‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éD
    3123 target_serial.c         ƒVƒŠƒAƒ‹ƒhƒ‰ƒCƒo‚ÌŽÀ‘•ƒtƒ@ƒCƒ‹i8.3ßCƒIƒvƒVƒ‡ƒ“jD
    3124 target_test.h           ƒeƒXƒgƒvƒƒOƒ‰ƒ€‚̃^[ƒQƒbƒgˆË‘¶’è‹`i8.4ßjD
    3125 
    3126 target_user.txt         ƒ†[ƒU[ƒYƒ}ƒjƒ
    3127 ƒAƒ‹i9.1ßj
    3128 target_design.txt       ÝŒvƒƒ‚i9.1ßCƒIƒvƒVƒ‡ƒ“j
    3129 MANIFEST                        ŒÂ•ÊƒpƒbƒP[ƒW‚ÉŠÜ‚ß‚éƒtƒ@ƒCƒ‹‚̃ŠƒXƒgi9.2ßCƒIƒv
    3130                                         ƒVƒ‡ƒ“j
    3131 E_PACKAGE                       ŠÈˆÕƒpƒbƒP[ƒW‚ÉŠÜ‚ß‚éƒtƒ@ƒCƒ‹‚̃ŠƒXƒgi9.2ßCƒIƒv
    3132                                         ƒVƒ‡ƒ“j
    3133 
    3134 ˆÈã
     2915このコマンドにより,RELEASE/ssp_cq_starm_gcc_gcc-<バージョン番号>.tar.gz
     2916が作成される(RELEASEディレクトリがない場合には,ディレクトリが作られ
     2917る).
     2918
     2919なお,makereleaseユーティリティは,SSPカーネルのソースファイルが置かれ
     2920たディレクトリが,sspという名称であることを仮定している(異なる名称の場
     2921合でもパッケージは作成できるが,パッケージを展開した時に展開されるディ
     2922レクトリがsspでなくなる).また,標準のtarコマンドがGNU tarであること
     2923(正確には,zオプションに対応していること)を想定している.
     2924
     2925パッケージ記述ファイルには,パッケージに含めるファイル名を,パッケージ
     2926記述ファイルが置かれたディレクトリからの相対パス名で,1行に1つずつ記述
     2927する.また,必要に応じて,以下のディレクティブを含める.
     2928
     2929(a) E_PACKAGE <簡易パッケージ名>
     2930
     2931簡易パッケージ名を指定する.簡易パッケージ記述ファイル(E_PACKAGE)の先
     2932頭に記述する.簡易パッケージ名は,ssp_<ターゲット略称>とする.例えば,
     2933ターゲット略称がcq_starm_gccの場合には,ssp_cq_starm_gccとなる.個
     2934別パッケージと区別するために,簡易パッケージのファイル名には"target"を
     2935含めない.
     2936
     2937(b) PACKAGE <個別パッケージ名>
     2938
     2939個別パッケージ名を指定する.個別パッケージ記述ファイル(MANIFEST)の先
     2940頭に記述する.また,そこからインクルードされる各ファイルの先頭にも記述
     2941し,それをインクルードしている個別パッケージ名を指定する.ターゲット依
     2942存部の個別パッケージ名は,個別パッケージ記述ファイルが置かれたディレク
     2943トリの相対パス中の"/"を"_"に置き換えた文字列を,"ssp_"の後につなげたも
     2944のとする.例えば,個別パッケージ記述ファイルがarch/arm_gcc/MANIFESTの場
     2945合には,ssp_arch_arm_gccとなる.
     2946
     2947(c) VERSION <バージョン番号>
     2948
     2949パッケージのバージョン番号を指定する.簡易パッケージ記述ファイルおよび
     2950個別パッケージ記述ファイルの中に記述する.簡易パッケージにおいて,バー
     2951ジョン番号をパッケージ化した日付とする場合には,パッケージ番号の代わり
     2952に%dateと記述する.
     2953
     2954バージョン番号の付与方法については,「TOPPERS/SSPカーネル ユーザーズマ
     2955ニュアル」の「2.2 簡易パッケージ」および「2.3 個別パッケージ」の節を参
     2956照すること.
     2957
     2958(d) INCLUDE <ファイル名>
     2959
     2960別のパッケージ記述ファイルをインクルードする.簡易パッケージ記述ファイ
     2961ルからは,個別パッケージ記述ファイルのみをインクルードするのを原則とす
     2962る.個別パッケージ記述ファイルからインクルードされるファイル中で指定さ
     2963れる個別パッケージ名は,すべて一致していなければならない.
     2964
     2965
     296610. リファレンス
     2967
     296810.1 ターゲット依存部のファイル一覧
     2969
     2970標準的なターゲット依存部のファイル構成は次の通りである.
     2971
     2972Makefile.target         Makefileのターゲット依存部(2章).
     2973
     2974target_stddef.h         TOPPERS共通定義(t_stddef.h)のターゲット依存部(3
     2975                                        章).アプリケーションとカーネルの両方からインクルー
     2976                                        ドされる.
     2977target_sil.h            システムインタフェースレイヤ(sil.h)のターゲット依
     2978                                        存部(4章).アプリケーションとカーネルの両方から
     2979                                        インクルードされる.
     2980target_kernel.h         カーネルAPI(kernel.h)のターゲット依存部(5章).
     2981                                        アプリケーションとカーネルの両方からインクルードさ
     2982                                        れる.
     2983
     2984target_config.h         カーネル実装のターゲット依存部のヘッダファイル(6
     2985                                        章).カーネルのみからインクルードされる.
     2986target_config.c         カーネル実装のターゲット依存部のC言語で記述される
     2987                                        部分(6章,オプション).
     2988target_support.S        カーネル実装のターゲット依存部のアセンブリ言語で記
     2989                                        述される部分(6章,オプション).
     2990target_rename.def       カーネル実装のターゲット依存部のためのリネーム記述
     2991                                        (6.12節).
     2992target_rename.h         target_rename.defから生成されるファイル(6.12節).
     2993target_unrename.h       target_rename.defから生成されるファイル(6.12節).
     2994target_timer.cfg        タイマドライバのシステムコンフィギュレーションファ
     2995                                        イル(6.13節).
     2996target_timer.h          タイマドライバのヘッダファイル(6.13節).カーネル
     2997                                        のみからインクルードされる.
     2998target_timer.c          タイマドライバの実装ファイル(6.13節,オプション).
     2999システム略称.h                ターゲットのハードウェア資源(割込みハンドラ番号や
     3000                                        CPU例外ハンドラ番号,デバイスレジスタの番地など)の
     3001                                        定義を含むヘッダファイル.アプリケーションとカーネ
     3002                                        ルの両方からインクルードされる(6章,オプション).
     3003
     3004target_def.csv          コンフィギュレータの値取得シンボルテーブルのターゲッ
     3005                                        ト依存部(7章,オプション).
     3006target.tf                       コンフィギュレータのパス2のテンプレートファイルの
     3007                                        ターゲット依存部(7.2節).
     3008target_check.tf         コンフィギュレータのパス3のテンプレートファイル(7.3
     3009                                        節).
     3010target_cfg1_out.h       cfg1_out.cのリンクに必要なスタブの定義ファイル(7.4
     3011                                        節).
     3012
     3013target_syssvc.h         システムサービスのターゲット依存定義(8.0節).
     3014target_serial.cfg       シリアルドライバのシステムコンフィギュレーションファ
     3015                                        イル(8.3節).
     3016target_serial.h         シリアルドライバのヘッダファイル(8.3節).シリアル
     3017                                        ドライバのみからインクルードされる.
     3018target_serial.c         シリアルドライバの実装ファイル(8.3節,オプション).
     3019target_test.h           テストプログラムのターゲット依存定義(8.4節).
     3020
     3021target_user.txt         ユーザーズマニュアル(9.1節)
     3022target_design.txt       設計メモ(9.1節,オプション)
     3023MANIFEST                        個別パッケージに含めるファイルのリスト(9.2節,オプ
     3024                                        ション)
     3025E_PACKAGE                       簡易パッケージに含めるファイルのリスト(9.2節,オプ
     3026                                        ション)
     3027
     3028以上
  • ssp_qb_r5f100le_cs/trunk/doc/ssp_spec.txt

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11
    2                 TOPPERS/SSPƒJ[ƒlƒ‹‚ÌŽd—lŠT—v
     2                TOPPERS/SSPカーネルの仕様概要
    33
    4                 ‘Ήžƒo[ƒWƒ‡ƒ“: Release1.3.0
    5                 ÅIXV: 2014”N 3ŒŽ 6“ú
     4                対応バージョン: Release1.3.0
     5                最終更新: 2014年 3月 6日
    66
    7 ‚±‚̃hƒLƒ
    8 ƒƒ“ƒg‚́CTOPPERS/SSPƒJ[ƒlƒ‹‚ÌŽd—lŠT—v‚ɂ‚¢‚Äà–¾‚µ‚½‚à‚Ì‚Å
    9 ‚ ‚éDTOPPERS/ASPƒJ[ƒlƒ‹‚©‚ç‚̍·•ª‚¨‚æ‚ѕύX‰ÓŠ‚ƃÊITRON4.0Žd—l‚̍ŏ¬
    10 ƒZƒbƒgƒvƒƒtƒ@ƒCƒ‹‚©‚ç‚̍·•ª‚𒆐S‚Éà–¾‚·‚éD
     7このドキュメントは,TOPPERS/SSPカーネルの仕様概要について説明したもので
     8ある.TOPPERS/ASPカーネルからの差分および変更箇所とμITRON4.0仕様の最小
     9セットプロファイルからの差分を中心に説明する.
    1110
    1211----------------------------------------------------------------------
     
    2120             Nagoya Municipal Industrial Research Institute, JAPAN
    2221 
    23  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    24  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    25  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    26  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    27      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    28      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    29  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    30      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    31 ƒƒ“ƒgi—˜—p
    32      ŽÒƒ}ƒjƒ
    33 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    34      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    35  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    36      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    37      ‚ƁD
    38    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    39 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    40 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    41        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    42    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    43        •ñ‚·‚邱‚ƁD
    44  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    45      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    46      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    47      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    48      –Ɛӂ·‚邱‚ƁD
     22 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     23 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     24 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     25 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     26     権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     27     スコード中に含まれていること.
     28 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     29     用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     30     者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     31     の無保証規定を掲載すること.
     32 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     33     用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     34     と.
     35   (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     36       作権表示,この利用条件および下記の無保証規定を掲載すること.
     37   (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     38       報告すること.
     39 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     40     害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     41     また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     42     由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     43     免責すること.
    4944 
    50  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    51  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    52  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    53  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    54  ‚̐ӔC‚𕉂í‚È‚¢D
     45 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     46 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     47 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     48 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     49 の責任を負わない.
    5550 
    5651----------------------------------------------------------------------
    5752
    58 ›‘O’ñ‚ƂȂ镶‘
     53○前提となる文書
    5954
    60 [1] ƒgƒƒ“‹¦‰ï: ƒÊITRON4.0Žd—l, Ver.4.02.00, 2004”N.
     55[1] トロン協会: μITRON4.0仕様, Ver.4.02.00, 2004年.
    6156
    62 [2] TOPPERSƒvƒƒWƒFƒNƒg: TOPPERSV¢‘ãƒJ[ƒlƒ‹Žd—l‘ Release 1.5.0
     57[2] TOPPERSプロジェクト: TOPPERS新世代カーネル仕様書 Release 1.5.0
    6358
    64 [3] TOPPERSƒvƒƒWƒFƒNƒg: TOPPERS•W€Š„ž‚ݏˆ—ƒ‚ƒfƒ‹, ÅIXV: 2008”N
    65         4ŒŽ11“ú.
     59[3] TOPPERSプロジェクト: TOPPERS標準割込み処理モデル, 最終更新: 2008年
     60        4月11日.
    6661
    67 ›Žd—l‚ÌŠT—ª
     62○仕様の概略
    6863
    69 TOPPERS/SSPƒJ[ƒlƒ‹‚ÌŽd—l‚́CTOPPERS/ASPƒJ[ƒlƒ‹‚ÌŽd—l‚ɑ΂µ‚āC
    70 ¬‹K–̓AƒvƒŠƒP[ƒVƒ‡ƒ“Œü‚¯‚ÉŽd—l‚ði‚Á‚½‚à‚Ì‚Å‚ ‚éDÅ¬ƒZƒbƒg‚É
    71 ‚¨‚¯‚é"Å¬"‚Ƃ́CƒJ[ƒlƒ‹‚ªŽg—p‚·‚éROM/RAMŽg—p—Ê‚ð¬‚³‚­‚·‚邽‚ß‚É
    72 Žd—l‚ðÅ“K‰»‚·‚邱‚Æ‚ðˆÓ–¡‚·‚éD
     64TOPPERS/SSPカーネルの仕様は,TOPPERS/ASPカーネルの仕様に対して,
     65小規模アプリケーション向けに仕様を絞ったものである.最小セットに
     66おける"最小"とは,カーネルが使用するROM/RAM使用量を小さくするために
     67仕様を最適化することを意味する.
    7368
    74 ’ñ‹Ÿ‚·‚é‹@”\‚̓ÊITRON4.0Žd—l€‹’‚̍Œá‹@”\‚ðƒx[ƒX‚Æ‚µ‚āCˆê•”
    75 Ž©“®ŽÔ§Œä—pƒvƒƒtƒ@ƒCƒ‹‚Ì‹@”\‚ðŽæ‚荞‚ށD
     69提供する機能はμITRON4.0仕様準拠の最低機能をベースとして,一部
     70自動車制御用プロファイルの機能を取り込む.
    7671
    77 E’ñ‹Ÿ‚·‚éƒVƒXƒeƒ€ƒT[ƒrƒX‚𐧌À‚·‚é
    78 E§–ñƒ^ƒXƒN‚Ì‚Ý‚ðƒTƒ|[ƒg‚·‚é
    79 E1‚‚̃^ƒXƒN—Dæ“x‚ɑ΂µ‚Ä“o˜^‚Å‚«‚éƒ^ƒXƒN‚Í1‚‚ɌÀ’è‚·‚é
    80 EROM/RAMŽg—p—Ê‚ð­‚È‚­‚·‚邽‚߂̐݌v/ŽÀ‘•‚ðs‚¤
     72・提供するシステムサービスを制限する
     73・制約タスクのみをサポートする
     74・1つのタスク優先度に対して登録できるタスクは1つに限定する
     75・ROM/RAM使用量を少なくするための設計/実装を行う
    8176
    82 ‚³‚ç‚ɁCSSPƒJ[ƒlƒ‹“ÆŽ©‚ÌŽd—l‚Æ‚µ‚Ĉȉº‚Ì‹@”\‚𓱓ü‚·‚éD
     77さらに,SSPカーネル独自の仕様として以下の機能を導入する.
    8378
    84 Eƒ^ƒXƒN‚ÌŽÀsŽž—Dæ“x
    85 E‹¤—LƒXƒ^ƒbƒN—̈æ
     79・タスクの実行時優先度
     80・共有スタック領域
    8681
    87 ‚±‚Ì‚½‚߁CSSPƒJ[ƒlƒ‹‚ÍASPƒJ[ƒlƒ‹‚̉ºˆÊŒÝŠ·‚Å‚àãˆÊŒÝŠ·‚Å‚à‚È‚¢D
     82このため,SSPカーネルはASPカーネルの下位互換でも上位互換でもない.
    8883
    89 ›’ñ‹Ÿ‚·‚éƒVƒXƒeƒ€ƒT[ƒrƒX‚𐧌À‚·‚é
     84○提供するシステムサービスを制限する
    9085
    91 TOPPERS/ASP‚ª’ñ‹Ÿ‚·‚éƒVƒXƒeƒ€ƒT[ƒrƒX‚Ì‚¤‚¿CƒÊITRON4.0Žd—l‘
    92 5.1.2ß‚Å‹K’肳‚ꂽƒVƒXƒeƒ€ƒT[ƒrƒX‚ƁCTOPPERSV¢‘ãƒJ[ƒlƒ‹
    93 Žd—l‚ŒljÁ‚³‚ꂽˆê•”‚̃VƒXƒeƒ€ƒT[ƒrƒX‚Ì‚Ý‚ðƒTƒ|[ƒg‚·‚éD
     86TOPPERS/ASPが提供するシステムサービスのうち,μITRON4.0仕様書
     875.1.2節で規定されたシステムサービスと,TOPPERS新世代カーネル
     88仕様で追加された一部のシステムサービスのみをサポートする.
    9489
    95 ƒTƒ|[ƒg‚·‚éƒVƒXƒeƒ€ƒT[ƒrƒX‚͈ȉº‚Ì’Ê‚è‚Å‚ ‚éD
     90サポートするシステムサービスは以下の通りである.
    9691
    97 ECRE_TSK
    98 EDEF_EPR
    99 Eact_tsk,iact_tsk
    100 Eloc_cpu,iloc_cpu
    101 Eunl_cpu,iunl_cpu
    102 Esns_ctx
    103 Esns_loc
    104 Esns_dsp
    105 Esns_dpn
    106 Esns_ker
    107 Eena_dsp
    108 Edis_dsp
    109 EDEF_INH
    110 EATT_ISR
    111 ECFG_INT
    112 Eena_int
    113 Edis_int
    114 EATT_INI
    115 EATT_TER
    116 Eext_ker
    117 EDEF_ICS
    118 EDEF_STK
     92CRE_TSK
     93DEF_EPR
     94act_tsk,iact_tsk
     95loc_cpu,iloc_cpu
     96unl_cpu,iunl_cpu
     97sns_ctx
     98sns_loc
     99sns_dsp
     100sns_dpn
     101sns_ker
     102ena_dsp
     103dis_dsp
     104DEF_INH
     105ATT_ISR
     106CFG_INT
     107ena_int
     108dis_int
     109ATT_INI
     110ATT_TER
     111ext_ker
     112DEF_ICS
     113DEF_STK
    119114
    120 ‚½‚¾‚µCŠg’£ƒpƒbƒP[ƒW‚ð“K—p‚·‚邱‚Æ‚Å‹@”\‚ð’ljÁ‚·‚邱‚Æ‚ª‚Å‚«‚éD
     115ただし,拡張パッケージを適用することで機能を追加することができる.
    121116
    122 ›§–ñƒ^ƒXƒN‚Ì‚Ý‚ðƒTƒ|[ƒg‚·‚é
     117○制約タスクのみをサポートする
    123118
    124 ƒ^ƒXƒNŠÔ‚̃Xƒ^ƒbƒN‹¤—L‚ð‘O’ñ‚Æ‚·‚邽‚߁CŽ©“®ŽÔ§Œä—pƒvƒƒtƒ@ƒCƒ‹‚É
    125 ‹K’肳‚ê‚Ä‚¢‚鐧–ñƒ^ƒXƒN‚𓱓ü‚µC’ʏí‚̃^ƒXƒN‚Í”pŽ~‚·‚éD‚±‚ê‚́C
    126 L‹`‚Ì‘Ò‚¿ó‘Ô‚ðƒTƒ|[ƒg‚µ‚È‚¢‚±‚Æ‚ðˆÓ–¡‚·‚éD
     119タスク間のスタック共有を前提とするため,自動車制御用プロファイルに
     120規定されている制約タスクを導入し,通常のタスクは廃止する.これは,
     121広義の待ち状態をサポートしないことを意味する.
    127122
    128 ›1‚‚̃^ƒXƒN—Dæ“x‚ɑ΂µ‚Ä“o˜^‚Å‚«‚éƒ^ƒXƒN‚Í1‚‚ɌÀ’è‚·‚é
     123○1つのタスク優先度に対して登録できるタスクは1つに限定する
    129124
    130 1‚‚̃^ƒXƒN—Dæ“x‚ɑ΂µ‚Ä“o˜^‚Å‚«‚éƒ^ƒXƒN‚͈ê‚‚Ƃ·‚éDƒ^ƒXƒN—Dæ“x‚Í
    131 16‚Å‚ ‚邽‚߁CÅ‘å‚Å“o˜^‚Å‚«‚éƒ^ƒXƒN”‚Í16‚Å‚ ‚éD‚±‚̐§ŒÀ‚̓ŒƒfƒBƒLƒ
    132 [
    133 ‚ð•s—v‚Æ‚µCƒXƒPƒWƒ
    134 [ƒ‰‚ÌŠÈ—ª‰»‚ÆRAMŽg—p—ʂ̍팸‚ð}‚邽‚ß‚Å‚ ‚éD
     1251つのタスク優先度に対して登録できるタスクは一つとする.タスク優先度は
     12616であるため,最大で登録できるタスク数は16である.この制限はレディキュー
     127を不要とし,スケジューラの簡略化とRAM使用量の削減を図るためである.
    135128
    136 ›ROM/RAMŽg—p—Ê‚ð­‚È‚­‚·‚邽‚߂̐݌v/ŽÀ‘•‚ðs‚¤
     129○ROM/RAM使用量を少なくするための設計/実装を行う
    137130
    138 ­‚È‚¢ROM/RAM‚Å“®ì‚³‚¹‚邽‚߂ɃTƒCƒY‚ð—Dæ‚µ‚½ÝŒv/ŽÀ‘•‚ð
    139 s‚¤DÝŒv‚ł̓f[ƒ^\‘¢‚Ì”z—ñ‰»‚ðŽå‚Æ‚µ‚½Å“K‰»CŽÀ‘•‚Å‚Í
    140 ‚æ‚èˆÚA«‚𑹂Ȃí‚È‚¢”͈͂ł̏¬‚³‚¢ƒf[ƒ^Œ^‚ÌŽg—p‚â‰Â“ǐ«‚ð
    141 ’˜‚µ‚­’ቺ‚³‚¹‚È‚¢”͈͂ł̃R[ƒhƒ`ƒ
    142 [ƒjƒ“ƒO‚ðs‚¤D‚Ü‚½C
    143 ƒRƒ“ƒpƒCƒ‰‚É‚æ‚éÅ“K‰»‚àŠˆ—p‚·‚é(‚½‚¾‚µƒRƒ“ƒpƒCƒ‰‚ł̍œK‰»‚Í
    144 ŠÂ‹«‚É‚æ‚鍷ˆÙ‚ª‘å‚«‚¢‚½‚߁Cƒ^[ƒQƒbƒgˆË‘¶‚Å‚ ‚é)D
     131少ないROM/RAMで動作させるためにサイズを優先した設計/実装を
     132行う.設計ではデータ構造の配列化を主とした最適化,実装では
     133より移植性を損なわない範囲での小さいデータ型の使用や可読性を
     134著しく低下させない範囲でのコードチューニングを行う.また,
     135コンパイラによる最適化も活用する(ただしコンパイラでの最適化は
     136環境による差異が大きいため,ターゲット依存である).
    145137
    146 ›ƒ^ƒXƒN‚ÌŽÀsŽž—Dæ“x
     138○タスクの実行時優先度
    147139
    148 ŽÀsŽž—Dæ“x‚̓^ƒXƒN‚ª‹N“®‚³‚ꂽŒãCÅ‰‚ÉŽÀsó‘Ô‚É‚È‚é
    149 Žž‚Ƀ^ƒXƒN‚̃x[ƒX—Dæ“x‚ª‚ɐݒ肳‚ê‚éƒ^ƒXƒN—Dæ“x‚Å‚ ‚éDŽÀsŽž
    150 —Dæ“x‚Ì‹@”\‚́C‹N“®Žž—Dæ“x‚æ‚è‚à‚‚¢—Dæ“x‚Ń^ƒXƒN‚ðŽÀs‚·‚邱‚ƂŁC
    151 “¯ŽžŠú‚É‹¤—LƒXƒ^ƒbƒN—̈æ‚ðŽg—p‚µ‚Ä‚¢‚éó‘Ô‚É‚È‚éƒ^ƒXƒN‚Ì‘g‚ݍ‡‚킹‚ðŒÀ
    152 ’肵CƒXƒ^ƒbƒN—̈æ‚ðß–ñ‚·‚邽‚ß‚Ì‹@”\‚Å‚ ‚éD
     140実行時優先度はタスクが起動された後,最初に実行状態になる
     141時にタスクのベース優先度がに設定されるタスク優先度である.実行時
     142優先度の機能は,起動時優先度よりも高い優先度でタスクを実行することで,
     143同時期に共有スタック領域を使用している状態になるタスクの組み合わせを限
     144定し,スタック領域を節約するための機能である.
    153145
    154 ›‹¤—LƒXƒ^ƒbƒN—̈æ
     146○共有スタック領域
    155147
    156 SSPƒJ[ƒlƒ‹‚Å‚Í‘S‚Ẵ^ƒXƒN‚ÆŠ„ž‚݃nƒ“ƒhƒ‰‚ŘA‘±‚µ‚½ƒXƒ^ƒbƒN—̈æ‚ðŽg—p‚·‚éD
    157 ‚±‚ê‚ð‹¤—LƒXƒ^ƒbƒN—̈æ‚ƌĂԁD‹¤—LƒXƒ^ƒbƒN—̈æ‚𓱓ü‚·‚邱‚ƂŃ^ƒXƒN‚Ì
    158 ŽÀsŽž—Dæ“x‚É‚æ‚éƒ^ƒXƒNƒXƒ^ƒbƒN—̈æ‚ðß–ñ‚·‚邱‚Æ‚ª‚Å‚«‚éD
     148SSPカーネルでは全てのタスクと割込みハンドラで連続したスタック領域を使用する.
     149これを共有スタック領域と呼ぶ.共有スタック領域を導入することでタスクの
     150実行時優先度によるタスクスタック領域を節約することができる.
    159151
    160 ›—pˆÓ‚µ‚Ä‚¢‚éŠg’£ƒpƒbƒP[ƒW
     152○用意している拡張パッケージ
    161153
    162 ŽžŠÔŠÇ—Šg’£ƒpƒbƒP[ƒW‚Æ“¯ŠúE’ʐM‹@”\Šg’£ƒpƒbƒP[ƒW‚ð—pˆÓ‚µ‚Ä‚¢‚éD
     154時間管理拡張パッケージと同期・通信機能拡張パッケージを用意している.
    163155
    164 ŽžŠÔŠÇ—Šg’£ƒpƒbƒP[ƒW‚ɂ͈ȉº‚Ì‹@”\‚ªŠÜ‚Ü‚ê‚éD
     156時間管理拡張パッケージには以下の機能が含まれる.
    165157
    166 EŽüŠúƒnƒ“ƒhƒ‰‹@”\
    167 EƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹@”\
    168 EƒVƒXƒeƒ€ŽžŠÇ—‹@”\
     158・周期ハンドラ機能
     159・アラームハンドラ機能
     160・システム時刻管理機能
    169161
    170 “¯ŠúE’ʐM‹@”\Šg’£ƒpƒbƒP[ƒW‚ɂ͈ȉº‚Ì‹@”\‚ªŠÜ‚Ü‚ê‚éD
     162同期・通信機能拡張パッケージには以下の機能が含まれる.
    171163
    172 Eƒf[ƒ^ƒLƒ
    173 [‹@”\
    174 EƒCƒxƒ“ƒgƒtƒ‰ƒO‹@”\
     164・データキュー機能
     165・イベントフラグ機能
    175166
    176 ˆÈã
     167以上
  • ssp_qb_r5f100le_cs/trunk/doc/user.txt

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11
    2                 TOPPERS/SSPƒJ[ƒlƒ‹
    3                 ƒ†[ƒU[ƒYƒ}ƒjƒ
    4 ƒAƒ‹
    5 
    6                 ‘Ήžƒo[ƒWƒ‡ƒ“: Release 1.3.0
    7                 ÅIXV: 2015”N5ŒŽ19“ú
    8 
    9 ‚±‚̃hƒLƒ
    10 ƒƒ“ƒg‚́CTOPPERS/SSPƒJ[ƒlƒ‹‚ðŽg—p‚·‚邽‚ß‚É•K—v‚ÈŽ–€‚ðà–¾
    11 ‚·‚é‚à‚Ì‚Å‚ ‚éD
     2                TOPPERS/SSPカーネル
     3                ユーザーズマニュアル
     4
     5                対応バージョン: Release 1.3.0
     6                最終更新: 2015年5月19日
     7
     8このドキュメントは,TOPPERS/SSPカーネルを使用するために必要な事項を説明
     9するものである.
    1210
    1311----------------------------------------------------------------------
     
    1917                Nagoya Municipal Industrial Research Institute, JAPAN
    2018
    21  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    22  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    23  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    24  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    25      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    26      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    27  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    28      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    29 ƒƒ“ƒgi—˜—p
    30      ŽÒƒ}ƒjƒ
    31 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    32      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    33  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    34      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    35      ‚ƁD
    36    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    37 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    38 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    39        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    40    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    41        •ñ‚·‚邱‚ƁD
    42  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    43      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    44      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    45      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    46      –Ɛӂ·‚邱‚ƁD
     19 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     20 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     21 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     22 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     23     権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     24     スコード中に含まれていること.
     25 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     26     用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     27     者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     28     の無保証規定を掲載すること.
     29 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     30     用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     31     と.
     32   (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     33       作権表示,この利用条件および下記の無保証規定を掲載すること.
     34   (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     35       報告すること.
     36 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     37     害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     38     また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     39     由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     40     免責すること.
    4741 
    48  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    49  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    50  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    51  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    52  ‚̐ӔC‚𕉂í‚È‚¢D
     42 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     43 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     44 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     45 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     46 の責任を負わない.
    5347 
    5448----------------------------------------------------------------------
    5549
    56 ›–ÚŽŸ
    57 
    58 ‚PDTOPPERS/SSPƒJ[ƒlƒ‹‚ÌŠT—v
    59         1.1 TOPPERS/SSPƒJ[ƒlƒ‹‚̈ʒu•t‚¯
    60         1.2 TOPPERS/SSPƒJ[ƒlƒ‹‚ÌŽd—l
    61         1.3 Šù’m‚Ì–â‘è
    62 ‚QDƒ^[ƒQƒbƒgˆË‘¶•”
    63         2.1 ƒ^[ƒQƒbƒgˆË‘¶•”‚ÌŠT—v
    64         2.2 ŠÈˆÕƒpƒbƒP[ƒW
    65         2.3 ŒÂ•ÊƒpƒbƒP[ƒW
    66 ‚RDƒNƒCƒbƒNƒXƒ^[ƒgƒKƒCƒh
    67         3.1 ŠJ”­ŠÂ‹«‚̏€”õ
    68         3.2 ƒRƒ“ƒtƒBƒMƒ
    69 ƒŒ[ƒ^‚̍\’z
    70         3.3 ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚̍\’z‚ÆŽÀs
    71         3.4 ƒJ[ƒlƒ‹‚ðŠÖ”’PˆÊ‚щƒCƒuƒ‰ƒŠ‰»‚·‚é•û–@
    72         3.5 ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ƃJ[ƒlƒ‹‚ð•ÊX‚ɍ\’z‚·‚é•û–@
    73 ‚SDƒfƒBƒŒƒNƒgƒŠ\¬Eƒtƒ@ƒCƒ‹\¬
    74         4.1 ”z•zƒpƒbƒP[ƒW‚̃fƒBƒŒƒNƒgƒŠ\¬
    75         4.2 ƒ^[ƒQƒbƒg”ñˆË‘¶•”‚̃tƒ@ƒCƒ‹\¬
    76 ‚TDƒRƒ“ƒtƒBƒMƒ
    77 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ÌŽg‚¢•û
    78 ‚UDMakefile‚̏C³•û–@
    79         6.1 Makefile‚̕ϐ”’è‹`
    80         6.2 ƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“
    81 ‚VDƒRƒ“ƒtƒBƒMƒ
    82 ƒŒ[ƒ^‚ÌŽg‚¢•û
    83 ‚WDƒVƒXƒeƒ€ƒT[ƒrƒX
    84         8.1 ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo
    85                 8.1.1 ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚̃T[ƒrƒXƒR[ƒ‹
    86                 8.1.2 ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚Ì‚»‚Ì‘¼‚̃T[ƒrƒX
    87         8.2 ƒJ[ƒlƒ‹‹N“®ƒƒbƒZ[ƒW‚̏o—Í
    88 ‚XDƒTƒ|[ƒgƒ‰ƒCƒuƒ‰ƒŠ
    89         9.1 ƒLƒ
    90 [‘€ìƒ‰ƒCƒuƒ‰ƒŠŠÖ”
    91 ‚P‚ODŽg—pã‚Ì’ˆÓ‚ƃqƒ“ƒg
    92         10.1 ƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚Ì‘gž‚Ý
    93         10.2 assertƒ}ƒNƒ‚̏ˆ—
    94         10.3 ƒIƒuƒWƒFƒNƒgID‚ÌŠÇ—
    95         10.4 ƒJ[ƒlƒ‹‚Ì“à•”ƒVƒ“ƒ{ƒ‹‚̃Šƒl[ƒ€
    96         10.5 ƒVƒXƒeƒ€‚Ì‹N“®Žž‚̏‰Šú‰»ˆ—
    97 ‚P‚PDŽQlî•ñ
    98         11.1 —˜—pðŒ‚Æ—˜—p•ñ
    99         11.2 •ÛØE“K—p«EƒTƒ|[ƒg
    100         11.3 ƒoƒOƒŒƒ|[ƒg
    101         11.4 ƒEƒFƒuƒTƒCƒg
    102         11.5 TOPPERSƒ†[ƒU[ƒYƒ[ƒŠƒ“ƒOƒŠƒXƒg
    103         11.6 TOPPERSƒvƒƒWƒFƒNƒg‚̃ƒ“ƒoŒü‚¯‚̃T[ƒrƒX
    104         11.7 TOPPERSƒvƒƒWƒFƒNƒg‚Ö‚ÌŽQ‰Á
    105 ‚P‚QD
    106         12.1 ƒT[ƒrƒXƒR[ƒ‹ˆê——
    107         12.2 Ã“IAPIˆê——
    108         12.3 ƒo[ƒWƒ‡ƒ“—š—ð
    109 
    110 
    111 ‚PDTOPPERS/SSPƒJ[ƒlƒ‹‚ÌŠT—v
    112 
    113 1.1.  TOPPERS/SSPƒJ[ƒlƒ‹‚̈ʒu•t‚¯
    114 
    115 TOPPERS/SSPƒJ[ƒlƒ‹‚́CTOPPERS/ASPƒJ[ƒlƒ‹‚ÌŽd—l‚ɑ΂µ‚āC
    116 ¬‹K–̓AƒvƒŠƒP[ƒVƒ‡ƒ“Œü‚¯‚ÉŽd—l‚ði‚Á‚½‚à‚Ì‚Å‚ ‚éDÅ¬ƒZƒbƒg‚É
    117 ‚¨‚¯‚é"Å¬"‚Ƃ́CƒJ[ƒlƒ‹‚ªŽg—p‚·‚éROM/RAMŽg—p—Ê‚ð¬‚³‚­‚·‚邽‚ß‚É
    118 Žd—l‚ðÅ“K‰»‚·‚邱‚Æ‚ðˆÓ–¡‚·‚éD
    119 
    120 ’ñ‹Ÿ‚·‚é‹@”\‚̓ÊITRON4.0Žd—l€‹’‚̍Œá‹@”\‚ðƒx[ƒX‚Æ‚µ‚āCˆê•”
    121 Ž©“®ŽÔ§Œä—pƒvƒƒtƒ@ƒCƒ‹‚Ì‹@”\‚ðŽæ‚荞‚ށD
    122 
    123 ‚±‚Ì‚½‚߁CSSPƒJ[ƒlƒ‹‚ÍASPƒJ[ƒlƒ‹‚̉ºˆÊŒÝŠ·‚Å‚àãˆÊŒÝŠ·‚Å‚à‚È‚¢D
    124 ‚½‚¾‚µC§–ñƒ^ƒXƒNŠg’£ƒpƒbƒP[ƒW‚ð“K—p‚µ‚½ê‡CSSPƒJ[ƒlƒ‹‚Í
    125 SSPƒJ[ƒlƒ‹‚̏ãˆÊŒÝŠ·‚Æ‚È‚éD
    126 
    127 1.2. TOPPERS/SSPƒJ[ƒlƒ‹‚ÌŽd—l
    128 
    129 SSPƒJ[ƒlƒ‹‚ÌŽd—l‚ÌŠT—v‚ɂ‚¢‚ẮCuTOPPERSV¢‘ãƒJ[ƒlƒ‹“‡Žd—l‘v‚ð
    130 ŽQÆ‚Ì‚±‚ƁD
    131 
    132 1.3. Šù’m‚Ì–â‘è
    133 
    134 kernel_cfg.ci‚¨‚æ‚Ñcfg1_out.cj‚́CƒJ[ƒlƒ‹CƒVƒXƒeƒ€ƒT[ƒrƒXCƒAƒvƒŠ
    135 ƒP[ƒVƒ‡ƒ“‚Ì‚¢‚¸‚ê‚̃Cƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚àƒCƒ“ƒNƒ‹[ƒh‚µC‚¢‚¸‚ê‚̃Vƒ“
    136 ƒ{ƒ‹‚àŽQÆ‚·‚é‰Â”\«‚ª‚ ‚éD‚»‚Ì‚½‚߁CƒJ[ƒlƒ‹CƒVƒXƒeƒ€ƒT[ƒrƒXCƒAƒv
    137 ƒŠƒP[ƒVƒ‡ƒ“‚ŃVƒ“ƒ{ƒ‹“™‚ªÕ“Ë‚µ‚Ä‚¢‚éê‡‚âCƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“‚ªH
    138 ‚¢ˆá‚Á‚Ä‚¢‚éê‡‚ɁCkernel_cfg.ci‚¨‚æ‚Ñcfg1_out.cj‚ª³‚µ‚­ƒRƒ“ƒpƒCƒ‹
    139 ‚Å‚«‚È‚­‚È‚éê‡‚ªl‚¦‚ç‚ê‚éDƒJ[ƒlƒ‹‚̃Vƒ“ƒ{ƒ‹‚ðƒŠƒl[ƒ€‚·‚é‚È‚Ç‚Ì•û
    140 –@‚ÅŒyŒ¸‚³‚ê‚Ä‚Í‚¢‚邪C–â‘肪‚È‚­‚È‚Á‚Ä‚¢‚é‚킯‚Å‚Í‚È‚¢D
    141 
    142 ƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    143 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚©‚çCƒRƒ“ƒtƒBƒMƒ
    144 ƒŒ[ƒ^‚ɑ΂·‚é
    145 INCLUDEƒfƒBƒŒƒNƒeƒBƒu‚É‚æ‚葼‚̃Rƒ“ƒtƒBƒMƒ
    146 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ðƒCƒ“ƒNƒ‹[
    147 ƒh‚µ‚Ä‚¢‚éê‡‚ɁC‚»‚Ì’†‚ÉŠÜ‚Ü‚ê‚éCŒ¾ŒêƒvƒŠƒvƒƒZƒbƒT‚̃Cƒ“ƒNƒ‹[ƒhƒfƒB
    148 ƒŒƒNƒeƒBƒui#includej‚ŁCƒRƒ“ƒtƒBƒMƒ
    149 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚Ì’u‚©‚ê‚Ä‚¢‚é
    150 ƒfƒBƒŒƒNƒgƒŠ‚ªCƒtƒ@ƒCƒ‹‚ðŒŸõ‚·‚éƒpƒX‚É‚Í‚¢‚ç‚È‚¢‚Æ‚¢‚¤–â‘肪‚ ‚éD—á
    151 ‚¦‚΁Csyssvc/syslog.cfg‚Ɂu#include "syslog.h"v‚Æ‹Lq‚Å‚«‚È‚¢‚̂́C‚±
    152 ‚Ì–â‘肪‚ ‚邽‚ß‚Å‚ ‚éD
    153 
    154 Œ»Žž“_‚ł́CƒAƒhƒŒƒX‚ª64ƒrƒbƒg‚̊‹«‚ɂ͑Ήž‚µ‚Ä‚¢‚È‚¢D64ƒrƒbƒgƒAƒhƒŒ
    155 ƒXŠÂ‹«‚ðƒTƒ|[ƒg‚·‚邽‚߂̍őå‚̉ۑè‚́Cƒ‚ƒgƒ[ƒ‰SƒŒƒR[ƒhƒtƒH[ƒ}ƒbƒg
    156 ‚ª64ƒrƒbƒgƒAƒhƒŒƒX‚ɑΉž‚µ‚Ä‚¢‚È‚¢‚±‚Æ‚Å‚ ‚éD
    157 
    158 ‚QDƒ^[ƒQƒbƒgˆË‘¶•”
    159 
    160 2.1. ƒ^[ƒQƒbƒgˆË‘¶•”‚ÌŠT—v
    161 
    162 SSPƒJ[ƒlƒ‹‚̃^[ƒQƒbƒg”ñˆË‘¶•”‚ƁCŠeŽí‚̃^[ƒQƒbƒgƒVƒXƒeƒ€‚ɑΉž‚·‚邽
    163 ‚߂̃^[ƒQƒbƒgˆË‘¶•”‚́C•ÊX‚ÉŠJ”­‚³‚ê‚Ä‚¢‚éD‚»‚Ì‚½‚߁CSSPƒJ[ƒlƒ‹‚ª‘Î
    164 ‰ž‚µ‚Ä‚¢‚é‚·‚ׂẴ^[ƒQƒbƒgˆË‘¶•”‚ðCƒo[ƒWƒ‡ƒ“‚𐮍‡‚³‚¹‚ăpƒbƒP[ƒW
    165 ‰»‚·‚邱‚Ƃ͍¢“ï‚Å‚ ‚éD‚»‚±‚ŁCŽå‚ɏ‰‹‰‚̃†[ƒU‚ð‘Ώۂɂµ‚½ŠÈˆÕƒpƒbƒP[
    166 ƒW‚ƁCã‹‰‚̃†[ƒU‚âƒJ[ƒlƒ‹ŠJ”­ŽÒ‚ð‘Ώۂɂµ‚½ŒÂ•ÊƒpƒbƒP[ƒW‚ð—pˆÓ‚µ‚Ä
    167 ‚¢‚éD
    168 
    169 SSPƒJ[ƒlƒ‹‚𖢃Tƒ|[ƒg‚̃^[ƒQƒbƒgƒVƒXƒeƒ€‚Öƒ|[ƒeƒBƒ“ƒO‚·‚邽‚ß‚É•K—v
    170 ‚ȍì‹Æ‚́CŠJ”­ŠÂ‹«‚̍\’z‚Æ•W€‚ÌŠJ”­ŠÂ‹«‚Ƃ̍·ˆÙ‚Ì‹zŽûCƒJ[ƒlƒ‹Ž©g‚Ì
    171 ƒ|[ƒeƒBƒ“ƒOCƒVƒXƒeƒ€ƒT[ƒrƒX‚̃|[ƒeƒBƒ“ƒO‚È‚Ç‚©‚ç‚È‚éDÚ‚µ‚­‚́C
    172 uƒ^[ƒQƒbƒgˆË‘¶•” ƒ|[ƒeƒBƒ“ƒOƒKƒCƒhv‚ðŽQÆ‚·‚邱‚ƁD
    173 
    174 ¦ ƒ^[ƒQƒbƒgˆË‘¶•” ƒ|[ƒeƒBƒ“ƒOƒKƒCƒh‚ÍŒ»Ý‚Í–¢Š®‚Å‚ ‚é
    175 
    176 2.2. ŠÈˆÕƒpƒbƒP[ƒW
    177 
    178 ŠÈˆÕƒpƒbƒP[ƒW‚́CSSPƒJ[ƒlƒ‹‚ª‘Ήž‚µ‚Ä‚¢‚éƒ^[ƒQƒbƒgƒVƒXƒeƒ€–ˆ‚É—pˆÓ‚³
    179 ‚êC‚»‚̃^[ƒQƒbƒgƒVƒXƒeƒ€ã‚ÅSSPƒJ[ƒlƒ‹‚𓮍삳‚¹‚邽‚ß‚É•K—v‚ȃtƒ@ƒC
    180 ƒ‹ˆêŽ®‚ðƒpƒbƒP[ƒW‰»‚µ‚½‚à‚Ì‚Å‚ ‚éDŠÈˆÕƒpƒbƒP[ƒW‚ÉŠÜ‚Ü‚ê‚éƒtƒ@ƒCƒ‹‚́C
    181 ƒo[ƒWƒ‡ƒ“‚ª®‡‚µ‚Ä‚¢‚邱‚Æ‚ªŠm”F‚³‚ê‚Ä‚¢‚éD
    182 
    183 ŠÈˆÕƒpƒbƒP[ƒW‚̃o[ƒWƒ‡ƒ“”ԍ†‚́CƒpƒbƒP[ƒW‰»‚µ‚½“ú•t‚Æ‚·‚邱‚Æ‚ðŒ´‘¥
    184 ‚Æ‚·‚邪Cƒ^[ƒQƒbƒgƒVƒXƒeƒ€–ˆ‚ÌŽ–î‚É‚æ‚肱‚ÌŒ´‘¥‚ɏ]‚í‚È‚¢ê‡‚ª‚ ‚éD
    185 
    186 ŠÈˆÕƒpƒbƒP[ƒW‚́CŠî–{“I‚ɂ́CŽŸ‚Éà–¾‚·‚éŒÂ•ÊƒpƒbƒP[ƒW‚𕡐”‚Ü‚Æ‚ß‚½
    187 ‚à‚Ì‚Å‚ ‚éD‚»‚Ì‚½‚߁C‘Ώۃ^[ƒQƒbƒgƒVƒXƒeƒ€‚É•K—v‚Ì‚È‚¢ƒtƒ@ƒCƒ‹‚àŠÜ‚Ü
    188 ‚ê‚Ä‚¢‚éD‚Ü‚½CŠÈˆÕƒpƒbƒP[ƒW‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚éŒÂ•ÊƒpƒbƒP[ƒW‚̃o[ƒWƒ‡ƒ“
    189 ‚́CŒÂ•ÊƒpƒbƒP[ƒW‚ÌMANIFESTƒtƒ@ƒCƒ‹‚ðŽQÆ‚·‚邱‚Æ‚Å’m‚邱‚Æ‚ª‚Å‚«‚éD
    190 
    191 2.3. ŒÂ•ÊƒpƒbƒP[ƒW
    192 
    193 ŒÂ•ÊƒpƒbƒP[ƒW‚́CSSPƒJ[ƒlƒ‹‚ÌŠJ”­’PˆÊ–ˆ‚ɁC‚»‚ÌŠJ”­’PˆÊ‚ÅŠJ”­‚ð’S“–‚µ
    194 ‚Ä‚¢‚éƒtƒ@ƒCƒ‹ˆêŽ®‚ðƒpƒbƒP[ƒW‰»‚µ‚½‚à‚Ì‚Å‚ ‚éDSSPƒJ[ƒlƒ‹‚̃^[ƒQƒbƒg
    195 ”ñˆË‘¶•”‚àCˆê‚‚̌•ʃpƒbƒP[ƒW‚Æ‚µ‚Ä”z•z‚³‚ê‚éD‚ ‚éŒÂ•ÊƒpƒbƒP[ƒW‚ð
    196 Žg—p‚·‚邽‚߂ɂ́Cˆê”ʂɂ́C‘¼‚̌•ʃpƒbƒP[ƒW‚ª•K—v‚Æ‚È‚éDƒ^[ƒQƒbƒg
    197 ˆË‘¶•”‚̌•ʃpƒbƒP[ƒW‚ðŽg—p‚·‚邽‚ß‚É•K—v‚Æ‚È‚éŒÂ•ÊƒpƒbƒP[ƒW‚Æ‚»‚̃o[
    198 ƒWƒ‡ƒ“‚ɂ‚¢‚ẮCƒ^[ƒQƒbƒgˆË‘¶•”‚̃†[ƒU[ƒYƒ}ƒjƒ
    199 ƒAƒ‹‚ðŽQÆ‚·‚邱‚ƁD
    200 Žg—p‚·‚éŒÂ•ÊƒpƒbƒP[ƒW‚̃o[ƒWƒ‡ƒ“‚𐮍‡‚³‚¹‚邱‚Ƃ́Cƒ†[ƒU‚̐ӔC‚Å‚ 
    201 ‚éD
    202 
    203 ŒÂ•ÊƒpƒbƒP[ƒW‚̃o[ƒWƒ‡ƒ“”ԍ†‚́CX.Y.Z‚ÌŒ`‚Å•\Œ»‚³‚ê‚éDƒ^[ƒQƒbƒg”ñˆË
    204 ‘¶•”‚̃o[ƒWƒ‡ƒ“”ԍ†‚ðCSSPƒJ[ƒlƒ‹‘S‘̂̃ŠƒŠ[ƒX”ԍ†‚Æ‚·‚éDƒ^[ƒQƒbƒg
    205 ˆË‘¶•”‚̃o[ƒWƒ‡ƒ“”ԍ†‚́CX‚ÆY‚ªC‚»‚ꂪˆË‘¶‚·‚éƒ^[ƒQƒbƒg”ñˆË‘¶•”‚ƈê
    206 ’v‚µ‚Ä‚¢‚éD‚»‚ê‚ɑ΂µ‚āCZ‚͈ê’v‚µ‚Ä‚¢‚é‚Æ‚ÍŒÀ‚ç‚È‚¢D—Ⴆ‚΁Cƒ^[ƒQƒb
    207 ƒg”ñˆË‘¶•”‚̃o[ƒWƒ‡ƒ“1.1.0‚ɑΉž‚·‚éƒ^[ƒQƒbƒgˆË‘¶•”‚́Cƒo[ƒWƒ‡ƒ“
    208 1.1.Z‚ÌŒ`‚Æ‚È‚éDƒ^[ƒQƒbƒgˆË‘¶•”‚Ì‚Ý‚ªƒo[ƒWƒ‡ƒ“ƒAƒbƒv‚µ‚½ê‡‚ɂ́CZ
    209 ‚ª•ÏX‚³‚ê‚éD
    210 
    211 Žg—p‚·‚éŒÂ•ÊƒpƒbƒP[ƒW‚́CŽŸ‚Ì—á‚̂悤‚ɁCƒ^[ƒQƒbƒg”ñˆË‘¶•”‚̌•ʃpƒb
    212 ƒP[ƒW‚ð“WŠJ‚µ‚½‚Ì‚Æ“¯‚¶ƒfƒBƒŒƒNƒgƒŠ‚Å“WŠJ‚·‚éD
     50○目次
     51
     521.TOPPERS/SSPカーネルの概要
     53        1.1 TOPPERS/SSPカーネルの位置付け
     54        1.2 TOPPERS/SSPカーネルの仕様
     55        1.3 既知の問題
     562.ターゲット依存部
     57        2.1 ターゲット依存部の概要
     58        2.2 簡易パッケージ
     59        2.3 個別パッケージ
     603.クイックスタートガイド
     61        3.1 開発環境の準備
     62        3.2 コンフィギュレータの構築
     63        3.3 サンプルプログラムの構築と実行
     64        3.4 カーネルを関数単位でライブラリ化する方法
     65        3.5 アプリケーションとカーネルを別々に構築する方法
     664.ディレクトリ構成・ファイル構成
     67        4.1 配布パッケージのディレクトリ構成
     68        4.2 ターゲット非依存部のファイル構成
     695.コンフィギュレーションスクリプトの使い方
     706.Makefileの修正方法
     71        6.1 Makefileの変数定義
     72        6.2 コンパイルオプション
     737.コンフィギュレータの使い方
     748.システムサービス
     75        8.1 シリアルインタフェースドライバ
     76                8.1.1 シリアルインタフェースドライバのサービスコール
     77                8.1.2 シリアルインタフェースドライバのその他のサービス
     78        8.2 カーネル起動メッセージの出力
     799.サポートライブラリ
     80        9.1 キュー操作ライブラリ関数
     8110.使用上の注意とヒント
     82        10.1 タイマドライバの組込み
     83        10.2 assertマクロの処理
     84        10.3 オブジェクトIDの管理
     85        10.4 カーネルの内部シンボルのリネーム
     86        10.5 システムの起動時の初期化処理
     8711.参考情報
     88        11.1 利用条件と利用報告
     89        11.2 保証・適用性・サポート
     90        11.3 バグレポート
     91        11.4 ウェブサイト
     92        11.5 TOPPERSユーザーズメーリングリスト
     93        11.6 TOPPERSプロジェクトのメンバ向けのサービス
     94        11.7 TOPPERSプロジェクトへの参加
     9512.
     96        12.1 サービスコール一覧
     97        12.2 静的API一覧
     98        12.3 バージョン履歴
     99
     100
     1011.TOPPERS/SSPカーネルの概要
     102
     1031.1.  TOPPERS/SSPカーネルの位置付け
     104
     105TOPPERS/SSPカーネルは,TOPPERS/ASPカーネルの仕様に対して,
     106小規模アプリケーション向けに仕様を絞ったものである.最小セットに
     107おける"最小"とは,カーネルが使用するROM/RAM使用量を小さくするために
     108仕様を最適化することを意味する.
     109
     110提供する機能はμITRON4.0仕様準拠の最低機能をベースとして,一部
     111自動車制御用プロファイルの機能を取り込む.
     112
     113このため,SSPカーネルはASPカーネルの下位互換でも上位互換でもない.
     114ただし,制約タスク拡張パッケージを適用した場合,SSPカーネルは
     115SSPカーネルの上位互換となる.
     116
     1171.2. TOPPERS/SSPカーネルの仕様
     118
     119SSPカーネルの仕様の概要については,「TOPPERS新世代カーネル統合仕様書」を
     120参照のこと.
     121
     1221.3. 既知の問題
     123
     124kernel_cfg.c(およびcfg1_out.c)は,カーネル,システムサービス,アプリ
     125ケーションのいずれのインクルードファイルもインクルードし,いずれのシン
     126ボルも参照する可能性がある.そのため,カーネル,システムサービス,アプ
     127リケーションでシンボル等が衝突している場合や,コンパイルオプションが食
     128い違っている場合に,kernel_cfg.c(およびcfg1_out.c)が正しくコンパイル
     129できなくなる場合が考えられる.カーネルのシンボルをリネームするなどの方
     130法で軽減されてはいるが,問題がなくなっているわけではない.
     131
     132システムコンフィギュレーションファイルから,コンフィギュレータに対する
     133INCLUDEディレクティブにより他のコンフィギュレーションファイルをインクルー
     134ドしている場合に,その中に含まれるC言語プリプロセッサのインクルードディ
     135レクティブ(#include)で,コンフィギュレーションファイルの置かれている
     136ディレクトリが,ファイルを検索するパスにはいらないという問題がある.例
     137えば,syssvc/syslog.cfgに「#include "syslog.h"」と記述できないのは,こ
     138の問題があるためである.
     139
     140現時点では,アドレスが64ビットの環境には対応していない.64ビットアドレ
     141ス環境をサポートするための最大の課題は,モトローラSレコードフォーマット
     142が64ビットアドレスに対応していないことである.
     143
     1442.ターゲット依存部
     145
     1462.1. ターゲット依存部の概要
     147
     148SSPカーネルのターゲット非依存部と,各種のターゲットシステムに対応するた
     149めのターゲット依存部は,別々に開発されている.そのため,SSPカーネルが対
     150応しているすべてのターゲット依存部を,バージョンを整合させてパッケージ
     151化することは困難である.そこで,主に初級のユーザを対象にした簡易パッケー
     152ジと,上級のユーザやカーネル開発者を対象にした個別パッケージを用意して
     153いる.
     154
     155SSPカーネルを未サポートのターゲットシステムへポーティングするために必要
     156な作業は,開発環境の構築と標準の開発環境との差異の吸収,カーネル自身の
     157ポーティング,システムサービスのポーティングなどからなる.詳しくは,
     158「ターゲット依存部 ポーティングガイド」を参照すること.
     159
     160※ ターゲット依存部 ポーティングガイドは現在は未完である
     161
     1622.2. 簡易パッケージ
     163
     164簡易パッケージは,SSPカーネルが対応しているターゲットシステム毎に用意さ
     165れ,そのターゲットシステム上でSSPカーネルを動作させるために必要なファイ
     166ル一式をパッケージ化したものである.簡易パッケージに含まれるファイルは,
     167バージョンが整合していることが確認されている.
     168
     169簡易パッケージのバージョン番号は,パッケージ化した日付とすることを原則
     170とするが,ターゲットシステム毎の事情によりこの原則に従わない場合がある.
     171
     172簡易パッケージは,基本的には,次に説明する個別パッケージを複数まとめた
     173ものである.そのため,対象ターゲットシステムに必要のないファイルも含ま
     174れている.また,簡易パッケージに含まれている個別パッケージのバージョン
     175は,個別パッケージのMANIFESTファイルを参照することで知ることができる.
     176
     1772.3. 個別パッケージ
     178
     179個別パッケージは,SSPカーネルの開発単位毎に,その開発単位で開発を担当し
     180ているファイル一式をパッケージ化したものである.SSPカーネルのターゲット
     181非依存部も,一つの個別パッケージとして配布される.ある個別パッケージを
     182使用するためには,一般には,他の個別パッケージが必要となる.ターゲット
     183依存部の個別パッケージを使用するために必要となる個別パッケージとそのバー
     184ジョンについては,ターゲット依存部のユーザーズマニュアルを参照すること.
     185使用する個別パッケージのバージョンを整合させることは,ユーザの責任であ
     186る.
     187
     188個別パッケージのバージョン番号は,X.Y.Zの形で表現される.ターゲット非依
     189存部のバージョン番号を,SSPカーネル全体のリリース番号とする.ターゲット
     190依存部のバージョン番号は,XとYが,それが依存するターゲット非依存部と一
     191致している.それに対して,Zは一致しているとは限らない.例えば,ターゲッ
     192ト非依存部のバージョン1.1.0に対応するターゲット依存部は,バージョン
     1931.1.Zの形となる.ターゲット依存部のみがバージョンアップした場合には,Z
     194が変更される.
     195
     196使用する個別パッケージは,次の例のように,ターゲット非依存部の個別パッ
     197ケージを展開したのと同じディレクトリで展開する.
    213198
    214199        % tar xvfz ssp-1.3.0.tar.gz
    215200        % tar xvfz ssp_arch_rx_rxc-1.3.0.tar.gz
    216201
    217 ƒ^[ƒQƒbƒg”ñˆË‘¶•”‚̌•ʃpƒbƒP[ƒW‚ɂ́CˆÈ‰º‚̃^[ƒQƒbƒgˆË‘¶•”‚ªŠÜ‚Ü‚ê
    218 ‚Ä‚¢‚éD
    219 
    220         target/cq_frk_fm3_gcc   InterfaceŽ•t‘®Cortex-M3Šî”Â
    221                                         iGNUŠJ”­ŠÂ‹«j—pƒ^[ƒQƒbƒgˆË‘¶•”
    222         arch/arm_m_gcc          Cortex-M3iGNUŠJ”­ŠÂ‹«j—pƒvƒƒZƒbƒTˆË‘¶•”
    223 
    224 
    225 ‚RDƒNƒCƒbƒNƒXƒ^[ƒgƒKƒCƒh
    226 
    227 ‚±‚±‚ł́Cƒ^[ƒQƒbƒgˆË‘¶•”‚ª—pˆÓ‚³‚ê‚Ä‚¢‚éƒ^[ƒQƒbƒgƒVƒXƒeƒ€ã‚ŁCSSPƒJ[
    228 ƒlƒ‹ã‚Å“®ì‚·‚éƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚ð\’zE“®ì‚³‚¹‚é‚܂ł̎菇‚ðŽ¦‚·D
    229 
    230 3.1. ŠJ”­ŠÂ‹«‚̏€”õ
    231 
    232 SSPƒJ[ƒlƒ‹‚ð—p‚¢‚½ƒVƒXƒeƒ€\’z‚ɂ́CˆÈ‰º‚̃c[ƒ‹‚ª•K—v‚Å‚ ‚éD
    233 
    234         ƒzƒXƒgƒVƒXƒeƒ€—p‚̃c[ƒ‹
    235                 perl            “®ìŠm”FF5.16.2
    236                 GNU Make        “®ìŠm”FF3.81
    237 
    238         TOPPERSV¢‘ãƒJ[ƒlƒ‹—pƒRƒ“ƒtƒBƒMƒ
    239 ƒŒ[ƒ^
    240                 cfg                     “®ìŠm”FF1.8.0
    241                                         ¦ 1.6.0ˆÈ‘O‚̃o[ƒWƒ‡ƒ“‚Å‚Í“®ì‚µ‚È‚¢D
    242 
    243         ƒ^[ƒQƒbƒgƒVƒXƒeƒ€—p‚̃c[ƒ‹iƒNƒƒXŠJ”­ŠÂ‹«j
    244                 •W€‹KŠi‚ɏ€‹’‚µ‚½CƒRƒ“ƒpƒCƒ‰
    245                 ƒAƒZƒ“ƒuƒ‰CƒŠƒ“ƒJCƒ‰ƒCƒuƒ‰ƒŠƒAƒ“
    246                 ƒVƒ“ƒ{ƒ‹ƒtƒ@ƒCƒ‹o—̓c[ƒ‹CƒwƒLƒTƒtƒ@ƒCƒ‹o—̓c[ƒ‹
    247                 •W€Cƒ‰ƒCƒuƒ‰ƒŠi•K{‚Å‚Í‚È‚¢j
    248 
    249 ƒ^[ƒQƒbƒgƒVƒXƒeƒ€—p‚̃c[ƒ‹‚ÉGNUŠJ”­ŠÂ‹«‚ð—p‚¢‚éê‡‚ɂ́CˆÈ‰º‚̃c[ƒ‹
    250 ‚ª•K—v‚Å‚ ‚éD
    251 
    252         ƒ^[ƒQƒbƒgƒVƒXƒeƒ€—p‚ÌGNUŠJ”­ŠÂ‹«ƒc[ƒ‹
    253                 BINUTILSiasCldCarCnmCranlibCobjcopyCobjdumpj
    254                 GCC‚Ü‚½‚ÍGCC-COREigcc‚¨‚æ‚Ñ‚»‚±‚©‚çŒÄ‚яo‚³‚ê‚éƒc[ƒ‹j
    255                 NEWLIBi•W€Cƒ‰ƒCƒuƒ‰ƒŠC•K{‚Å‚Í‚È‚¢j
    256 
    257 “®ìŠm”F‚³‚ê‚Ä‚¢‚éƒ^[ƒQƒbƒgƒVƒXƒeƒ€—p‚̃c[ƒ‹‚ɂ‚¢‚ẮCƒ^[ƒQƒbƒgˆË
    258 ‘¶•”‚̃†[ƒU[ƒYƒ}ƒjƒ
    259 ƒAƒ‹‚ðŽQÆ‚·‚邱‚ƁD
    260 
    261 ƒ^[ƒQƒbƒgƒVƒXƒeƒ€—p‚Ì•W€Cƒ‰ƒCƒuƒ‰ƒŠ‚́CƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ª•W€Cƒ‰ƒCƒu
    262 ƒ‰ƒŠ‚ðŽg—p‚µ‚È‚¢ê‡‚ɂ́C•K—v‚È‚¢D‚½‚¾‚µCƒRƒ“ƒpƒCƒ‰‚ª•W€Cƒ‰ƒCƒuƒ‰ƒŠ
    263 ŠÖ”imemcpyCmemset‚Ȃǁj‚ðŒÄ‚яo‚·ƒR[ƒh‚𐶐¬‚·‚éê‡‚ª‚ ‚èC‚»‚̏ê
    264 ‡‚É‚Í•W€Cƒ‰ƒCƒuƒ‰ƒŠ‚ª•K—v‚Å‚ ‚éD•W€Cƒ‰ƒCƒuƒ‰ƒŠ‚ð—pˆÓ‚·‚é‘ã‚í‚è‚ɁC
    265 ¶¬‚µ‚½ƒR[ƒh‚ªŒÄ‚яo‚·ŠÖ”‚Ì‚Ý‚ðŽ©•ª‚Å—pˆÓ‚µ‚Ä‚à‚æ‚¢D
    266 
    267 ‚È‚¨CperlƒXƒNƒŠƒvƒg‚̓}ƒ‹ƒ`ƒoƒCƒg•¶Žš‚ðˆµ‚¤•¶ŽšƒR[ƒh‚ªEUCC‰üsƒR[ƒh‚ª
    268 LF‚Å‚ ‚邱‚Æ‚ð‰¼’è‚µ‚Ä‚¢‚éD‚»‚êˆÈŠO‚Ì•¶ŽšƒR[ƒhC‰üsƒR[ƒh‚Å“®ì‚³‚¹‚é
    269 ‚½‚ß‚É‚ÍperlƒXƒNƒŠƒvƒg‚̏C³‚ª•K—v‚ƂȂ邱‚Æ‚ª‚ ‚éD
    270 
    271 ˆÈ‰º‚ł́C‚±‚ê‚ç‚̃c[ƒ‹‚ª—pˆÓ‚Å‚«‚Ä‚¢‚邱‚Æ‚ð‘O’ñ‚ɁCUNIXƒ}ƒVƒ“ã‚Å‚Ì
    272 \’zŽè‡‚ðà–¾‚·‚éD‚Ü‚½ˆÈ‰º‚Ìà–¾‚ł́CmakeƒRƒ}ƒ“ƒh‚ªGNU Make‚Å‚ ‚é‚à
    273 ‚Ì‚Æ‚·‚éiSSPƒJ[ƒlƒ‹‚̃Tƒ“ƒvƒ‹‚ÌMakefile‚́CGNU Make‚ÌŠg’£‹@”\‚ð—p‚¢‚Ä
    274 ‚¢‚éjD
    275 
    276 3.2. ƒRƒ“ƒtƒBƒMƒ
    277 ƒŒ[ƒ^‚̍\’z
    278 
    279 ƒJ[ƒlƒ‹‚ð\’z‚·‚é‘O‚ɁC‚Ü‚¸CTOPPERSV¢‘ãƒJ[ƒlƒ‹—pƒRƒ“ƒtƒBƒMƒ
    280 ƒŒ[ƒ^
    281 ‚ð\’z‚·‚é•K—v‚ª‚ ‚éDŠÈˆÕƒpƒbƒP[ƒW‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚½ê‡‚ȂǁCƒRƒ“ƒtƒBƒMƒ
    282 
    283 ƒŒ[ƒ^‚ðŽÀsƒtƒ@ƒCƒ‹Œ`Ž®‚Å“üŽè‚µ‚½ê‡‚ɂ́C‚±‚̃Xƒeƒbƒv‚Í•K—v‚È‚¢D
    284 
    285 ƒRƒ“ƒtƒBƒMƒ
    286 ƒŒ[ƒ^‚̍\’z‚ɂ́CˆÈ‰º‚̃c[ƒ‹‚ª•K—v‚Å‚ ‚éD
    287 
    288         ƒzƒXƒgƒVƒXƒeƒ€—p‚̃c[ƒ‹iƒZƒ‹ƒtŠJ”­ŠÂ‹«j
    289                 C++ƒRƒ“ƒpƒCƒ‰CC++ƒ‰ƒCƒuƒ‰ƒŠ
    290                                         “®ìŠm”FiMac OS XŠÂ‹«jFApple LLVM version 5.0 (clang-500.2.79)
    291                 Boost           “®ìŠm”FF1.55.0
    292                 Visual Studio (Windows‚̏ꍇ)
    293 
    294 Å‰‚ɁCƒpƒbƒP[ƒW‚ɃRƒ“ƒtƒBƒMƒ
    295 ƒŒ[ƒ^‚̃\[ƒXƒtƒ@ƒCƒ‹‚ªŠÜ‚Ü‚ê‚Ä‚¢‚È‚¢
    296 ê‡‚ɂ́CƒRƒ“ƒtƒBƒMƒ
    297 ƒŒ[ƒ^‚̃pƒbƒP[ƒW‚ðCSSPƒJ[ƒlƒ‹‚̃\[ƒXƒtƒ@ƒCƒ‹
    298 ‚ð“WŠJ‚µ‚½ƒfƒBƒŒƒNƒgƒŠ‚̉º‚É“WŠJ‚·‚éD
     202ターゲット非依存部の個別パッケージには,以下のターゲット依存部が含まれ
     203ている.
     204
     205        target/cq_frk_fm3_gcc   Interface誌付属Cortex-M3基板
     206                                        (GNU開発環境)用ターゲット依存部
     207        arch/arm_m_gcc          Cortex-M3(GNU開発環境)用プロセッサ依存部
     208
     209
     2103.クイックスタートガイド
     211
     212ここでは,ターゲット依存部が用意されているターゲットシステム上で,SSPカー
     213ネル上で動作するサンプルプログラムを構築・動作させるまでの手順を示す.
     214
     2153.1. 開発環境の準備
     216
     217SSPカーネルを用いたシステム構築には,以下のツールが必要である.
     218
     219        ホストシステム用のツール
     220                perl            動作確認:5.16.2
     221                GNU Make        動作確認:3.81
     222
     223        TOPPERS新世代カーネル用コンフィギュレータ
     224                cfg                     動作確認:1.8.0
     225                                        ※ 1.6.0以前のバージョンでは動作しない.
     226
     227        ターゲットシステム用のツール(クロス開発環境)
     228                標準規格に準拠したCコンパイラ
     229                アセンブラ,リンカ,ライブラリアン
     230                シンボルファイル出力ツール,ヘキサファイル出力ツール
     231                標準Cライブラリ(必須ではない)
     232
     233ターゲットシステム用のツールにGNU開発環境を用いる場合には,以下のツール
     234が必要である.
     235
     236        ターゲットシステム用のGNU開発環境ツール
     237                BINUTILS(as,ld,ar,nm,ranlib,objcopy,objdump)
     238                GCCまたはGCC-CORE(gccおよびそこから呼び出されるツール)
     239                NEWLIB(標準Cライブラリ,必須ではない)
     240
     241動作確認されているターゲットシステム用のツールについては,ターゲット依
     242存部のユーザーズマニュアルを参照すること.
     243
     244ターゲットシステム用の標準Cライブラリは,アプリケーションが標準Cライブ
     245ラリを使用しない場合には,必要ない.ただし,コンパイラが標準Cライブラリ
     246関数(memcpy,memsetなど)を呼び出すコードを生成する場合があり,その場
     247合には標準Cライブラリが必要である.標準Cライブラリを用意する代わりに,
     248生成したコードが呼び出す関数のみを自分で用意してもよい.
     249
     250なお,perlスクリプトはマルチバイト文字を扱う文字コードがEUC,改行コードが
     251LFであることを仮定している.それ以外の文字コード,改行コードで動作させる
     252ためにはperlスクリプトの修正が必要となることがある.
     253
     254以下では,これらのツールが用意できていることを前提に,UNIXマシン上での
     255構築手順を説明する.また以下の説明では,makeコマンドがGNU Makeであるも
     256のとする(SSPカーネルのサンプルのMakefileは,GNU Makeの拡張機能を用いて
     257いる).
     258
     2593.2. コンフィギュレータの構築
     260
     261カーネルを構築する前に,まず,TOPPERS新世代カーネル用コンフィギュレータ
     262を構築する必要がある.簡易パッケージに含まれていた場合など,コンフィギュ
     263レータを実行ファイル形式で入手した場合には,このステップは必要ない.
     264
     265コンフィギュレータの構築には,以下のツールが必要である.
     266
     267        ホストシステム用のツール(セルフ開発環境)
     268                C++コンパイラ,C++ライブラリ
     269                                        動作確認(Mac OS X環境):Apple LLVM version 5.0 (clang-500.2.79)
     270                Boost           動作確認:1.55.0
     271                Visual Studio (Windowsの場合)
     272
     273最初に,パッケージにコンフィギュレータのソースファイルが含まれていない
     274場合には,コンフィギュレータのパッケージを,SSPカーネルのソースファイル
     275を展開したディレクトリの下に展開する.
    299276
    300277        % cd ssp
    301278        % tar xvfz cfg-1.8.0.tar.gz
    302279
    303 ‚Ü‚½‚́CƒRƒ“ƒtƒBƒMƒ
    304 ƒŒ[ƒ^‚̃pƒbƒP[ƒW‚𑼂̃fƒBƒŒƒNƒgƒŠ‚É“WŠJ‚µCSSPƒJ[
    305 ƒlƒ‹‚̃\[ƒXƒtƒ@ƒCƒ‹‚ð“WŠJ‚µ‚½ƒfƒBƒŒƒNƒgƒŠ‚©‚çƒVƒ“ƒ{ƒŠƒbƒNƒŠƒ“ƒN‚ð‚Í‚Á
    306 ‚Ä‚à‚æ‚¢D
    307 
    308 ƒ\[ƒXƒtƒ@ƒCƒ‹‚ª“WŠJ‚Å‚«‚é‚ƁCcfgƒfƒBƒŒƒNƒgƒŠ‚Ɉړ®‚µCƒRƒ“ƒtƒBƒMƒ
    309 ƒŒ[
    310 ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒgiconfigurej‚ÅMakefile‚̊‹«ˆË‘¶•”iMakefile.configj
    311 ‚𐶐¬‚µ‚½ŒãCmakeƒRƒ}ƒ“ƒh‚É‚æ‚èƒRƒ“ƒtƒBƒMƒ
    312 ƒŒ[ƒ^icfgƒvƒƒOƒ‰ƒ€j‚ª\
    313 ’z‚Å‚«‚éD
     280または,コンフィギュレータのパッケージを他のディレクトリに展開し,SSPカー
     281ネルのソースファイルを展開したディレクトリからシンボリックリンクをはっ
     282てもよい.
     283
     284ソースファイルが展開できると,cfgディレクトリに移動し,コンフィギュレー
     285ションスクリプト(configure)でMakefileの環境依存部(Makefile.config)
     286を生成した後,makeコマンドによりコンフィギュレータ(cfgプログラム)が構
     287築できる.
    314288
    315289        % cd cfg
     
    317291        % make
    318292
    319 ‚½‚¾‚µCBoost‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚½ƒfƒBƒŒƒNƒgƒŠ‚¨‚æ‚Ñ–¼Ì‚ª•W€‚Å‘z’肵‚Ä‚¢
    320 ‚é‚à‚̂Ƃ͈Ⴄê‡‚ɂ́Cconfigure‚Ì--with-headers‚¨‚æ‚Ñ--with-libraries
    321 ƒIƒvƒVƒ‡ƒ“‚É‚æ‚èCƒwƒbƒ_ƒtƒ@ƒCƒ‹‚¨‚æ‚у‰ƒCƒuƒ‰ƒŠ‚Ì’u‚©‚ꂽƒfƒBƒŒƒNƒgƒŠ
    322 ‚ðŽw’è‚·‚é•K—v‚ª‚ ‚éD
    323 
    324 ‚Ü‚½CƒzƒXƒgƒVƒXƒeƒ€‚É‚æ‚Á‚ẮCÅ“K‰»ƒŒƒxƒ‹‚ðã‚°‚é‚Ɛ³‚µ‚­ƒRƒ“ƒpƒCƒ‹
    325 ‚Å‚«‚È‚¢‚±‚Æ‚ª’m‚ç‚ê‚Ä‚¢‚éD‚»‚̂悤‚ȏꍇ‚ɂ́CÅ“K‰»ƒŒƒxƒ‹‚ð‰º‚°‚é‚©C
    326 Å“K‰»‚ð—}Ž~‚·‚é‚悤‚ɁCMakefile‚ðC³‚·‚é•K—v‚ª‚ ‚éD
    327 
    328 ‚È‚¨CƒRƒ“ƒtƒBƒMƒ
    329 ƒŒ[ƒ^‚ÌŽg—p•û–@‚ɂ‚¢‚ẮCu‚VDƒRƒ“ƒtƒBƒMƒ
    330 ƒŒ[ƒ^
    331 ‚ÌŽg‚¢•ûv‚ÌÍ‚Åà–¾‚·‚éD
    332 
    333 3.3. ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚̍\’z‚ÆŽÀs
    334 
    335 ŽŸ‚ɁCSSPƒJ[ƒlƒ‹ã‚Å“®ì‚·‚éƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚ð\’z‚·‚é•û–@‚ðà–¾‚·‚éD
    336 
    337 ‚Ü‚¸CƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚̃IƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚ð’u‚­ƒfƒBƒŒƒNƒgƒŠ‚ðì¬
    338 ‚µCƒRƒ“ƒtƒBƒMƒ
    339 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ðŽÀs‚·‚éD—Ⴆ‚΁CƒIƒuƒWƒFƒNƒgƒtƒ@
    340 ƒCƒ‹‚ð’u‚­ƒfƒBƒŒƒNƒgƒŠ‚ðCSSPƒJ[ƒlƒ‹‚̃\[ƒXƒtƒ@ƒCƒ‹‚ð“WŠJ‚µ‚½ƒfƒBƒŒ
    341 ƒNƒgƒŠ‚̉º‚ÌOBJ‚Æ‚¢‚¤–¼Ì‚̃fƒBƒŒƒNƒgƒŠ‚É‚·‚éê‡‚ɂ́CŽŸ‚̃Rƒ}ƒ“ƒh‚ð
    342 ŽÀs‚·‚éiƒfƒBƒŒƒNƒgƒŠ‚̏ꏊ‚Æ–¼Ì‚Í”CˆÓ‚ÉŒˆ‚ß‚Ä‚æ‚¢jD
     293ただし,Boostをインストールしたディレクトリおよび名称が標準で想定してい
     294るものとは違う場合には,configureの--with-headersおよび--with-libraries
     295オプションにより,ヘッダファイルおよびライブラリの置かれたディレクトリ
     296を指定する必要がある.
     297
     298また,ホストシステムによっては,最適化レベルを上げると正しくコンパイル
     299できないことが知られている.そのような場合には,最適化レベルを下げるか,
     300最適化を抑止するように,Makefileを修正する必要がある.
     301
     302なお,コンフィギュレータの使用方法については,「7.コンフィギュレータ
     303の使い方」の章で説明する.
     304
     3053.3. サンプルプログラムの構築と実行
     306
     307次に,SSPカーネル上で動作するサンプルプログラムを構築する方法を説明する.
     308
     309まず,サンプルプログラムのオブジェクトファイルを置くディレクトリを作成
     310し,コンフィギュレーションスクリプトを実行する.例えば,オブジェクトファ
     311イルを置くディレクトリを,SSPカーネルのソースファイルを展開したディレ
     312クトリの下のOBJという名称のディレクトリにする場合には,次のコマンドを
     313実行する(ディレクトリの場所と名称は任意に決めてよい).
    343314
    344315        % cd ssp
    345316        % mkdir OBJ
    346317        % cd OBJ
    347         % perl ../configure -T <ƒ^[ƒQƒbƒg—ªÌ>
    348 
    349 ‚±‚±‚ŁC<ƒ^[ƒQƒbƒg—ªÌ>‚́CtargetƒfƒBƒŒƒNƒgƒŠ‚̉º‚É’u‚©‚ê‚Ä‚¢‚éƒ^[ƒQƒb
    350 ƒgˆË‘¶•”ƒfƒBƒŒƒNƒgƒŠ‚Ì–¼Ì‚Å‚ ‚éDƒRƒ“ƒtƒBƒMƒ
    351 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚̃I
    352 ƒvƒVƒ‡ƒ“‚ɂ‚¢‚ẮCu‚TDƒRƒ“ƒtƒBƒMƒ
    353 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ÌŽg‚¢•ûv‚Ì
    354 Í‚Åà–¾‚·‚éD
    355 
    356 ƒRƒ“ƒtƒBƒMƒ
    357 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ÌŽÀs‚É‚æ‚èCƒJƒŒƒ“ƒgƒfƒBƒŒƒNƒgƒŠ‚ɂ́C
    358 ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚ð\’z‚·‚邽‚ß‚ÌMakefileCƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€—p‚̃Rƒ“
    359 ƒtƒBƒMƒ
    360 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹isample1.cfgjCƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€–{‘Ì
    361 isample1.h‚¨‚æ‚Ñsample1.cj‚ª¶¬‚³‚ê‚éD
    362 
    363 ƒRƒ“ƒtƒBƒMƒ
    364 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ÌŽÀsŒãC•K—v‚Å‚ ‚ê‚ÎMakefile‚ðC³‚·
    365 ‚éDMakefile‚̏C³•û–@‚ɂ‚¢‚ẮCu‚UDMakefile‚̏C³•û–@v‚ÌÍ‚Åà–¾
    366 ‚·‚éD
    367 
    368 ‚»‚ÌŒãCmake depend‚ňˑ¶ŠÖŒWƒtƒ@ƒCƒ‹iMakefile.dependj‚𐶐¬‚µ‚½ŒãC
    369 makeƒRƒ}ƒ“ƒh‚É‚æ‚èƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚̃[ƒhƒ‚ƒWƒ
    370 [ƒ‹iSSP‚Ü‚½‚Í
    371 SSP.exej‚ª¶¬‚Å‚«‚éDˆË‘¶ŠÖŒWƒtƒ@ƒCƒ‹‚̐¶¬‚ɂ͎኱ŽžŠÔ‚ª‚©‚©‚éD
     318        % perl ../configure -T <ターゲット略称>
     319
     320ここで,<ターゲット略称>は,targetディレクトリの下に置かれているターゲッ
     321ト依存部ディレクトリの名称である.コンフィギュレーションスクリプトのオ
     322プションについては,「5.コンフィギュレーションスクリプトの使い方」の
     323章で説明する.
     324
     325コンフィギュレーションスクリプトの実行により,カレントディレクトリには,
     326サンプルプログラムを構築するためのMakefile,サンプルプログラム用のコン
     327フィギュレーションファイル(sample1.cfg),サンプルプログラム本体
     328(sample1.hおよびsample1.c)が生成される.
     329
     330コンフィギュレーションスクリプトの実行後,必要であればMakefileを修正す
     331る.Makefileの修正方法については,「6.Makefileの修正方法」の章で説明
     332する.
     333
     334その後,make dependで依存関係ファイル(Makefile.depend)を生成した後,
     335makeコマンドによりサンプルプログラムのロードモジュール(SSPまたは
     336SSP.exe)が生成できる.依存関係ファイルの生成には若干時間がかかる.
    372337
    373338        % make depend
    374339        % make
    375340
    376 ‚±‚±‚ō\’z‚µ‚½ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€isample1.hCsample1.cCsample1.cfgj
    377 ‚́CSSPƒJ[ƒlƒ‹‚ÌŠî–{“I‚È“®ì‚ðŠm”F‚·‚邽‚ß‚Ì‚à‚Ì‚Å‚ ‚éD‚±‚̃vƒƒOƒ‰
    378 ƒ€‚ÌŠT—và–¾‚́Csample1.c‚̐擪‚̃Rƒƒ“ƒg‚É‚ ‚éD
    379 
    380 3.4. ƒJ[ƒlƒ‹‚ðŠÖ”’PˆÊ‚щƒCƒuƒ‰ƒŠ‰»‚·‚é•û–@
    381 
    382 ‘Oß‚̎菇‚ł́CƒJ[ƒlƒ‹‚ðƒtƒ@ƒCƒ‹’PˆÊ‚ŃRƒ“ƒpƒCƒ‹‚µCƒ‰ƒCƒuƒ‰ƒŠ‰»‚µ‚Ä
    383 ‚¢‚½‚ªCƒJ[ƒlƒ‹‚̃R[ƒhƒTƒCƒY‚ðk¬‚·‚邽‚߂ɂ́CŽg—p‚µ‚È‚¢ƒT[ƒrƒXƒR[
    384 ƒ‹‚̓Šƒ“ƒN‚µ‚È‚¢•û‚ª–]‚Ü‚µ‚¢D‚»‚±‚ÅSSPƒJ[ƒlƒ‹‚ł́CƒJ[ƒlƒ‹‚ðŠÖ”’PˆÊ
    385 ‚ŃRƒ“ƒpƒCƒ‹‚µCƒ‰ƒCƒuƒ‰ƒŠ‰»‚·‚é•û–@‚ð—pˆÓ‚µ‚Ä‚¢‚éD
    386 
    387 ‚±‚Ì•û–@‚ŃTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚ð\’z‚·‚é‚ɂ́CƒRƒ“ƒtƒBƒMƒ
    388 ƒŒ[ƒVƒ‡ƒ“ƒXƒN
    389 ƒŠƒvƒg‚ɁC‚»‚ê‚ðŽwŽ¦‚·‚éƒIƒvƒVƒ‡ƒ“i-fj‚ð•t‰Á‚·‚邾‚¯‚Å‚æ‚¢D
     341ここで構築したサンプルプログラム(sample1.h,sample1.c,sample1.cfg)
     342は,SSPカーネルの基本的な動作を確認するためのものである.このプログラ
     343ムの概要説明は,sample1.cの先頭のコメントにある.
     344
     3453.4. カーネルを関数単位でライブラリ化する方法
     346
     347前節の手順では,カーネルをファイル単位でコンパイルし,ライブラリ化して
     348いたが,カーネルのコードサイズを縮小するためには,使用しないサービスコー
     349ルはリンクしない方が望ましい.そこでSSPカーネルでは,カーネルを関数単位
     350でコンパイルし,ライブラリ化する方法を用意している.
     351
     352この方法でサンプルプログラムを構築するには,コンフィギュレーションスク
     353リプトに,それを指示するオプション(-f)を付加するだけでよい.
    390354
    391355        % mkdir OBJ_LIB
    392356        % cd OBJ_LIB
    393         % perl ../configure -T <ƒ^[ƒQƒbƒg—ªÌ> -f
    394 
    395 ‚±‚±‚ŁCOBJ_LIB‚Æ‚¢‚¤ƒfƒBƒŒƒNƒgƒŠ‚̏ꏊ‚Æ–¼Ì‚́C”CˆÓ‚ÉŒˆ‚ß‚Ä‚æ‚¢D‚±‚ê
    396 ˆÈ~‚̎菇‚́C‘Oß‚Æ“¯‚¶‚Å‚ ‚éD
    397 
    398 3.5. ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ƃJ[ƒlƒ‹‚ð•ÊX‚ɍ\’z‚·‚é•û–@
    399 
    400 ‘Oß‚Åà–¾‚µ‚½•û–@‚ł́CƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ƃJ[ƒlƒ‹‚𓯎ž‚ɐ¶¬‚·‚邽‚߁C
    401 ƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚ð’u‚­ƒfƒBƒŒƒNƒgƒŠ‚É”ñí‚É‘½‚­‚̃tƒ@ƒCƒ‹‚ªì¬‚³‚ê
    402 ‚āCˆµ‚¢‚É‚­‚­‚È‚éD‚»‚±‚ŁCƒJ[ƒlƒ‹‚ðC³‚·‚é•p“x‚ª’á‚¢ê‡‚ɂ́CƒJ[
    403 ƒlƒ‹‚ÍŽ–‘O‚ɍ\’z‚µ‚Ä‚¨‚«CŒã‚ŃAƒvƒŠƒP[ƒVƒ‡ƒ“‚¾‚¯‚ð\’z‚·‚é•û–@‚ð—pˆÓ
    404 ‚µ‚Ä‚¢‚éDˆÈ‰º‚ł́CƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚ð\’z‚ð—á‚ɁC‚»‚̎菇‚ɂ‚¢‚Đà
    405 –¾‚·‚éD
    406 
    407 ‚Ü‚¸CƒJ[ƒlƒ‹‚ð\’z‚·‚éƒfƒBƒŒƒNƒgƒŠ‚ðì¬‚µCƒRƒ“ƒtƒBƒMƒ
    408 ƒŒ[ƒVƒ‡ƒ“ƒX
    409 ƒNƒŠƒvƒg‚ðŽÀs‚·‚éD—Ⴆ‚΁CƒJ[ƒlƒ‹‚ð\’z‚·‚éƒfƒBƒŒƒNƒgƒŠ‚ðCSSPƒJ[
    410 ƒlƒ‹‚̃\[ƒXƒtƒ@ƒCƒ‹‚ð“WŠJ‚µ‚½ƒfƒBƒŒƒNƒgƒŠ‚̉º‚ÌKERNEL_LIB‚Æ‚¢‚¤–¼Ì‚Ì
    411 ƒfƒBƒŒƒNƒgƒŠ‚É‚·‚éê‡‚ɂ́CŽŸ‚̃Rƒ}ƒ“ƒh‚ðŽÀs‚·‚éiƒfƒBƒŒƒNƒgƒŠ‚̏ꏊ
    412 ‚Æ–¼Ì‚Í”CˆÓ‚ÉŒˆ‚ß‚Ä‚æ‚¢jD
     357        % perl ../configure -T <ターゲット略称> -f
     358
     359ここで,OBJ_LIBというディレクトリの場所と名称は,任意に決めてよい.これ
     360以降の手順は,前節と同じである.
     361
     3623.5. アプリケーションとカーネルを別々に構築する方法
     363
     364前節で説明した方法では,アプリケーションとカーネルを同時に生成するため,
     365オブジェクトファイルを置くディレクトリに非常に多くのファイルが作成され
     366て,扱いにくくなる.そこで,カーネルを修正する頻度が低い場合には,カー
     367ネルは事前に構築しておき,後でアプリケーションだけを構築する方法を用意
     368している.以下では,サンプルプログラムを構築を例に,その手順について説
     369明する.
     370
     371まず,カーネルを構築するディレクトリを作成し,コンフィギュレーションス
     372クリプトを実行する.例えば,カーネルを構築するディレクトリを,SSPカー
     373ネルのソースファイルを展開したディレクトリの下のKERNEL_LIBという名称の
     374ディレクトリにする場合には,次のコマンドを実行する(ディレクトリの場所
     375と名称は任意に決めてよい).
    413376
    414377        % mkdir KERNEL_LIB
    415378        % cd KERNEL_LIB
    416         % perl ../configure -T <ƒ^[ƒQƒbƒg—ªÌ> -f
    417 
    418 ‚±‚ê‚É‚æ‚èCƒJ[ƒlƒ‹‚ð\’z‚·‚éƒfƒBƒŒƒNƒgƒŠ‚ɁCMakefileCsample1.cfgC
    419 sample1.hCsample1.c‚ª¶¬‚³‚ê‚邪CMakefileˆÈŠO‚ÍŽÀŽ¿“I‚É‚ÍŽg—p‚µ‚È‚¢D
    420 
    421 make depend‚ňˑ¶ŠÖŒWƒtƒ@ƒCƒ‹iMakefile.dependj‚𐶐¬‚µ‚½ŒãCmake
    422 libkernel.a‚É‚æ‚èƒJ[ƒlƒ‹ƒ‰ƒCƒuƒ‰ƒŠilibkernel.aj‚ª¶¬‚Å‚«‚éD
     379        % perl ../configure -T <ターゲット略称> -f
     380
     381これにより,カーネルを構築するディレクトリに,Makefile,sample1.cfg,
     382sample1.h,sample1.cが生成されるが,Makefile以外は実質的には使用しない.
     383
     384make dependで依存関係ファイル(Makefile.depend)を生成した後,make
     385libkernel.aによりカーネルライブラリ(libkernel.a)が生成できる.
    423386
    424387        % make depend
    425388        % make libkernel.a
    426389
    427 ŽŸ‚ɁCƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ð\’z‚·‚éƒfƒBƒŒƒNƒgƒŠ‚ðì¬‚µCƒRƒ“ƒtƒBƒMƒ
    428 ƒŒ[
    429 ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ðŽÀs‚·‚éD—Ⴆ‚΁CƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ð\’z‚·‚éƒfƒBƒŒƒN
    430 ƒgƒŠ‚ðCSSPƒJ[ƒlƒ‹‚̃\[ƒXƒtƒ@ƒCƒ‹‚ð“WŠJ‚µ‚½ƒfƒBƒŒƒNƒgƒŠ‚̉º‚ÌAPL‚Æ‚¢
    431 ‚¤–¼Ì‚̃fƒBƒŒƒNƒgƒŠ‚É‚·‚éê‡‚ɂ́CŽŸ‚̃Rƒ}ƒ“ƒh‚ðŽÀs‚·‚éiƒfƒBƒŒƒNƒg
    432 ƒŠ‚̏ꏊ‚Æ–¼Ì‚Í”CˆÓ‚ÉŒˆ‚ß‚Ä‚æ‚¢jD
     390次に,アプリケーションを構築するディレクトリを作成し,コンフィギュレー
     391ションスクリプトを実行する.例えば,アプリケーションを構築するディレク
     392トリを,SSPカーネルのソースファイルを展開したディレクトリの下のAPLとい
     393う名称のディレクトリにする場合には,次のコマンドを実行する(ディレクト
     394リの場所と名称は任意に決めてよい).
    433395
    434396        % cd ..
    435397        % mkdir APL
    436398        % cd APL
    437         % perl ../configure -T <ƒ^[ƒQƒbƒg—ªÌ> -L ../KERNEL_LIB
    438 
    439 ‚±‚±‚Å-LƒIƒvƒVƒ‡ƒ“‚ɂ́CƒJ[ƒlƒ‹‚ð\’z‚µ‚½ƒfƒBƒŒƒNƒgƒŠ‚̃pƒX‚ðŽw’è‚·‚éD
    440 
    441 ÅŒã‚ɁCmake depend‚ňˑ¶ŠÖŒWƒtƒ@ƒCƒ‹iMakefile.dependj‚𐶐¬‚µ‚½ŒãC
    442 makeƒRƒ}ƒ“ƒh‚É‚æ‚èƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚̃[ƒhƒ‚ƒWƒ
    443 [ƒ‹iSSP‚Ü‚½‚Í
    444 SSP.exej‚ª¶¬‚Å‚«‚éD
     399        % perl ../configure -T <ターゲット略称> -L ../KERNEL_LIB
     400
     401ここで-Lオプションには,カーネルを構築したディレクトリのパスを指定する.
     402
     403最後に,make dependで依存関係ファイル(Makefile.depend)を生成した後,
     404makeコマンドによりサンプルプログラムのロードモジュール(SSPまたは
     405SSP.exe)が生成できる.
    445406
    446407        % make depend
    447408        % make
    448409
    449 ‚±‚̎菇‚ł́CƒAƒvƒŠƒP[ƒVƒ‡ƒ“\’zŽž‚ɂ̓J[ƒlƒ‹‚̍č\’z‚ª•K—v‚©ƒ`ƒFƒb
    450 ƒN‚µ‚È‚¢‚½‚߁CƒJ[ƒlƒ‹‚̃\[ƒXƒR[ƒh‚ðC³‚µ‚½ê‡‚ɂ́CƒJ[ƒlƒ‹‚ð\’z
    451 ‚µ‚½ƒfƒBƒŒƒNƒgƒŠ‚Åmake libkernel.a‚ðÄŽÀs‚·‚é•K—v‚ª‚ ‚éD
    452 
    453 ˆÈã‚ł́CƒJ[ƒlƒ‹‚ƃAƒvƒŠƒP[ƒVƒ‡ƒ“‚ð•ÊX‚̃fƒBƒŒƒNƒgƒŠ‚ō\’z‚µ‚½‚ªC
    454 -LƒIƒvƒVƒ‡ƒ“‚ɃJƒŒƒ“ƒgƒfƒBƒŒƒNƒgƒŠi‚½‚¾‚µC"."‚Æ‚¢‚¤‹Lq‚Å‚Í•s‰Âj‚ðŽw
    455 ’è‚·‚邱‚ƂŁCƒJ[ƒlƒ‹‚ƃAƒvƒŠƒP[ƒVƒ‡ƒ“‚𓯂¶ƒfƒBƒŒƒNƒgƒŠ‚ŕʁX‚ɍ\’z
    456 ‚·‚邱‚Æ‚à‚Å‚«‚éD‹ï‘Ì“I‚ɂ́CŽŸ‚̎菇‚Æ‚È‚éD
     410この手順では,アプリケーション構築時にはカーネルの再構築が必要かチェッ
     411クしないため,カーネルのソースコードを修正した場合には,カーネルを構築
     412したディレクトリでmake libkernel.aを再実行する必要がある.
     413
     414以上では,カーネルとアプリケーションを別々のディレクトリで構築したが,
     415-Lオプションにカレントディレクトリ(ただし,"."という記述では不可)を指
     416定することで,カーネルとアプリケーションを同じディレクトリで別々に構築
     417することもできる.具体的には,次の手順となる.
    457418
    458419        % mkdir OBJ
    459420        % cd OBJ
    460         % perl ../configure -T <ƒ^[ƒQƒbƒg—ªÌ> -L ../OBJ
     421        % perl ../configure -T <ターゲット略称> -L ../OBJ
    461422        % make depend
    462423        % make libkernel.a
     
    464425        % make
    465426
    466 ‚±‚±‚ŁCmake cleankernel‚́CƒJ[ƒlƒ‹ƒ‰ƒCƒuƒ‰ƒŠ‚𐶐¬‚·‚邽‚ß‚Ì’†ŠÔƒtƒ@
    467 ƒCƒ‹‚ðíœ‚·‚é‚à‚Ì‚Å‚ ‚éD‚±‚̎菇‚ł́Cmake depend‚É‚æ‚èƒJ[ƒlƒ‹ƒ‰ƒC
    468 ƒuƒ‰ƒŠ‚ÉŠÖ‚·‚éˆË‘¶ŠÖŒW‚𐶐¬‚µ‚È‚¢‚½‚߁CƒJ[ƒlƒ‹‚̃\[ƒXƒR[ƒh‚ðC³‚µ
    469 ‚½ê‡‚ɂ́C•K‚¸make cleankerneli‚Ü‚½‚́Cmake cleanj‚µ‚Ä‚©‚çCmake
    470 libkernel.a‚·‚é•K—v‚ª‚ ‚é‚Ì‚Å’ˆÓ‚·‚邱‚ƁD
    471 
    472 ‚È‚¨Cmake realclean‚·‚é‚ƁCmake depend‚Æmake‚É‚æ‚萶¬‚µ‚½ƒtƒ@ƒCƒ‹‚ð‚·
    473 ‚ׂč폜‚·‚éD‚»‚ê‚ɑ΂µ‚āCmake clean‚ł́Cmake depend‚É‚æ‚萶¬‚µ‚½ˆË
    474 ‘¶ŠÖŒWƒtƒ@ƒCƒ‹‚͍폜‚µ‚È‚¢D
    475 
    476 
    477 ‚SDƒfƒBƒŒƒNƒgƒŠ\¬Eƒtƒ@ƒCƒ‹\¬
    478 
    479 4.1. ”z•zƒpƒbƒP[ƒW‚̃fƒBƒŒƒNƒgƒŠ\¬
    480 
    481         include/                ƒAƒvƒŠƒP[ƒVƒ‡ƒ“Œü‚¯ƒwƒbƒ_ƒtƒ@ƒCƒ‹
    482         kernel/                 ƒJ[ƒlƒ‹ƒ\[ƒXƒtƒ@ƒCƒ‹
    483         syssvc/                 ƒVƒXƒeƒ€ƒT[ƒrƒXƒwƒbƒ_ƒtƒ@ƒCƒ‹Cƒ\[ƒXƒtƒ@ƒCƒ‹
    484         target/                 ƒ^[ƒQƒbƒgˆË‘¶•”
    485         arch/                   ƒ^[ƒQƒbƒgˆË‘¶•”‚Ì‹¤’Ê•”•ª
    486                 gcc/            GCCŠJ”­ŠÂ‹«ˆË‘¶•”
    487         pdic/                   PDICiƒfƒoƒCƒXƒhƒ‰ƒCƒo‚ÌOS”ñˆË‘¶•”•ªj
    488         utils/                  ƒ†[ƒeƒBƒŠƒeƒBƒvƒƒOƒ‰ƒ€
    489         sample/                 ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚ÆMakefile
    490         doc/                    ƒhƒLƒ
    491 ƒƒ“ƒg
    492         extension/              Šg’£ƒpƒbƒP[ƒW
    493 
    494 4.2. ƒ^[ƒQƒbƒg”ñˆË‘¶•”‚̃tƒ@ƒCƒ‹\¬
    495 
    496 ƒ^[ƒQƒbƒg”ñˆË‘¶•”iƒeƒXƒgƒvƒƒOƒ‰ƒ€‚ÆŠg’£ƒpƒbƒP[ƒW‚͏œ‚­j‚ÌŠeƒtƒ@ƒC
    497 ƒ‹‚ÌŠT—v‚ÍŽŸ‚Ì’Ê‚èD
    498 
    499         README.txt                                      TOPPERS/SSPƒJ[ƒlƒ‹‚ÌŠÈ’P‚ȏЉî
    500         configure                                       ƒRƒ“ƒtƒBƒMƒ
    501 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒgiGNUŠJ”­ŠÂ‹«—pj
    502         MANIFEST                                        ŒÂ•ÊƒpƒbƒP[ƒW‚̃tƒ@ƒCƒ‹ƒŠƒXƒg
     427ここで,make cleankernelは,カーネルライブラリを生成するための中間ファ
     428イルを削除するものである.この手順では,make dependによりカーネルライ
     429ブラリに関する依存関係を生成しないため,カーネルのソースコードを修正し
     430た場合には,必ずmake cleankernel(または,make clean)してから,make
     431libkernel.aする必要があるので注意すること.
     432
     433なお,make realcleanすると,make dependとmakeにより生成したファイルをす
     434べて削除する.それに対して,make cleanでは,make dependにより生成した依
     435存関係ファイルは削除しない.
     436
     437
     4384.ディレクトリ構成・ファイル構成
     439
     4404.1. 配布パッケージのディレクトリ構成
     441
     442        include/                アプリケーション向けヘッダファイル
     443        kernel/                 カーネルソースファイル
     444        syssvc/                 システムサービスヘッダファイル,ソースファイル
     445        target/                 ターゲット依存部
     446        arch/                   ターゲット依存部の共通部分
     447                gcc/            GCC開発環境依存部
     448        pdic/                   PDIC(デバイスドライバのOS非依存部分)
     449        utils/                  ユーティリティプログラム
     450        sample/                 サンプルプログラムとMakefile
     451        doc/                    ドキュメント
     452        extension/              拡張パッケージ
     453
     4544.2. ターゲット非依存部のファイル構成
     455
     456ターゲット非依存部(テストプログラムと拡張パッケージは除く)の各ファイ
     457ルの概要は次の通り.
     458
     459        README.txt                                      TOPPERS/SSPカーネルの簡単な紹介
     460        configure                                       コンフィギュレーションスクリプト(GNU開発環境用)
     461        MANIFEST                                        個別パッケージのファイルリスト
    503462
    504463        include/
    505                 kernel.h                                SSPƒJ[ƒlƒ‹‚ðŽg—p‚·‚邽‚ß‚Ì’è‹`
    506                 sil.h                                   ƒVƒXƒeƒ€ƒCƒ“ƒ^ƒtƒF[ƒXƒŒƒCƒ„‚ðŽg—p‚·‚邽‚ß‚Ì’è‹`
    507                 t_stddef.h                              TOPPERS‹¤’ʃwƒbƒ_ƒtƒ@ƒCƒ‹
    508                 itron.h                                 ITRONŽd—l‹¤’Ê‹K’è‚̃f[ƒ^Œ^E’萔Eƒ}ƒNƒ
     464                kernel.h                                SSPカーネルを使用するための定義
     465                sil.h                                   システムインタフェースレイヤを使用するための定義
     466                t_stddef.h                              TOPPERS共通ヘッダファイル
     467                itron.h                                 ITRON仕様共通規定のデータ型・定数・マクロ
    509468
    510469        kernel/
    511                 Makefile.kernel                 ƒJ[ƒlƒ‹‚̃tƒ@ƒCƒ‹\¬‚Ì’è‹`
    512                 kernel_impl.h                   ƒJ[ƒlƒ‹ŽÀ‘•—p•W€ƒwƒbƒ_ƒtƒ@ƒCƒ‹
    513                 kernel_int.h                    kernel_cfg.c—p‚̃wƒbƒ_ƒtƒ@ƒCƒ‹
    514                 kernel_rename.def               ƒJ[ƒlƒ‹‚Ì“à•”Ž¯•Ê–¼‚̃Šƒl[ƒ€’è‹`
    515                 kernel_rename.h                 ƒJ[ƒlƒ‹‚Ì“à•”Ž¯•Ê–¼‚̃Šƒl[ƒ€
    516                 kernel_unrename.h               ƒJ[ƒlƒ‹‚Ì“à•”Ž¯•Ê–¼‚̃Šƒl[ƒ€‰ðœ     
    517                 kernel_api.csv                  ƒRƒ“ƒtƒBƒMƒ
    518 ƒŒ[ƒ^‚̐ÓIAPIƒe[ƒuƒ‹
    519                 kernel_def.csv                  ƒRƒ“ƒtƒBƒMƒ
    520 ƒŒ[ƒ^‚Ì’lŽæ“¾ƒVƒ“ƒ{ƒ‹ƒe[ƒuƒ‹
    521                 kernel.tf                               ƒRƒ“ƒtƒBƒMƒ
    522 ƒŒ[ƒ^‚̃pƒX2‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹
    523                 kernel_check.tf                 ƒRƒ“ƒtƒBƒMƒ
    524 ƒŒ[ƒ^‚̃pƒX3‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹
    525                 allfunc.h                               ‚·‚ׂĂ̊֐”‚ðƒRƒ“ƒpƒCƒ‹‚·‚邽‚ß‚Ì’è‹`
    526                 check.h                                 ƒGƒ‰[ƒ`ƒFƒbƒN—pƒ}ƒNƒ
    527                 startup.c                               ƒJ[ƒlƒ‹‚̏‰Šú‰»‚ƏI—¹ˆ—
    528                 task.h                                  ƒ^ƒXƒN‘€ìƒ‹[ƒ`ƒ“ŠÖ˜A‚Ì’è‹`
    529                 task.c                                  ƒ^ƒXƒN‘€ìƒ‹[ƒ`ƒ“
    530                 task_manage.c                   ƒ^ƒXƒNŠÇ—‹@”\
    531                 sys_manage.c                    ƒVƒXƒeƒ€ó‘ÔŠÇ—‹@”\
    532                 interrupt.h                             Š„ž‚ÝŠÇ—‹@”\ŠÖ˜A‚Ì’è‹`
    533                 interrupt.c                             Š„ž‚ÝŠÇ—‹@”\
    534                 exception.h                             CPU—áŠOŠÇ—‹@”\ŠÖ˜A‚Ì’è‹`
    535                 exception.c                             CPU—áŠOŠÇ—‹@”\
    536                 queue.h                                 ƒLƒ
    537 [‘€ìƒ‰ƒCƒuƒ‰ƒŠ‚ðŽg—p‚·‚邽‚ß‚Ì’è‹`
     470                Makefile.kernel                 カーネルのファイル構成の定義
     471                kernel_impl.h                   カーネル実装用標準ヘッダファイル
     472                kernel_int.h                    kernel_cfg.c用のヘッダファイル
     473                kernel_rename.def               カーネルの内部識別名のリネーム定義
     474                kernel_rename.h                 カーネルの内部識別名のリネーム
     475                kernel_unrename.h               カーネルの内部識別名のリネーム解除       
     476                kernel_api.csv                  コンフィギュレータの静的APIテーブル
     477                kernel_def.csv                  コンフィギュレータの値取得シンボルテーブル
     478                kernel.tf                               コンフィギュレータのパス2のテンプレートファイル
     479                kernel_check.tf                 コンフィギュレータのパス3のテンプレートファイル
     480                allfunc.h                               すべての関数をコンパイルするための定義
     481                check.h                                 エラーチェック用マクロ
     482                startup.c                               カーネルの初期化と終了処理
     483                task.h                                  タスク操作ルーチン関連の定義
     484                task.c                                  タスク操作ルーチン
     485                task_manage.c                   タスク管理機能
     486                sys_manage.c                    システム状態管理機能
     487                interrupt.h                             割込み管理機能関連の定義
     488                interrupt.c                             割込み管理機能
     489                exception.h                             CPU例外管理機能関連の定義
     490                exception.c                             CPU例外管理機能
     491                queue.h                                 キュー操作ライブラリを使用するための定義
    538492
    539493        syssvc/
    540                 banner.h                                ƒJ[ƒlƒ‹‹N“®ƒƒbƒZ[ƒW‚̏o—Í‚Ì‚½‚ß‚Ì’è‹`
    541                 banner.c                                ƒJ[ƒlƒ‹‹N“®ƒƒbƒZ[ƒW‚̏o—Í
    542                 banner.cfg                              ƒJ[ƒlƒ‹‹N“®ƒƒbƒZ[ƒW‚̏o—͂̃Rƒ“ƒtƒBƒMƒ
    543 ƒŒ[
    544                                                                 ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹
    545                 serial.h                                ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚ðŽg—p‚·‚邽‚ß‚Ì’è‹`
    546                 serial.c                                ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo
    547                 serial.cfg                              ƒVƒŠƒAƒ‹ƒhƒ‰ƒCƒo‚̃Rƒ“ƒtƒBƒMƒ
    548 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹
    549                 syssvc_def.csv                  ƒVƒXƒeƒ€ƒT[ƒrƒX‚̃Rƒ“ƒtƒBƒMƒ
    550 ƒŒ[ƒVƒ‡ƒ“‚̍ۂɕK—v‚È
    551                                                                 ƒRƒ“ƒtƒBƒMƒ
    552 ƒŒ[ƒ^‚Ì’lŽæ“¾ƒVƒ“ƒ{ƒ‹ƒe[ƒuƒ‹
     494                banner.h                                カーネル起動メッセージの出力のための定義
     495                banner.c                                カーネル起動メッセージの出力
     496                banner.cfg                              カーネル起動メッセージの出力のコンフィギュレー
     497                                                                ションファイル
     498                serial.h                                シリアルインタフェースドライバを使用するための定義
     499                serial.c                                シリアルインタフェースドライバ
     500                serial.cfg                              シリアルドライバのコンフィギュレーションファイル
     501                syssvc_def.csv                  システムサービスのコンフィギュレーションの際に必要な
     502                                                                コンフィギュレータの値取得シンボルテーブル
    553503
    554504        arch/gcc/
    555                 MANIFEST                                ŒÂ•ÊƒpƒbƒP[ƒW‚̃tƒ@ƒCƒ‹ƒŠƒXƒg
    556                 tool_stddef.h                   t_stddef.h‚ÌŠJ”­ŠÂ‹«ˆË‘¶•”iGCC—pj
     505                MANIFEST                                個別パッケージのファイルリスト
     506                tool_stddef.h                   t_stddef.hの開発環境依存部(GCC用)
    557507
    558508        utils/
    559                 applyrename                             ƒtƒ@ƒCƒ‹‚ɃŠƒl[ƒ€‚ð“K—p
    560                 genrename                               ƒŠƒl[ƒ€ƒwƒbƒ_ƒtƒ@ƒCƒ‹‚̐¶¬
    561                 makedep                                 ˆË‘¶ŠÖŒWƒŠƒXƒg‚̐¶¬iGNUŠJ”­ŠÂ‹«—pj
    562                 makerelease                             ƒŠƒŠ[ƒXƒpƒbƒP[ƒW‚̐¶¬
     509                applyrename                             ファイルにリネームを適用
     510                genrename                               リネームヘッダファイルの生成
     511                makedep                                 依存関係リストの生成(GNU開発環境用)
     512                makerelease                             リリースパッケージの生成
    563513
    564514        sample/
    565                 Makefile                                ƒTƒ“ƒvƒ‹‚ÌMakefileiGNUŠJ”­ŠÂ‹«—pj
    566                 sample1.h                               ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€(1)‚ÉŠÖ‚·‚é’è‹`
    567                 sample1.c                               ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€(1)
    568                 sample1.cfg                             ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€(1)‚̃Rƒ“ƒtƒBƒMƒ
    569 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹
     515                Makefile                                サンプルのMakefile(GNU開発環境用)
     516                sample1.h                               サンプルプログラム(1)に関する定義
     517                sample1.c                               サンプルプログラム(1)
     518                sample1.cfg                             サンプルプログラム(1)のコンフィギュレーションファイル
    570519
    571520        extension/
    572                 alarm.h                                 ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹@”\ŠÖ˜A‚Ì’è‹`
    573                 alarm.c                                 ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹@”\
    574                 cyclic.h                                ŽüŠúƒnƒ“ƒhƒ‰‹@”\ŠÖ˜A‚Ì’è‹`
    575                 cyclic.c                                ŽüŠúƒnƒ“ƒhƒ‰‹@”\
    576         dataqueue.h             ƒf[ƒ^ƒLƒ
    577 [‹@”\ŠÖ˜A‚Ì’è‹`
    578         dataqueue.c             ƒf[ƒ^ƒLƒ
    579 [‹@”\
    580                 time_event.h                    ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—ŠÖ˜A‚Ì’è‹`
    581         eventflag.h             ƒCƒxƒ“ƒgƒtƒ‰ƒOŠÖ˜A‚Ì’è‹`
    582         eventflag.c             ƒCƒxƒ“ƒgƒtƒ‰ƒO‹@”\
    583                 time_event.c                    ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—
    584                 time_manage.c                   ƒVƒXƒeƒ€ŽžŠÇ—‹@”\
    585                 MANIFEST                                Šg’£ƒpƒbƒP[ƒW‚̃tƒ@ƒCƒ‹ƒŠƒXƒg
     521                alarm.h                                 アラームハンドラ機能関連の定義
     522                alarm.c                                 アラームハンドラ機能
     523                cyclic.h                                周期ハンドラ機能関連の定義
     524                cyclic.c                                周期ハンドラ機能
     525        dataqueue.h             データキュー機能関連の定義
     526        dataqueue.c             データキュー機能
     527                time_event.h                    タイムイベント管理関連の定義
     528        eventflag.h             イベントフラグ関連の定義
     529        eventflag.c             イベントフラグ機能
     530                time_event.c                    タイムイベント管理
     531                time_manage.c                   システム時刻管理機能
     532                MANIFEST                                拡張パッケージのファイルリスト
    586533
    587534        doc/
    588                 user.txt                                ƒ†[ƒU[ƒYƒ}ƒjƒ
    589 ƒAƒ‹
    590                 ssp_spec.txt                    TOPPERS/SSPƒJ[ƒlƒ‹‚ÌŽd—lŠT—v
    591                 extension.txt                   ‹@”\Šg’£Eƒ`ƒ
    592 [ƒjƒ“ƒOƒKƒCƒh
    593                 porting.txt                             ƒ^[ƒQƒbƒgˆË‘¶•” ƒ|[ƒeƒBƒ“ƒOƒKƒCƒh
    594                 configurator.txt                ƒRƒ“ƒtƒBƒMƒ
    595 ƒŒ[ƒ^Žd—l
    596                 version.txt                             •ÏX—š—ð
    597 
    598 
    599 ‚TDƒRƒ“ƒtƒBƒMƒ
    600 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ÌŽg‚¢•û
    601 
    602 ƒRƒ“ƒtƒBƒMƒ
    603 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒgiconfigurej‚́CSSPƒJ[ƒlƒ‹‚¨‚æ‚уAƒv
    604 ƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚ð\’z‚·‚邽‚ß‚É•K—v‚ÈŠî–{“I‚ȃRƒ“ƒtƒBƒMƒ
    605 ƒŒ[ƒVƒ‡
    606 ƒ“‚ðs‚¤‚½‚߂̃vƒƒOƒ‰ƒ€‚Å‚ ‚éD
    607 
    608 SSPƒJ[ƒlƒ‹‚ð—p‚¢‚ăAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðì¬‚·‚éê‡‚ɂ́C‚Ü‚¸ƒIƒuƒWƒFƒNƒg
    609 ƒtƒ@ƒCƒ‹‚ð’u‚­ƒfƒBƒŒƒNƒgƒŠ‚ðì¬‚µC‚»‚̃fƒBƒŒƒNƒgƒŠ‚ŃRƒ“ƒtƒBƒMƒ
    610 ƒŒ[
    611 ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ðŽÀs‚·‚éDƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚ð’u‚­ƒfƒBƒŒƒNƒgƒŠ‚̏ê
    612 Š‚Æ–¼Ì‚́C”CˆÓ‚ÉŒˆ‚ß‚Ä‚æ‚¢D
    613 
    614 ƒRƒ“ƒtƒBƒMƒ
    615 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ɑ΂·‚éƒIƒvƒVƒ‡ƒ“‚ÍŽŸ‚Ì’Ê‚èD
    616 
    617         -T <ƒ^[ƒQƒbƒg—ªÌ>
    618                 ƒ^[ƒQƒbƒgƒVƒXƒeƒ€‚Ì–¼Ì‚ðCtargetƒfƒBƒŒƒNƒgƒŠ‚̉º‚É’u‚©‚ê‚Ä‚¢
    619                 ‚éƒ^[ƒQƒbƒgˆË‘¶•”ƒfƒBƒŒƒNƒgƒŠ‚Ì–¼Ì‚ÅŽw’è‚·‚éi•K{jD
    620 
    621         -A <ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€–¼>
    622                 ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚Ì–¼Ì‚ðŽw’è‚·‚éDÈ—ª‚µ‚½ê‡‚ɂ́C
    623                 ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€isample1j‚Æ‚È‚éD
    624 
    625         -a <ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃fƒBƒŒƒNƒgƒŠ–¼>
    626                 ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚̃\[ƒXƒtƒ@ƒCƒ‹iƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    627 
    628                 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ðœ‚­j‚ð’u‚¢‚½ƒfƒBƒŒƒNƒgƒŠ–¼‚ðŽw’è‚·‚éDÈ
    629                 —ª‚µ‚½ê‡‚ɂ́CƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚ð’u‚­ƒfƒBƒŒƒNƒgƒŠ‚É’u‚©‚ê
    630                 ‚Ä‚¢‚邱‚Æ‚ð‰¼’è‚·‚éDƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    631 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚́C
    632                 ƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚ð’u‚­ƒfƒBƒŒƒNƒgƒŠ‚É’u‚­‚±‚ƁD
    633 
    634         -U <ƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹–¼>
    635                 ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚̃ƒCƒ“‚̃IƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹i-A
    636                 ‚ÅŽw’肵‚½ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€–¼‚É".o"‚ð•t‰Á‚µ‚½‚à‚́jˆÈ
    637                 ŠO‚ɁCƒŠƒ“ƒN‚·‚ׂ«ƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚Ì–¼Ì‚ðC".o"‚ð•t‰Á‚µ‚½
    638                 Œ`‚ÅŽw’è‚·‚éD""‚ň͂ނ±‚Æ‚É‚æ‚Á‚āC•¡”‚̃tƒ@ƒCƒ‹‚ðŽw’è‚·‚邱
    639                 ‚Æ‚à‰Â”\‚Å‚ ‚éi-UƒIƒvƒVƒ‡ƒ“‚𕡐”Žg‚Á‚Ä‚Í‚È‚ç‚È‚¢jD
    640 
    641         -L <ƒJ[ƒlƒ‹ƒ‰ƒCƒuƒ‰ƒŠ‚̃fƒBƒŒƒNƒgƒŠ–¼>
    642                 Ž–‘O‚ɍ\’z‚µ‚½ƒJ[ƒlƒ‹ƒ‰ƒCƒuƒ‰ƒŠilibkernel.aj‚ð—p‚¢‚āCƒAƒvƒŠ
    643                 ƒP[ƒVƒ‡ƒ“‚Ì‚Ý‚ð\’z‚·‚éê‡‚ɂ́C‚±‚̃IƒvƒVƒ‡ƒ“‚ɃJ[ƒlƒ‹ƒ‰ƒC
    644                 ƒuƒ‰ƒŠ‚Ì’u‚©‚ꂽƒfƒBƒŒƒNƒgƒŠ–¼‚ðŽw’è‚·‚éD‚±‚̃IƒvƒVƒ‡ƒ“‚ÌŽg—p
    645                 —á‚ɂ‚¢‚ẮCu3.5 ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ƃJ[ƒlƒ‹‚ð•ÊX‚ɍ\’z‚·‚é
    646                 •û–@v‚̐߂ðŽQÆ‚·‚邱‚ƁD
     535                user.txt                                ユーザーズマニュアル
     536                ssp_spec.txt                    TOPPERS/SSPカーネルの仕様概要
     537                extension.txt                   機能拡張・チューニングガイド
     538                porting.txt                             ターゲット依存部 ポーティングガイド
     539                configurator.txt                コンフィギュレータ仕様
     540                version.txt                             変更履歴
     541
     542
     5435.コンフィギュレーションスクリプトの使い方
     544
     545コンフィギュレーションスクリプト(configure)は,SSPカーネルおよびアプ
     546リケーションプログラムを構築するために必要な基本的なコンフィギュレーショ
     547ンを行うためのプログラムである.
     548
     549SSPカーネルを用いてアプリケーションを作成する場合には,まずオブジェクト
     550ファイルを置くディレクトリを作成し,そのディレクトリでコンフィギュレー
     551ションスクリプトを実行する.オブジェクトファイルを置くディレクトリの場
     552所と名称は,任意に決めてよい.
     553
     554コンフィギュレーションスクリプトに対するオプションは次の通り.
     555
     556        -T <ターゲット略称>
     557                ターゲットシステムの名称を,targetディレクトリの下に置かれてい
     558                るターゲット依存部ディレクトリの名称で指定する(必須).
     559
     560        -A <アプリケーションプログラム名>
     561                アプリケーションプログラムの名称を指定する.省略した場合には,
     562                サンプルプログラム(sample1)となる.
     563
     564        -a <アプリケーションのディレクトリ名>
     565                アプリケーションプログラムのソースファイル(システムコンフィギュ
     566                レーションファイルを除く)を置いたディレクトリ名を指定する.省
     567                略した場合には,オブジェクトファイルを置くディレクトリに置かれ
     568                ていることを仮定する.システムコンフィギュレーションファイルは,
     569                オブジェクトファイルを置くディレクトリに置くこと.
     570
     571        -U <オブジェクトファイル名>
     572                アプリケーションプログラムのメインのオブジェクトファイル(-A
     573                で指定したアプリケーションプログラム名に".o"を付加したもの)以
     574                外に,リンクすべきオブジェクトファイルの名称を,".o"を付加した
     575                形で指定する.""で囲むことによって,複数のファイルを指定するこ
     576                とも可能である(-Uオプションを複数使ってはならない).
     577
     578        -L <カーネルライブラリのディレクトリ名>
     579                事前に構築したカーネルライブラリ(libkernel.a)を用いて,アプリ
     580                ケーションのみを構築する場合には,このオプションにカーネルライ
     581                ブラリの置かれたディレクトリ名を指定する.このオプションの使用
     582                例については,「3.5 アプリケーションとカーネルを別々に構築する
     583                方法」の節を参照すること.
    647584
    648585        -f
    649                 ƒJ[ƒlƒ‹‚ðŠÖ”’PˆÊ‚ŃRƒ“ƒpƒCƒ‹‚µƒ‰ƒCƒuƒ‰ƒŠ‰»‚·‚éê‡‚ɁC‚±‚̃I
    650                 ƒvƒVƒ‡ƒ“‚ðŽw’è‚·‚éD‚±‚̃IƒvƒVƒ‡ƒ“‚ÌŽg—p—á‚ɂ‚¢‚ẮCu3.4 ƒJ[
    651                 ƒlƒ‹‚ðŠÖ”’PˆÊ‚щƒCƒuƒ‰ƒŠ‰»‚·‚é•û–@v‚̐߂ðŽQÆ‚·‚邱‚ƁD
    652 
    653         -D <SSPƒJ[ƒlƒ‹‚̃\[ƒXƒfƒBƒŒƒNƒgƒŠ–¼>
    654                 SSPƒJ[ƒlƒ‹‚̃\[ƒXƒtƒ@ƒCƒ‹‚ð’u‚¢‚½ƒfƒBƒŒƒNƒgƒŠ–¼‚ðŽw’è‚·‚éDÈ
    655                 —ª‚µ‚½ê‡‚ɂ́Cconfigure‚Ì’u‚©‚ê‚Ä‚¢‚éƒfƒBƒŒƒNƒgƒŠ‚Æ‚È‚éD
    656 
    657         -l <ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê>
    658                 ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚̃vƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ðŽw’è‚·‚éDŒ»Žž
    659                 “_‚ł́Cc‚Æc++‚Ì‚Ý‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚éD
    660 
    661         -t <ƒeƒ“ƒvƒŒ[ƒgƒfƒBƒŒƒNƒgƒŠ–¼>
    662                 Makefile‚âƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚̃eƒ“ƒvƒŒ[ƒg‚Ì’u‚©‚ꂽƒfƒBƒŒƒNƒg
    663                 ƒŠ–¼‚ðŽw’è‚·‚éDÈ—ª‚µ‚½ê‡‚ɂ́CSSPƒJ[ƒlƒ‹‚̃\[ƒXƒtƒ@ƒCƒ‹‚ð
    664                 ’u‚¢‚½ƒfƒBƒŒƒNƒgƒŠ‚̉º‚ÌsampleƒfƒBƒŒƒNƒgƒŠ‚Æ‚È‚éD
    665 
    666         -m <ƒeƒ“ƒvƒŒ[ƒgMakefile–¼>
    667                 Makefile‚̃eƒ“ƒvƒŒ[ƒg‚Æ‚·‚éƒtƒ@ƒCƒ‹–¼‚ðŽw’è‚·‚éDÈ—ª‚µ‚½ê‡
    668                 ‚ɂ́CMakefile‚Æ‚È‚éD
    669 
    670         -d <ŽÀsŠÂ‹«–¼>
    671                 ƒ^[ƒQƒbƒgƒVƒXƒeƒ€ã‚ł̃vƒƒOƒ‰ƒ€‚ÌŽÀsŠÂ‹«i‚È‚¢‚µ‚́Cƒfƒoƒb
    672                 ƒOŠÂ‹«j‚Ì–¼Ì‚ðŽw’è‚·‚éD‚±‚̃IƒvƒVƒ‡ƒ“‚ðŽw’è‚·‚é‚ƁCŽÀsŠÂ‹«
    673                 ‚ðŽw’è‚·‚éƒVƒ“ƒ{ƒ‹iTOPPERS_<ƒfƒoƒbƒOŠÂ‹«–¼>j‚ªƒ}ƒNƒ’è‹`‚³‚ê
    674                 ‚éDÈ—ª‚µ‚½ê‡‚ɂ́CŽÀsŠÂ‹«‚ðŽw’è‚·‚éƒVƒ“ƒ{ƒ‹‚̓}ƒNƒ’è‹`‚³
    675                 ‚ê‚È‚¢D
     586                カーネルを関数単位でコンパイルしライブラリ化する場合に,このオ
     587                プションを指定する.このオプションの使用例については,「3.4 カー
     588                ネルを関数単位でライブラリ化する方法」の節を参照すること.
     589
     590        -D <SSPカーネルのソースディレクトリ名>
     591                SSPカーネルのソースファイルを置いたディレクトリ名を指定する.省
     592                略した場合には,configureの置かれているディレクトリとなる.
     593
     594        -l <プログラミング言語>
     595                アプリケーションプログラムのプログラミング言語を指定する.現時
     596                点では,cとc++のみをサポートしている.
     597
     598        -t <テンプレートディレクトリ名>
     599                Makefileやサンプルプログラムのテンプレートの置かれたディレクト
     600                リ名を指定する.省略した場合には,SSPカーネルのソースファイルを
     601                置いたディレクトリの下のsampleディレクトリとなる.
     602
     603        -m <テンプレートMakefile名>
     604                Makefileのテンプレートとするファイル名を指定する.省略した場合
     605                には,Makefileとなる.
     606
     607        -d <実行環境名>
     608                ターゲットシステム上でのプログラムの実行環境(ないしは,デバッ
     609                グ環境)の名称を指定する.このオプションを指定すると,実行環境
     610                を指定するシンボル(TOPPERS_<デバッグ環境名>)がマクロ定義され
     611                る.省略した場合には,実行環境を指定するシンボルはマクロ定義さ
     612                れない.
    676613
    677614        -r
    678                 ƒgƒŒ[ƒXƒƒO‹L˜^‚̃Tƒ“ƒvƒ‹ƒR[ƒh‚ð—LŒø‚É‚·‚éê‡‚ɁC‚±‚̃IƒvƒVƒ‡
    679                 ƒ“‚ðŽw’è‚·‚éD‚±‚̃IƒvƒVƒ‡ƒ“‚ÌŽg—p—á‚ɂ‚¢‚ẮCu11.5 ƒgƒŒ[ƒX
    680                 ƒƒO‹L˜^‚̃Tƒ“ƒvƒ‹ƒR[ƒh‚ÌŽg—p•û–@v‚̐߂ðŽQÆ‚·‚邱‚ƁD
    681 
    682         -p <perl‚̃pƒX–¼>
    683                 perl‚̃pƒX–¼‚ðŽw’è‚·‚éDÈ—ª‚µ‚½ê‡‚ɂ́C/usr/local/bin‚Æ
    684                 /usr/bin‚ð’Tõ‚µCperl‚̃pƒX–¼‚ðŒˆ’è‚·‚éD
    685 
    686         -g <ƒRƒ“ƒtƒBƒMƒ
    687 ƒŒ[ƒ^‚̃pƒX–¼>
    688                 ƒRƒ“ƒtƒBƒMƒ
    689 ƒŒ[ƒ^icfgj‚̃pƒX–¼‚ðŽw’è‚·‚éDÈ—ª‚µ‚½ê‡‚ɂ́C
    690                 ƒfƒtƒHƒ‹ƒg‚̃pƒX–¼iSSPƒJ[ƒlƒ‹‚̃\[ƒXƒfƒBƒŒƒNƒgƒŠ‚̉º‚Ì
    691                 cfg/cfg/cfgj‚Æ‚È‚éD
    692 
    693 ƒRƒ“ƒtƒBƒMƒ
    694 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ªs‚¤ˆ—‚ÍŽŸ‚Ì’Ê‚è‚Å‚ ‚éD
    695 
    696 (1) Makefile‚̐¶¬
    697 
    698 ƒeƒ“ƒvƒŒ[ƒgƒfƒBƒŒƒNƒgƒŠiƒfƒtƒHƒ‹ƒg‚ł́Csamplej‚©‚ç“KØ‚ÈMakefile‚ð
    699 ‘I‘ð‚µC•K—v‚ȉӏŠ‚ð‘‚«Š·‚¦‚āCMakefile‚𐶐¬‚·‚éD
    700 
    701 (2) ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚̐¶¬
    702 
    703 Žw’肵‚½ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚ªƒeƒ“ƒvƒŒ[ƒgƒfƒBƒŒƒNƒgƒŠ‚É‚ ‚éê‡C
    704 “KØ‚ȃAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚̃\[ƒXƒtƒ@ƒCƒ‹‚ð‘I‘ð‚µC•K—v‚ȉӏŠ‚ð
    705 ‘‚«Š·‚¦‚āCƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚̃\[ƒXƒtƒ@ƒCƒ‹i—Ⴆ‚΁C
    706 sample1.hCsample1.cCsample1.cfgj‚𐶐¬‚·‚éD
    707 
    708 (3) ƒRƒ“ƒtƒBƒMƒ
    709 ƒŒ[ƒ^‚ª—pˆÓ‚Å‚«‚Ä‚¢‚é‚©‚̃`ƒFƒbƒN
    710 
    711 ƒRƒ“ƒtƒBƒMƒ
    712 ƒŒ[ƒ^icfgj‚ÌŽÀsƒtƒ@ƒCƒ‹‚ª‚ ‚é‚©ƒ`ƒFƒbƒN‚µCƒtƒ@ƒCƒ‹‚ª‚È
    713 ‚¢ê‡‚ɂ́C‚»‚ÌŽ|‚ðo—Í‚·‚éD
    714 
    715 
    716 ‚UDMakefile‚̏C³•û–@
    717 
    718 ‘O‚ÌÍ‚Åà–¾‚µ‚½‚悤‚ɁCƒRƒ“ƒtƒBƒMƒ
    719 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚É—^‚¦‚éƒIƒvƒVƒ‡
    720 ƒ““™‚©‚çMakefile‚ª¶¬‚³‚ê‚邪CƒRƒ“ƒtƒBƒMƒ
    721 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚őΉž
    722 ‚Å‚«‚È‚¢ê‡‚ɂ́CMakefile‚𒼐ڏC³‚·‚é•K—v‚ª‚ ‚éD‚±‚±‚ł́CMakefile
    723 ‚Ì’†‚ŁCC³‚ª•K—v‚Æ‚È‚é‰Â”\«‚̍‚‚¢‰ÓŠ‚ɂ‚¢‚Äà–¾‚·‚éD
    724 
    725 ‚È‚¨CMakefile‚ðC³‚µ‚½Œã‚ɃRƒ“ƒtƒBƒMƒ
    726 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ðÄŽÀs‚·
    727 ‚é‚ƁCC³‚µ‚½Makefile‚ªã‘‚«‚³‚ê‚Ä‚µ‚Ü‚¤‚Ì‚Å’ˆÓ‚·‚邱‚ƁiŒÃ‚¢‚à‚Ì‚ª
    728 Makefile.bak‚É•Û‘¶‚³‚ê‚éjD
    729 
    730 6.1. Makefile‚̕ϐ”’è‹`
    731 
    732 (A) ƒ^[ƒQƒbƒg—ªÌ
    733 
    734 TARGET‚ɂ́Cƒ^[ƒQƒbƒgƒVƒXƒeƒ€‚Ì–¼Ì‚ðCtargetƒfƒBƒŒƒNƒgƒŠ‚̉º‚É’u‚©‚ê
    735 ‚Ä‚¢‚éƒ^[ƒQƒbƒgˆË‘¶•”ƒfƒBƒŒƒNƒgƒŠ‚Ì–¼Ì‚ÅŽw’è‚·‚éD‚±‚Ì’è‹`‚́C’ʏí‚́C
    736 ƒRƒ“ƒtƒBƒMƒ
    737 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ɑ΂·‚é-TƒIƒvƒVƒ‡ƒ“‚É‚æ‚ès‚¤D
    738 
    739 (B) ƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚ÌŠg’£Žq
    740 
    741 CygwinŠÂ‹«‚ŃRƒ“ƒpƒCƒ‹‚·‚鎞‚ɂ́COBJEXT‚ð"exe"‚É’è‹`‚·‚é•K—v‚ª‚ ‚éD‚±
    742 ‚ê‚́CCygwinŠÂ‹«‚ł́Cƒ[ƒhƒ‚ƒWƒ
    743 [ƒ‹‚̃tƒ@ƒCƒ‹–¼‚ÉŠg’£Žq".exe"‚ª•t‰Á
    744 ‚³‚ê‚é‚̂ɑΉž‚·‚邽‚ß‚Ì‚à‚Ì‚Å‚ ‚éDCygwinŠÂ‹«‚Å‚ ‚邱‚Æ‚ð”»’è‚Å‚«‚ê‚΁C
    745 ƒRƒ“ƒtƒBƒMƒ
    746 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ª‚±‚Ì’è‹`‚ðs‚¤D
    747 
    748 (C) ŽÀsŠÂ‹«iƒ^[ƒQƒbƒgˆË‘¶j
    749 
    750 ƒ^[ƒQƒbƒg‚É‚æ‚Á‚ẮCŽÀsŠÂ‹«‚ɑΉž‚µ‚ă^[ƒQƒbƒgˆË‘¶•”‚̃R[ƒh‚ð·‚µ
    751 Š·‚¦‚éê‡‚ª‚ ‚éD‚±‚ê‚ð‰Â”\‚É‚·‚邽‚߂ɁCŽÀsŠÂ‹«‚Ì–¼Ì‚ðDBGENV‚É’è‹`
    752 ‚µ‚Ä‚¢‚éD‚±‚Ì’è‹`‚́C’ʏí‚́CƒRƒ“ƒtƒBƒMƒ
    753 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ɑ΂·
    754 ‚é-DƒIƒvƒVƒ‡ƒ“‚É‚æ‚ès‚¤D‚ǂ̃^[ƒQƒbƒg‚ª‚Ç‚ÌŽÀsŠÂ‹«‚ɑΉž‚µ‚Ä‚¢‚é‚©
    755 ‚́Cƒ^[ƒQƒbƒgˆË‘¶•”‚̃†[ƒU[ƒYƒ}ƒjƒ
    756 ƒAƒ‹‚ðŽQÆ‚·‚邱‚ƁD
    757 
    758 (D) ƒJ[ƒlƒ‹ƒ‰ƒCƒuƒ‰ƒŠ‚̃fƒBƒŒƒNƒgƒŠ–¼
    759 
    760 KERNEL_LIB‚ɂ́CƒJ[ƒlƒ‹ƒ‰ƒCƒuƒ‰ƒŠ‚Ì’u‚©‚ꂽƒfƒBƒŒƒNƒgƒŠ–¼‚ð’è‹`‚·‚éD
    761 ‚±‚Ì’è‹`‚́C’ʏí‚́CƒRƒ“ƒtƒBƒMƒ
    762 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ɑ΂·‚é-LƒIƒvƒVƒ‡
    763 ƒ“‚É‚æ‚ès‚¤D
    764 
    765 (E) ƒJ[ƒlƒ‹‚ðŠÖ”’PˆÊ‚ŃRƒ“ƒpƒCƒ‹‚·‚é‚©‚Ç‚¤‚©
    766 
    767 KERNEL_FUNCOBJS‚́CƒJ[ƒlƒ‹‚ðŠÖ”’PˆÊ‚ŃRƒ“ƒpƒCƒ‹‚·‚éê‡‚É‚Ítrue‚É’è‹`
    768 ‚µCƒtƒ@ƒCƒ‹’PˆÊ‚ŃRƒ“ƒpƒCƒ‹‚·‚éê‡‚É‚Í–¢’è‹`‚Æ‚·‚éD‚±‚Ì’è‹`‚́C’ʏí
    769 ‚́CƒRƒ“ƒtƒBƒMƒ
    770 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ɑ΂·‚é-fƒIƒvƒVƒ‡ƒ“‚É‚æ‚ès‚¤D
    771 
    772 (F) ‹¤’ʃRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“
    773 
    774 ‚·‚ׂẴvƒƒOƒ‰ƒ€‚É‹¤’Ê‚·‚éƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“‚̒ljÁ‚ª•K—v‚ȏꍇ‚ɂ́C
    775 ‰º‚̕ϐ”‚Ì’è‹`‚ð•ÏX‚·‚éD‚»‚̃Rƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“‚ªC“Á’è‚̃^[ƒQƒbƒg
    776 ‚ŏí‚É•K—v‚ȏꍇ‚ɂ́Cƒ^[ƒQƒbƒgˆË‘¶‚Ì’è‹`‚ð“ü‚ꂽMakefile.target“™‚ðC
    777 ³‚·‚ׂ«‚Å‚ ‚éD
    778 
    779         CDEFS           ƒRƒ“ƒpƒCƒ‰‚ɑ΂·‚é-DƒIƒvƒVƒ‡ƒ“‚ð‹Lq‚·‚éD
    780         INCLUDES        ƒRƒ“ƒpƒCƒ‰‚ɑ΂·‚é-IƒIƒvƒVƒ‡ƒ“‚ð‹Lq‚·‚éD
    781         COPTS           ƒRƒ“ƒpƒCƒ‰‚ɑ΂·‚é‚»‚Ì‘¼‚̃IƒvƒVƒ‡ƒ“‚ð‹Lq‚·‚éD
    782         LDFLAGS         ƒŠƒ“ƒJ‚ɑ΂·‚éƒIƒvƒVƒ‡ƒ“‚ð‹Lq‚·‚éD
    783         LIBS            ƒ‰ƒCƒuƒ‰ƒŠƒŠƒ“ƒN‚Ì‚½‚߂̃IƒvƒVƒ‡ƒ“‚ð‹Lq‚·‚éD
    784 
    785 ’ljÁ‚̉”\«‚Ì‚ ‚éƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“‚ɂ‚¢‚ẮCu6.2 ƒRƒ“ƒpƒCƒ‹ƒIƒv
    786 ƒVƒ‡ƒ“v‚̐߂ðŽQÆ‚Ì‚±‚ƁD
    787 
    788 (G) ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€–¼
    789 
    790 APPLNAME‚ɂ́CƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€–¼‚ð’è‹`‚·‚éDƒVƒXƒeƒ€ƒRƒ“ƒtƒB
    791 ƒMƒ
    792 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹–¼‚́CAPPLNAME‚É’è‹`‚µ‚½–¼‘O‚ÉŠg’£Žq".cfg"‚ð•t‰Á
    793 ‚µ‚½–¼‘O‚Æ‚·‚éD‚Ü‚½CƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃ƒCƒ“ƒtƒ@ƒCƒ‹‚́CAPPLNAME‚É’è
    794 ‹`‚µ‚½–¼‘O‚ÉŠg’£Žq".c"‚ð•t‰Á‚µ‚½–¼‘O‚Æ‚·‚éD‚±‚Ì’è‹`‚́C’ʏí‚́CƒRƒ“ƒtƒB
    795 ƒMƒ
    796 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ɑ΂·‚é-AƒIƒvƒVƒ‡ƒ“‚É‚æ‚ès‚¤D
    797 
    798 (H) ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃fƒBƒŒƒNƒgƒŠ–¼
    799 
    800 ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃\[ƒXƒtƒ@ƒCƒ‹‚ðCƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚ð’u‚­‚Ì‚Æ‚Í•Ê
    801 ‚̃fƒBƒŒƒNƒgƒŠ‚É’u‚­ê‡‚ɂ́CAPPLDIR‚É‚»‚̃fƒBƒŒƒNƒgƒŠ–¼‚ð’è‹`‚·‚éD‚±
    802 ‚Ì’è‹`‚́C’ʏí‚́CƒRƒ“ƒtƒBƒMƒ
    803 ƒŒ[ƒVƒ‡ƒ“ƒXƒNƒŠƒvƒg‚ɑ΂·‚é-aƒIƒvƒVƒ‡ƒ“
    804 ‚É‚æ‚ès‚¤DƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃\[ƒXƒtƒ@ƒCƒ‹‚ð’u‚­ƒfƒBƒŒƒNƒgƒŠ‚ª•¡”‚ 
    805 ‚éê‡‚ɂ́CAPPL_DIR‚Ì’è‹`‚ð•ÏX‚·‚邱‚ƂőΉž‚·‚éD
    806 
    807 (I) ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃vƒƒOƒ‰ƒ€ƒtƒ@ƒCƒ‹–¼
    808 
    809 ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ª•¡”‚̃\[ƒXƒtƒ@ƒCƒ‹‚ō\¬‚³‚ê‚éê‡‚ɂ́C‚»‚̃IƒuƒWƒF
    810 ƒNƒgƒtƒ@ƒCƒ‹–¼‚ðCAPPL_ASMOBJSCAPPL_COBJSCAPPL_CXXOBJS‚É—ñ‹“‚·‚éD
    811 
    812 (J) ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃Rƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“
    813 
    814 ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃Rƒ“ƒpƒCƒ‹‚É•K—v‚ȃRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“‚âCƒAƒvƒŠƒP[
    815 ƒVƒ‡ƒ“‚ªƒ‰ƒCƒuƒ‰ƒŠ‚ð•K—v‚Æ‚·‚éê‡‚ɂ́CAPPL_CFLAGS‚¨‚æ‚ÑAPPL_LIBS‚É’è
    816 ‹`‚·‚éD
    817 
    818 (K) ƒ[ƒhƒ‚ƒWƒ
    819 [ƒ‹‚̃tƒ@ƒCƒ‹–¼
    820 
    821 •W€‚̃[ƒhƒ‚ƒWƒ
    822 [ƒ‹‚̃tƒ@ƒCƒ‹–¼‚ðOBJNAME‚É’è‹`‚·‚éDƒfƒtƒHƒ‹ƒg‚ÍSSP
    823 ‚Å‚ ‚éD
    824 
    825 (L) ƒ^[ƒQƒbƒgƒtƒ@ƒCƒ‹‚Ì’è‹`
    826 
    827 ƒ^[ƒQƒbƒg"all"‚̈ˑ¶ƒtƒ@ƒCƒ‹‚Æ‚µ‚āCƒ[ƒhƒ‚ƒWƒ
    828 [ƒ‹‚ÌŒ`Ž®‚ðŽw’è‚·‚éD
    829 ‹ï‘Ì“I‚ɂ́CELFŒ`Ž®‚ÌŽž‚Í$(OBJFILE)CƒoƒCƒiƒŠŒ`Ž®‚ÌŽž‚Í$(OBJNAME).binC
    830 ƒ‚ƒgƒ[ƒ‰ SŒ`Ž®‚ÌŽž‚Í$(OBJNAME).srec‚ðŽw’è‚·‚éD$(OBJFILE)‚́CCygwin
    831 ŠÂ‹«‚ÅOBJEXT‚ð"exe"‚É’è‹`‚µ‚½Žž‚É‚Í$(OBJNAME).exeC‚»‚¤‚Å‚È‚¢ê‡‚É‚Í
    832 $(OBJNAME)‚Æ‚È‚éD
    833 
    834 (M) makedep‚̃IƒvƒVƒ‡ƒ“‚Ì’è‹`
    835 
    836 CygwinŠÂ‹«‚Ń‹[ƒgƒfƒBƒŒƒNƒgƒŠ‚ª"cygdrive"‚Å‚È‚¢ê‡‚ɂ́Cmakedep‚Ì-RƒI
    837 ƒvƒVƒ‡ƒ“‚Ń‹[ƒgƒfƒBƒŒƒNƒgƒŠ–¼‚ð—^‚¦‚é•K—v‚ª‚ ‚éDmakedep‚̃IƒvƒVƒ‡ƒ“‚́C
    838 ŽŸ‚Ì—á‚̂悤‚ɁCMAKEDEP_OPTS‚É’è‹`‚·‚éD
     615                トレースログ記録のサンプルコードを有効にする場合に,このオプショ
     616                ンを指定する.このオプションの使用例については,「11.5 トレース
     617                ログ記録のサンプルコードの使用方法」の節を参照すること.
     618
     619        -p <perlのパス名>
     620                perlのパス名を指定する.省略した場合には,/usr/local/binと
     621                /usr/binを探索し,perlのパス名を決定する.
     622
     623        -g <コンフィギュレータのパス名>
     624                コンフィギュレータ(cfg)のパス名を指定する.省略した場合には,
     625                デフォルトのパス名(SSPカーネルのソースディレクトリの下の
     626                cfg/cfg/cfg)となる.
     627
     628コンフィギュレーションスクリプトが行う処理は次の通りである.
     629
     630(1) Makefileの生成
     631
     632テンプレートディレクトリ(デフォルトでは,sample)から適切なMakefileを
     633選択し,必要な箇所を書き換えて,Makefileを生成する.
     634
     635(2) サンプルプログラムの生成
     636
     637指定したアプリケーションプログラムがテンプレートディレクトリにある場合,
     638適切なアプリケーションプログラムのソースファイルを選択し,必要な箇所を
     639書き換えて,アプリケーションプログラムのソースファイル(例えば,
     640sample1.h,sample1.c,sample1.cfg)を生成する.
     641
     642(3) コンフィギュレータが用意できているかのチェック
     643
     644コンフィギュレータ(cfg)の実行ファイルがあるかチェックし,ファイルがな
     645い場合には,その旨を出力する.
     646
     647
     6486.Makefileの修正方法
     649
     650前の章で説明したように,コンフィギュレーションスクリプトに与えるオプショ
     651ン等からMakefileが生成されるが,コンフィギュレーションスクリプトで対応
     652できない場合には,Makefileを直接修正する必要がある.ここでは,Makefile
     653の中で,修正が必要となる可能性の高い箇所について説明する.
     654
     655なお,Makefileを修正した後にコンフィギュレーションスクリプトを再実行す
     656ると,修正したMakefileが上書きされてしまうので注意すること(古いものが
     657Makefile.bakに保存される).
     658
     6596.1. Makefileの変数定義
     660
     661(A) ターゲット略称
     662
     663TARGETには,ターゲットシステムの名称を,targetディレクトリの下に置かれ
     664ているターゲット依存部ディレクトリの名称で指定する.この定義は,通常は,
     665コンフィギュレーションスクリプトに対する-Tオプションにより行う.
     666
     667(B) オブジェクトファイルの拡張子
     668
     669Cygwin環境でコンパイルする時には,OBJEXTを"exe"に定義する必要がある.こ
     670れは,Cygwin環境では,ロードモジュールのファイル名に拡張子".exe"が付加
     671されるのに対応するためのものである.Cygwin環境であることを判定できれば,
     672コンフィギュレーションスクリプトがこの定義を行う.
     673
     674(C) 実行環境(ターゲット依存)
     675
     676ターゲットによっては,実行環境に対応してターゲット依存部のコードを差し
     677換える場合がある.これを可能にするために,実行環境の名称をDBGENVに定義
     678している.この定義は,通常は,コンフィギュレーションスクリプトに対す
     679る-Dオプションにより行う.どのターゲットがどの実行環境に対応しているか
     680は,ターゲット依存部のユーザーズマニュアルを参照すること.
     681
     682(D) カーネルライブラリのディレクトリ名
     683
     684KERNEL_LIBには,カーネルライブラリの置かれたディレクトリ名を定義する.
     685この定義は,通常は,コンフィギュレーションスクリプトに対する-Lオプショ
     686ンにより行う.
     687
     688(E) カーネルを関数単位でコンパイルするかどうか
     689
     690KERNEL_FUNCOBJSは,カーネルを関数単位でコンパイルする場合にはtrueに定義
     691し,ファイル単位でコンパイルする場合には未定義とする.この定義は,通常
     692は,コンフィギュレーションスクリプトに対する-fオプションにより行う.
     693
     694(F) 共通コンパイルオプション
     695
     696すべてのプログラムに共通するコンパイルオプションの追加が必要な場合には,
     697下の変数の定義を変更する.そのコンパイルオプションが,特定のターゲット
     698で常に必要な場合には,ターゲット依存の定義を入れたMakefile.target等を修
     699正すべきである.
     700
     701        CDEFS           コンパイラに対する-Dオプションを記述する.
     702        INCLUDES        コンパイラに対する-Iオプションを記述する.
     703        COPTS           コンパイラに対するその他のオプションを記述する.
     704        LDFLAGS         リンカに対するオプションを記述する.
     705        LIBS            ライブラリリンクのためのオプションを記述する.
     706
     707追加の可能性のあるコンパイルオプションについては,「6.2 コンパイルオプ
     708ション」の節を参照のこと.
     709
     710(G) アプリケーションプログラム名
     711
     712APPLNAMEには,アプリケーションプログラム名を定義する.システムコンフィ
     713ギュレーションファイル名は,APPLNAMEに定義した名前に拡張子".cfg"を付加
     714した名前とする.また,アプリケーションのメインファイルは,APPLNAMEに定
     715義した名前に拡張子".c"を付加した名前とする.この定義は,通常は,コンフィ
     716ギュレーションスクリプトに対する-Aオプションにより行う.
     717
     718(H) アプリケーションのディレクトリ名
     719
     720アプリケーションのソースファイルを,オブジェクトファイルを置くのとは別
     721のディレクトリに置く場合には,APPLDIRにそのディレクトリ名を定義する.こ
     722の定義は,通常は,コンフィギュレーションスクリプトに対する-aオプション
     723により行う.アプリケーションのソースファイルを置くディレクトリが複数あ
     724る場合には,APPL_DIRの定義を変更することで対応する.
     725
     726(I) アプリケーションのプログラムファイル名
     727
     728アプリケーションが複数のソースファイルで構成される場合には,そのオブジェ
     729クトファイル名を,APPL_ASMOBJS,APPL_COBJS,APPL_CXXOBJSに列挙する.
     730
     731(J) アプリケーションのコンパイルオプション
     732
     733アプリケーションのコンパイルに必要なコンパイルオプションや,アプリケー
     734ションがライブラリを必要とする場合には,APPL_CFLAGSおよびAPPL_LIBSに定
     735義する.
     736
     737(K) ロードモジュールのファイル名
     738
     739標準のロードモジュールのファイル名をOBJNAMEに定義する.デフォルトはSSP
     740である.
     741
     742(L) ターゲットファイルの定義
     743
     744ターゲット"all"の依存ファイルとして,ロードモジュールの形式を指定する.
     745具体的には,ELF形式の時は$(OBJFILE),バイナリ形式の時は$(OBJNAME).bin,
     746モトローラ S形式の時は$(OBJNAME).srecを指定する.$(OBJFILE)は,Cygwin
     747環境でOBJEXTを"exe"に定義した時には$(OBJNAME).exe,そうでない場合には
     748$(OBJNAME)となる.
     749
     750(M) makedepのオプションの定義
     751
     752Cygwin環境でルートディレクトリが"cygdrive"でない場合には,makedepの-Rオ
     753プションでルートディレクトリ名を与える必要がある.makedepのオプションは,
     754次の例のように,MAKEDEP_OPTSに定義する.
    839755
    840756MAKEDEP_OPTS = -R cygdrive
    841757
    842 6.2. ƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“
    843 
    844 SSPƒJ[ƒlƒ‹‚̃R[ƒh’†‚ɂ́Cassertƒ}ƒNƒ‚ªŽg‚í‚ê‚Ä‚¢‚éDassertƒ}ƒNƒ‚́C
    845 NDEBUG‚ð’è‹`‚·‚邱‚ƂŁCƒIƒuƒWƒFƒNƒgƒR[ƒh’†‚©‚çÁ‚·‚±‚Æ‚ª‚Å‚«‚éDƒJ[
    846 ƒlƒ‹‚̃fƒoƒbƒO‚ªI—¹‚·‚ê‚΁C-DNDEBUG‚ðŽw’肵‚ăRƒ“ƒpƒCƒ‹‚µ‚½•û‚ªŒø—¦‚ª
    847 ‚æ‚­‚È‚éD
    848 
    849 ƒ^[ƒQƒbƒgˆË‘¶•”‚É‚¨‚¢‚āCƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“‚É-WerroriŒx‚ðƒGƒ‰[ˆµ
    850 ‚¢‚·‚éj‚ðŽw’肵‚Ä‚¢‚éê‡‚ª‚ ‚éD‚»‚̂悤‚ȃ^[ƒQƒbƒg‚É‚¨‚¢‚āCƒAƒvƒŠ
    851 ƒP[ƒVƒ‡ƒ“‚ÅŒx‚ª”ð‚¯‚ç‚ê‚È‚¢ê‡‚ɂ́Cƒ^[ƒQƒbƒgˆË‘¶•”‚ðC³‚µ‚ăRƒ“
    852 ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“‚ðíœ‚·‚é•K—v‚ª‚ ‚éD
    853 
    854 
    855 ‚VDƒRƒ“ƒtƒBƒMƒ
    856 ƒŒ[ƒ^‚ÌŽg‚¢•û
    857 
    858 ƒRƒ“ƒtƒBƒMƒ
    859 ƒŒ[ƒ^icfgj‚́CTOPPERSV¢‘ãƒJ[ƒlƒ‹“‡Žd—l‘‚Ì2.12.5ß
    860 ‚Ì‹Lq‚Ì’Ê‚èC3‚‚̃pƒX‚ō\¬‚³‚ê‚éD
    861 
    862 ƒRƒ“ƒtƒBƒMƒ
    863 ƒŒ[ƒ^‚́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    864 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹–¼‚ðƒpƒ‰ƒ[
    865 ƒ^‚ÉŽæ‚èCˆÈ‰º‚̃IƒvƒVƒ‡ƒ“‚ðŽ‚Âid—v‚È‚à‚̂̂݁jD
     7586.2. コンパイルオプション
     759
     760SSPカーネルのコード中には,assertマクロが使われている.assertマクロは,
     761NDEBUGを定義することで,オブジェクトコード中から消すことができる.カー
     762ネルのデバッグが終了すれば,-DNDEBUGを指定してコンパイルした方が効率が
     763よくなる.
     764
     765ターゲット依存部において,コンパイルオプションに-Werror(警告をエラー扱
     766いする)を指定している場合がある.そのようなターゲットにおいて,アプリ
     767ケーションで警告が避けられない場合には,ターゲット依存部を修正してコン
     768パイルオプションを削除する必要がある.
     769
     770
     7717.コンフィギュレータの使い方
     772
     773コンフィギュレータ(cfg)は,TOPPERS新世代カーネル統合仕様書の2.12.5節
     774の記述の通り,3つのパスで構成される.
     775
     776コンフィギュレータは,システムコンフィギュレーションファイル名をパラメー
     777タに取り,以下のオプションを持つ(重要なもののみ).
    866778
    867779        --help
    868                 ƒIƒvƒVƒ‡ƒ“‚̃ŠƒXƒg‚Æà–¾‚ð•\Ž¦‚·‚éD
    869 
    870         -vm--versionn
    871                 ƒRƒ“ƒtƒBƒMƒ
    872 ƒŒ[ƒ^‚̃o[ƒWƒ‡ƒ“‚ð•\Ž¦‚·‚éD
    873 
    874         -km--kerneln<ƒJ[ƒlƒ‹–¼>
    875                 ƒJ[ƒlƒ‹‚Ì–¼Ì‚ðŽw’è‚·‚éDƒfƒtƒHƒ‹ƒg‚ÍSSPD
    876 
    877         -pm--passn<ƒpƒX”ԍ†>
    878                 ƒpƒX”ԍ†‚ðŽw’è‚·‚éD1`3‚Ì‚¢‚¸‚ê‚©D
    879 
    880         -Im--include-pathn<ƒCƒ“ƒNƒ‹[ƒhƒpƒX–¼>
    881                 INCLUDEƒfƒBƒŒƒNƒeƒBƒu‚É‚¨‚¢‚āCƒCƒ“ƒNƒ‹[ƒh‚·‚éƒRƒ“ƒtƒBƒMƒ
    882 ƒŒ[
    883                 ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ð’T‚·ƒpƒX–¼‚ðŽw’è‚·‚éD
    884 
    885         -Tm--template-filen<ƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹–¼>
    886                 ƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚Ì–¼Ì‚ðŽw’è‚·‚éDƒpƒX2‚ƃpƒX3‚Å—LŒøD
    887 
    888         --api-table <Ã“IAPIƒe[ƒuƒ‹ƒtƒ@ƒCƒ‹–¼>
    889                 Ã“IAPIƒe[ƒuƒ‹‚̃tƒ@ƒCƒ‹–¼‚ðŽw’è‚·‚éD
    890 
    891         --cfg1-def-table <’lŽæ“¾ƒVƒ“ƒ{ƒ‹ƒe[ƒuƒ‹ƒtƒ@ƒCƒ‹–¼>
    892                 ’lŽæ“¾ƒVƒ“ƒ{ƒ‹ƒe[ƒuƒ‹‚̃tƒ@ƒCƒ‹–¼‚ðŽw’è‚·‚éD
    893 
    894         -rm--rom-imagen<ƒ[ƒhƒ‚ƒWƒ
    895 [ƒ‹–¼>
    896                 ƒ[ƒhƒ‚ƒWƒ
    897 [ƒ‹‚ðSƒŒƒR[ƒhƒtƒH[ƒ}ƒbƒg‚ÌŒ`‚É•ÏŠ·‚µ‚½ƒtƒ@ƒCƒ‹‚Ì
    898                 –¼Ì‚ðŽw’è‚·‚éDƒpƒX3‚Å‚Ì‚Ý—LŒøD
    899 
    900         -s [--symbol-table] <ƒVƒ“ƒ{ƒ‹ƒtƒ@ƒCƒ‹–¼>
    901                 ƒ[ƒhƒ‚ƒWƒ
    902 [ƒ‹’†‚ÌŠeƒVƒ“ƒ{ƒ‹‚ƃAƒhƒŒƒX‚̑Ήž•\‚ðŠÜ‚ÞƒVƒ“ƒ{ƒ‹
    903                 ƒtƒ@ƒCƒ‹‚Ì–¼Ì‚ðŽw’è‚·‚éDƒpƒX3‚Å‚Ì‚Ý—LŒøD
    904 
    905         --id-output-file <ID”ԍ†o—̓tƒ@ƒCƒ‹–¼>
    906                 SSPƒJ[ƒlƒ‹‚Å‚ÍŽg—p‚µ‚Ä‚Í‚È‚ç‚È‚¢BÚ×‚Íconfigurator.txt‚Ì
    907                 u›ƒJ[ƒlƒ‹\¬E‰Šú‰»ƒtƒ@ƒCƒ‹ikernel_cfg.cjv‚Ì(5)‚ðŽQÆ‚Ì‚±‚ƁB
    908 
    909         --id-input-file <ID”ԍ†“ü—̓tƒ@ƒCƒ‹–¼>
    910                 SSPƒJ[ƒlƒ‹‚Å‚ÍŽg—p‚µ‚Ä‚Í‚È‚ç‚È‚¢BÚ×‚Íconfigurator.txt‚Ì
    911                 u›ƒJ[ƒlƒ‹\¬E‰Šú‰»ƒtƒ@ƒCƒ‹ikernel_cfg.cjv‚Ì(5)‚ðŽQÆ‚Ì‚±‚ƁB
     780                オプションのリストと説明を表示する.
     781
     782        -v[--version]
     783                コンフィギュレータのバージョンを表示する.
     784
     785        -k[--kernel]<カーネル名>
     786                カーネルの名称を指定する.デフォルトはSSP.
     787
     788        -p[--pass]<パス番号>
     789                パス番号を指定する.1〜3のいずれか.
     790
     791        -I[--include-path]<インクルードパス名>
     792                INCLUDEディレクティブにおいて,インクルードするコンフィギュレー
     793                ションファイルを探すパス名を指定する.
     794
     795        -T[--template-file]<テンプレートファイル名>
     796                テンプレートファイルの名称を指定する.パス2とパス3で有効.
     797
     798        --api-table <静的APIテーブルファイル名>
     799                静的APIテーブルのファイル名を指定する.
     800
     801        --cfg1-def-table <値取得シンボルテーブルファイル名>
     802                値取得シンボルテーブルのファイル名を指定する.
     803
     804        -r[--rom-image]<ロードモジュール名>
     805                ロードモジュールをSレコードフォーマットの形に変換したファイルの
     806                名称を指定する.パス3でのみ有効.
     807
     808        -s [--symbol-table] <シンボルファイル名>
     809                ロードモジュール中の各シンボルとアドレスの対応表を含むシンボル
     810                ファイルの名称を指定する.パス3でのみ有効.
     811
     812        --id-output-file <ID番号出力ファイル名>
     813                SSPカーネルでは使用してはならない。詳細はconfigurator.txtの
     814                「○カーネル構成・初期化ファイル(kernel_cfg.c)」の(5)を参照のこと。
     815
     816        --id-input-file <ID番号入力ファイル名>
     817                SSPカーネルでは使用してはならない。詳細はconfigurator.txtの
     818                「○カーネル構成・初期化ファイル(kernel_cfg.c)」の(5)を参照のこと。
    912819
    913820        --external-id
    914                 ƒIƒuƒWƒFƒNƒg‚ÌID”ԍ†‚ð•ÛŽ‚·‚é•Ï”‚Ì’è‹`‚𐶐¬‚·‚éDƒpƒX2‚Å‚Ì‚Ý
    915                 —LŒøD
    916 
    917         -Mm--print-dependenciesn<ƒ^[ƒQƒbƒgƒVƒ“ƒ{ƒ‹>
    918                 ƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    919 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚̈ˑ¶ŠÖŒW‚ðo—Í‚·‚éD
    920                 Makefile’†‚̈ˑ¶ŠÖŒW‚𐶐¬‚·‚éÛ‚É—p‚¢‚éD
    921 
    922 ƒRƒ“ƒtƒBƒMƒ
    923 ƒŒ[ƒ^‚̏ڍ׎d—l‚ɂ‚¢‚ẮC•Ê“rPDFƒtƒ@ƒCƒ‹‚ÌŒ`‚Å”z•z‚µ‚Ä‚¢
    924 ‚éuTOPPERSV¢‘ãƒJ[ƒlƒ‹—pƒRƒ“ƒtƒBƒMƒ
    925 ƒŒ[ƒ^Žd—lv‚ðŽQÆ‚·‚邱‚ƁD
    926 
    927 
    928 ‚WDƒVƒXƒeƒ€ƒT[ƒrƒX
    929 
    930 
    931 8.1. ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo
    932 
    933 ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚́CƒVƒŠƒAƒ‹ƒ|[ƒg‚ðˆµ‚¤‚½‚߂̃hƒ‰ƒCƒo‚Å
    934 ‚ ‚éD
    935 
    936 ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    937 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒC
    938 ƒ‹‚Åserial.cfg‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚邱‚ƂŁCƒVƒXƒeƒ€‚É‘g‚ݍž‚Þ‚±‚Æ‚ª‚Å‚«‚éD
    939 ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚ðŒÄ‚яo‚·ƒ\[ƒXƒtƒ@ƒCƒ‹‚ł́Cserial.h‚ð
    940 ƒCƒ“ƒNƒ‹[ƒh‚·‚éD
    941 
    942 8.1.1. ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚̃T[ƒrƒXƒR[ƒ‹
    943 
    944 ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚ðŒÄ‚яo‚·ƒT[ƒrƒXƒR[ƒ‹‚ÌŽd—l‚ÍŽŸ‚Ì’Ê‚è
    945 ‚Å‚ ‚éD‚±‚Ì’†‚ŁCƒVƒŠƒAƒ‹ƒ|[ƒg‚ÌID”ԍ†iportidj‚̉ðŽß‚̓^[ƒQƒbƒgˆË
    946 ‘¶‚Æ‚È‚éD
    947 
    948 ‚±‚ê‚ç‚̃T[ƒrƒXƒR[ƒ‹‚́C”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚©‚çŒÄ‚яo‚·‚±‚Æ‚Í‚Å‚«‚È
    949 ‚¢D‚Ü‚½Cserial_rea_dat‚Æserial_wri_dat‚́CƒfƒBƒXƒpƒbƒ`•Û—¯ó‘ԂŌĂÑ
    950 o‚·‚±‚Æ‚Í‚Å‚«‚È‚¢D‚¢‚¸‚ê‚àCŒÄ‚яo‚µ‚½ê‡‚É‚ÍE_CTXƒGƒ‰[‚Æ‚È‚éD
     821                オブジェクトのID番号を保持する変数の定義を生成する.パス2でのみ
     822                有効.
     823
     824        -M[--print-dependencies]<ターゲットシンボル>
     825                システムコンフィギュレーションファイルの依存関係を出力する.
     826                Makefile中の依存関係を生成する際に用いる.
     827
     828コンフィギュレータの詳細仕様については,別途PDFファイルの形で配布してい
     829る「TOPPERS新世代カーネル用コンフィギュレータ仕様」を参照すること.
     830
     831
     8328.システムサービス
     833
     834
     8358.1. シリアルインタフェースドライバ
     836
     837シリアルインタフェースドライバは,シリアルポートを扱うためのドライバで
     838ある.
     839
     840シリアルインタフェースドライバは,システムコンフィギュレーションファイ
     841ルでserial.cfgをインクルードすることで,システムに組み込むことができる.
     842シリアルインタフェースドライバを呼び出すソースファイルでは,serial.hを
     843インクルードする.
     844
     8458.1.1. シリアルインタフェースドライバのサービスコール
     846
     847シリアルインタフェースドライバを呼び出すサービスコールの仕様は次の通り
     848である.この中で,シリアルポートのID番号(portid)の解釈はターゲット依
     849存となる.
     850
     851これらのサービスコールは,非タスクコンテキストから呼び出すことはできな
     852い.また,serial_rea_datとserial_wri_datは,ディスパッチ保留状態で呼び
     853出すことはできない.いずれも,呼び出した場合にはE_CTXエラーとなる.
    951854
    952855(1) ER serial_opn_por(ID portid)
    953856
    954 portid‚ÅŽw’肳‚ꂽƒVƒŠƒAƒ‹ƒ|[ƒg‚ðƒI[ƒvƒ“‚µCŽóM^‘—M‚ª‰Â”\‚ȏó‘Ô‚É
    955 ‚·‚éD
     857portidで指定されたシリアルポートをオープンし,受信/送信が可能な状態に
     858する.
    956859
    957860(2) ER serial_cls_por(ID portid)
    958861
    959 portid‚ÅŽw’肳‚ꂽƒVƒŠƒAƒ‹ƒ|[ƒg‚ðƒNƒ[ƒY‚·‚éD
     862portidで指定されたシリアルポートをクローズする.
    960863
    961864(3) ER_UINT serial_rea_dat(ID portid, char *buf, uint_t len)
    962865
    963 portid‚ÅŽw’肳‚ꂽƒVƒŠƒAƒ‹ƒ|[ƒg‚©‚çClenƒoƒCƒg‚Ì•¶Žš—ñ‚ðŽóM‚µCbuf‚©
    964 ‚ç‚̗̈æ‚É“ü‚ê‚éDƒVƒŠƒAƒ‹ƒ|[ƒg‚ÌŽóMƒoƒbƒtƒ@‚ÉŠi”[‚³‚ê‚Ä‚¢‚éƒoƒCƒg”‚ª
    965 len ƒoƒCƒg‚æ‚菭‚È‚¢ê‡CŽæ“¾‰Â”\‚ȃf[ƒ^‚ðbuf‚ÉŠi”[‚µ‚½‚瑦À‚ɃŠƒ^[ƒ“
    966 ‚·‚éDŽóM‚µ‚½•¶Žš”‚Ü‚½‚̓Gƒ‰[ƒR[ƒh‚ð•Ô‚·D
     866portidで指定されたシリアルポートから,lenバイトの文字列を受信し,bufか
     867らの領域に入れる.シリアルポートの受信バッファに格納されているバイト数が
     868len バイトより少ない場合,取得可能なデータをbufに格納したら即座にリターン
     869する.受信した文字数またはエラーコードを返す.
    967870
    968871(4) ER_UINT serial_wri_dat(ID portid, const char *buf, uint_t len)
    969872
    970 portid‚ÅŽw’肳‚ꂽƒVƒŠƒAƒ‹ƒ|[ƒg‚ɁCbuf‚©‚ç‚ÌlenƒoƒCƒg‚Ì•¶Žš—ñ‚𑗐M‚·
    971 ‚éD‘—M’†‚ɃVƒŠƒAƒ‹ƒ|[ƒg‚Ì‘—Mƒoƒbƒtƒ@‚ªƒtƒ‹‚É‚È‚Á‚½ê‡C‚»‚ÌŽž“_‚Å
    972 ‘¦À‚ɃŠƒ^[ƒ“‚·‚éD‘—M‚µ‚½•¶Žš”‚Ü‚½‚̓Gƒ‰[ƒR[ƒh‚ð•Ô‚·D
     873portidで指定されたシリアルポートに,bufからのlenバイトの文字列を送信す
     874る.送信中にシリアルポートの送信バッファがフルになった場合,その時点で
     875即座にリターンする.送信した文字数またはエラーコードを返す.
    973876
    974877(5) ER serial_ctl_por(ID portid, uint_t ioctl)
    975878
    976 portid‚ÅŽw’肳‚ꂽƒVƒŠƒAƒ‹ƒ|[ƒg‚̐§Œäî•ñ‚ðCioctl‚ÅŽ¦‚³‚ê‚é’l‚ɐݒ肷
    977 ‚éD
    978 
    979 ioctl‚ɂ́CˆÈ‰º‚̐§Œäî•ñ‚ð•\‚·’萔‚ðCƒrƒbƒg–ˆ‚ɘ_—˜a‚ð‚Æ‚Á‚½‚à‚Ì‚ð
    980 Žw’è‚·‚éD
    981 
    982         IOCTL_ECHOiƒGƒR[ƒoƒbƒNƒ‚[ƒhj
    983                 ‚±‚̃rƒbƒg‚ðÝ’è‚·‚é‚ƁCƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚ªƒGƒR[
    984                 ƒoƒbƒN‚ðs‚¤D‹ï‘Ì“I‚ɂ́Cƒoƒbƒtƒ@‚©‚當Žš‚ðŽæ‚èo‚·“x‚ɁC‚»‚Ì
    985                 •¶Žš‚ð‘‚«o‚·D
    986 
    987         IOCTL_CRLFi‰üsƒ‚[ƒhj
    988                 LFiline feedj‚ð‘‚«o‚·‚ƁCCRicarriage returnj{LF‚É•ÏŠ·‚µ
    989                 ‚ď‘‚«o‚·D
    990 
    991 
    992 ‚È‚¨CƒI[ƒvƒ“’¼Œã‚̃fƒtƒHƒ‹ƒg‚̐ݒè’l‚Í(IOCTL_ECHO | IOCTL_CRLF)‚Å‚ ‚éD
    993 
    994 
    995 8.1.2. ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚Ì‚»‚Ì‘¼‚̃T[ƒrƒX
    996 
    997 ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚́C‘O‹L‚̃T[ƒrƒXƒR[ƒ‹‚ɉÁ‚¦‚āC‰Šú‰»
    998 ˆ—‚Æ–¢‘—M•¶Žš‚ÌŽæo‚µˆ—‚ðŽ‚ÂD‰Šú‰»ˆ—‚́CƒJ[ƒlƒ‹‚ɏ‰Šú‰»ƒ‹[
    999 ƒ`ƒ“‚Æ‚µ‚Ä“o˜^‚·‚éD‚Ü‚½Cƒ^[ƒQƒbƒgˆË‘¶‚ŁC‰Šú‰»ˆ—CI—¹ˆ—CŠ„ž
    1000 ‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ðŽ‚ÂD‚±‚ê‚ç‚Ì“o˜^ˆ—‚Íserial.cfg‚ÉŠÜ‚Ü‚ê‚éD
     879portidで指定されたシリアルポートの制御情報を,ioctlで示される値に設定す
     880る.
     881
     882ioctlには,以下の制御情報を表す定数を,ビット毎に論理和をとったものを
     883指定する.
     884
     885        IOCTL_ECHO(エコーバックモード)
     886                このビットを設定すると,シリアルインタフェースドライバがエコー
     887                バックを行う.具体的には,バッファから文字を取り出す度に,その
     888                文字を書き出す.
     889
     890        IOCTL_CRLF(改行モード)
     891                LF(line feed)を書き出すと,CR(carriage return)+LFに変換し
     892                て書き出す.
     893
     894
     895なお,オープン直後のデフォルトの設定値は(IOCTL_ECHO | IOCTL_CRLF)である.
     896
     897
     8988.1.2. シリアルインタフェースドライバのその他のサービス
     899
     900シリアルインタフェースドライバは,前記のサービスコールに加えて,初期化
     901処理と未送信文字の取出し処理を持つ.初期化処理は,カーネルに初期化ルー
     902チンとして登録する.また,ターゲット依存で,初期化処理,終了処理,割込
     903みサービスルーチンを持つ.これらの登録処理はserial.cfgに含まれる.
    1001904
    1002905(1) void serial_initialize(intptr_t exinf)
    1003906
    1004 ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚ð‰Šú‰»‚·‚éDƒJ[ƒlƒ‹‚ɏ‰Šú‰»ƒ‹[ƒ`ƒ“‚Æ
    1005 ‚µ‚Ä“o˜^‚·‚éDexinf‚Í–³Ž‹‚·‚éD
     907シリアルインタフェースドライバを初期化する.カーネルに初期化ルーチンと
     908して登録する.exinfは無視する.
    1006909
    1007910(2) bool_t serial_get_chr(ID portid, char *p_c)
    1008911
    1009 portid‚ÅŽw’肳‚ꂽƒVƒŠƒAƒ‹ƒ|[ƒg‚Ì‘—Mƒoƒbƒtƒ@’†‚Ì•¶Žš‚ðCp_c‚ÌŽw‚·”Ô’n
    1010 ‚ÉŽæ‚èo‚µCtrue‚ð•Ô‚·ŠÖ”D•¶Žš‚ª‚È‚©‚Á‚½Žž‚ɂ́Cfalse‚ð•Ô‚·DI—¹ˆ—
    1011 ƒ‹[ƒ`ƒ“’†‚ŌĂяo‚·‚±‚Æ‚ð‘z’肵‚Ä‚¢‚éD
    1012 
    1013 
    1014 8.2. ƒJ[ƒlƒ‹‹N“®ƒƒbƒZ[ƒW‚̏o—Í
    1015 
    1016 ƒJ[ƒlƒ‹‹N“®ƒƒbƒZ[ƒW‚̏o—͂́CƒJ[ƒlƒ‹‚Ì‹N“®Žž‚ɁCƒJ[ƒlƒ‹‚Ì–¼Ì‚âƒo[
    1017 ƒWƒ‡ƒ“”ԍ†C’˜ìŒ •\Ž¦‚È‚Ç‚ðo—Í‚·‚邽‚ß‚Ì‹@”\‚Å‚ ‚éD
    1018 
    1019 ƒJ[ƒlƒ‹‹N“®ƒƒbƒZ[ƒW‚̏o—͂́CƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1020 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹
    1021 ‚Åbanner.cfg‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚邱‚ƂŁCƒVƒXƒeƒ€‚É‘g‚ݍž‚Þ‚±‚Æ‚ª‚Å‚«‚éD
    1022 
    1023 ƒJ[ƒlƒ‹‹N“®ƒƒbƒZ[ƒW‚̏o—͂́CŽŸ‚̊֐”‚ō\¬‚³‚ê‚éD
     912portidで指定されたシリアルポートの送信バッファ中の文字を,p_cの指す番地
     913に取り出し,trueを返す関数.文字がなかった時には,falseを返す.終了処理
     914ルーチン中で呼び出すことを想定している.
     915
     916
     9178.2. カーネル起動メッセージの出力
     918
     919カーネル起動メッセージの出力は,カーネルの起動時に,カーネルの名称やバー
     920ジョン番号,著作権表示などを出力するための機能である.
     921
     922カーネル起動メッセージの出力は,システムコンフィギュレーションファイル
     923でbanner.cfgをインクルードすることで,システムに組み込むことができる.
     924
     925カーネル起動メッセージの出力は,次の関数で構成される.
    1024926
    1025927(1) void print_banner(intptr_t exinf)
    1026928
    1027 ƒVƒXƒeƒ€ƒƒO‹@”\‚ð—p‚¢‚āCƒJ[ƒlƒ‹‹N“®ƒƒbƒZ[ƒW‚ðo—Í‚·‚éDbanner.cfg
    1028 ‚É‚æ‚Á‚āCƒJ[ƒlƒ‹‚ɏ‰Šú‰»ƒ‹[ƒ`ƒ“‚Æ‚µ‚Ä“o˜^‚³‚ê‚éDexinf‚Í–³Ž‹‚³‚ê‚éD
    1029 
    1030 
    1031 ‚XDƒTƒ|[ƒgƒ‰ƒCƒuƒ‰ƒŠ
    1032 
    1033 ƒTƒ|[ƒgƒ‰ƒCƒuƒ‰ƒŠ‚́CƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚âƒVƒXƒeƒ€ƒT[ƒrƒX‚ðì¬‚·‚邽‚ß
    1034 ‚É—˜—p‚Å‚«‚郉ƒCƒuƒ‰ƒŠŠÖ”ŒQ‚Å‚ ‚éD
    1035 
    1036 
    1037 9.1. ƒLƒ
    1038 [‘€ìƒ‰ƒCƒuƒ‰ƒŠŠÖ”
    1039 
    1040 ƒLƒ
    1041 [‘€ìƒ‰ƒCƒuƒ‰ƒŠ‚́CƒLƒ
    1042 [ƒwƒbƒ_‚ðŠÜ‚ÞƒŠƒ“ƒO\‘¢‚̃_ƒuƒ‹ƒŠƒ“ƒNƒLƒ
    1043 [
    1044 ‚ðˆµ‚¤ƒ‰ƒCƒuƒ‰ƒŠ‚Å‚ ‚éDƒLƒ
    1045 [ƒwƒbƒ_‚ÌŽŸƒGƒ“ƒgƒŠ‚̓Lƒ
    1046 [‚̐擪‚̃Gƒ“ƒg
    1047 ƒŠC‘OƒGƒ“ƒgƒŠ‚̓Lƒ
    1048 [‚Ì––”ö‚̃Gƒ“ƒgƒŠ‚Æ‚·‚éD‚Ü‚½CƒLƒ
    1049 [‚̐擪‚̃Gƒ“
    1050 ƒgƒŠ‚Ì‘OƒGƒ“ƒgƒŠ‚ƁCƒLƒ
    1051 [‚Ì––”ö‚̃Gƒ“ƒgƒŠ‚ÌŽŸƒGƒ“ƒgƒŠ‚́CƒLƒ
    1052 [ƒwƒbƒ_
    1053 ‚Æ‚·‚éD‹ó‚̃Lƒ
    1054 [‚́CŽŸƒGƒ“ƒgƒŠC‘OƒGƒ“ƒgƒŠ‚Æ‚àŽ©•ªŽ©g‚ðŽw‚·ƒLƒ
    1055 [ƒwƒb
    1056 ƒ_‚Å‚ ‚ç‚í‚·D
    1057 
    1058 ƒLƒ
    1059 [‘€ìƒ‰ƒCƒuƒ‰ƒŠŠÖ”‚ð—p‚¢‚éê‡‚ɂ́Cqueue.h‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚éD
    1060 
    1061 ƒLƒ
    1062 [ƒwƒbƒ_‚ƃGƒ“ƒgƒŠ‚Ì‚½‚߂̃f[ƒ^\‘¢‚Æ‚µ‚āCQUEUE\‘¢‘Ì‚ð—p‚¢‚éD
    1063 QUEUE\‘¢‘Ì‚Ì’è‹`‚ÍŽŸ‚Ì’Ê‚èDQUEUEŒ^‚̕ϐ”‚Í”z—ñ‚Æ‚µ‚Ä’è‹`‚·‚邱‚Æ‚ð‘O’ñ‚Æ
    1064 ‚µ‚Ä‚¢‚éD
     929システムログ機能を用いて,カーネル起動メッセージを出力する.banner.cfg
     930によって,カーネルに初期化ルーチンとして登録される.exinfは無視される.
     931
     932
     9339.サポートライブラリ
     934
     935サポートライブラリは,アプリケーションやシステムサービスを作成するため
     936に利用できるライブラリ関数群である.
     937
     938
     9399.1. キュー操作ライブラリ関数
     940
     941キュー操作ライブラリは,キューヘッダを含むリング構造のダブルリンクキュー
     942を扱うライブラリである.キューヘッダの次エントリはキューの先頭のエント
     943リ,前エントリはキューの末尾のエントリとする.また,キューの先頭のエン
     944トリの前エントリと,キューの末尾のエントリの次エントリは,キューヘッダ
     945とする.空のキューは,次エントリ,前エントリとも自分自身を指すキューヘッ
     946ダであらわす.
     947
     948キュー操作ライブラリ関数を用いる場合には,queue.hをインクルードする.
     949
     950キューヘッダとエントリのためのデータ構造として,QUEUE構造体を用いる.
     951QUEUE構造体の定義は次の通り.QUEUE型の変数は配列として定義することを前提と
     952している.
    1065953
    1066954        typedef struct
     
    1070958        } QUEUE;
    1071959
    1072 QUEIDX‚ÍQUEUEŒ^‚Ì”z—ñ‚̃Cƒ“ƒfƒbƒNƒX’l‚ð•\‚·ƒf[ƒ^Œ^‚Å‚ ‚éD
     960QUEIDXはQUEUE型の配列のインデックス値を表すデータ型である.
    1073961
    1074962typedef uint8_t QUEIDX;
    1075963
    1076964
    1077 ƒLƒ
    1078 [‘€ì‚Ì‚½‚ß‚É—pˆÓ‚µ‚Ä‚¢‚éŠÖ”‚ÍŽŸ‚Ì’Ê‚èD
     965キュー操作のために用意している関数は次の通り.
    1079966
    1080967(1) queue_initialize(QUEUE *queue , QUEIDX queue_null)
    1081968
    1082 ƒLƒ
    1083 [‚ð‰Šú‰»‚·‚éDqueue‚ɂ̓Lƒ
    1084 [ƒwƒbƒ_‚ðCqueue_null‚É‚Í
    1085 –³Œø‚ȃLƒ
    1086 [ƒwƒbƒ_‚ðŽ¦‚·ƒCƒ“ƒfƒbƒNƒX’l‚ðŽw’è‚·‚éD
     969キューを初期化する.queueにはキューヘッダを,queue_nullには
     970無効なキューヘッダを示すインデックス値を指定する.
    1087971
    1088972(2) queue_insert_prev(QUEUE *top , QUEIDX queue , QUEIDX entry)
    1089973
    1090 queue‚ÅŽw’è‚·‚éƒGƒ“ƒgƒŠ‚Ì‘O‚ɁCentry‚ÅŽw’è‚·‚éƒGƒ“ƒgƒŠ‚ð‘}“ü‚·‚éD
    1091 top‚ÍqueueCentry‚ðŠÜ‚ÞQUEUEŒ^”z—ñ‚̐擪ƒAƒhƒŒƒX‚Å‚ ‚éD
    1092 queue‚ɃLƒ
    1093 [ƒwƒbƒ_‚ðŽw’肵‚½ê‡‚ɂ́CƒLƒ
    1094 [‚Ì––”ö‚Ép_entry‚ÅŽw’è‚·
    1095 ‚éƒGƒ“ƒgƒŠ‚ð‘}“ü‚·‚邱‚Æ‚É‚È‚éD
     974queueで指定するエントリの前に,entryで指定するエントリを挿入する.
     975topはqueue,entryを含むQUEUE型配列の先頭アドレスである.
     976queueにキューヘッダを指定した場合には,キューの末尾にp_entryで指定す
     977るエントリを挿入することになる.
    1096978
    1097979(3) queue_delete_next(QUEUE *top , QUEIDX queue)
    1098980
    1099 queue‚ÅŽw’è‚·‚éƒGƒ“ƒgƒŠ‚ÌŽŸ‚̃Gƒ“ƒgƒŠ‚ðíœ‚µCíœ‚µ‚½ƒGƒ“ƒgƒŠ‚Ì
    1100 ƒLƒ
    1101 [”z—ñ’†‚̃Cƒ“ƒfƒbƒNƒX‚ð•Ô‚·D
    1102 top‚ÍqueueCentry‚ðŠÜ‚ÞQUEUEŒ^”z—ñ‚̐擪ƒAƒhƒŒƒX‚Å‚ ‚éD
     981queueで指定するエントリの次のエントリを削除し,削除したエントリの
     982キュー配列中のインデックスを返す.
     983topはqueue,entryを含むQUEUE型配列の先頭アドレスである.
    1103984
    1104985(6) queue_empty(QUEUE *queue , QUEIDX queue_null)
    1105986
    1106 ƒLƒ
    1107 [‚ª‹ó‚̏ꍇ‚É‚ÍtrueC‚»‚¤‚Å‚È‚¢ê‡‚É‚Ífalse‚ð•Ô‚·Dqueue‚É‚Í
    1108 ƒLƒ
    1109 [ƒwƒbƒ_‚ðCqueue_null‚É‚Í–³Œø‚ȃLƒ
    1110 [ƒwƒbƒ_‚ðŽ¦‚·ƒCƒ“ƒfƒbƒNƒX’l‚ð
    1111 Žw’è‚·‚éD
    1112 
    1113 
    1114 ‚P‚ODŽg—pã‚Ì’ˆÓ‚ƃqƒ“ƒg
    1115 
    1116 10.1. ƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚Ì‘gž‚Ý
    1117 
    1118 ƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚ðƒVƒXƒeƒ€‚É‘g‚ݍž‚Þ‚½‚߂ɁCƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    1119 ƒŒ[ƒVƒ‡
    1120 ƒ“ƒtƒ@ƒCƒ‹‚̐擪‚Åtarget_timer.cfg‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚é•K—v‚ª‚ ‚éD
    1121 
    1122 10.2. assertƒ}ƒNƒ‚̏ˆ—
    1123 
    1124 SSPƒJ[ƒlƒ‹‚̃R[ƒh’†‚ɂ́Cassertƒ}ƒNƒ‚ªŽg‚í‚ê‚Ä‚¢‚éDassertƒ}ƒNƒ‚Ì’è
    1125 ‹`‚Ít_stddef.h‚ÉŠÜ‚Ü‚êCassert‚ªŽ¸”s‚µ‚½ê‡‚̍Ōã‚̏ˆ—i’ʏí‚́Cƒvƒ
    1126 ƒOƒ‰ƒ€‚ð’âŽ~‚³‚¹‚鏈—j‚́Cƒ^[ƒQƒbƒgˆË‘¶•”‚ÌTOPPERS_assert_abort‚ÅŒˆ
    1127 ’肳‚ê‚éD
    1128 
    1129 assert‚ªŽ¸”s‚µ‚½ê‡CƒVƒXƒeƒ€ŠJ”­’†‚̓fƒoƒbƒK‚É—Ž‚Æ‚·‚Ì‚ª–]‚Ü‚µ‚¢‚ªC
    1130 ƒVƒXƒeƒ€‰Ò“­Žž‚̑Ώˆ–@‚́CƒVƒXƒeƒ€‚ɑ΂·‚é—vŒ‚Ɉˑ¶‚·‚éD‚»‚±‚ŁCƒ^[
    1131 ƒQƒbƒgˆË‘¶•”‚ÌTOPPERS_assert_abort‚ðCƒVƒXƒeƒ€—vŒ‚ɍ‡’v‚µ‚½“KØ‚ȏˆ—
    1132 ‚É’u‚«Š·‚¦‚é•K—v‚ª‚ ‚éDƒVƒXƒeƒ€—vŒ‚É‚æ‚Á‚ẮCNDEBUG‚ð’è‹`‚µ‚Äassert
    1133 ƒ}ƒNƒ‚̏ˆ—‚ðƒIƒuƒWƒFƒNƒgƒR[ƒh’†‚©‚çÁ‚·iu6.2 ƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“v
    1134 ‚̐߂ðŽQÆj•û–@‚àl‚¦‚ç‚ê‚éD
    1135 
    1136 
    1137 10.3. ƒIƒuƒWƒFƒNƒgID‚ÌŠÇ—
    1138 
    1139 TOPPERS/SSPƒJ[ƒlƒ‹‚ł́CƒIƒuƒWƒFƒNƒg‚ÌID”ԍ†‚ðCƒRƒ“ƒtƒBƒMƒ
    1140 ƒŒ[ƒ^‚ªŠ„
    1141 ‚è•t‚¯‚é•û–@‚ªŠî–{‚Æ‚È‚Á‚Ä‚¢‚éD
    1142 
    1143 ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€’†‚ŃIƒuƒWƒFƒNƒg‚ÌID”ԍ†‚ðŽQÆ‚·‚éê‡‚ɂ́C
    1144 ŽŸ‚Ì2‚‚̕û–@‚ªl‚¦‚ç‚ê‚éD
    1145 
    1146 (1) ƒIƒuƒWƒFƒNƒgŽ¯•Ê–¼‚ð—p‚¢‚é
    1147 
    1148 ƒIƒuƒWƒFƒNƒg¶¬‚Ì‚½‚߂̐ÓIAPIiCRE_YYYj‚Ì‘æ1ƒpƒ‰ƒ[ƒ^‚É‹Lq‚µ‚½ƒIƒu
    1149 ƒWƒFƒNƒgŽ¯•Ê–¼‚ðCƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€’†‚Å‚à—p‚¢‚é•û–@D
    1150 
    1151 ƒRƒ“ƒtƒBƒMƒ
    1152 ƒŒ[ƒ^‚́CƒIƒuƒWƒFƒNƒgŽ¯•Ê–¼‚ðCŠ„‚è•t‚¯‚½ID”ԍ†‚Ƀ}ƒNƒ’è
    1153 ‹`‚·‚éCŒ¾ŒêƒvƒŠƒvƒƒZƒbƒT‚̃fƒBƒŒƒNƒeƒBƒui#definej‚ðkernel_cfg.h‚ɐ¶
    1154 ¬‚·‚邽‚߁CƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚©‚çkernel_cfg.h‚ðƒCƒ“ƒNƒ‹[ƒh‚·
    1155 ‚é•K—v‚ª‚ ‚éD
    1156 
    1157 ‚±‚Ì•û–@‚́CƒIƒuƒWƒFƒNƒgƒR[ƒh’†‚ÉID”ԍ†‚ª’¼Ú–„‚ߍž‚Ü‚ê‚邽‚ß‚ÉŽÀsŒø
    1158 —¦‚ª—Ç‚¢ˆê•û‚ŁCƒRƒ“ƒtƒBƒMƒ
    1159 ƒŒ[ƒ^‚ªŽÀs‚³‚ê‚Äkernel_cfg.h‚ª‘‚«Š·‚í‚é
    1160 “x‚ɁCƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚̍ăRƒ“ƒpƒCƒ‹‚ª•K—v‚É‚È‚é‚Æ‚¢‚¤Œ‡“_‚ª
    1161 ‚ ‚éD‚»‚Ì‚½‚߁CƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚ð\¬‚·‚éƒtƒ@ƒCƒ‹‚Ì’†‚ŁCˆê
    1162 •”‚̃tƒ@ƒCƒ‹‚݂̂ŃIƒuƒWƒFƒNƒgŽ¯•Ê–¼‚ðŽQÆ‚·‚é\¬‚É‚·‚é‚Æ‚¢‚Á‚½H•v‚ð
    1163 ‚·‚邱‚Æ‚ª–]‚Ü‚µ‚¢D
    1164 
    1165 (2) ƒIƒuƒWƒFƒNƒg‚ÌID”ԍ†‚ð•ÛŽ‚·‚é•Ï”‚ð—p‚¢‚é
    1166 
    1167 ƒIƒuƒWƒFƒNƒg‚ÌID”ԍ†‚ð•ÛŽ‚·‚éconst‘®«‚ð•t‰Á‚µ‚½•Ï”‚ð—pˆÓ‚µCƒAƒvƒŠƒP[
    1168 ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€’†‚ł́C‚»‚̕ϐ”‚ð—p‚¢‚é•û–@D
    1169 
    1170 —Ⴆ‚΁CTASK1‚Æ‚¢‚¤ƒIƒuƒWƒFƒNƒgŽ¯•Ê–¼‚̃^ƒXƒN‚ɑ΂µ‚āCŽŸ‚̂悤‚ȕϐ”‚ð
    1171 —pˆÓ‚·‚éD
     987キューが空の場合にはtrue,そうでない場合にはfalseを返す.queueには
     988キューヘッダを,queue_nullには無効なキューヘッダを示すインデックス値を
     989指定する.
     990
     991
     99210.使用上の注意とヒント
     993
     99410.1. タイマドライバの組込み
     995
     996タイマドライバをシステムに組み込むために,システムコンフィギュレーショ
     997ンファイルの先頭でtarget_timer.cfgをインクルードする必要がある.
     998
     99910.2. assertマクロの処理
     1000
     1001SSPカーネルのコード中には,assertマクロが使われている.assertマクロの定
     1002義はt_stddef.hに含まれ,assertが失敗した場合の最後の処理(通常は,プロ
     1003グラムを停止させる処理)は,ターゲット依存部のTOPPERS_assert_abortで決
     1004定される.
     1005
     1006assertが失敗した場合,システム開発中はデバッガに落とすのが望ましいが,
     1007システム稼働時の対処法は,システムに対する要件に依存する.そこで,ター
     1008ゲット依存部のTOPPERS_assert_abortを,システム要件に合致した適切な処理
     1009に置き換える必要がある.システム要件によっては,NDEBUGを定義してassert
     1010マクロの処理をオブジェクトコード中から消す(「6.2 コンパイルオプション」
     1011の節を参照)方法も考えられる.
     1012
     1013
     101410.3. オブジェクトIDの管理
     1015
     1016TOPPERS/SSPカーネルでは,オブジェクトのID番号を,コンフィギュレータが割
     1017り付ける方法が基本となっている.
     1018
     1019アプリケーションプログラム中でオブジェクトのID番号を参照する場合には,
     1020次の2つの方法が考えられる.
     1021
     1022(1) オブジェクト識別名を用いる
     1023
     1024オブジェクト生成のための静的API(CRE_YYY)の第1パラメータに記述したオブ
     1025ジェクト識別名を,アプリケーションプログラム中でも用いる方法.
     1026
     1027コンフィギュレータは,オブジェクト識別名を,割り付けたID番号にマクロ定
     1028義するC言語プリプロセッサのディレクティブ(#define)をkernel_cfg.hに生
     1029成するため,アプリケーションプログラムからkernel_cfg.hをインクルードす
     1030る必要がある.
     1031
     1032この方法は,オブジェクトコード中にID番号が直接埋め込まれるために実行効
     1033率が良い一方で,コンフィギュレータが実行されてkernel_cfg.hが書き換わる
     1034度に,アプリケーションプログラムの再コンパイルが必要になるという欠点が
     1035ある.そのため,アプリケーションプログラムを構成するファイルの中で,一
     1036部のファイルのみでオブジェクト識別名を参照する構成にするといった工夫を
     1037することが望ましい.
     1038
     1039(2) オブジェクトのID番号を保持する変数を用いる
     1040
     1041オブジェクトのID番号を保持するconst属性を付加した変数を用意し,アプリケー
     1042ションプログラム中では,その変数を用いる方法.
     1043
     1044例えば,TASK1というオブジェクト識別名のタスクに対して,次のような変数を
     1045用意する.
    11721046
    11731047const ID TASK1_id = TASK1;
    11741048
    1175 ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€’†‚ł́C‚±‚̕ϐ”iTASK1_idj‚ð—p‚¢‚邱‚ƂŁC
    1176 ƒRƒ“ƒtƒBƒMƒ
    1177 ƒŒ[ƒ^‚ªŽÀs‚³‚ê‚Äkernel_cfg.h‚ª‘‚«Š·‚í‚é“x‚ɁCã‹L‚̕ϐ”
    1178 ’è‹`‚ðŠÜ‚ñ‚¾ƒtƒ@ƒCƒ‹‚Ì‚Ý‚ðÄƒRƒ“ƒpƒCƒ‹‚·‚ê‚΂悢‚±‚Æ‚É‚È‚éD
    1179 
    1180 ‚±‚Ì•û–@‚́CƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚̍ăRƒ“ƒpƒCƒ‹‚ðÅ¬ŒÀ‚É‚Å‚«‚é—˜
    1181 “_‚ª‚ ‚éˆê•û‚ŁC•Ï”‚Ì‚½‚߂̃ƒ‚ƒŠ—̈悪•K—v‚ɂȂ邱‚ƂɉÁ‚¦‚āCiƒvƒ
    1182 ƒZƒbƒT‚É‚æ‚Á‚Ắj•Ï”ƒAƒNƒZƒX‚Ì‚½‚߂̃I[ƒoƒwƒbƒh‚ª¶‚¶‚é‚Æ‚¢‚¤Œ‡“_‚ª
    1183 ‚ ‚éD‚Ü‚½C’萔‚Å‚Í‚È‚­•Ï”‚Å‚ ‚邱‚Æ‚©‚çC‘¼‚̕ϐ”‚̏‰Šú‰»‚É‚ÍŽg‚¦‚È
    1184 ‚¢‚Æ‚¢‚¤§ŒÀ‚ª‚ ‚éD
    1185 
    1186 ‚È‚¨CTOPPERS/SSPƒJ[ƒlƒ‹‚̃Rƒ“ƒtƒBƒMƒ
    1187 ƒŒ[ƒ^‚́C--external-idƒIƒvƒVƒ‡
    1188 ƒ“‚ð•t‰Á‚·‚邱‚Æ‚É‚æ‚èCã‹L‚̕ϐ”’è‹`‚ðkernel_cfg.c’†‚ɐ¶¬‚·‚é‹@”\‚ð
    1189 Ž‚Á‚Ä‚¢‚é‚̂ŁC‚·‚ׂẴIƒuƒWƒFƒNƒgID‚ð‚±‚Ì•û–@‚ÅŽQÆ‚·‚éê‡‚ɂ́C‚±
    1190 ‚Ì‹@”\‚ð—p‚¢‚邱‚Ƃ𐄏§‚·‚éD
    1191 
    1192 ƒRƒ“ƒtƒBƒMƒ
    1193 ƒŒ[ƒ^‚É‚æ‚éID”ԍ†Š„•t‚¯‚Ì‚à‚¤1‚‚̉ۑè‚Æ‚µ‚āCƒRƒ“ƒtƒBƒMƒ
    1194 
    1195 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚̏C³‚É‚æ‚èCƒIƒuƒWƒFƒNƒgID‚ÌŠ„•t‚¯‚ª•Ï‚í‚Á‚Ä‚µ‚Ü‚¤
    1196 ‚±‚Æ‚ª‹“‚°‚ç‚ê‚éD‚±‚ê‚́CƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒ\ƒtƒgƒEƒFƒA‚̐݌vŽd—l‘‚ÉID
    1197 ”ԍ†‚ª‹LÚ‚³‚ê‚Ä‚¢‚éê‡‚âCƒfƒoƒbƒOì‹Æ‚É‚¨‚¢‚ÄID”ԍ†‚𑦒l‚Æ‚µ‚Ä•\Ž¦
    1198 ‚âŠm”F‚ª‚Å‚«‚È‚¢ê‡‚ɁCì‹ÆŒø—¦‚ð’ቺ‚³‚¹‚é‰Â”\«‚ªl‚¦‚ç‚ê‚éD
    1199 
    1200 ‚±‚Ì–â‘è‚ɑΉž‚·‚邽‚߂ɁCTOPPERSV¢‘ãƒJ[ƒlƒ‹—pƒRƒ“ƒtƒBƒMƒ
    1201 ƒŒ[ƒ^‚ɂ́C
    1202 ID”ԍ†‚ÌŠ„•t‚¯Œ‹‰Ê‚ðƒtƒ@ƒCƒ‹‚ɏ‘‚«o‚·‹@”\i--id-output-fileƒIƒvƒVƒ‡ƒ“j
    1203 ‚ƁCID”ԍ†‚ÌŠ„•t‚¯‚ðƒtƒ@ƒCƒ‹‚©‚çŽæ‚荞‚Þ‹@”\i--id-input-fileƒIƒvƒVƒ‡ƒ“j
    1204 ‚Æ‚ª—pˆÓ‚³‚ê‚Ä‚¢‚éD‚½‚¾‚µSSPƒJ[ƒlƒ‹‚̏ꍇCŒ»Žž“_‚Å‚Í“®ìã‚Ì–â‘肪‚ ‚è
    1205 Žg—p‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢DÚ×‚Í configurator.txt ‚́u›ƒJ[ƒlƒ‹\¬E‰Šú
    1206 ‰»ƒtƒ@ƒCƒ‹ikernel_cfg.cjv‚Ì (5) ‚ðŽQÆ‚Ì‚±‚ƁD
    1207 
    1208 10.4. ƒJ[ƒlƒ‹‚Ì“à•”ƒVƒ“ƒ{ƒ‹‚̃Šƒl[ƒ€
    1209 
    1210 SSPƒJ[ƒlƒ‹‚ł́Cƒ‚ƒWƒ
    1211 [ƒ‹“à•”‚Ì–¼Ì‚ª‘¼‚̃‚ƒWƒ
    1212 [ƒ‹“à•”‚Ì–¼Ì‚ƏՓ˂·
    1213 ‚邱‚Æ‚ð”ð‚¯‚é‚½‚߂ɁCƒJ[ƒlƒ‹‚Ì“à•”ƒVƒ“ƒ{ƒ‹‚́CCŒ¾ŒêƒŒƒxƒ‹‚ŁCæ“ª‚ª
    1214 "_kernel_"‚Ü‚½‚Í"_KERNEL_"‚Å‚ ‚é–¼Ì‚Æ‚µ‚Ä‚¢‚éD
    1215 
    1216 ‚±‚ê‚ðƒ\[ƒXƒR[ƒh‚̉“ǐ«‚Æ—¼—§‚³‚¹‚邽‚߂ɁCSSPƒJ[ƒlƒ‹‚ł́Cƒ\[ƒXƒR[
    1217 ƒh‚ÍŽ©‘R‚È–¼‘O‚ð—p‚¢‚Ä‹Lq‚µCCŒ¾ŒêƒvƒŠƒvƒƒZƒbƒT‚̃}ƒNƒ’è‹`i#definej
    1218 ‚ð—p‚¢‚āC‚»‚ê‚ð"_kernel_"‚Ü‚½‚Í"_KERNEL_"‚ÅŽn‚Ü‚é–¼‘OiŽ©‘R‚È–¼‘O‚ª
    1219 yyyyy‚̏ꍇ‚ɂ́C_kernel_yyyyyj‚ɃŠƒl[ƒ€‚·‚éŽd‘g‚Ý‚ð—p‚¢‚Ä‚¢‚éD
    1220 
    1221 ‹ï‘Ì“I‚ɂ́CŠÖ˜A‚·‚éƒfƒBƒŒƒNƒgƒŠ‚Éxxx_rename.def‚ð’u‚«C‚»‚±‚©‚烊ƒl[
    1222 ƒ€‚Ì‚½‚߂̃wƒbƒ_ƒtƒ@ƒCƒ‹ixxx_rename.h‚¨‚æ‚Ñxxx_unrename.hj‚𐶐¬‚·‚é
    1223 ƒc[ƒ‹iutils/genrenamej‚ð—pˆÓ‚µ‚Ä‚¢‚éD
    1224 
    1225 ‚±‚ÌŽd‘g‚݂́Cƒ\[ƒXƒR[ƒh‚̉“ǐ«Œüã‚ɖ𗧂ˆê•û‚ŁC•¾ŠQ‚à‚ ‚éD—Ⴆ
    1226 ‚΁C‘½‚­‚̃fƒoƒbƒK‚ŁCƒ\[ƒXƒR[ƒh’†‚Ì–¼Ì‚ƃIƒuƒWƒFƒNƒgƒR[ƒh’†‚Ì–¼Ì
    1227 ‚ªˆÙ‚Ȃ邽‚߂ɁCƒ\[ƒXƒR[ƒh’†‚̕ϐ”–¼‚ðŽw’肵‚Ä’l‚ð“Ç‚ñ‚¾‚èCŠÖ”–¼‚ð
    1228 Žw’肵‚ăuƒŒ[ƒNƒ|ƒCƒ“ƒg‚ð’u‚­‚Æ‚¢‚Á‚½‚±‚Æ‚ª‚Å‚«‚È‚¢D
    1229 
    1230 ‚±‚̏󋵂ɑΉž‚·‚邽‚߂ɁCSSPƒJ[ƒlƒ‹‚ł́Cƒ\[ƒXƒR[ƒh’†‚ÌŠY“–‚·‚é–¼Ì
    1231 ‚ðƒŠƒl[ƒ€‚·‚邽‚߂̃†[ƒeƒBƒŠƒeƒBiutils/applyrenamej‚ð—pˆÓ‚µ‚Ä‚¢‚éD
    1232 applyrenameƒ†[ƒeƒBƒŠƒeƒB‚ɁCƒŠƒl[ƒ€’è‹`ƒtƒ@ƒCƒ‹ixxx_rename.defj‚̃v
    1233 ƒŠƒtƒBƒbƒNƒXixxx‚Ì•”•ªj‚ƁCƒŠƒl[ƒ€‚µ‚½‚¢ƒtƒ@ƒCƒ‹ƒŠƒXƒg‚ð—^‚¦‚é‚ƁCƒŠ
    1234 ƒl[ƒ€ˆ—‚ðs‚È‚¤D—Ⴆ‚΁CkernelƒfƒBƒŒƒNƒgƒŠ‚Ì‚·‚ׂẴtƒ@ƒCƒ‹‚ɑ΂µ
    1235 ‚āCƒJ[ƒlƒ‹‚Ì“à•”ƒVƒ“ƒ{ƒ‹‚ðƒŠƒl[ƒ€‚·‚é‚ɂ́CŽŸ‚̃Rƒ}ƒ“ƒh‚ðŽÀs‚·‚ê‚Î
    1236 ‚æ‚¢D
     1049アプリケーションプログラム中では,この変数(TASK1_id)を用いることで,
     1050コンフィギュレータが実行されてkernel_cfg.hが書き換わる度に,上記の変数
     1051定義を含んだファイルのみを再コンパイルすればよいことになる.
     1052
     1053この方法は,アプリケーションプログラムの再コンパイルを最小限にできる利
     1054点がある一方で,変数のためのメモリ領域が必要になることに加えて,(プロ
     1055セッサによっては)変数アクセスのためのオーバヘッドが生じるという欠点が
     1056ある.また,定数ではなく変数であることから,他の変数の初期化には使えな
     1057いという制限がある.
     1058
     1059なお,TOPPERS/SSPカーネルのコンフィギュレータは,--external-idオプショ
     1060ンを付加することにより,上記の変数定義をkernel_cfg.c中に生成する機能を
     1061持っているので,すべてのオブジェクトIDをこの方法で参照する場合には,こ
     1062の機能を用いることを推奨する.
     1063
     1064コンフィギュレータによるID番号割付けのもう1つの課題として,コンフィギュ
     1065レーションファイルの修正により,オブジェクトIDの割付けが変わってしまう
     1066ことが挙げられる.これは,アプリケーションソフトウェアの設計仕様書にID
     1067番号が記載されている場合や,デバッグ作業においてID番号を即値として表示
     1068や確認ができない場合に,作業効率を低下させる可能性が考えられる.
     1069
     1070この問題に対応するために,TOPPERS新世代カーネル用コンフィギュレータには,
     1071ID番号の割付け結果をファイルに書き出す機能(--id-output-fileオプション)
     1072と,ID番号の割付けをファイルから取り込む機能(--id-input-fileオプション)
     1073とが用意されている.ただしSSPカーネルの場合,現時点では動作上の問題があり
     1074使用することができない.詳細は configurator.txt の「○カーネル構成・初期
     1075化ファイル(kernel_cfg.c)」の (5) を参照のこと.
     1076
     107710.4. カーネルの内部シンボルのリネーム
     1078
     1079SSPカーネルでは,モジュール内部の名称が他のモジュール内部の名称と衝突す
     1080ることを避けるために,カーネルの内部シンボルは,C言語レベルで,先頭が
     1081"_kernel_"または"_KERNEL_"である名称としている.
     1082
     1083これをソースコードの可読性と両立させるために,SSPカーネルでは,ソースコー
     1084ドは自然な名前を用いて記述し,C言語プリプロセッサのマクロ定義(#define)
     1085を用いて,それを"_kernel_"または"_KERNEL_"で始まる名前(自然な名前が
     1086yyyyyの場合には,_kernel_yyyyy)にリネームする仕組みを用いている.
     1087
     1088具体的には,関連するディレクトリにxxx_rename.defを置き,そこからリネー
     1089ムのためのヘッダファイル(xxx_rename.hおよびxxx_unrename.h)を生成する
     1090ツール(utils/genrename)を用意している.
     1091
     1092この仕組みは,ソースコードの可読性向上に役立つ一方で,弊害もある.例え
     1093ば,多くのデバッガで,ソースコード中の名称とオブジェクトコード中の名称
     1094が異なるために,ソースコード中の変数名を指定して値を読んだり,関数名を
     1095指定してブレークポイントを置くといったことができない.
     1096
     1097この状況に対応するために,SSPカーネルでは,ソースコード中の該当する名称
     1098をリネームするためのユーティリティ(utils/applyrename)を用意している.
     1099applyrenameユーティリティに,リネーム定義ファイル(xxx_rename.def)のプ
     1100リフィックス(xxxの部分)と,リネームしたいファイルリストを与えると,リ
     1101ネーム処理を行なう.例えば,kernelディレクトリのすべてのファイルに対し
     1102て,カーネルの内部シンボルをリネームするには,次のコマンドを実行すれば
     1103よい.
    12371104
    12381105        % cd kernel
    12391106        % ../utils/applyrename kernel *
    12401107
    1241 ‚Ü‚½Cƒ^[ƒQƒbƒgˆË‘¶•”‚̃fƒBƒŒƒNƒgƒŠ‚Ì‚·‚ׂẴtƒ@ƒCƒ‹‚ɑ΂µ‚āCƒJ[ƒl
    1242 ƒ‹‚Ì“à•”ƒVƒ“ƒ{ƒ‹‚ðƒŠƒl[ƒ€‚·‚é‚ɂ́CŽŸ‚̂悤‚ȃRƒ}ƒ“ƒh‚ðŽÀs‚·‚ê‚΂悢D
     1108また,ターゲット依存部のディレクトリのすべてのファイルに対して,カーネ
     1109ルの内部シンボルをリネームするには,次のようなコマンドを実行すればよい.
    12431110
    12441111        % cd target/cq_starm_gcc/
     
    12461113        % ../../utils/applyrename ../../kernel/kernel *
    12471114
    1248 10.5. ƒVƒXƒeƒ€‚Ì‹N“®Žž‚̏‰Šú‰»ˆ—
    1249 
    1250 ƒVƒXƒeƒ€‚Ì‹N“®Žž‚ɃAƒvƒŠƒP[ƒVƒ‡ƒ“‚Å•K—v‚ƂȂ鏉Šú‰»ˆ—‚ðs‚¤‚½‚ß‚Ì‹@
    1251 ”\‚Æ‚µ‚ú‰»ƒ‹[ƒ`ƒ“‚ª—pˆÓ‚³‚ê‚Ä‚¢‚邪C‰Šú‰»ƒ‹[ƒ`ƒ“‚ªŽÀs‚³‚ê‚é‚æ
    1252 ‚è‚à‘‚¢ƒ^ƒCƒ~ƒ“ƒO‚ÅŽÀs‚·‚邱‚Æ‚ª•K—v‚ȏ‰Šú‰»ˆ—‚ª‚ ‚éê‡‚ª‚ ‚éD
    1253 
    1254 ‚±‚̂悤‚ȏꍇ‚É—p‚¢‚邽‚߂ɁC•W€“I‚ȃXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    1255 [ƒ‹‚©‚çCƒ^[
    1256 ƒQƒbƒgƒVƒXƒeƒ€ˆË‘¶‚̏‰Šú‰»ƒtƒbƒNihardware_init_hookj‚ðŒÄ‚яo‚·‚±‚Æ‚Æ
    1257 ‚µ‚Ä‚¢‚éDhardware_init_hook‚́CƒJ[ƒlƒ‹‚̃^[ƒQƒbƒgˆË‘¶•”‚Å—pˆÓ‚³‚ê‚Ä
    1258 ‚¢‚é‚Ì‚ª•W€‚Å‚ ‚邪C‚±‚ê‚ðƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Å—pˆÓ‚µ‚½‚à‚Ì‚É’u‚«Š·‚¦C
    1259 ‚»‚Ì’†‚ŃAƒvƒŠƒP[ƒVƒ‡ƒ“‚Å•K—v‚ƂȂ鏉Šú‰»ˆ—‚ðs‚¤‚±‚Æ‚ª‚Å‚«‚éD
    1260 
    1261 ‚½‚¾‚µChardware_init_hook‚̍쐬‚·‚éê‡‚ɂ́CbssƒZƒNƒVƒ‡ƒ“‚ÆdataƒZƒNƒVƒ‡
    1262 ƒ“‚ª‰Šú‰»‚³‚ê‚Ä‚¢‚È‚¢‚±‚Æ‚âCƒ‰ƒCƒuƒ‰ƒŠ‚ª‰Šú‰»‚³‚ê‚Ä‚¢‚È‚¢‚±‚ƁCCŒ¾Œê
    1263 ‚Å‹Lq‚Å‚«‚é‚Æ‚ÍŒÀ‚ç‚È‚¢‚±‚Æ‚È‚Ç‚É’ˆÓ‚ª•K—v‚Å‚ ‚éDì¬‚É‚ ‚½‚Á‚ẮC
    1264 uƒ^[ƒQƒbƒgˆË‘¶•” ƒ|[ƒeƒBƒ“ƒOƒKƒCƒhv‚ðŽQÆ‚·‚邱‚ƁD
    1265 
    1266 ƒJ[ƒlƒ‹‚̃Xƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    1267 [ƒ‹‚ªhardware_init_hook‚ðŒÄ‚яo‚·‚悤‚É
    1268 ŽÀ‘•‚³‚ê‚Ä‚¢‚È‚¢ê‡‚ɂ́CƒXƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    1269 [ƒ‹‚ðƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Å
    1270 —pˆÓ‚µ‚½‚à‚Ì‚É’u‚«Š·‚¦‚é•û–@‚𐄏§‚·‚éD
    1271 
    1272 ‚P‚PDŽQlî•ñ
    1273 
    1274 11.1. —˜—pðŒ‚Æ—˜—p•ñ
    1275 
    1276 SSPƒJ[ƒlƒ‹‚Ì—˜—pðŒ‚́CŠeƒtƒ@ƒCƒ‹‚̐擪‚É•\Ž¦‚³‚ê‚Ä‚¢‚éD’˜ìŒ ‚́CŠe
    1277 ƒtƒ@ƒCƒ‹‚̐擪‚É•\Ž¦‚³‚ê‚Ä‚¢‚é’˜ìŒ ŽÒ‚ª•Û—L‚µ‚Ä‚¢‚éD
    1278 
    1279 —˜—pðŒ‚Ì(3)‚Ì(b)‚É‚¨‚¢‚āC—˜—p‚ÌŒ`‘Ô‚ðTOPPERSƒvƒƒWƒFƒNƒg‚É•ñ‚·‚é•û
    1280 –@‚Æ‚µ‚ẮCSSPƒJ[ƒlƒ‹‚ð—˜—p‚µ‚½»•i‚Ì–¼Ì‚Ɖž—p•ª–ìC»•i‰»‚µ‚½‰ïŽÐ–¼
    1281 ‚Æ‹ÆŽí“™‚̏î•ñ‚ðCˆÈ‰º‚ÌURL‚̃y[ƒW‚©‚ç•ñ‚·‚é‚à‚Ì‚Æ‚·‚éD
     111510.5. システムの起動時の初期化処理
     1116
     1117システムの起動時にアプリケーションで必要となる初期化処理を行うための機
     1118能として初期化ルーチンが用意されているが,初期化ルーチンが実行されるよ
     1119りも早いタイミングで実行することが必要な初期化処理がある場合がある.
     1120
     1121このような場合に用いるために,標準的なスタートアップモジュールから,ター
     1122ゲットシステム依存の初期化フック(hardware_init_hook)を呼び出すことと
     1123している.hardware_init_hookは,カーネルのターゲット依存部で用意されて
     1124いるのが標準であるが,これをアプリケーションで用意したものに置き換え,
     1125その中でアプリケーションで必要となる初期化処理を行うことができる.
     1126
     1127ただし,hardware_init_hookの作成する場合には,bssセクションとdataセクショ
     1128ンが初期化されていないことや,ライブラリが初期化されていないこと,C言語
     1129で記述できるとは限らないことなどに注意が必要である.作成にあたっては,
     1130「ターゲット依存部 ポーティングガイド」を参照すること.
     1131
     1132カーネルのスタートアップモジュールがhardware_init_hookを呼び出すように
     1133実装されていない場合には,スタートアップモジュールをアプリケーションで
     1134用意したものに置き換える方法を推奨する.
     1135
     113611.参考情報
     1137
     113811.1. 利用条件と利用報告
     1139
     1140SSPカーネルの利用条件は,各ファイルの先頭に表示されている.著作権は,各
     1141ファイルの先頭に表示されている著作権者が保有している.
     1142
     1143利用条件の(3)の(b)において,利用の形態をTOPPERSプロジェクトに報告する方
     1144法としては,SSPカーネルを利用した製品の名称と応用分野,製品化した会社名
     1145と業種等の情報を,以下のURLのページから報告するものとする.
    12821146
    12831147        http://www.toppers.jp/report.html
    12841148
    1285 ‚Ü‚½‚»‚̍ۂɁCSSPƒJ[ƒlƒ‹‚ðŽg—p‚µ‚ẴRƒƒ“ƒg‚₲ˆÓŒ©‚à‚¢‚½‚¾‚¯‚é‚ƍK‚¢
    1286 ‚Å‚ ‚éD
    1287 
    1288 11.2. •ÛØE“K—p«EƒTƒ|[ƒg
    1289 
    1290 SSPƒJ[ƒlƒ‹‚Í–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDŠJ”­ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒ
    1291 ƒWƒFƒNƒg‚́CSSPƒJ[ƒlƒ‹‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC
    1292 ‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½CSSPƒJ[ƒlƒ‹‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI
    1293 ‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚𕉂í‚È‚¢D
    1294 
    1295 ŠJ”­ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́CSSPƒJ[ƒlƒ‹‚ÉŠÖ‚·‚éƒTƒ|[ƒg‚Ì–ñ‘©‚Í
    1296 ‚µ‚Ä‚¢‚È‚¢DSSPƒJ[ƒlƒ‹‚ÉŠÖ‚µ‚ÄŽ¿–₪‚ ‚éê‡‚́CŒãq‚ÌTOPPERSƒ†[ƒU[
    1297 ƒYƒ[ƒŠƒ“ƒOƒŠƒXƒg‚ð—˜—p‚µ‚Ä‚¢‚½‚¾‚¯‚é‚ƍK‚¢‚Å‚ ‚éDŠmŽÀ‚ȃTƒ|[ƒg‚ª•K
    1298 —v‚ȏꍇ‚ɂ́C—Lž‚ŃTƒ|[ƒgƒT[ƒrƒX‚ð’ñ‹Ÿ‚µ‚Ä‚¢‚é‰ïŽÐ‚É‘Š’k‚³‚ꂽ‚¢D
    1299 
    1300 11.3. ƒoƒOƒŒƒ|[ƒg
    1301 
    1302 SSPƒJ[ƒlƒ‹‚ɃoƒO‚â–â‘è“_‚ð”­Œ©‚³‚ꂽê‡‚ɂ́CŒãq‚ÌTOPPERSƒ†[ƒU[ƒY
    1303 ƒ[ƒŠƒ“ƒOƒŠƒXƒg‚É•ñ‚µ‚Ä—~‚µ‚¢D
    1304 
    1305 ƒ[ƒŠƒ“ƒOƒŠƒXƒg‚ɃoƒO‚â–â‘è“_‚È‚Ç‚ð•ñ‚·‚éê‡‚ɂ́C•K—v‚ɉž‚¶‚ÄŽŸ‚Ì
    1306 î•ñ‚ð’m‚点‚Ä—~‚µ‚¢D
    1307 
    1308         Žg—p‚µ‚Ä‚¢‚éƒJ[ƒlƒ‹‚ÉŠÖ‚·‚éî•ñ
    1309                 Eƒ^[ƒQƒbƒg”ñˆË‘¶•”‚̃o[ƒWƒ‡ƒ“
    1310                 EŽg—p‚µ‚Ä‚¢‚éƒ^[ƒQƒbƒgˆË‘¶•”‚Æ‚»‚̃o[ƒWƒ‡ƒ“
    1311                 ETOPPERSƒvƒƒWƒFƒNƒg‚©‚ç‚̃ŠƒŠ[ƒX‚ɑ΂·‚é‰ü‘¢‰ÓŠi‚ ‚ê‚΁j
    1312 
    1313         ƒ^[ƒQƒbƒgƒVƒXƒeƒ€‚ÉŠÖ‚·‚éî•ñ
    1314                 Eƒ^[ƒQƒbƒgƒvƒƒZƒbƒT‚ÌŽí—Þ
    1315                 Eƒ^[ƒQƒbƒgƒ{[ƒh“™‚ÌŽí—Þ
    1316 
    1317         ƒzƒXƒg‚ÉŠÖ‚·‚éî•ñ
    1318                 EOS‚̃o[ƒWƒ‡ƒ“iƒT[ƒrƒXƒpƒbƒN‚Ì“K—pó‹µ‚àj
    1319                 EƒRƒ“ƒpƒCƒ‰‚È‚Ç‚ÌŠJ”­ŠÂ‹«‚̃o[ƒWƒ‡ƒ“iCygwin‚̃o[ƒWƒ‡ƒ“‚àj
    1320 
    1321 11.4. ƒEƒFƒuƒTƒCƒg
    1322 
    1323 TOPPERSƒvƒƒWƒFƒNƒg‚̃EƒFƒuƒTƒCƒg‚́CˆÈ‰º‚ÌURL‚É‚ ‚éD
     1149またその際に,SSPカーネルを使用してのコメントやご意見もいただけると幸い
     1150である.
     1151
     115211.2. 保証・適用性・サポート
     1153
     1154SSPカーネルは無保証で提供されているものである.開発者およびTOPPERSプロ
     1155ジェクトは,SSPカーネルに関して,特定の使用目的に対する適合性も含めて,
     1156いかなる保証も行わない.また,SSPカーネルの利用により直接的または間接的
     1157に生じたいかなる損害に関しても,その責任を負わない.
     1158
     1159開発者およびTOPPERSプロジェクトは,SSPカーネルに関するサポートの約束は
     1160していない.SSPカーネルに関して質問がある場合は,後述のTOPPERSユーザー
     1161ズメーリングリストを利用していただけると幸いである.確実なサポートが必
     1162要な場合には,有償でサポートサービスを提供している会社に相談されたい.
     1163
     116411.3. バグレポート
     1165
     1166SSPカーネルにバグや問題点を発見された場合には,後述のTOPPERSユーザーズ
     1167メーリングリストに報告して欲しい.
     1168
     1169メーリングリストにバグや問題点などを報告する場合には,必要に応じて次の
     1170情報を知らせて欲しい.
     1171
     1172        使用しているカーネルに関する情報
     1173                ・ターゲット非依存部のバージョン
     1174                ・使用しているターゲット依存部とそのバージョン
     1175                ・TOPPERSプロジェクトからのリリースに対する改造箇所(あれば)
     1176
     1177        ターゲットシステムに関する情報
     1178                ・ターゲットプロセッサの種類
     1179                ・ターゲットボード等の種類
     1180
     1181        ホストに関する情報
     1182                ・OSのバージョン(サービスパックの適用状況も)
     1183                ・コンパイラなどの開発環境のバージョン(Cygwinのバージョンも)
     1184
     118511.4. ウェブサイト
     1186
     1187TOPPERSプロジェクトのウェブサイトは,以下のURLにある.
    13241188
    13251189        http://www.toppers.jp/
    13261190
    1327 TOPPERSƒvƒƒWƒFƒNƒg‚âSSPƒJ[ƒlƒ‹‚ÉŠÖ‚·‚éÅVî•ñ‚́C‚±‚̃EƒFƒuƒTƒCƒg‚©
    1328 ‚瓾‚邱‚Æ‚ª‚Å‚«‚éD‚Ü‚½CSSPƒJ[ƒlƒ‹‚̍ŐV”ł́C‚±‚̃EƒFƒuƒTƒCƒg‚©‚çƒ_
    1329 ƒEƒ“ƒ[ƒh‚·‚邱‚Æ‚ª‚Å‚«‚éD
    1330 
    1331 11.5. TOPPERSƒ†[ƒU[ƒYƒ[ƒŠƒ“ƒOƒŠƒXƒg
    1332 
    1333 SSPƒJ[ƒlƒ‹‚ðŠÜ‚ÞTOPPERSƒvƒƒWƒFƒNƒg‚ÌŠJ”­¬‰Ê•¨‚̃†[ƒU‚ɑ΂·‚éî•ñ’ñ
    1334 ‹Ÿ‚¨‚æ‚у†[ƒU‘ŠŒÝŠÔ‚̏î•ñŒðŠ·‚ð—eˆÕ‚É‚·‚邽‚߂ɁCTOPPERSƒ†[ƒU[ƒYƒ[
    1335 ƒŠƒ“ƒOƒŠƒXƒgiusers@toppers.jpj‚ð—pˆÓ‚µ‚Ä‚¢‚éD
    1336 
    1337 ‚±‚̃[ƒŠƒ“ƒOƒŠƒXƒg‚ɂ́C’N‚Å‚àŽ©—R‚É“o˜^‚µCƒ[ƒ‹‚ð‘—•t‚·‚邱‚Æ‚ª‚Å
    1338 ‚«‚éi“o˜^ŽÒˆÈŠO‚̓[ƒ‹‚ð‘—•t‚Å‚«‚È‚¢jD‚Ü‚½C‘—•t‚³‚ꂽƒ[ƒ‹‚́C’N
    1339 ‚Å‚àŽ©—R‚ɃEƒFƒuƒTƒCƒg‚Å“Ç‚Þ‚±‚Æ‚ª‚Å‚«‚éD
    1340 
    1341 ƒ[ƒŠƒ“ƒOƒŠƒXƒg‚Ö‚Ì“o˜^•û–@‚ɂ‚¢‚ẮCˆÈ‰º‚ÌURL‚̃y[ƒW‚Éà–¾‚ª‚ ‚éD
     1191TOPPERSプロジェクトやSSPカーネルに関する最新情報は,このウェブサイトか
     1192ら得ることができる.また,SSPカーネルの最新版は,このウェブサイトからダ
     1193ウンロードすることができる.
     1194
     119511.5. TOPPERSユーザーズメーリングリスト
     1196
     1197SSPカーネルを含むTOPPERSプロジェクトの開発成果物のユーザに対する情報提
     1198供およびユーザ相互間の情報交換を容易にするために,TOPPERSユーザーズメー
     1199リングリスト(users@toppers.jp)を用意している.
     1200
     1201このメーリングリストには,誰でも自由に登録し,メールを送付することがで
     1202きる(登録者以外はメールを送付できない).また,送付されたメールは,誰
     1203でも自由にウェブサイトで読むことができる.
     1204
     1205メーリングリストへの登録方法については,以下のURLのページに説明がある.
    13421206
    13431207        http://www.toppers.jp/community.html
    13441208
    1345 11.6. TOPPERSƒvƒƒWƒFƒNƒg‚̃ƒ“ƒoŒü‚¯‚̃T[ƒrƒX
    1346 
    1347 TOPPERSƒvƒƒWƒFƒNƒg‚̃ƒ“ƒo‚ɑ΂µ‚ẮCã‹L‚ɉÁ‚¦‚āCSSPƒJ[ƒlƒ‹‚ÉŠÖ˜A
    1348 ‚µ‚ÄŽŸ‚̃T[ƒrƒX‚ð—pˆÓ‚µ‚Ä‚¢‚éD
    1349 
    1350 (1) TOPPERSŠJ”­ŽÒƒ[ƒŠƒ“ƒOƒŠƒXƒg
    1351 
    1352 TOPPERSƒvƒƒWƒFƒNƒg‚̃ƒ“ƒo‚́CSSPƒJ[ƒlƒ‹‚ÉŠÖ‚·‚鎿–âCƒoƒO‚â–â‘è“_‚È
    1353 ‚Ç‚Ì•ñ‚ɁCTOPPERSŠJ”­ŽÒƒ[ƒŠƒ“ƒOƒŠƒXƒgidev@toppers.jpj‚ð—˜—p‚·‚邱
    1354 ‚Æ‚ª‚Å‚«‚éD
    1355 
    1356 (2) SSPƒJ[ƒlƒ‹‚ÌŠJ”­Žx‰‡ƒTƒCƒg
    1357 
    1358 SSPƒJ[ƒlƒ‹‚ÌŠJ”­Žx‰‡‚Ì‚½‚ß‚ÌTRACiƒoƒOƒgƒ‰ƒbƒLƒ“ƒOƒVƒXƒeƒ€j‚ªCˆÈ‰º‚Ì
    1359 URL‚É‚ ‚éiTRAC‚ւ̃AƒNƒZƒX‚ɂ́C‰ïˆõƒpƒXƒ[ƒh‚ª•K—v‚Å‚ ‚éjD
     120911.6. TOPPERSプロジェクトのメンバ向けのサービス
     1210
     1211TOPPERSプロジェクトのメンバに対しては,上記に加えて,SSPカーネルに関連
     1212して次のサービスを用意している.
     1213
     1214(1) TOPPERS開発者メーリングリスト
     1215
     1216TOPPERSプロジェクトのメンバは,SSPカーネルに関する質問,バグや問題点な
     1217どの報告に,TOPPERS開発者メーリングリスト(dev@toppers.jp)を利用するこ
     1218とができる.
     1219
     1220(2) SSPカーネルの開発支援サイト
     1221
     1222SSPカーネルの開発支援のためのTRAC(バグトラッキングシステム)が,以下の
     1223URLにある(TRACへのアクセスには,会員パスワードが必要である).
    13601224
    13611225        http://dev.toppers.jp/trac/ssp_core
    13621226
    1363 TOPPERSƒvƒƒWƒFƒNƒg‚̃ƒ“ƒo‚́C‚±‚̃TƒCƒg‚©‚çCƒEƒFƒuƒCƒ“ƒ^ƒtƒF[ƒX‚¨‚æ
    1364 ‚ÑsubversionƒT[ƒo‚É‚æ‚èCSSPƒJ[ƒlƒ‹‚ÌŠJ”­’†‚̃o[ƒWƒ‡ƒ“‚𓾂邱‚Æ‚ª‚Å
    1365 ‚«‚éD‚Ü‚½CƒoƒOƒgƒ‰ƒbƒLƒ“ƒOƒf[ƒ^ƒx[ƒX‚ɃAƒNƒZƒX‚·‚邱‚Æ‚ª‚Å‚«C‰ß‹Ž
    1366 ‚̃oƒO—š—ð‚ւ̃AƒNƒZƒX‚âCƒoƒO‚Ì“o˜^‚ð‚·‚é‚±‚Æ‚ª‚Å‚«‚éD
    1367 
    1368 11.7. TOPPERSƒvƒƒWƒFƒNƒg‚Ö‚ÌŽQ‰Á
    1369 
    1370 TOPPERSƒvƒƒWƒFƒNƒg‚ł́C‰½‚©‚ç‚ÌŒ`‚ŃvƒƒWƒFƒNƒg‚ɍvŒ£‚µ‚Ä‚¢‚½‚¾‚¯‚é•ûC
    1371 ƒvƒƒWƒFƒNƒg‚ÅŠJ”­‚µ‚½ƒ\ƒtƒgƒEƒFƒA‚ð‚¨Žg‚¢‚Ì•ûCƒvƒƒWƒFƒNƒg‚É‹»–¡‚ð‚¨
    1372 Ž‚¿‚Ì•û‚ÌŽQ‰Á‚ð‹‚ß‚Ä‚¢‚éDTOPPERSƒvƒƒWƒFƒNƒg‚Ö‚ÌŽQ‰Á•û–@‚ɂ‚¢‚ẮC
    1373 ˆÈ‰º‚̃y[ƒW‚Éà–¾‚ª‚ ‚éD
     1227TOPPERSプロジェクトのメンバは,このサイトから,ウェブインタフェースおよ
     1228びsubversionサーバにより,SSPカーネルの開発中のバージョンを得ることがで
     1229きる.また,バグトラッキングデータベースにアクセスすることができ,過去
     1230のバグ履歴へのアクセスや,バグの登録をすることができる.
     1231
     123211.7. TOPPERSプロジェクトへの参加
     1233
     1234TOPPERSプロジェクトでは,何からの形でプロジェクトに貢献していただける方,
     1235プロジェクトで開発したソフトウェアをお使いの方,プロジェクトに興味をお
     1236持ちの方の参加を求めている.TOPPERSプロジェクトへの参加方法については,
     1237以下のページに説明がある.
    13741238
    13751239        http://www.toppers.jp/joinus.html
    13761240
    13771241
    1378 ‚P‚QDƒŠƒtƒ@ƒŒƒ“ƒX
    1379 
    1380 12.1. ƒT[ƒrƒXƒR[ƒ‹ˆê——
    1381 
    1382 (1) ƒ^ƒXƒNŠÇ—‹@”\
     124212.リファレンス
     1243
     124412.1. サービスコール一覧
     1245
     1246(1) タスク管理機能
    13831247
    13841248        ER ercd = act_tsk(ID tskid)
    13851249        ER ercd = iact_tsk(ID tskid)
    13861250
    1387 (2) ƒVƒXƒeƒ€ó‘ÔŠÇ—‹@”\
     1251(2) システム状態管理機能
    13881252
    13891253        ER ercd = loc_cpu(void)
     
    14001264        ER ercd = ext_ker(void)
    14011265
    1402 (3) Š„ž‚ÝŠÇ—‹@”\
     1266(3) 割込み管理機能
    14031267
    14041268        ER ercd = dis_int(INTNO intno)
    14051269        ER ercd = ena_int(INTNO intno)
    14061270
    1407 12.2. Ã“IAPIˆê——
    1408 
    1409 (1) ƒ^ƒXƒNŠÇ—‹@”\
     127112.2. 静的API一覧
     1272
     1273(1) タスク管理機能
    14101274
    14111275        CRE_TSK(ID tskid, { ATR tskatr, intptr_t exinf, TASK task,
     
    14131277        DEF_EPR(ID tskid,{ PRI etskpri })
    14141278
    1415 (2) Š„ž‚ÝŠÇ—‹@”\
     1279(2) 割込み管理機能
    14161280
    14171281        ATT_ISR({ ATR isratr, intptr_t exinf, INTNO intno, ISR isr, PRI isrpri })
     
    14191283        CFG_INT(INTNO intno, { ATR intatr, PRI intpri })
    14201284
    1421 (3) CPU—áŠOŠÇ—‹@”\
     1285(3) CPU例外管理機能
    14221286
    14231287        DEF_EXC(EXCNO excno, { ATR excatr, EXCHDR exchdr })
    14241288
    1425 (4) ƒVƒXƒeƒ€\¬ŠÇ—‹@”\
     1289(4) システム構成管理機能
    14261290
    14271291        DEF_ICS({ SIZE istksz, STK_T *istk })
     
    14301294        ATT_TER({ ATR teratr, intptr_t exinf, TERRTN terrtn })
    14311295
    1432 12.3. ƒo[ƒWƒ‡ƒ“—š—ð
    1433 
    1434         2011”N 3ŒŽ31“ú  Release 1.0.0           ‘ŠúƒŠƒŠ[ƒX
    1435         2011”N11ŒŽ16“ú  Release 1.1.0           Å‰‚̈ê”ʃŠƒŠ[ƒX
    1436         2011”N 3ŒŽ23“ú  Release 1.1.1           Œy”÷‚ȏC³‚ƃoƒOƒtƒBƒbƒNƒX
    1437         2013”N 4ŒŽ23“ú  Release 1.2.0           ƒ^ƒXƒN‚Ì‹N“®—v‹ƒLƒ
    1438 [ƒCƒ“ƒO‹@”\‚̒ljÁ
    1439                                         DEF_ICS‚ÌŽd—l•ÏX
    1440                                         DEF_STK‚̒ljÁ
    1441                                         “¯ŠúE’ʐM‹@”\Šg’£ƒpƒbƒP[ƒW‚̒ljÁ
    1442         2014”N 3ŒŽ 6“ú  Release 1.2.1           ƒoƒOƒtƒBƒbƒNƒX
    1443         2015”N 5ŒŽ19“ú  Release 1.3.0           
    1444 
    1445 ˆÈã
     129612.3. バージョン履歴
     1297
     1298        2011年 3月31日     Release 1.0.0           早期リリース
     1299        2011年11月16日     Release 1.1.0           最初の一般リリース
     1300        2011年 3月23日     Release 1.1.1           軽微な修正とバグフィックス
     1301        2013年 4月23日     Release 1.2.0           タスクの起動要求キューイング機能の追加
     1302                                        DEF_ICSの仕様変更
     1303                                        DEF_STKの追加
     1304                                        同期・通信機能拡張パッケージの追加
     1305        2014年 3月 6日     Release 1.2.1           バグフィックス
     1306        2015年 5月19日     Release 1.3.0           
     1307
     1308以上
  • ssp_qb_r5f100le_cs/trunk/doc/version.txt

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11
    2                 TOPPERS/SSPƒJ[ƒlƒ‹
    3                 •ÏX—š—ð
     2                TOPPERS/SSPカーネル
     3                変更履歴
    44
    5                 ‘Ήžƒo[ƒWƒ‡ƒ“: Release 1.3.0
    6                 ÅIXV: 2015”N 5ŒŽ19“ú
     5                対応バージョン: Release 1.3.0
     6                最終更新: 2015年 5月19日
    77
    8 ‚±‚̃hƒLƒ
    9 ƒƒ“ƒg‚́CTOPPERS/SSPƒJ[ƒlƒ‹‚ÌRelease 1.0.0ˆÈ~‚̕ύX—š—ð‚ðC
    10 V‚µ‚¢•û‚©‚珇‚É‹Lq‚µ‚½‚à‚Ì‚Å‚ ‚éD
     8このドキュメントは,TOPPERS/SSPカーネルのRelease 1.0.0以降の変更履歴を,
     9新しい方から順に記述したものである.
    1110
    1211----------------------------------------------------------------------
     
    1817                 Nagoya Municipal Industrial Research Institute, JAPAN
    1918 
    20  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    21  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    22  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    23  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    24      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    25      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    26  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    27      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    28 ƒƒ“ƒgi—˜—p
    29      ŽÒƒ}ƒjƒ
    30 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    31      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    32  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    33      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    34      ‚ƁD
    35    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    36 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    37 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    38        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    39    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    40        •ñ‚·‚邱‚ƁD
    41  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    42      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    43      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    44      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    45      –Ɛӂ·‚邱‚ƁD
     19 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     20 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     21 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     22 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     23     権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     24     スコード中に含まれていること.
     25 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     26     用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     27     者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     28     の無保証規定を掲載すること.
     29 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     30     用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     31     と.
     32   (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     33       作権表示,この利用条件および下記の無保証規定を掲載すること.
     34   (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     35       報告すること.
     36 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     37     害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     38     また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     39     由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     40     免責すること.
    4641 
    47  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    48  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    49  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    50  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    51  ‚̐ӔC‚𕉂í‚È‚¢D
     42 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     43 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     44 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     45 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     46 の責任を負わない.
    5247 
    5348----------------------------------------------------------------------
    5449
    55                 TOPPERS/SSPƒJ[ƒlƒ‹
    56                 Release 1.2.1 ‚©‚ç 1.3.0 ‚ւ̕ύX“_
     50                TOPPERS/SSPカーネル
     51                Release 1.2.1 から 1.3.0 への変更点
    5752
    58 EƒT[ƒrƒXƒR[ƒ‹ ista_alm, istp_alm ‚ð’ljÁ
    59 Echar_t Œ^‚Ì”pŽ~
    60 EƒVƒŠƒAƒ‹ƒhƒ‰ƒCƒo‚̕ύX
    61         Eserial_wri_dat, serial_rea_dat ‚Ì”r‘¼§Œä‹æŠÔ‚Æ”r‘¼§Œä•û–@‚ÉŠÖ‚·‚éC³
    62         Eserial_wri_dat ‚̃oƒbƒtƒ@ƒtƒ‹Žž‚Ì‹““®‚ÉŠÖ‚·‚éC³
    63         Eserial_rea_dat ‚Ńoƒbƒtƒ@ƒGƒ“ƒvƒeƒBŽž‚Ì‹““®‚ÉŠÖ‚·‚éC³
    64 EOMIT_INITIALIZE_EXCEPTION ’è‹`Ï‚݂̏ꍇ‚ɃŠƒ“ƒNƒGƒ‰[‚Æ‚È‚é–â‘è‚̏C³
     53・サービスコール ista_alm, istp_alm を追加
     54・char_t 型の廃止
     55・シリアルドライバの変更
     56        ・serial_wri_dat, serial_rea_dat の排他制御区間と排他制御方法に関する修正
     57        ・serial_wri_dat のバッファフル時の挙動に関する修正
     58        ・serial_rea_dat でバッファエンプティ時の挙動に関する修正
     59・OMIT_INITIALIZE_EXCEPTION 定義済みの場合にリンクエラーとなる問題の修正
    6560
    66 E(toppers-users 4235) ‚ÌŽw“EŽ–€‚ւ̑Ήž(kernel.tf ‚̍s“ª$’¼Œã‚Ì‹ó”’”²‚¯)
    67 E(toppers-users 4245)‚ÌŽw“EŽ–€‚ւ̑Ήž(ARMŒü‚¯gccƒIƒvƒVƒ‡ƒ“‚̒ljÁ)
    68 EŽüŠúƒnƒ“ƒhƒ‰CƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̍őåŒÂ”‚ðŽ¦‚·\¬ƒ}ƒNƒ‚Ì’è‹`
    69 Edoc/configurator.txt ‚Ì‹¤—LƒXƒ^ƒbƒN‚ÉŠÖ‚·‚é‹Lqƒ~ƒX‚̏C³D
    70 Etask.c ‚̏d•¡‚·‚éƒvƒƒgƒ^ƒCƒvéŒ¾‚̍폜
    71 EƒŠƒl[ƒ€ƒtƒ@ƒCƒ‹‚̏d•¡ƒGƒ“ƒgƒŠ‚̍폜
    72 Ecall_almhdr (alarm.c) ‚̈ø”‚ÌŒ^‚ð uintptr_t ‚֕ύX
     61・(toppers-users 4235) の指摘事項への対応(kernel.tf の行頭$直後の空白抜け)
     62・(toppers-users 4245)の指摘事項への対応(ARM向けgccオプションの追加)
     63・周期ハンドラ,アラームハンドラの最大個数を示す構成マクロの定義
     64・doc/configurator.txt の共有スタックに関する記述ミスの修正.
     65・task.c の重複するプロトタイプ宣言の削除
     66・リネームファイルの重複エントリの削除
     67・call_almhdr (alarm.c) の引数の型を uintptr_t へ変更
    7368
    74 Esample1 ƒAƒvƒŠ‚É‚¨‚¯‚éƒVƒXƒeƒ€ƒƒO‚̃}ƒXƒNÝ’è‚ÉŠÖ‚·‚éC³(ƒƒOƒ^ƒXƒN‚̏‰Šú‰»ˆ—ŒÄ‚яo‚µ’ljÁ)
    75 Esample1.c ‚Ì SVC ƒ}ƒNƒ‚ōs”ԍ†‚ª³‚µ‚­•\Ž¦‚³‚ê‚È‚¢–â‘è‚̏C³
    76 Ehello_world.c ‚Ì task ƒVƒŠƒAƒ‹ƒ|[ƒg‚̃I[ƒvƒ“ˆ—‚̒ljÁ
    77 Ehello_world.c ‚̃ƒbƒZ[ƒW•\Ž¦—pƒ}ƒNƒ‚̏C³
     69・sample1 アプリにおけるシステムログのマスク設定に関する修正(ログタスクの初期化処理呼び出し追加)
     70・sample1.c の SVC マクロで行番号が正しく表示されない問題の修正
     71・hello_world.c の task シリアルポートのオープン処理の追加
     72・hello_world.c のメッセージ表示用マクロの修正
    7873
    79 Earm_m_gcc ƒ^[ƒQƒbƒgˆË‘¶•”‚Ì prc_terminate ‚Ö‚Ì NoReturn ‘®«’ljÁ
    80 Ecq_frk_fm3_gccƒ^[ƒQƒbƒgˆË‘¶•”‚Ì hardware_init_hook (prc_support.S) ‚É function ‘®«‚̐ݒè’ljÁ
     74・arm_m_gcc ターゲット依存部の prc_terminate への NoReturn 属性追加
     75・cq_frk_fm3_gccターゲット依存部の hardware_init_hook (prc_support.S) に function 属性の設定追加
    8176
    82 EMISRA-Cƒ‹[ƒ‹‚ÉŠî‚­•ÏX
    83         E•„†‚È‚µ®”’萔‚֐ڔöŒê‚Ì•t‰Á
    84         Einitialize_eventflag ‚Ń‹[ƒv•Ï” i ‚ÌŒ^‚ð uint_t ‚©‚ç int_t ‚ɕύX
    85         Esyslog_print ‚Ì switch ‚É default ß‚ð’ljÁD
    86         Eserial_initialize, serial_terminate ‚Ì for•¶‚Ń‹[ƒvƒJƒEƒ“ƒ^‚Ì‚Ý‚ðŽg—p‚·‚é‚悤‚ɕύX
    87         Eserial_rea_dat ‚Å•„†‚̈قȂéŒ^‚Ö‚Ì‘ã“ü‰ÓŠ‚ðC³
    88         Etarget_timer_handler ‚Å–ß‚è’l‚ðŽg—p‚µ‚È‚¢ŠÖ”ŒÄ‚яo‚µ‚ðvoid‚ŃLƒƒƒXƒg‚µ‚½D
    89         Esample1.c ‚Ìfor‚Ì–{‘̂𕡍‡•¶‚ɕύX‚µCƒRƒƒ“ƒg’ljÁ
     77・MISRA-Cルールに基く変更
     78        ・符号なし整数定数へ接尾語の付加
     79        ・initialize_eventflag でループ変数 i の型を uint_t から int_t に変更
     80        ・syslog_print の switch に default 節を追加.
     81        ・serial_initialize, serial_terminate の for文でループカウンタのみを使用するように変更
     82        ・serial_rea_dat で符号の異なる型への代入箇所を修正
     83        ・target_timer_handler で戻り値を使用しない関数呼び出しをvoidでキャストした.
     84        ・sample1.c のforの本体を複合文に変更し,コメント追加
    9085
    91 ›ƒ^[ƒQƒbƒgˆË‘¶•”‚Ì—vC³‰ÓŠi1.2.1 ¨ 1.3.0j
     86○ターゲット依存部の要修正箇所(1.2.1 → 1.3.0)
    9287
    93 (1) char_t ‚Ì”pŽ~‚É”º‚¢Cchar_t ‚ð char ‚ɕύX‚·‚é
     88(1) char_t の廃止に伴い,char_t を char に変更する
    9489
    9590----------------------------------------------------------------------
    9691
    97                 TOPPERS/SSPƒJ[ƒlƒ‹
    98                 Release 1.2.0 ‚©‚ç 1.2.1 ‚ւ̕ύX“_
     92                TOPPERS/SSPカーネル
     93                Release 1.2.0 から 1.2.1 への変更点
    9994
    100 ECRE_FLG ‚Ì iflgptn ‚ɑ΂·‚éƒ`ƒFƒbƒN’ljÁ‚¨‚æ‚уGƒ‰[ðŒ‚ð•ÏX
    101 EƒCƒxƒ“ƒgƒtƒ‰ƒO‚̃rƒbƒgƒpƒ^[ƒ“‚ɑ΂·‚éƒrƒbƒg”’è‹`‚ð’ljÁ
    102 Edequeue_dataŠÖ”‚̈ø”Œ^Žw’蔲‚¯‚̏C³
    103 E(toppers-users 4129)‚ÅŽw“EŽ–€‚̏C³
    104     Esample1 ‚̏C³
    105     Eenqueue_data, dequeue_data ‚ð static ŠÖ”‚©‚ç’ʏí‚̊֐”‚֕ύX
    106     EMakefile.kernel ‚̏C³
    107 Esample1 ‚̃AƒvƒŠ‚Ìà–¾•¶‚ðsample1.c ‚̃Rƒƒ“ƒg‚Æ‚µ‚ĒljÁ
    108 EƒVƒXƒeƒ€ƒRƒ“ƒtƒBƒMƒ
    109 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚Å serial.cfg ‚ð INCLUDE ‚µ‚È‚¢
    110   ê‡‚É TARGET_NAME ‚ª–¢’è‹`‚Æ‚È‚é–â‘è‚̏C³(banner.tf)
     95・CRE_FLG の iflgptn に対するチェック追加およびエラー条件を変更
     96・イベントフラグのビットパターンに対するビット数定義を追加
     97・dequeue_data関数の引数型指定抜けの修正
     98・(toppers-users 4129)で指摘事項の修正
     99    ・sample1 の修正
     100    ・enqueue_data, dequeue_data を static 関数から通常の関数へ変更
     101    ・Makefile.kernel の修正
     102・sample1 のアプリの説明文をsample1.c のコメントとして追加
     103・システムコンフィギュレーションファイルで serial.cfg を INCLUDE しない
     104  場合に TARGET_NAME が未定義となる問題の修正(banner.tf)
    111105
    112 ›ƒ^[ƒQƒbƒgˆË‘¶•”‚Ì—vC³‰ÓŠi1.2.0 ¨ 1.2.1j
    113     ƒ^[ƒQƒbƒgˆË‘¶•”‚ւ̉e‹¿‚Í‚È‚¢‚½‚߁CC³‚Í•s—v‚Å‚ ‚éD
     106○ターゲット依存部の要修正箇所(1.2.0 → 1.2.1)
     107    ターゲット依存部への影響はないため,修正は不要である.
    114108
    115109----------------------------------------------------------------------
    116110
    117                 TOPPERS/SSPƒJ[ƒlƒ‹
    118                 Release 1.1.1 ‚©‚ç 1.2.0 ‚ւ̕ύX“_
     111                TOPPERS/SSPカーネル
     112                Release 1.1.1 から 1.2.0 への変更点
    119113
    120 Eƒ^ƒXƒN‹N“®—v‹ƒLƒ
    121 [ƒCƒ“ƒO‚̃Tƒ|[ƒg
    122   ƒ^ƒXƒN‹N“®—v‹‚ð1‰ñ‚܂ŃLƒ
    123 [ƒCƒ“ƒO‚·‚é‚悤‚ɏC³D
     114・タスク起動要求キューイングのサポート
     115  タスク起動要求を1回までキューイングするように修正.
    124116
    125 EDEF_STK‚̒ljÁ
     117・DEF_STKの追加
    126118
    127 EDEF_ICS‚Ì‹@”\C³
     119・DEF_ICSの機能修正
    128120
    129 EŠg’£ƒpƒbƒP[ƒW‚̒ljÁ
    130   - ƒf[ƒ^ƒLƒ
    131 [‹@”\
    132   - ƒCƒxƒ“ƒgƒtƒ‰ƒO‹@”\
     121・拡張パッケージの追加
     122  - データキュー機能
     123  - イベントフラグ機能
    133124
    134 EƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚̏C³
    135   - ƒ^ƒXƒNI—¹Žž‚̃ƒbƒZ[ƒWo—͏C³
    136   - ƒf[ƒ^ƒLƒ
    137 [‚̃eƒXƒg‹@”\‚̒ljÁ
    138   - ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̃eƒXƒg‹@”\‚̒ljÁ
     125・サンプルプログラムの修正
     126  - タスク終了時のメッセージ出力修正
     127  - データキューのテスト機能の追加
     128  - イベントフラグのテスト機能の追加
    139129
    140130
    141 ›ƒ^[ƒQƒbƒgˆË‘¶•”‚Ì—vC³‰ÓŠi1.1.1 ¨ 1.2.0j
     131○ターゲット依存部の要修正箇所(1.1.1 → 1.2.0)
    142132
    143 (1) TEST_EXCƒ}ƒNƒ‚̍폜‚É”º‚¢CCPUEXC1ƒ}ƒNƒ‚ððŒƒRƒ“ƒpƒCƒ‹‚ÉŽg—p‚·‚é‚悤‚É
    144     •ÏX‚·‚éD
     133(1) TEST_EXCマクロの削除に伴い,CPUEXC1マクロを条件コンパイルに使用するように
     134    変更する.
    145135
    146 (2) ƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚Édataqueue.cCeventflag.c‚ðƒrƒ‹ƒh‘ΏۂɊ܂߂é‚悤‚ɕύXD
    147     (Makefile‚ðŽg—p‚µ‚È‚¢ƒ^[ƒQƒbƒgˆË‘¶•”‚Ì‚Ý)
     136(2) サンプルプログラムにdataqueue.c,eventflag.cをビルド対象に含めるように変更.
     137    (Makefileを使用しないターゲット依存部のみ)
    148138
    149 (3) –³ŒÀƒ‹[ƒv‚ÌŽÀ‘••û–@‚ðiTOPPERS_assert_abortCtarget_exit‚Ȃǁjtecsgen‚Å
    150     ‰ðŽß‚Å‚«‚é‹Lq•û–@‚ɕύX‚·‚éD
     139(3) 無限ループの実装方法を(TOPPERS_assert_abort,target_exitなど)tecsgenで
     140    解釈できる記述方法に変更する.
    151141
    152142----------------------------------------------------------------------
    153143
    154                 TOPPERS/SSPƒJ[ƒlƒ‹
    155                 Release 1.1.0 ‚©‚ç 1.1.1 ‚ւ̕ύX“_
     144                TOPPERS/SSPカーネル
     145                Release 1.1.0 から 1.1.1 への変更点
    156146
    157 EƒJ[ƒlƒ‹ƒo[ƒWƒ‡ƒ“ƒ}ƒNƒ‚̏C³
    158   (Release1.1.0‚ł̓J[ƒlƒ‹ƒo[ƒWƒ‡ƒ“ƒ}ƒNƒ‚Ì’l‚ÉŒë‚肪‚ ‚Á‚½j
     147・カーネルバージョンマクロの修正
     148  (Release1.1.0ではカーネルバージョンマクロの値に誤りがあった)
    159149
    160 EŽÀsŽž—Dæ“x‚ðÝ’肵‚Ä‚¢‚éƒ^ƒXƒN‚ªact_tsk(TSK_SELF)‚ðŒÄ‚яo‚µ‚½ê‡‚Ì
    161   •s‹ï‡‚̏C³
     150・実行時優先度を設定しているタスクがact_tsk(TSK_SELF)を呼び出した場合の
     151  不具合の修正
    162152
    163 Eƒ\[ƒXƒR[ƒh‚̃Šƒtƒ@ƒNƒ^ƒŠƒ“ƒO
    164   - task.c/h‚ւ̃Rƒƒ“ƒg’ljÁA“Á‚ɏ‰Šú—Dæ“x‚ÆŽÀsŽž—Dæ“x‚̈Ⴂ‚Ì–¾Šmj‰»
     153・ソースコードのリファクタリング
     154  - task.c/hへのコメント追加、特に初期優先度と実行時優先度の違いの明確j化
    165155
    166 EDEF_EPRICDEF_ICS‚ÌŽd—l’è‹`‚ð’ljÁ(doc/original_static_api.txt)
    167   (‚½‚¾‚µTOPPERS“‡Žd—l‘1.4.0‚Ƃ̈êŠÑ«‚Í‚È‚¢‚½‚ß’ˆÓj
     156・DEF_EPRI,DEF_ICSの仕様定義を追加(doc/original_static_api.txt)
     157  (ただしTOPPERS統合仕様書1.4.0との一貫性はないため注意)
    168158
    169 EƒVƒXƒeƒ€ƒT[ƒrƒX‚̒ljÁ
    170   - syslog‹@”\
    171   - ƒƒO•\Ž¦ƒ^ƒXƒN‹@”\
     159・システムサービスの追加
     160  - syslog機能
     161  - ログ表示タスク機能
    172162
    173 E•s—vƒtƒ@ƒCƒ‹‚̍폜
    174   - utilsƒfƒBƒŒƒNƒgƒŠˆÈ‰º‚Ì•s—v‚ȃXƒNƒŠƒvƒg‚̍폜
    175   - confkernelƒXƒNƒŠƒvƒg‚ÉŠÖ˜A‚µ‚½ƒtƒ@ƒCƒ‹‚̍폜
     163・不要ファイルの削除
     164  - utilsディレクトリ以下の不要なスクリプトの削除
     165  - confkernelスクリプトに関連したファイルの削除
    176166
    177 EutilsƒfƒBƒŒƒNƒgƒŠ‚̃XƒNƒŠƒvƒg‚̏C³
    178   - ƒvƒƒV[ƒWƒƒŒÄ‚яo‚µ‚̍ۂÌdo•¶‚̍폜
     167・utilsディレクトリのスクリプトの修正
     168  - プロシージャ呼び出しの際のdo文の削除
    179169
    180 EƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚Ì‹@”\’ljÁ
    181   - ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̃eƒXƒg‹@”\‚̒ljÁ
    182   - ƒƒOƒƒbƒZ[ƒW‚ðsyslog‹@”\‚ðŽg—p‚µ‚ďo—Í‚·‚é‚悤‚ɏC³
     170・サンプルプログラムの機能追加
     171  - アラームハンドラのテスト機能の追加
     172  - ログメッセージをsyslog機能を使用して出力するように修正
    183173
    184174
    185175----------------------------------------------------------------------
    186176
    187                 TOPPERS/SSPƒJ[ƒlƒ‹
    188                 Release 1.0.0 ‚©‚ç 1.1.0 ‚ւ̕ύX“_
     177                TOPPERS/SSPカーネル
     178                Release 1.0.0 から 1.1.0 への変更点
    189179
    190 EƒeƒXƒgƒvƒƒOƒ‰ƒ€‚̒ljÁ
     180・テストプログラムの追加
    191181
    192 EŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ÉŠÖ‚·‚éƒoƒOƒtƒBƒbƒNƒX
    193         - Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“¶¬‚É•K—v‚ȃ^[ƒQƒbƒgˆË‘¶•”‚Ì’è‹`‚ª‚È‚©‚Á‚½–â‘è‚̏C³
    194           (x_get_ipm, t_get_ipm, i_get_ipm, x_set_ipm, t_set_ipm, i_set_ipm‚̒ljÁj
     182・割込みサービスルーチンに関するバグフィックス
     183        - 割込みサービスルーチン生成に必要なターゲット依存部の定義がなかった問題の修正
     184          (x_get_ipm, t_get_ipm, i_get_ipm, x_set_ipm, t_set_ipm, i_set_ipmの追加)
    195185
    196 EMISRA-CƒR[ƒfƒBƒ“ƒOƒXƒ^ƒ“ƒ_[ƒh‚ɑΉž‚·‚邽‚߂̃R[ƒhC³
     186・MISRA-Cコーディングスタンダードに対応するためのコード修正
    197187
    198 Eƒ^[ƒQƒbƒgˆË‘¶•”‚Ƃ̃Cƒ“ƒ^[ƒtƒF[ƒXC³
    199         - TOPPERS_SUPPORT_DIS_INT‚ðTOPPERS_TARGET_SUPPORT_DIS_INT‚ɏC³
    200         - TOPPERS_SUPPORT_ENA_INT‚ðTOPPERS_TARGET_SUPPORT_ENA_INT‚ɏC³
     188・ターゲット依存部とのインターフェース修正
     189        - TOPPERS_SUPPORT_DIS_INTをTOPPERS_TARGET_SUPPORT_DIS_INTに修正
     190        - TOPPERS_SUPPORT_ENA_INTをTOPPERS_TARGET_SUPPORT_ENA_INTに修正
    201191
    202192
Note: See TracChangeset for help on using the changeset viewer.