Ignore:
Timestamp:
Jul 23, 2017, 2:29:40 PM (7 years ago)
Author:
coas-nagasima
Message:

SVNプロパティを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • rubycfg_asp/trunk/asp_dcre/doc/extension.txt

    • Property svn:mime-type changed from text/plain to text/plane; charset=UTF-8
    r313 r315  
    11
    2                 TOPPERS/ASPカーネル
    3                 機能拡張・チューニングガイド
    4 
    5                 対応バージョン: Release 1.9.3
    6                 最終更新: 2014å¹´1月2日
    7 
    8 ã“のドキュメントは,TOPPERS/ASPカーネルを,機能拡張・チューニングするた
    9 ã‚ã®æ–¹æ³•ï¼ˆã¾ãŸã¯ãƒ’ント)を説明するものである.
     2                TOPPERS/ASPカーネル
     3                機能拡張・チューニングガイド
     4
     5                対応バージョン: Release 1.9.3
     6                最終更新: 2014年1月2日
     7
     8このドキュメントは,TOPPERS/ASPカーネルを,機能拡張・チューニングするた
     9めの方法(またはヒント)を説明するものである.
    1010
    1111----------------------------------------------------------------------
     
    1717             Graduate School of Information Science, Nagoya Univ., JAPAN
    1818 
    19  ä¸Šè¨˜è‘—作権è€
    20 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    21  ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
    22  å¤‰ãƒ»å†é
    23 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    24  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    25      æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
    26      ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
    27  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    28      ç”¨ã§ãã‚‹å½¢ã§å†é
    29 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    30 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    31      è€
    32 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    33      ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
    34  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    35      ç”¨ã§ããªã„形で再é
    36 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    37      ã¨ï¼Ž
    38    (a) 再é
    39 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    40 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    41        ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
    42    (b) 再é
    43 å¸ƒã®å½¢æ
    44 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    45        å ±å‘Šã™ã‚‹ã“と.
    46  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    47      å®³ã‹ã‚‰ã‚‚,上記著作権è€
    48 ãŠã‚ˆã³TOPPERSプロジェクトをå
    49 è²¬ã™ã‚‹ã“と.
    50      ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
    51      ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
    52 ãŠã‚ˆã³TOPPERSプロジェクトを
    53      å
    54 è²¬ã™ã‚‹ã“と.
     19 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     20 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     21 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     22 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     23     権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     24     スコード中に含まれていること.
     25 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     26     用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     27     者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     28     の無保証規定を掲載すること.
     29 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     30     用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     31     と.
     32   (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     33       作権表示,この利用条件および下記の無保証規定を掲載すること.
     34   (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     35       報告すること.
     36 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     37     害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     38     また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     39     由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     40     免責すること.
    5541 
    56  æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    57 ãŠ
    58  ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    59  ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    60  ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    61  ã®è²¬ä»»ã‚’負わない.
     42 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     43 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     44 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     45 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     46 の責任を負わない.
    6247 
    6348 $Id$
    6449----------------------------------------------------------------------
    6550
    66 â—‹ç›®æ¬¡
    67 
    68 ãƒ»ã‚¨ãƒ©ãƒ¼ãƒã‚§ãƒƒã‚¯ã®çœç•¥
    69 ãƒ»ã‚¿ã‚¤ãƒ ãƒ†ã‚£ãƒƒã‚¯ã®å‘¨æœŸã®å¤‰æ›´
    70 ãƒ»ç‰¹æ®Šç›®çš„のレジスタの扱い
    71 ãƒ»æ‹¡å¼µãƒ‘ッケージの使い方
    72         - ミューテックス機能拡張パッケージ
    73         - メッセージバッファ機能拡張パッケージ
    74         - オーバランハンドラ機能拡張パッケージ
    75         - タスク優å
    76 ˆåº¦æ‹¡å¼µãƒ‘ッケージ
    77         - 制約タスク拡張パッケージ
    78         - 動的生成機能拡張パッケージ
    79 ãƒ»CPU例外ハンドラの直接呼出し
    80         - TA_DIRECT属性の導å
    81 ¥
    82         - ターゲット依存部の修正箇所
    83 
    84 
    85 â—‹ã‚¨ãƒ©ãƒ¼ãƒã‚§ãƒƒã‚¯ã®çœç•¥
    86 
    87 ã‚µãƒ¼ãƒ“スコールのオーバヘッドを削減するために,静的なエラーのチェックを
    88 çœç•¥ã™ã‚‹å ´åˆãŒã‚る.ASPカーネルにおいては,静的なエラーのチェックはすべ
    89 ã¦CHECKマクロを用いて行っているため,kernel/check.h中のCHECKマクロを編
    90 é›†ã™ã‚‹ã“とで,静的なエラーのチェックを省略することができる.
    91 
    92 ä¾‹ãˆã°ï¼Œã‚¿ã‚¹ã‚¯IDのチェックを省略したい場合には,CHECK_TSKIDマクロと
    93 CHECK_TSKID_SELFマクロを,次のように修正すればよい.
     51○目次
     52
     53・エラーチェックの省略
     54・タイムティックの周期の変更
     55・特殊目的のレジスタの扱い
     56・拡張パッケージの使い方
     57        - ミューテックス機能拡張パッケージ
     58        - メッセージバッファ機能拡張パッケージ
     59        - オーバランハンドラ機能拡張パッケージ
     60        - タスク優先度拡張パッケージ
     61        - 制約タスク拡張パッケージ
     62        - 動的生成機能拡張パッケージ
     63・CPU例外ハンドラの直接呼出し
     64        - TA_DIRECT属性の導入
     65        - ターゲット依存部の修正箇所
     66
     67
     68○エラーチェックの省略
     69
     70サービスコールのオーバヘッドを削減するために,静的なエラーのチェックを
     71省略する場合がある.ASPカーネルにおいては,静的なエラーのチェックはすべ
     72てCHECKマクロを用いて行っているため,kernel/check.h中のCHECKマクロを編
     73集することで,静的なエラーのチェックを省略することができる.
     74
     75例えば,タスクIDのチェックを省略したい場合には,CHECK_TSKIDマクロと
     76CHECK_TSKID_SELFマクロを,次のように修正すればよい.
    9477
    9578#define CHECK_TSKID(tskid)                      ((void)(tskid))
    9679#define CHECK_TSKID_SELF(tskid)         ((void)(tskid))
    9780
    98 ã“れらのマクロの定義を空にする方法もあるが,パラメータに副作用のある式
    99 ãŒæ›¸ã‹ã‚Œã¦ã„る可能性を考えると(副作用のある式は書くべきではないが,書
    100 ã‹ã‚Œã¦ã„るコードがå
    101 ¥ã£ã¦ãã‚‹å¯èƒ½æ€§ãŒå
    102 ¨ããªã„とは言えない),上の定義の
    103 æ–¹ãŒå®‰å
    104 ¨ã§ã‚る.副作用のない式であれば,最適化によって削除することがで
    105 ãã‚‹ãŸã‚ï¼Œå®Ÿè¡Œæ™‚効率には影響がないと期å¾
    106 ã§ãã‚‹ï¼ŽãŸã ã—,最適化によって
    107 å‰Šé™¤ã•ã‚Œãªã„場合には,副作用のある式が書かれていないことを確認した上で,
    108 ãƒžã‚¯ãƒ­ã®å®šç¾©ã‚’空にしてもよい.
    109 
    110 
    111 â—‹ã‚¿ã‚¤ãƒ ãƒ†ã‚£ãƒƒã‚¯ã®å‘¨æœŸã®å¤‰æ›´
    112 
    113 ASPカーネルでは,カーネルへタイムティックを供給する周期は1ミリ秒が標準
    114 ã¨ãªã£ã¦ã„るが,低速なプロセッサでは1ミリ秒毎に割込みを処理するオーバヘッ
    115 ãƒ‰ãŒå•é¡Œã«ãªã‚‹å ´åˆãŒã‚る.そこで,アプリケーションがå¿
    116 è¦ã¨ã™ã‚‹æ™‚間精度
    117 ãŒç²—い場合には,タイムティックの周期を長くすることで,プロセッサの処理
    118 è² è·ã‚’低減する方法がある.
    119 
    120 ã‚¿ã‚¤ãƒ ãƒ†ã‚£ãƒƒã‚¯ã®å‘¨æœŸã®ä¸Žãˆæ–¹ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜ã§ã‚るため,これが変更でき
    121 ã‚‹ã‹ã©ã†ã‹ã¯ï¼Œã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã®ã‚¿ã‚¤ãƒžãƒ‰ãƒ©ã‚¤ãƒã®å®Ÿè£
    122 ã‚’調べるå¿
    123 è¦ãŒã‚る.
    124 æ¨™æº–的には,target_kernel.h(またはそこからインクルードされるファイル)
    125 ä¸­ã«å®šç¾©ã•ã‚Œã¦ã„ã‚‹TIC_NUMEとTIC_DENOを書き換えることで,変更できるよう
    126 ã«å®Ÿè£
    127 ã•ã‚Œã¦ã„る.
    128 
    129 
    130 â—‹ç‰¹æ®Šç›®çš„のレジスタの扱い
    131 
    132 FPUレジスタやDSPレジスタなどの特殊目的のレジスタ(以下,特殊レジスタ)
    133 ã‚’持つプロセッサでは,レジスタの扱いについて大きく次の3つの方法が考えら
    134 ã‚Œã‚‹ï¼Ž
    135 
    136 (1) 特殊レジスタをタスクのコンテキストに含めない
    137 
    138 1つのタスクのみが特殊レジスタを使用する場合には,特殊レジスタをタスクの
    139 ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã«å«ã‚ã‚‹å¿
    140 è¦ãŒãªãï¼Œã‚«ãƒ¼ãƒãƒ«ã§ç®¡ç†ã™ã‚‹å¿
    141 è¦ãŒãªã„.
    142 
    143 (2) 特殊レジスタをタスクのコンテキストに含める
    144 
    145 è¤‡æ•°ã®ã‚¿ã‚¹ã‚¯ãŒç‰¹æ®Šãƒ¬ã‚¸ã‚¹ã‚¿ã‚’使用する場合には,特殊レジスタをタスクのコ
    146 ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã«å«ã‚ã‚‹æ–¹æ³•ãŒæœ€ã‚‚単純である.そのためには,タスクディスパッ
    147 ãƒãƒ£ã¨å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©/CPU例外ハンドラの出å
    148 ¥å£ã§ï¼Œç‰¹æ®Šãƒ¬ã‚¸ã‚¹ã‚¿ã‚’保存/復帰
    149 ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’追加するå¿
    150 è¦ãŒã‚る.実際の保存/復帰場所は,スクラッチレジス
    151 ã‚¿ã¨ãã‚Œä»¥å¤–のレジスタで異なるため,注意がå¿
    152 è¦ã§ã‚る.
    153 
    154 (3) 特殊レジスタをコンテキストに含めるかどうかをタスク毎に指定する
    155 
    156 ç‰¹æ®Šãƒ¬ã‚¸ã‚¹ã‚¿ã‚’使用するタスクと使用しないタスクがある場合で,すべてのタ
    157 ã‚¹ã‚¯ã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã«ç‰¹æ®Šãƒ¬ã‚¸ã‚¹ã‚¿ã‚’含める方法ではオーバヘッドが問題にな
    158 ã‚‹å ´åˆã«ã¯ï¼Œç‰¹æ®Šãƒ¬ã‚¸ã‚¹ã‚¿ã‚’コンテキストに含めるかどうかをタスク毎に指定
    159 ã™ã‚‹æ–¹æ³•ãŒæœ‰åŠ›ã§ã‚る.これを実現する方法は次の通りである.
    160 
    161 ã¾ãšï¼Œç‰¹æ®Šãƒ¬ã‚¸ã‚¹ã‚¿ã‚’コンテキストに含めるかどうかを指定するタスク属性を
    162 è¨­ã‘る.例えば,FPUレジスタであれば,タスク属性にTA_FPUを設ける.タスク
    163 ãƒ‡ã‚£ã‚¹ãƒ‘ッチャでは,タスク属性を見て,その属性が設定されていれば特殊レ
    164 ã‚¸ã‚¹ã‚¿ã‚’保存/復帰する.
    165 
    166 ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢çš„に特殊レジスタがディスエーブルできる場合には,その属性が
    167 è¨­å®šã•ã‚Œã¦ã„ないタスクに切り換える時に特殊レジスタをディスエーブルする
    168 ã¨ï¼Œèª¤ã£ã¦ç‰¹æ®Šãƒ¬ã‚¸ã‚¹ã‚¿ã‚’使った場合を検出できる.
    169 
    170 ã•ã‚‰ã«ï¼Œå‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ï¼ˆISR,周期ハンドラ,アラームハンドラを含む)や
    171 CPU例外ハンドラで特殊レジスタを使用する場合には,これらの処理単位にも
    172 ç‰¹æ®Šãƒ¬ã‚¸ã‚¹ã‚¿ã‚’使用するかどうかの属性を設ける方法が考えられる.
    173 
    174 ã“こで,タスク(または他の処理単位)が特殊レジスタを使用するかどうかは,
    175 ã‚³ãƒ³ãƒ‘イラやライブラリに依存する場合があるため,注意がå¿
    176 è¦ã§ã‚る.例え
    177 ã°ï¼Œæµ®å‹•å°æ•°ç‚¹æ¼”算を含まないプログラムであっても,コンパイラがその方が
    178 æ€§èƒ½ãŒé«˜ã„と判断すれば,浮動小数点命令を生成する場合がある.
    179 
    180 
    181 â—‹æ‹¡å¼µãƒ‘ッケージの使い方
    182 
    183 ASPカーネルでは,いくつかの拡張機能を実è£
    184 ã™ã‚‹ãŸã‚ã«ï¼Œæ‹¡å¼µãƒ‘ッケージをサ
    185 ãƒãƒ¼ãƒˆã—ている.拡張パッケージは,extensionディレクトリに置いてある.
    186 
    187 æ‹¡å¼µãƒ‘ッケージを使用する場合には,UNIXであれば,ASPカーネルのソースファ
    188 ã‚¤ãƒ«ã®ãƒˆãƒƒãƒ—ディレクトリで,
    189 
    190         % cp -r extension/<拡張パッケージのディレクトリ名>/* .
    191 
    192 ã‚’実行する.この時,å
    193 ƒã®ï¼ˆæ‹¡å¼µå‰ã®ï¼‰ã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã¯ä¸Šæ›¸ãã•ã‚Œã¦ã—まう
    194 ãŸã‚ï¼Œæ‹¡å¼µã—ないカーネルも使用したい場合には,別のディレクトリにソース
    195 ãƒ•ã‚¡ã‚¤ãƒ«ã‚’展開して,上のコマンドを実行すること.
    196 
    197 è¤‡æ•°ã®æ‹¡å¼µãƒ‘ッケージを使うことは考æ
    198 ®ã—ていないが,以下に述べるケースを
    199 é™¤ã„ては,手作業により複数の拡張パッケージをマージすることは可能である.
    200 ç¾æ™‚点では,ミューテックス機能拡張パッケージと制約タスク拡張パッケージ
    201 ã‚’マージすることはできない.また,動的生成機能拡張パッケージを他の拡張
    202 ãƒ‘ッケージとマージすることは考æ
    203 ®ã—ていない.
    204 
    205 â—ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージ
    206 
    207 ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージは,ミューテックス機能を追加するための
    208 æ‹¡å¼µãƒ‘ッケージである.ただし,優å
    209 ˆåº¦é€†è»¢ã‚’制御するための仕組みとして,
    210ʌ㻌
    211 ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆTA_CEILING属性のミューテックス)のみをサポー
    212 ãƒˆã—,優å
    213 ˆåº¦ç¶™æ‰¿ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆTA_INHERIT属性のミューテックス)はサポー
    214 ãƒˆã—ていない.ミューテックス機能拡張パッケージは,extension/mutexディレ
    215 ã‚¯ãƒˆãƒªã«ç½®ã„てある.
    216 
    217 ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージでは,TOPPERS_SUPPORT_MUTEXがkernel.h中
    218 ã§å®šç¾©ã•ã‚Œã¦ã„るので,これを用いてミューテックス機能を使用できるかどう
    219 ã‹ã‚’判別することができる.
    220 
    221 â—ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒãƒƒãƒ•ã‚¡æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージ
    222 
    223 ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒãƒƒãƒ•ã‚¡æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージは,メッセージバッファ機能を追加す
    224 ã‚‹ãŸã‚ã®æ‹¡å¼µãƒ‘ッケージである.メッセージバッファ機能拡張パッケージは,
    225 extension/messagebufディレクトリに置いてある.
    226 
    227 ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒãƒƒãƒ•ã‚¡æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージでは,TOPPERS_SUPPORT_MESSAGEBUFが
    228 kernel.h中で定義されているので,これを用いてメッセージバッファ機能を使
    229 ç”¨ã§ãã‚‹ã‹ã©ã†ã‹ã‚’判別することができる.
    230 
    231 â—ã‚ªãƒ¼ãƒãƒ©ãƒ³ãƒãƒ³ãƒ‰ãƒ©æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージ
    232 
    233 ã‚ªãƒ¼ãƒãƒ©ãƒ³ãƒãƒ³ãƒ‰ãƒ©æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージは,オーバランハンドラ機能を追加す
    234 ã‚‹ãŸã‚ã®æ‹¡å¼µãƒ‘ッケージである.ただし,この拡張パッケージを使うためには,
    235 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ãŒå¯¾å¿œã—ているå¿
    236 è¦ãŒã‚る.オーバランハンドラ機能拡張パッ
    237 ã‚±ãƒ¼ã‚¸ã¯ï¼Œextension/ovrhdrディレクトリに置いてある.
    238 
    239 ã‚ªãƒ¼ãƒãƒ©ãƒ³ãƒãƒ³ãƒ‰ãƒ©æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージで,ターゲット依存部が拡張パッケー
    240 ã‚¸ã«å¯¾å¿œã—ている場合には,TOPPERS_SUPPORT_OVRHDRがkernel.h中で定義され
    241 ã‚‹ã®ã§ï¼Œã“れを用いてオーバランタイマ機能が使用できるかどうかを判別する
    242 ã“とができる.
    243 
    244 â—ã‚¿ã‚¹ã‚¯å„ªå
    245 ˆåº¦æ‹¡å¼µãƒ‘ッケージ
    246 
    247 ã‚¿ã‚¹ã‚¯å„ªå
    248 ˆåº¦æ‹¡å¼µãƒ‘ッケージは,タスク優å
    249 ˆåº¦ã‚’最大256段階に拡張するための
    250 æ‹¡å¼µãƒ‘ッケージである.この拡張パッケージは,タスク優å
    251 ˆåº¦ã«åŠ ãˆã¦ï¼Œãƒ‡ãƒ¼
    252 ã‚¿å„ªå
    253 ˆåº¦ï¼Œãƒ¡ãƒƒã‚»ãƒ¼ã‚¸å„ªå
    254 ˆåº¦ï¼Œå‰²è¾¼ã¿ã‚µãƒ¼ãƒ“スルーチン優å
    255 ˆåº¦ã‚‚256段階に拡張
    256 ã™ã‚‹ï¼Žã‚¿ã‚¹ã‚¯å„ªå
    257 ˆåº¦æ‹¡å¼µãƒ‘ッケージは,extension/pri_levelディレクトリに置
    258 ã„てある.
    259 
    260 ã‚¿ã‚¹ã‚¯å„ªå
    261 ˆåº¦æ‹¡å¼µãƒ‘ッケージでは,TOPPERS_SUPPORT_PRI_LEVELがkernel.h中で
    262 å®šç¾©ã•ã‚Œã¦ã„るので,これを用いてタスク優å
    263 ˆåº¦ã®ç¯„囲が拡張されているかど
    264 ã†ã‹ã‚’判別することができる.
    265 
    266 â—åˆ¶ç´„タスク拡張パッケージ
    267 
    268 åˆ¶ç´„タスク拡張パッケージは,制約タスクの機能を追加するための拡張パッケー
    269 ã‚¸ã§ã‚る.TOPPERS新世代カーネル統合仕様書に規定された制約タスクの機能に
    270 åŠ ãˆã¦ï¼Œè‡ªã‚¿ã‚¹ã‚¯ã®ãƒ™ãƒ¼ã‚¹å„ªå
    271 ˆåº¦ã‚’変更するサービスコールras_priを実è£
    272 ã—て
    273 ã„る.制約タスク拡張パッケージは,extension/rstr_taskディレクトリに置い
    274 ã¦ã‚る.
    275 
    276 åˆ¶ç´„タスク拡張パッケージでは,TOPPERS_SUPPORT_RSTR_TASKがkernel.h中で定
    277 ç¾©ã•ã‚Œã¦ã„るので,これを用いて制約タスクの機能が使用できるかどうかを判
    278 åˆ¥ã™ã‚‹ã“とができる.
    279 
    280 ----------------------------------------------------------------------
    281 ras_pri         è‡ªã‚¿ã‚¹ã‚¯ã®ãƒ™ãƒ¼ã‚¹å„ªå
    282 ˆåº¦ã®å¼•ãä¸Šã’〔T〕
    283 
    284 ã€C言語API】
     81これらのマクロの定義を空にする方法もあるが,パラメータに副作用のある式
     82が書かれている可能性を考えると(副作用のある式は書くべきではないが,書
     83かれているコードが入ってくる可能性が全くないとは言えない),上の定義の
     84方が安全である.副作用のない式であれば,最適化によって削除することがで
     85きるため,実行時効率には影響がないと期待できる.ただし,最適化によって
     86削除されない場合には,副作用のある式が書かれていないことを確認した上で,
     87マクロの定義を空にしてもよい.
     88
     89
     90○タイムティックの周期の変更
     91
     92ASPカーネルでは,カーネルへタイムティックを供給する周期は1ミリ秒が標準
     93となっているが,低速なプロセッサでは1ミリ秒毎に割込みを処理するオーバヘッ
     94ドが問題になる場合がある.そこで,アプリケーションが必要とする時間精度
     95が粗い場合には,タイムティックの周期を長くすることで,プロセッサの処理
     96負荷を低減する方法がある.
     97
     98タイムティックの周期の与え方はターゲット依存であるため,これが変更でき
     99るかどうかは,ターゲット依存部のタイマドライバの実装を調べる必要がある.
     100標準的には,target_kernel.h(またはそこからインクルードされるファイル)
     101中に定義されているTIC_NUMEとTIC_DENOを書き換えることで,変更できるよう
     102に実装されている.
     103
     104
     105○特殊目的のレジスタの扱い
     106
     107FPUレジスタやDSPレジスタなどの特殊目的のレジスタ(以下,特殊レジスタ)
     108を持つプロセッサでは,レジスタの扱いについて大きく次の3つの方法が考えら
     109れる.
     110
     111(1) 特殊レジスタをタスクのコンテキストに含めない
     112
     1131つのタスクのみが特殊レジスタを使用する場合には,特殊レジスタをタスクの
     114コンテキストに含める必要がなく,カーネルで管理する必要がない.
     115
     116(2) 特殊レジスタをタスクのコンテキストに含める
     117
     118複数のタスクが特殊レジスタを使用する場合には,特殊レジスタをタスクのコ
     119ンテキストに含める方法が最も単純である.そのためには,タスクディスパッ
     120チャと割込みハンドラ/CPU例外ハンドラの出入口で,特殊レジスタを保存/復帰
     121するコードを追加する必要がある.実際の保存/復帰場所は,スクラッチレジス
     122タとそれ以外のレジスタで異なるため,注意が必要である.
     123
     124(3) 特殊レジスタをコンテキストに含めるかどうかをタスク毎に指定する
     125
     126特殊レジスタを使用するタスクと使用しないタスクがある場合で,すべてのタ
     127スクのコンテキストに特殊レジスタを含める方法ではオーバヘッドが問題にな
     128る場合には,特殊レジスタをコンテキストに含めるかどうかをタスク毎に指定
     129する方法が有力である.これを実現する方法は次の通りである.
     130
     131まず,特殊レジスタをコンテキストに含めるかどうかを指定するタスク属性を
     132設ける.例えば,FPUレジスタであれば,タスク属性にTA_FPUを設ける.タスク
     133ディスパッチャでは,タスク属性を見て,その属性が設定されていれば特殊レ
     134ジスタを保存/復帰する.
     135
     136ハードウェア的に特殊レジスタがディスエーブルできる場合には,その属性が
     137設定されていないタスクに切り換える時に特殊レジスタをディスエーブルする
     138と,誤って特殊レジスタを使った場合を検出できる.
     139
     140さらに,割込みハンドラ(ISR,周期ハンドラ,アラームハンドラを含む)や
     141CPU例外ハンドラで特殊レジスタを使用する場合には,これらの処理単位にも
     142特殊レジスタを使用するかどうかの属性を設ける方法が考えられる.
     143
     144ここで,タスク(または他の処理単位)が特殊レジスタを使用するかどうかは,
     145コンパイラやライブラリに依存する場合があるため,注意が必要である.例え
     146ば,浮動小数点演算を含まないプログラムであっても,コンパイラがその方が
     147性能が高いと判断すれば,浮動小数点命令を生成する場合がある.
     148
     149
     150○拡張パッケージの使い方
     151
     152ASPカーネルでは,いくつかの拡張機能を実装するために,拡張パッケージをサ
     153ポートしている.拡張パッケージは,extensionディレクトリに置いてある.
     154
     155拡張パッケージを使用する場合には,UNIXであれば,ASPカーネルのソースファ
     156イルのトップディレクトリで,
     157
     158        % cp -r extension/<拡張パッケージのディレクトリ名>/* .
     159
     160を実行する.この時,元の(拡張前の)ソースファイルは上書きされてしまう
     161ため,拡張しないカーネルも使用したい場合には,別のディレクトリにソース
     162ファイルを展開して,上のコマンドを実行すること.
     163
     164複数の拡張パッケージを使うことは考慮していないが,以下に述べるケースを
     165除いては,手作業により複数の拡張パッケージをマージすることは可能である.
     166現時点では,ミューテックス機能拡張パッケージと制約タスク拡張パッケージ
     167をマージすることはできない.また,動的生成機能拡張パッケージを他の拡張
     168パッケージとマージすることは考慮していない.
     169
     170●ミューテックス機能拡張パッケージ
     171
     172ミューテックス機能拡張パッケージは,ミューテックス機能を追加するための
     173拡張パッケージである.ただし,優先度逆転を制御するための仕組みとして,
     174優先度上限ミューテックス(TA_CEILING属性のミューテックス)のみをサポー
     175トし,優先度継承ミューテックス(TA_INHERIT属性のミューテックス)はサポー
     176トしていない.ミューテックス機能拡張パッケージは,extension/mutexディレ
     177クトリに置いてある.
     178
     179ミューテックス機能拡張パッケージでは,TOPPERS_SUPPORT_MUTEXがkernel.h中
     180で定義されているので,これを用いてミューテックス機能を使用できるかどう
     181かを判別することができる.
     182
     183●メッセージバッファ機能拡張パッケージ
     184
     185メッセージバッファ機能拡張パッケージは,メッセージバッファ機能を追加す
     186るための拡張パッケージである.メッセージバッファ機能拡張パッケージは,
     187extension/messagebufディレクトリに置いてある.
     188
     189メッセージバッファ機能拡張パッケージでは,TOPPERS_SUPPORT_MESSAGEBUFが
     190kernel.h中で定義されているので,これを用いてメッセージバッファ機能を使
     191用できるかどうかを判別することができる.
     192
     193●オーバランハンドラ機能拡張パッケージ
     194
     195オーバランハンドラ機能拡張パッケージは,オーバランハンドラ機能を追加す
     196るための拡張パッケージである.ただし,この拡張パッケージを使うためには,
     197ターゲット依存部が対応している必要がある.オーバランハンドラ機能拡張パッ
     198ケージは,extension/ovrhdrディレクトリに置いてある.
     199
     200オーバランハンドラ機能拡張パッケージで,ターゲット依存部が拡張パッケー
     201ジに対応している場合には,TOPPERS_SUPPORT_OVRHDRがkernel.h中で定義され
     202るので,これを用いてオーバランタイマ機能が使用できるかどうかを判別する
     203ことができる.
     204
     205●タスク優先度拡張パッケージ
     206
     207タスク優先度拡張パッケージは,タスク優先度を最大256段階に拡張するための
     208拡張パッケージである.この拡張パッケージは,タスク優先度に加えて,デー
     209タ優先度,メッセージ優先度,割込みサービスルーチン優先度も256段階に拡張
     210する.タスク優先度拡張パッケージは,extension/pri_levelディレクトリに置
     211いてある.
     212
     213タスク優先度拡張パッケージでは,TOPPERS_SUPPORT_PRI_LEVELがkernel.h中で
     214定義されているので,これを用いてタスク優先度の範囲が拡張されているかど
     215うかを判別することができる.
     216
     217●制約タスク拡張パッケージ
     218
     219制約タスク拡張パッケージは,制約タスクの機能を追加するための拡張パッケー
     220ジである.TOPPERS新世代カーネル統合仕様書に規定された制約タスクの機能に
     221加えて,自タスクのベース優先度を変更するサービスコールras_priを実装して
     222いる.制約タスク拡張パッケージは,extension/rstr_taskディレクトリに置い
     223てある.
     224
     225制約タスク拡張パッケージでは,TOPPERS_SUPPORT_RSTR_TASKがkernel.h中で定
     226義されているので,これを用いて制約タスクの機能が使用できるかどうかを判
     227別することができる.
     228
     229----------------------------------------------------------------------
     230ras_pri         自タスクのベース優先度の引き上げ〔T〕
     231
     232【C言語API】
    285233        ER ercd = ras_pri(PRI tskpri)
    286234
    287 ã€ãƒ‘ラメータ】
    288         PRI                     tskpri          ベース優å
    289 ˆåº¦
    290 
    291 ã€ãƒªã‚¿ãƒ¼ãƒ³ãƒ‘ラメータ】
    292         ER                      ercd            正常終了(E_OK)またはエラーコード
    293 
    294 ã€ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ã€‘
    295         E_CTX           ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ©ãƒ¼
    296                                 ・非タスクコンテキストからの呼出し
    297                                 ・CPUロック状æ
    298 ‹ã‹ã‚‰ã®å‘¼å‡ºã—
    299         E_PAR           ãƒ‘ラメータエラー
    300                                 ・tskpriが有効範囲外
    301         E_ILUSE         ã‚µãƒ¼ãƒ“スコール不正使用
    302                                 ・条件については機能のé 
    303 ã‚’参ç
    304 §
    305 
    306 ã€æ©Ÿèƒ½ã€‘
    307 
    308 è‡ªã‚¿ã‚¹ã‚¯ã®ãƒ™ãƒ¼ã‚¹å„ªå
    309 ˆåº¦ã‚’,tskpriで指定した優å
    310 ˆåº¦ã«å¤‰æ›´ã™ã‚‹ï¼Žå
    311 ·ä½“的な振
    312 èˆžã„は以下の通り.
    313 
    314 è‡ªã‚¿ã‚¹ã‚¯ã®ãƒ™ãƒ¼ã‚¹å„ªå
    315 ˆåº¦ãŒï¼Œtskpriで指定した優å
    316 ˆåº¦ã«å¤‰æ›´ã•ã‚Œã‚‹ï¼Žãã‚Œã«ä¼´ã£
    317 ã¦ï¼Œè‡ªã‚¿ã‚¹ã‚¯ã®ç¾åœ¨å„ªå
    318 ˆåº¦ã‚‚変更される.同じ優å
    319 ˆåº¦ã®ã‚¿ã‚¹ã‚¯ã®ä¸­ã§ã¯ï¼Œè‡ªã‚¿
    320 ã‚¹ã‚¯ãŒæœ€é«˜å„ªå
    321 ˆé †ä½ã¨ãªã‚‹ï¼Ž
    322 
    323 tskpriにTPRI_INI(=0)を指定すると,自タスクのベース優å
    324 ˆåº¦ãŒï¼Œèµ·å‹•æ™‚優
    325 å
    326 ˆåº¦ã«å¤‰æ›´ã•ã‚Œã‚‹ï¼Ž
    327 
    328 tskpriは,自タスクの起動時優å
    329 ˆåº¦ã¨åŒã˜ã‹ãã‚Œã‚ˆã‚Šã‚‚高くなければならない.
    330 ãã†ã§ãªã„場合には,E_ILUSEエラーとなる.
    331 ----------------------------------------------------------------------
    332 
    333 â—å‹•çš„生成機能拡張パッケージ
    334 
    335 å‹•çš„生成機能拡張パッケージは,オブジェクトの動的生成機能を追加するため
    336 ã®æ‹¡å¼µãƒ‘ッケージである.TOPPERS新世代カーネル統合仕様書に規定された以下
    337 ã®ã‚ªãƒ–ジェクト生成/削除のためのサービスコール,割付け可能なID番号の数
    338 ã‚’指定する静的APIに加えて,カーネルが割り付けるメモリ領域を設定する静的
    339 API DEF_KMMを実è£
    340 ã—ている.動的生成機能拡張パッケージは,extension/dcre
    341 ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ç½®ã„てある.
    342 
    343 ãŸã ã—,カーネルå†
    344 ã§ã®å‹•çš„メモリ管理に関しては,ターゲット非依存部では,
    345 ãƒ¡ãƒ¢ãƒªé ˜åŸŸã‚’å
    346 ˆé ­ã‹ã‚‰é †ã«å‰²ã‚Šå½“て,解放されたメモリ領域を再利用しないメ
    347 ãƒ¢ãƒªç®¡ç†ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã¿ã‚’実è£
    348 ã—ている.本格的な動的メモリ管理を行いたい
    349 å ´åˆã«ã¯ï¼Œã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã¾ãŸã¯ãƒ¦ãƒ¼ã‚¶å´ã§ï¼Œãã®ãŸã‚ã®é–¢æ•°ã‚’用意するå¿
    350 
    351 è¦ãŒã‚る.用意する関数等については,「TOPPERS/ASPカーネル ターゲット依
    352 å­˜éƒ¨ ポーティングガイド」の「6.15 動的メモリ管理」の節を参ç
    353 §ã™ã‚‹ã“と.
    354 
    355 å‹•çš„機能拡張拡張パッケージでは,TOPPERS_SUPPORT_DYNAMIC_CREがkernel.h中
    356 ã§å®šç¾©ã•ã‚Œã¦ã„るので,これを用いて動的生成機能が使用できるかどうかを判
    357 åˆ¥ã™ã‚‹ã“とができる.
    358 
    359 å‹•çš„生成機能拡張パッケージにより追加されるサービスコール
     235【パラメータ】
     236        PRI                     tskpri          ベース優先度
     237
     238【リターンパラメータ】
     239        ER                      ercd            正常終了(E_OK)またはエラーコード
     240
     241【エラーコード】
     242        E_CTX           コンテキストエラー
     243                                ・非タスクコンテキストからの呼出し
     244                                ・CPUロック状態からの呼出し
     245        E_PAR           パラメータエラー
     246                                ・tskpriが有効範囲外
     247        E_ILUSE         サービスコール不正使用
     248                                ・条件については機能の項を参照
     249
     250【機能】
     251
     252自タスクのベース優先度を,tskpriで指定した優先度に変更する.具体的な振
     253舞いは以下の通り.
     254
     255自タスクのベース優先度が,tskpriで指定した優先度に変更される.それに伴っ
     256て,自タスクの現在優先度も変更される.同じ優先度のタスクの中では,自タ
     257スクが最高優先順位となる.
     258
     259tskpriにTPRI_INI(=0)を指定すると,自タスクのベース優先度が,起動時優
     260先度に変更される.
     261
     262tskpriは,自タスクの起動時優先度と同じかそれよりも高くなければならない.
     263そうでない場合には,E_ILUSEエラーとなる.
     264----------------------------------------------------------------------
     265
     266●動的生成機能拡張パッケージ
     267
     268動的生成機能拡張パッケージは,オブジェクトの動的生成機能を追加するため
     269の拡張パッケージである.TOPPERS新世代カーネル統合仕様書に規定された以下
     270のオブジェクト生成/削除のためのサービスコール,割付け可能なID番号の数
     271を指定する静的APIに加えて,カーネルが割り付けるメモリ領域を設定する静的
     272API DEF_KMMを実装している.動的生成機能拡張パッケージは,extension/dcre
     273ディレクトリに置いてある.
     274
     275ただし,カーネル内での動的メモリ管理に関しては,ターゲット非依存部では,
     276メモリ領域を先頭から順に割り当て,解放されたメモリ領域を再利用しないメ
     277モリ管理モジュールのみを実装している.本格的な動的メモリ管理を行いたい
     278場合には,ターゲット依存部またはユーザ側で,そのための関数を用意する必
     279要がある.用意する関数等については,「TOPPERS/ASPカーネル ターゲット依
     280存部 ポーティングガイド」の「6.15 動的メモリ管理」の節を参照すること.
     281
     282動的機能拡張拡張パッケージでは,TOPPERS_SUPPORT_DYNAMIC_CREがkernel.h中
     283で定義されているので,これを用いて動的生成機能が使用できるかどうかを判
     284別することができる.
     285
     286動的生成機能拡張パッケージにより追加されるサービスコール
    360287
    361288        ER_ID tskid = acre_tsk(const T_CTSK *pk_ctsk)
     
    381308        ER ercd = del_isr(ID isrid)
    382309
    383 å‹•çš„生成機能拡張パッケージにより追加される静的API
     310動的生成機能拡張パッケージにより追加される静的API
    384311
    385312        AID_TSK(uint_t notsk)
     
    396323
    397324----------------------------------------------------------------------
    398 DEF_KMM         ã‚«ãƒ¼ãƒãƒ«ãŒå‰²ã‚Šä»˜ã‘るメモリ領域の設定〔SD〕
    399 
    400 ã€é™çš„API】
     325DEF_KMM         カーネルが割り付けるメモリ領域の設定〔SD〕
     326
     327【静的API】
    401328        DEF_KMM({ SIZE kmmsz, STK_T *kmm })
    402329
    403 ã€ãƒ‘ラメータ】
    404 ã€€ï¼Šã‚«ãƒ¼ãƒãƒ«ãŒå‰²ã‚Šä»˜ã‘るメモリ領域の設定æƒ
    405 å ±
    406         SIZE            kmmsz           ã‚«ãƒ¼ãƒãƒ«ãŒå‰²ã‚Šä»˜ã‘るメモリ領域のサイズ(バイト数)
    407         STK_T           kmm                     ã‚«ãƒ¼ãƒãƒ«ãŒå‰²ã‚Šä»˜ã‘るメモリ領域のå
    408 ˆé ­ç•ªåœ°
    409 
    410 ã€ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ã€‘
    411         E_PAR           ãƒ‘ラメータエラー
    412                                 ・kmmszが0以下
    413                                 ・その他の条件については機能のé 
    414 ã‚’参ç
    415 §
    416         E_OBJ           ã‚ªãƒ–ジェクト状æ
    417 ‹ã‚¨ãƒ©ãƒ¼
    418                                 ・カーネルが割り付けるメモリ領域が設定済み
    419 
    420 ã€æ©Ÿèƒ½ã€‘
    421 
    422 å„パラメータで指定したカーネルが割り付けるメモリ領域の設定æƒ
    423 å ±ã«å¾“って,
    424 ã‚«ãƒ¼ãƒãƒ«ãŒå‰²ã‚Šä»˜ã‘るメモリ領域を設定する.
    425 
    426 kmmszは整数定数式パラメータ,kmmは一般定数式パラメータである.
    427 
    428 kmmをNULLとした場合,kmmszで指定したサイズのメモリ領域を,コンフィギュ
    429 ãƒ¬ãƒ¼ã‚¿ãŒç¢ºä¿ã™ã‚‹ï¼Žkmmszにターゲット定義の制約に合致しないサイズを指定し
    430 ãŸæ™‚には,ターゲット定義の制約に合致するようにサイズを大きい方に丸めて
    431 ç¢ºä¿ã™ã‚‹ï¼Ž
    432 
    433 ã‚«ãƒ¼ãƒãƒ«ãŒå‰²ã‚Šä»˜ã‘るメモリ領域をアプリケーションで確保する場合には,
    434 kmmszで指定したサイズのメモリ領域を確保し,kmmにそのå
    435 ˆé ­ç•ªåœ°ã‚’指定する.
    436 
    437 DEF_KMMによりカーネルが割り付けるメモリ領域を設定しない場合,カーネルが
    438 å‰²ã‚Šä»˜ã‘るメモリ領域は確保されない.
    439 
    440 kmmやkmmszにターゲット定義の制約に合致しないå
    441 ˆé ­ç•ªåœ°ã‚„サイズを指定した
    442 æ™‚には,E_PARエラーとなる.
    443 ----------------------------------------------------------------------
    444 
    445 
    446 â—‹CPU例外ハンドラの直接呼出し
    447 
    448 CPU例外ハンドラの出å
    449 ¥å£å‡¦ç†ã¯ï¼ŒCPU例外が発生しないように実è£
    450 ã—なければ
    451 ãªã‚‰ãªã„が,これが防げないターゲットにおいては,CPU例外ハンドラの出å
    452 ¥å£
    453 å‡¦ç†ã‚’経由せずに,アプリケーションが用意したCPU例外ハンドラを直接実行す
    454 ã‚‹æ–¹æ³•ã‚’用意するのが望ましい.これを,CPU例外ハンドラの直接呼出しと呼ぶ.
    455 
    456 ã“こでは,ハードウェアでベクタテーブルを持つプロセッサにおいて,ターゲッ
    457 ãƒˆä¾å­˜éƒ¨ã®ã¿ã®ä¿®æ­£ã«ã‚ˆã‚Šï¼ŒCPU例外ハンドラの直接呼出しの機能を追加する方
    458 æ³•ã«ã¤ã„て説明する.
    459 
    460 â—TA_DIRECT属性の導å
    461 ¥
    462 
    463 CPU例外ハンドラの直接呼出しを指定するために,CPU例外ハンドラ属性に,
    464 TA_DIRECT属性を導å
    465 ¥ã™ã‚‹ï¼Ž
    466 
    467 â—ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã®ä¿®æ­£ç®‡æ‰€
    468 
    469 TA_DIRECTの値を,target_kernel.h(または,そこからインクルードされるファ
    470 ã‚¤ãƒ«ï¼‰ã§å®šç¾©ã—,その値をコンフィギュレータが取り出せるように,
    471 target_def.csv(または,それに代わるファイル)に次の行を追加する.
     330【パラメータ】
     331 *カーネルが割り付けるメモリ領域の設定情報
     332        SIZE            kmmsz           カーネルが割り付けるメモリ領域のサイズ(バイト数)
     333        STK_T           kmm                     カーネルが割り付けるメモリ領域の先頭番地
     334
     335【エラーコード】
     336        E_PAR           パラメータエラー
     337                                ・kmmszが0以下
     338                                ・その他の条件については機能の項を参照
     339        E_OBJ           オブジェクト状態エラー
     340                                ・カーネルが割り付けるメモリ領域が設定済み
     341
     342【機能】
     343
     344各パラメータで指定したカーネルが割り付けるメモリ領域の設定情報に従って,
     345カーネルが割り付けるメモリ領域を設定する.
     346
     347kmmszは整数定数式パラメータ,kmmは一般定数式パラメータである.
     348
     349kmmをNULLとした場合,kmmszで指定したサイズのメモリ領域を,コンフィギュ
     350レータが確保する.kmmszにターゲット定義の制約に合致しないサイズを指定し
     351た時には,ターゲット定義の制約に合致するようにサイズを大きい方に丸めて
     352確保する.
     353
     354カーネルが割り付けるメモリ領域をアプリケーションで確保する場合には,
     355kmmszで指定したサイズのメモリ領域を確保し,kmmにその先頭番地を指定する.
     356
     357DEF_KMMによりカーネルが割り付けるメモリ領域を設定しない場合,カーネルが
     358割り付けるメモリ領域は確保されない.
     359
     360kmmやkmmszにターゲット定義の制約に合致しない先頭番地やサイズを指定した
     361時には,E_PARエラーとなる.
     362----------------------------------------------------------------------
     363
     364
     365○CPU例外ハンドラの直接呼出し
     366
     367CPU例外ハンドラの出入口処理は,CPU例外が発生しないように実装しなければ
     368ならないが,これが防げないターゲットにおいては,CPU例外ハンドラの出入口
     369処理を経由せずに,アプリケーションが用意したCPU例外ハンドラを直接実行す
     370る方法を用意するのが望ましい.これを,CPU例外ハンドラの直接呼出しと呼ぶ.
     371
     372ここでは,ハードウェアでベクタテーブルを持つプロセッサにおいて,ターゲッ
     373ト依存部のみの修正により,CPU例外ハンドラの直接呼出しの機能を追加する方
     374法について説明する.
     375
     376●TA_DIRECT属性の導入
     377
     378CPU例外ハンドラの直接呼出しを指定するために,CPU例外ハンドラ属性に,
     379TA_DIRECT属性を導入する.
     380
     381●ターゲット依存部の修正箇所
     382
     383TA_DIRECTの値を,target_kernel.h(または,そこからインクルードされるファ
     384イル)で定義し,その値をコンフィギュレータが取り出せるように,
     385target_def.csv(または,それに代わるファイル)に次の行を追加する.
    472386
    473387TA_DIRECT,TA_DIRECT
    474388
    475 æ¬¡ã«ï¼Œtarget.tf(または,そこからインクルードされるファイル)で,
    476 TARGET_EXCATRに設定される値に,TA_DIRECTを追加する.例えば,他のターゲッ
    477 ãƒˆä¾å­˜ã®CPU例外ハンドラ属性がない場合には,次のように設定する.
     389次に,target.tf(または,そこからインクルードされるファイル)で,
     390TARGET_EXCATRに設定される値に,TA_DIRECTを追加する.例えば,他のターゲッ
     391ト依存のCPU例外ハンドラ属性がない場合には,次のように設定する.
    478392
    479393$TARGET_EXCATR = TA_DIRECT$
    480394
    481 æ¬¡ã«ï¼ŒOMIT_INITILIZE_EXCEPTIONを用いて,CPU例外ハンドラの出å
    482 ¥å£å‡¦ç†ã‚’生
    483 æˆã™ã‚‹ãŸã‚ã®è¨˜è¿°ã¨CPU例外ハンドラ初期化ブロックの標準の定義が生成される
    484 ã®ã‚’抑止し,それによって抑止される部分をtarget.tfにコピーした上で,以下
    485 ã®ä¿®æ­£ã‚’加える.
    486 
    487 CPU例外ハンドラの出å
    488 ¥å£å‡¦ç†ã‚’生成するための記述(EXCHDR_ENTRYのリスト)
    489 ã‚’生成する部分は,次のように修正する.
     395次に,OMIT_INITILIZE_EXCEPTIONを用いて,CPU例外ハンドラの出入口処理を生
     396成するための記述とCPU例外ハンドラ初期化ブロックの標準の定義が生成される
     397のを抑止し,それによって抑止される部分をtarget.tfにコピーした上で,以下
     398の修正を加える.
     399
     400CPU例外ハンドラの出入口処理を生成するための記述(EXCHDR_ENTRYのリスト)
     401を生成する部分は,次のように修正する.
    490402
    491403$FOREACH excno EXC.ORDER_LIST$
     
    495407$END$
    496408
    497 ã¾ãŸï¼ŒCPU例外ハンドラ初期化ブロックの定義を生成する部分は,次のように修
    498 æ­£ã™ã‚‹ï¼Ž
     409また,CPU例外ハンドラ初期化ブロックの定義を生成する部分は,次のように修
     410正する.
    499411
    500412$IF LENGTH(EXC.ORDER_LIST)$
     
    512424$END$
    513425
    514 ä»¥ä¸Š
     426以上
Note: See TracChangeset for help on using the changeset viewer.