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

ファイルの mime-type 変更

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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以上
Note: See TracChangeset for help on using the changeset viewer.