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/user.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                 最終更新: 2017å¹´4月29日
    7 
    8 ã“のドキュメントは,TOPPERS/ASPカーネルを使用するためにå¿
    9 è¦ãªäº‹é 
    10 ã‚’説明
    11 ã™ã‚‹ã‚‚のである.
     2                TOPPERS/ASPカーネル
     3                ユーザーズマニュアル
     4
     5                対応バージョン: Release 1.9.3
     6                最終更新: 2017年4月29日
     7
     8このドキュメントは,TOPPERS/ASPカーネルを使用するために必要な事項を説明
     9するものである.
    1210
    1311----------------------------------------------------------------------
     
    1917             Graduate School of Information Science, Nagoya Univ., JAPAN
    2018 
    21  ä¸Šè¨˜è‘—作権è€
    22 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    23  ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
    24  å¤‰ãƒ»å†é
    25 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    26  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    27      æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
    28      ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
    29  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    30      ç”¨ã§ãã‚‹å½¢ã§å†é
    31 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    32 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    33      è€
    34 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    35      ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
    36  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    37      ç”¨ã§ããªã„形で再é
    38 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    39      ã¨ï¼Ž
    40    (a) 再é
    41 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    42 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    43        ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
    44    (b) 再é
    45 å¸ƒã®å½¢æ
    46 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    47        å ±å‘Šã™ã‚‹ã“と.
    48  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    49      å®³ã‹ã‚‰ã‚‚,上記著作権è€
    50 ãŠã‚ˆã³TOPPERSプロジェクトをå
    51 è²¬ã™ã‚‹ã“と.
    52      ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
    53      ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
    54 ãŠã‚ˆã³TOPPERSプロジェクトを
    55      å
    56 è²¬ã™ã‚‹ã“と.
     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     免責すること.
    5741 
    58  æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    59 ãŠ
    60  ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    61  ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    62  ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    63  ã®è²¬ä»»ã‚’負わない.
     42 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     43 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     44 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     45 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     46 の責任を負わない.
    6447 
    6548 $Id$
    6649----------------------------------------------------------------------
    6750
    68 â—‹ç›®æ¬¡
    69 
    70 ï¼‘.TOPPERS/ASPカーネルの概要
    71         1.1 TOPPERS/ASPカーネルの位置付け
    72         1.2 TOPPERS/ASPカーネルの仕様
    73         1.3 マイグレーションガイド
    74         1.4 機能拡張・チューニングガイド
    75         1.5 既知の問題
    76         1.6 Cygwin環境における注意事é 
    77 
    78 ï¼’.ターゲット依存部
    79         2.1 ターゲット依存部の概要
    80         2.2 簡易パッケージ
    81         2.3 個別パッケージ
    82 ï¼“.クイックスタートガイド
    83         3.1 開発環境の準備
    84         3.2 コンフィギュレータの構築
    85         3.3 サンプルプログラムの構築と実行
    86         3.4 カーネルを関数単位でライブラリ化する方法
    87         3.5 アプリケーションとカーネルを別ã€
    88 ã«æ§‹ç¯‰ã™ã‚‹æ–¹æ³•
    89 ï¼”.ディレクトリ構成・ファイル構成
    90         4.1 é
    91 å¸ƒãƒ‘ッケージのディレクトリ構成
    92         4.2 ターゲット非依存部のファイル構成
    93 ï¼•ï¼Žã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トの使い方
    94 ï¼–.Makefileの修正方法
    95         6.1 Makefileの変数定義
    96         6.2 コンパイルオプション
    97 ï¼—.コンフィギュレータの使い方
    98 ï¼˜ï¼Žã‚·ã‚¹ãƒ†ãƒ ã‚µãƒ¼ãƒ“ス
    99         8.1 システムログ機能
    100                 8.1.1 システムログ機能の位置付け
    101                 8.1.2 ログバッファへの記録と低レベル出力
    102                 8.1.3 ログæƒ
    103 å ±ã®ç¨®åˆ¥
    104                 8.1.4 ログæƒ
    105 å ±ã®é‡è¦åº¦
    106                 8.1.5 ログæƒ
    107 å ±ã®ãƒ‡ãƒ¼ã‚¿æ§‹é€ 
    108                 8.1.6 システムログ機能のサービスコール
    109                 8.1.7 システムログ機能のためのライブラリ関数とマクロ
    110                 8.1.8 システムログ機能のその他のサービス
    111         8.2 シリアルインタフェースドライバ
    112                 8.2.1 シリアルインタフェースドライバのサービスコール
    113                 8.2.2 シリアルインタフェースドライバのその他のサービス
    114         8.3 システムログタスク
    115                 8.3.1 システムログタスクのサービスコール
    116                 8.3.2 システムログタスクのその他のサービス
    117         8.4 カーネル起動メッセージの出力
    118 ï¼™ï¼Žã‚µãƒãƒ¼ãƒˆãƒ©ã‚¤ãƒ–ラリ
    119         9.1 基本的なライブラリ関数
    120         9.2 キュー操作ライブラリ関数
    121         9.3 システムログ出力用ライブラリ関数
    122         9.4 実行時間分布集計モジュール
    123 ï¼‘0.テストプログラム
    124         10.1 テストプログラム用ライブラリ
    125         10.2 カーネルの整合性検査
    126         10.3 機能テストプログラム
    127         10.4 性能評価プログラム
    128 ï¼‘1.使用上の注意とヒント
    129         11.1 タイマドライバの組込み
    130         11.2 assertマクロの処理
    131         11.3 システムログ機能の扱い
    132         11.4 オブジェクトIDの管理
    133         11.5 カーネルのå†
    134 éƒ¨ã‚·ãƒ³ãƒœãƒ«ã®ãƒªãƒãƒ¼ãƒ 
    135         11.6 トレースログ記録のサンプルコードの使用方法
    136         11.7 システムの起動時の初期化処理
    137         11.8 rodataセクションをRAMに置く場合
    138 ï¼‘2.参考æƒ
    139 å ±
    140         12.1 利用条件と利用報告
    141         12.2 保証・適用性・サポート
    142         12.3 バグレポート
    143         12.4 ウェブサイト
    144         12.5 TOPPERSユーザーズメーリングリスト
    145         12.6 TOPPERSプロジェクトのメンバ向けのサービス
    146         12.7 TOPPERSプロジェクトへの参加
    147 ï¼‘3.リファレンス
    148         13.1 サービスコール一覧
    149         13.2 静的API一覧
    150         13.3 バージョン履歴
    151 
    152 
    153 ï¼‘.TOPPERS/ASPカーネルの概要
    154 
    155 1.1 TOPPERS/ASPカーネルの位置付け
    156 
    157 TOPPERS/ASPカーネル(以下,ASPカーネル)は,TOPPERS新世代カーネルの基盤
    158 ã¨ãªã‚‹ã‚‚のとして,TOPPERSプロジェクトにおいて開発したリアルタイムカーネ
    159 ãƒ«ã§ã‚る.μITRON4.0仕様のスタンダードプロファイル準拠のリアルタイムカー
    160 ãƒãƒ«ã§ã‚ã‚‹TOPPERS/JSPカーネルを拡張・改良する形で開発した.
    161 
    162 1.2 TOPPERS/ASPカーネルの仕様
    163 
    164 ASPカーネルの仕様の概要については,「TOPPERS/ASPカーネルの仕様概要」を
    165 å‚ç
    166 §ã™ã‚‹ã“と.また,ASPカーネルを含むTOPPERS新世代カーネルの仕様の詳細
    167 ã«ã¤ã„ては,別途PDFファイルの形でé
    168 å¸ƒã—ている「TOPPERS新世代カーネル統
    169 åˆä»•æ§˜æ›¸ï¼ˆRelease 1.7.1)」を参ç
    170 §ã™ã‚‹ã“と.
    171 
    172 1.3 マイグレーションガイド
    173 
    174 å¾“来のTOPPERSカーネルや他のμITRON4.0仕様準拠のカーネルから,TOPPERS新
    175 ä¸–代カーネルに移行するための方法(またはヒント)を説明した「TOPPERS新世
    176 ä»£ã‚«ãƒ¼ãƒãƒ«ã¸ã®ãƒžã‚¤ã‚°ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¬ã‚¤ãƒ‰ã€ã‚’,別途PDFファイルの形でé
    177 å¸ƒã—て
    178 ã„る.å¿
    179 è¦ã«å¿œã˜ã¦å‚ç
    180 §ã™ã‚‹ã“と.
    181 
    182 1.4 機能拡張・チューニングガイド
    183 
    184 TOPPERS/ASPカーネルを,機能拡張・チューニングするための方法(またはヒン
    185 ãƒˆï¼‰ã‚’説明した「機能拡張・チューニングガイド」を用意している.拡張パッ
    186 ã‚±ãƒ¼ã‚¸ã®ä½¿ç”¨æ–¹æ³•ã¯ï¼Œã€Œæ©Ÿèƒ½æ‹¡å¼µãƒ»ãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°ã‚¬ã‚¤ãƒ‰ã€ã«å«ã¾ã‚Œã¦ã„る.å¿
    187 
    188 è¦ã«å¿œã˜ã¦å‚ç
    189 §ã™ã‚‹ã“と.
    190 
    191 1.5 既知の問題
    192 
    193 å‰²è¾¼ã¿ã‚µãƒ¼ãƒ“スルーチンのå
    194 ˆé ­ç•ªåœ°ï¼ˆATT_ISRのisr),割込みハンドラのå
    195 ˆé ­
    196 ç•ªåœ°ï¼ˆDEF_INHのinthdr),CPU例外ハンドラのå
    197 ˆé ­ç•ªåœ°ï¼ˆDEF_EXCのexchdr),
    198 åˆæœŸåŒ–ルーチンのå
    199 ˆé ­ç•ªåœ°ï¼ˆATT_INIのinirtn),終了処理ルーチンのå
    200 ˆé ­ç•ªåœ°
    201 ï¼ˆATT_TERのterrtn)がプログラムの開始番地として正しくない場合のエラーは,
    202 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã«æ¤œå‡ºã•ã‚Œãªã„場合がある(ターゲットに依存).
    203 
    204 kernel_cfg.c(およびcfg1_out.c)は,カーネル,システムサービス,アプリ
    205 ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®ã„ずれのインクルードファイルもインクルードし,いずれのシン
    206 ãƒœãƒ«ã‚‚参ç
    207 §ã™ã‚‹å¯èƒ½æ€§ãŒã‚る.そのため,カーネル,システムサービス,アプ
    208 ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã§ã‚·ãƒ³ãƒœãƒ«ç­‰ãŒè¡çªã—ている場合や,コンパイルオプションが食
    209 ã„違っている場合に,kernel_cfg.c(およびcfg1_out.c)が正しくコンパイル
    210 ã§ããªããªã‚‹å ´åˆãŒè€ƒãˆã‚‰ã‚Œã‚‹ï¼Žã‚«ãƒ¼ãƒãƒ«ã®ã‚·ãƒ³ãƒœãƒ«ã‚’リネームするなどの方
    211 æ³•ã§è»½æ¸›ã•ã‚Œã¦ã¯ã„るが,問題がなくなっているわけではない.
    212 
    213 ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã‹ã‚‰ï¼Œã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã«å¯¾ã™ã‚‹
    214 INCLUDEディレクティブにより他のコンフィギュレーションファイルをインクルー
    215 ãƒ‰ã—ている場合に,その中に含まれるC言語プリプロセッサのインクルードディ
    216 ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–(#include)で,コンフィギュレーションファイルの置かれている
    217 ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãŒï¼Œãƒ•ã‚¡ã‚¤ãƒ«ã‚’検索するパスにはいらないという問題がある.例
    218 ãˆã°ï¼Œsyssvc/syslog.cfgに「#include "syslog.h"」と記述できないのは,こ
    219 ã®å•é¡ŒãŒã‚るためである.
    220 
    221 ç¾æ™‚点では,アドレスが64ビットの環境には対応していない.64ビットアドレ
    222 ã‚¹ç’°å¢ƒã‚’サポートするための最大の課題は,モトローラSレコードフォーマット
    223 ãŒ64ビットアドレスに対応していないことである.
    224 
    225 1.6 Cygwin環境における注意事é 
    226 
    227 
    228 Cygwin環境においては,ディレクトリの指定を相対パスで行うことを推奨する.
    229 ã“れは,Cygwin環境の絶対パスは,Windowsネイティブでビルドされたツールは
    230 è§£é‡ˆã§ããªã„ためである.
    231 
    232 
    233 ï¼’.ターゲット依存部
    234 
    235 2.1 ターゲット依存部の概要
    236 
    237 ASPカーネルのターゲット非依存部と,各種のターゲットシステムに対応するた
    238 ã‚ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã¯ï¼Œåˆ¥ã€
    239 ã«é–‹ç™ºã•ã‚Œã¦ã„る.そのため,ASPカーネルが対
    240 å¿œã—ているすべてのターゲット依存部を,バージョンを整合させてパッケージ
    241 åŒ–することは困難である.そこで,主に初級のユーザを対象にした簡易パッケー
    242 ã‚¸ã¨ï¼Œä¸Šç´šã®ãƒ¦ãƒ¼ã‚¶ã‚„カーネル開発è€
    243 ã‚’対象にした個別パッケージを用意して
    244 ã„る.
    245 
    246 ASPカーネルを未サポートのターゲットシステムへポーティングするためにå¿
    247 è¦
    248 ãªä½œæ¥­ã¯ï¼Œé–‹ç™ºç’°å¢ƒã®æ§‹ç¯‰ã¨æ¨™æº–の開発環境との差異の吸収,カーネル自身の
    249 ãƒãƒ¼ãƒ†ã‚£ãƒ³ã‚°ï¼Œã‚·ã‚¹ãƒ†ãƒ ã‚µãƒ¼ãƒ“スのポーティングなどからなる.詳しくは,
    250 ã€Œã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ ポーティングガイド」を参ç
    251 §ã™ã‚‹ã“と.
    252 
    253 2.2 簡易パッケージ
    254 
    255 ç°¡æ˜“パッケージは,ASPカーネルが対応しているターゲットシステム毎に用意さ
    256 ã‚Œï¼Œãã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ä¸Šã§ASPカーネルを動作させるためにå¿
    257 è¦ãªãƒ•ã‚¡ã‚¤
    258 ãƒ«ä¸€å¼ã‚’パッケージ化したものである.簡易パッケージに含まれるファイルは,
    259 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒæ•´åˆã—ていることが確認されている.
    260 
    261 ç°¡æ˜“パッケージのバージョン番号は,パッケージ化した日付とすることを原則
    262 ã¨ã™ã‚‹ãŒï¼Œã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ æ¯Žã®äº‹æƒ
    263 ã«ã‚ˆã‚Šã“の原則に従わない場合がある.
    264 
    265 ç°¡æ˜“パッケージは,基本的には,次に説明する個別パッケージを複数まとめた
    266 ã‚‚のである.そのため,対象ターゲットシステムにå¿
    267 è¦ã®ãªã„ファイルも含ま
    268 ã‚Œã¦ã„る.また,簡易パッケージに含まれている個別パッケージのバージョン
    269 ã¯ï¼Œå€‹åˆ¥ãƒ‘ッケージのMANIFESTファイルを参ç
    270 §ã™ã‚‹ã“とで知ることができる.
    271 
    272 2.3 個別パッケージ
    273 
    274 å€‹åˆ¥ãƒ‘ッケージは,ASPカーネルの開発単位毎に,その開発単位で開発をæ‹
    275 å½“し
    276 ã¦ã„るファイル一式をパッケージ化したものである.ASPカーネルのターゲット
    277 éžä¾å­˜éƒ¨ã‚‚,一つの個別パッケージとしてé
    278 å¸ƒã•ã‚Œã‚‹ï¼Žã‚る個別パッケージを
    279 ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã¯ï¼Œä¸€èˆ¬ã«ã¯ï¼Œä»–の個別パッケージがå¿
    280 è¦ã¨ãªã‚‹ï¼Žã‚¿ãƒ¼ã‚²ãƒƒãƒˆ
    281 ä¾å­˜éƒ¨ã®å€‹åˆ¥ãƒ‘ッケージを使用するためにå¿
    282 è¦ã¨ãªã‚‹å€‹åˆ¥ãƒ‘ッケージとそのバー
    283 ã‚¸ãƒ§ãƒ³ã«ã¤ã„ては,ターゲット依存部のユーザーズマニュアルを参ç
    284 §ã™ã‚‹ã“と.
    285 ä½¿ç”¨ã™ã‚‹å€‹åˆ¥ãƒ‘ッケージのバージョンを整合させることは,ユーザの責任であ
    286 ã‚‹ï¼Ž
    287 
    288 å€‹åˆ¥ãƒ‘ッケージのバージョン番号は,X.Y.Zの形で表現される.ターゲット非依
    289 å­˜éƒ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚’,ASPカーネルå
    290 ¨ä½“のリリース番号とする.ターゲット
    291 ä¾å­˜éƒ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã¯ï¼ŒXとYが,それが依存するターゲット非依存部と一
    292 è‡´ã—ている.それに対して,Zは一致しているとは限らない.例えば,ターゲッ
    293 ãƒˆéžä¾å­˜éƒ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³1.1.0に対応するターゲット依存部は,バージョン
    294 1.1.Zの形となる.ターゲット依存部のみがバージョンアップした場合には,Z
    295 ãŒå¤‰æ›´ã•ã‚Œã‚‹ï¼Ž
    296 
    297 ä½¿ç”¨ã™ã‚‹å€‹åˆ¥ãƒ‘ッケージは,次の例のように,ターゲット非依存部の個別パッ
    298 ã‚±ãƒ¼ã‚¸ã‚’展開したのと同じディレクトリで展開する.
     51○目次
     52
     531.TOPPERS/ASPカーネルの概要
     54        1.1 TOPPERS/ASPカーネルの位置付け
     55        1.2 TOPPERS/ASPカーネルの仕様
     56        1.3 マイグレーションガイド
     57        1.4 機能拡張・チューニングガイド
     58        1.5 既知の問題
     59        1.6 Cygwin環境における注意事項
     602.ターゲット依存部
     61        2.1 ターゲット依存部の概要
     62        2.2 簡易パッケージ
     63        2.3 個別パッケージ
     643.クイックスタートガイド
     65        3.1 開発環境の準備
     66        3.2 コンフィギュレータの構築
     67        3.3 サンプルプログラムの構築と実行
     68        3.4 カーネルを関数単位でライブラリ化する方法
     69        3.5 アプリケーションとカーネルを別々に構築する方法
     704.ディレクトリ構成・ファイル構成
     71        4.1 配布パッケージのディレクトリ構成
     72        4.2 ターゲット非依存部のファイル構成
     735.コンフィギュレーションスクリプトの使い方
     746.Makefileの修正方法
     75        6.1 Makefileの変数定義
     76        6.2 コンパイルオプション
     777.コンフィギュレータの使い方
     788.システムサービス
     79        8.1 システムログ機能
     80                8.1.1 システムログ機能の位置付け
     81                8.1.2 ログバッファへの記録と低レベル出力
     82                8.1.3 ログ情報の種別
     83                8.1.4 ログ情報の重要度
     84                8.1.5 ログ情報のデータ構造
     85                8.1.6 システムログ機能のサービスコール
     86                8.1.7 システムログ機能のためのライブラリ関数とマクロ
     87                8.1.8 システムログ機能のその他のサービス
     88        8.2 シリアルインタフェースドライバ
     89                8.2.1 シリアルインタフェースドライバのサービスコール
     90                8.2.2 シリアルインタフェースドライバのその他のサービス
     91        8.3 システムログタスク
     92                8.3.1 システムログタスクのサービスコール
     93                8.3.2 システムログタスクのその他のサービス
     94        8.4 カーネル起動メッセージの出力
     959.サポートライブラリ
     96        9.1 基本的なライブラリ関数
     97        9.2 キュー操作ライブラリ関数
     98        9.3 システムログ出力用ライブラリ関数
     99        9.4 実行時間分布集計モジュール
     10010.テストプログラム
     101        10.1 テストプログラム用ライブラリ
     102        10.2 カーネルの整合性検査
     103        10.3 機能テストプログラム
     104        10.4 性能評価プログラム
     10511.使用上の注意とヒント
     106        11.1 タイマドライバの組込み
     107        11.2 assertマクロの処理
     108        11.3 システムログ機能の扱い
     109        11.4 オブジェクトIDの管理
     110        11.5 カーネルの内部シンボルのリネーム
     111        11.6 トレースログ記録のサンプルコードの使用方法
     112        11.7 システムの起動時の初期化処理
     113        11.8 rodataセクションをRAMに置く場合
     11412.参考情報
     115        12.1 利用条件と利用報告
     116        12.2 保証・適用性・サポート
     117        12.3 バグレポート
     118        12.4 ウェブサイト
     119        12.5 TOPPERSユーザーズメーリングリスト
     120        12.6 TOPPERSプロジェクトのメンバ向けのサービス
     121        12.7 TOPPERSプロジェクトへの参加
     12213.リファレンス
     123        13.1 サービスコール一覧
     124        13.2 静的API一覧
     125        13.3 バージョン履歴
     126
     127
     1281.TOPPERS/ASPカーネルの概要
     129
     1301.1 TOPPERS/ASPカーネルの位置付け
     131
     132TOPPERS/ASPカーネル(以下,ASPカーネル)は,TOPPERS新世代カーネルの基盤
     133となるものとして,TOPPERSプロジェクトにおいて開発したリアルタイムカーネ
     134ルである.μITRON4.0仕様のスタンダードプロファイル準拠のリアルタイムカー
     135ネルであるTOPPERS/JSPカーネルを拡張・改良する形で開発した.
     136
     1371.2 TOPPERS/ASPカーネルの仕様
     138
     139ASPカーネルの仕様の概要については,「TOPPERS/ASPカーネルの仕様概要」を
     140参照すること.また,ASPカーネルを含むTOPPERS新世代カーネルの仕様の詳細
     141については,別途PDFファイルの形で配布している「TOPPERS新世代カーネル統
     142合仕様書(Release 1.7.1)」を参照すること.
     143
     1441.3 マイグレーションガイド
     145
     146従来のTOPPERSカーネルや他のμITRON4.0仕様準拠のカーネルから,TOPPERS新
     147世代カーネルに移行するための方法(またはヒント)を説明した「TOPPERS新世
     148代カーネルへのマイグレーションガイド」を,別途PDFファイルの形で配布して
     149いる.必要に応じて参照すること.
     150
     1511.4 機能拡張・チューニングガイド
     152
     153TOPPERS/ASPカーネルを,機能拡張・チューニングするための方法(またはヒン
     154ト)を説明した「機能拡張・チューニングガイド」を用意している.拡張パッ
     155ケージの使用方法は,「機能拡張・チューニングガイド」に含まれている.必
     156要に応じて参照すること.
     157
     1581.5 既知の問題
     159
     160割込みサービスルーチンの先頭番地(ATT_ISRのisr),割込みハンドラの先頭
     161番地(DEF_INHのinthdr),CPU例外ハンドラの先頭番地(DEF_EXCのexchdr),
     162初期化ルーチンの先頭番地(ATT_INIのinirtn),終了処理ルーチンの先頭番地
     163(ATT_TERのterrtn)がプログラムの開始番地として正しくない場合のエラーは,
     164コンフィギュレータに検出されない場合がある(ターゲットに依存).
     165
     166kernel_cfg.c(およびcfg1_out.c)は,カーネル,システムサービス,アプリ
     167ケーションのいずれのインクルードファイルもインクルードし,いずれのシン
     168ボルも参照する可能性がある.そのため,カーネル,システムサービス,アプ
     169リケーションでシンボル等が衝突している場合や,コンパイルオプションが食
     170い違っている場合に,kernel_cfg.c(およびcfg1_out.c)が正しくコンパイル
     171できなくなる場合が考えられる.カーネルのシンボルをリネームするなどの方
     172法で軽減されてはいるが,問題がなくなっているわけではない.
     173
     174システムコンフィギュレーションファイルから,コンフィギュレータに対する
     175INCLUDEディレクティブにより他のコンフィギュレーションファイルをインクルー
     176ドしている場合に,その中に含まれるC言語プリプロセッサのインクルードディ
     177レクティブ(#include)で,コンフィギュレーションファイルの置かれている
     178ディレクトリが,ファイルを検索するパスにはいらないという問題がある.例
     179えば,syssvc/syslog.cfgに「#include "syslog.h"」と記述できないのは,こ
     180の問題があるためである.
     181
     182現時点では,アドレスが64ビットの環境には対応していない.64ビットアドレ
     183ス環境をサポートするための最大の課題は,モトローラSレコードフォーマット
     184が64ビットアドレスに対応していないことである.
     185
     1861.6 Cygwin環境における注意事項
     187
     188Cygwin環境においては,ディレクトリの指定を相対パスで行うことを推奨する.
     189これは,Cygwin環境の絶対パスは,Windowsネイティブでビルドされたツールは
     190解釈できないためである.
     191
     192
     1932.ターゲット依存部
     194
     1952.1 ターゲット依存部の概要
     196
     197ASPカーネルのターゲット非依存部と,各種のターゲットシステムに対応するた
     198めのターゲット依存部は,別々に開発されている.そのため,ASPカーネルが対
     199応しているすべてのターゲット依存部を,バージョンを整合させてパッケージ
     200化することは困難である.そこで,主に初級のユーザを対象にした簡易パッケー
     201ジと,上級のユーザやカーネル開発者を対象にした個別パッケージを用意して
     202いる.
     203
     204ASPカーネルを未サポートのターゲットシステムへポーティングするために必要
     205な作業は,開発環境の構築と標準の開発環境との差異の吸収,カーネル自身の
     206ポーティング,システムサービスのポーティングなどからなる.詳しくは,
     207「ターゲット依存部 ポーティングガイド」を参照すること.
     208
     2092.2 簡易パッケージ
     210
     211簡易パッケージは,ASPカーネルが対応しているターゲットシステム毎に用意さ
     212れ,そのターゲットシステム上でASPカーネルを動作させるために必要なファイ
     213ル一式をパッケージ化したものである.簡易パッケージに含まれるファイルは,
     214バージョンが整合していることが確認されている.
     215
     216簡易パッケージのバージョン番号は,パッケージ化した日付とすることを原則
     217とするが,ターゲットシステム毎の事情によりこの原則に従わない場合がある.
     218
     219簡易パッケージは,基本的には,次に説明する個別パッケージを複数まとめた
     220ものである.そのため,対象ターゲットシステムに必要のないファイルも含ま
     221れている.また,簡易パッケージに含まれている個別パッケージのバージョン
     222は,個別パッケージのMANIFESTファイルを参照することで知ることができる.
     223
     2242.3 個別パッケージ
     225
     226個別パッケージは,ASPカーネルの開発単位毎に,その開発単位で開発を担当し
     227ているファイル一式をパッケージ化したものである.ASPカーネルのターゲット
     228非依存部も,一つの個別パッケージとして配布される.ある個別パッケージを
     229使用するためには,一般には,他の個別パッケージが必要となる.ターゲット
     230依存部の個別パッケージを使用するために必要となる個別パッケージとそのバー
     231ジョンについては,ターゲット依存部のユーザーズマニュアルを参照すること.
     232使用する個別パッケージのバージョンを整合させることは,ユーザの責任であ
     233る.
     234
     235個別パッケージのバージョン番号は,X.Y.Zの形で表現される.ターゲット非依
     236存部のバージョン番号を,ASPカーネル全体のリリース番号とする.ターゲット
     237依存部のバージョン番号は,XとYが,それが依存するターゲット非依存部と一
     238致している.それに対して,Zは一致しているとは限らない.例えば,ターゲッ
     239ト非依存部のバージョン1.1.0に対応するターゲット依存部は,バージョン
     2401.1.Zの形となる.ターゲット依存部のみがバージョンアップした場合には,Z
     241が変更される.
     242
     243使用する個別パッケージは,次の例のように,ターゲット非依存部の個別パッ
     244ケージを展開したのと同じディレクトリで展開する.
    299245
    300246        % tar xvfz asp-1.1.0.tar.gz
    301247        % tar xvfz asp_arch_arm_gcc_1.1.2.tar.gz
    302248
    303 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆéžä¾å­˜éƒ¨ã®å€‹åˆ¥ãƒ‘ッケージには,以下のターゲット依存部が含まれ
    304 ã¦ã„るが,これらは他のターゲットシステムにポーティングする際の参考にす
    305 ã‚‹ãŸã‚ã«ç”¨æ„ã—ているものであり,その動作については未検証である.
    306 
    307         target/dve68k_gcc       DVE-68K/40(GNU開発環境)用ターゲット依存部
    308         arch/m68k_gcc           M68040(GNU開発環境)用プロセッサ依存部
    309         pdic/upd72001           Î¼PD72001用 簡易SIOドライバ
    310 
    311 
    312 ï¼“.クイックスタートガイド
    313 
    314 ã“こでは,ターゲット依存部が用意されているターゲットシステム上で,ASPカー
    315 ãƒãƒ«ä¸Šã§å‹•ä½œã™ã‚‹ã‚µãƒ³ãƒ—ルプログラムを構築・動作させるまでの手順を示す.
    316 
    317 3.1 開発環境の準備
    318 
    319 ASPカーネルを用いたシステム構築には,以下のツールがå¿
    320 è¦ã§ã‚る.
    321 
    322         ホストシステム用のツール
    323                 perl            動作確認:5.10.0
    324                 GNU Make        動作確認:3.81
    325 
    326         TOPPERS新世代カーネル用コンフィギュレータ
    327                 cfg                     å‹•ä½œç¢ºèªï¼š1.9.4
    328                                         ※ 1.5以前のバージョンでは動作しない.
    329 
    330         ターゲットシステム用のツール(クロス開発環境)
    331                 標準規格に準拠したCコンパイラ
    332                 アセンブラ,リンカ,ライブラリアン
    333                 シンボルファイル出力ツール,ヘキサファイル出力ツール
    334                 標準Cライブラリ(å¿
    335 é ˆã§ã¯ãªã„)
    336 
    337 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ç”¨ã®ãƒ„ールにGNU開発環境を用いる場合には,以下のツール
    338 ãŒå¿
    339 è¦ã§ã‚る.
    340 
    341         ターゲットシステム用のGNU開発環境ツール
    342                 BINUTILS(as,ld,ar,nm,ranlib,objcopy,objdump)
    343                 GCCまたはGCC-CORE(gccおよびそこから呼び出されるツール)
    344                 NEWLIB(標準Cライブラリ,å¿
    345 é ˆã§ã¯ãªã„)
    346 
    347 å‹•ä½œç¢ºèªã•ã‚Œã¦ã„るターゲットシステム用のツールについては,ターゲット依
    348 å­˜éƒ¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚ºãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’参ç
    349 §ã™ã‚‹ã“と.
    350 
    351 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ç”¨ã®æ¨™æº–Cライブラリは,アプリケーションが標準Cライブ
    352 ãƒ©ãƒªã‚’使用しない場合には,å¿
    353 è¦ãªã„.ただし,コンパイラが標準Cライブラリ
    354 é–¢æ•°ï¼ˆmemcpy,memsetなど)を呼び出すコードを生成する場合があり,その場
    355 åˆã«ã¯æ¨™æº–Cライブラリがå¿
    356 è¦ã§ã‚る.標準Cライブラリを用意する代わりに,
    357 ç”Ÿæˆã—たコードが呼び出す関数のみを自分で用意してもよい.
    358 
    359 ä»¥ä¸‹ã§ã¯ï¼Œã“れらのツールが用意できていることを前提に,UNIXマシン上での
    360 æ§‹ç¯‰æ‰‹é †ã‚’説明する.また以下の説明では,makeコマンドがGNU Makeであるも
    361 ã®ã¨ã™ã‚‹ï¼ˆASPカーネルのサンプルのMakefileは,GNU Makeの拡張機能を用いて
    362 ã„る).
    363 
    364 3.2 コンフィギュレータの構築
    365 
    366 ã‚«ãƒ¼ãƒãƒ«ã‚’構築する前に,まず,TOPPERS新世代カーネル用コンフィギュレータ
    367 ã‚’構築するå¿
    368 è¦ãŒã‚る.簡易パッケージに含まれていた場合など,コンフィギュ
    369 ãƒ¬ãƒ¼ã‚¿ã‚’実行ファイル形式でå
    370 ¥æ‰‹ã—た場合には,このステップはå¿
    371 è¦ãªã„.
    372 
    373 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã®æ§‹ç¯‰ã«ã¯ï¼Œä»¥ä¸‹ã®ãƒ„ールがå¿
    374 è¦ã§ã‚る.
    375 
    376         ホストシステム用のツール(セルフ開発環境)
    377                 C++コンパイラ,C++ライブラリ
    378                                         動作確認(Mac OS X環境):GNU C++ 4.2.1
    379                 Boost           å‹•ä½œç¢ºèªï¼š1.52.0
    380                 GNU Make        動作確認:3.81
    381 
    382 æœ€åˆã«ï¼Œãƒ‘ッケージにコンフィギュレータのソースファイルが含まれていない
    383 å ´åˆã«ã¯ï¼Œã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã®ãƒ‘ッケージを,ASPカーネルのソースファイル
    384 ã‚’展開したディレクトリの下に展開する.
     249ターゲット非依存部の個別パッケージには,以下のターゲット依存部が含まれ
     250ているが,これらは他のターゲットシステムにポーティングする際の参考にす
     251るために用意しているものであり,その動作については未検証である.
     252
     253        target/dve68k_gcc       DVE-68K/40(GNU開発環境)用ターゲット依存部
     254        arch/m68k_gcc           M68040(GNU開発環境)用プロセッサ依存部
     255        pdic/upd72001           μPD72001用 簡易SIOドライバ
     256
     257
     2583.クイックスタートガイド
     259
     260ここでは,ターゲット依存部が用意されているターゲットシステム上で,ASPカー
     261ネル上で動作するサンプルプログラムを構築・動作させるまでの手順を示す.
     262
     2633.1 開発環境の準備
     264
     265ASPカーネルを用いたシステム構築には,以下のツールが必要である.
     266
     267        ホストシステム用のツール
     268                perl            動作確認:5.10.0
     269                GNU Make        動作確認:3.81
     270
     271        TOPPERS新世代カーネル用コンフィギュレータ
     272                cfg                     動作確認:1.9.4
     273                                        ※ 1.5以前のバージョンでは動作しない.
     274
     275        ターゲットシステム用のツール(クロス開発環境)
     276                標準規格に準拠したCコンパイラ
     277                アセンブラ,リンカ,ライブラリアン
     278                シンボルファイル出力ツール,ヘキサファイル出力ツール
     279                標準Cライブラリ(必須ではない)
     280
     281ターゲットシステム用のツールにGNU開発環境を用いる場合には,以下のツール
     282が必要である.
     283
     284        ターゲットシステム用のGNU開発環境ツール
     285                BINUTILS(as,ld,ar,nm,ranlib,objcopy,objdump)
     286                GCCまたはGCC-CORE(gccおよびそこから呼び出されるツール)
     287                NEWLIB(標準Cライブラリ,必須ではない)
     288
     289動作確認されているターゲットシステム用のツールについては,ターゲット依
     290存部のユーザーズマニュアルを参照すること.
     291
     292ターゲットシステム用の標準Cライブラリは,アプリケーションが標準Cライブ
     293ラリを使用しない場合には,必要ない.ただし,コンパイラが標準Cライブラリ
     294関数(memcpy,memsetなど)を呼び出すコードを生成する場合があり,その場
     295合には標準Cライブラリが必要である.標準Cライブラリを用意する代わりに,
     296生成したコードが呼び出す関数のみを自分で用意してもよい.
     297
     298以下では,これらのツールが用意できていることを前提に,UNIXマシン上での
     299構築手順を説明する.また以下の説明では,makeコマンドがGNU Makeであるも
     300のとする(ASPカーネルのサンプルのMakefileは,GNU Makeの拡張機能を用いて
     301いる).
     302
     3033.2 コンフィギュレータの構築
     304
     305カーネルを構築する前に,まず,TOPPERS新世代カーネル用コンフィギュレータ
     306を構築する必要がある.簡易パッケージに含まれていた場合など,コンフィギュ
     307レータを実行ファイル形式で入手した場合には,このステップは必要ない.
     308
     309コンフィギュレータの構築には,以下のツールが必要である.
     310
     311        ホストシステム用のツール(セルフ開発環境)
     312                C++コンパイラ,C++ライブラリ
     313                                        動作確認(Mac OS X環境):GNU C++ 4.2.1
     314                Boost           動作確認:1.52.0
     315                GNU Make        動作確認:3.81
     316
     317最初に,パッケージにコンフィギュレータのソースファイルが含まれていない
     318場合には,コンフィギュレータのパッケージを,ASPカーネルのソースファイル
     319を展開したディレクトリの下に展開する.
    385320
    386321        % cd asp
    387322        % tar xvfz cfg-1.9.4.tar.gz
    388323
    389 ã¾ãŸã¯ï¼Œã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã®ãƒ‘ッケージを他のディレクトリに展開し,ASPカー
    390 ãƒãƒ«ã®ã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’展開したディレクトリからシンボリックリンクをはっ
    391 ã¦ã‚‚よい.
    392 
    393 ã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ãŒå±•é–‹ã§ãã‚‹ã¨ï¼Œcfgディレクトリに移動し,コンフィギュレー
    394 ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—ト(configure)でMakefileの環境依存部(Makefile.config)
    395 ã‚’生成した後,makeコマンドによりコンフィギュレータ(cfgプログラム)が構
    396 ç¯‰ã§ãã‚‹ï¼Ž
     324または,コンフィギュレータのパッケージを他のディレクトリに展開し,ASPカー
     325ネルのソースファイルを展開したディレクトリからシンボリックリンクをはっ
     326てもよい.
     327
     328ソースファイルが展開できると,cfgディレクトリに移動し,コンフィギュレー
     329ションスクリプト(configure)でMakefileの環境依存部(Makefile.config)
     330を生成した後,makeコマンドによりコンフィギュレータ(cfgプログラム)が構
     331築できる.
    397332
    398333        % cd cfg
     
    401336        % make
    402337
    403 ãŸã ã—,Boostをインストールしたディレクトリおよび名称が標準で想定してい
    404 ã‚‹ã‚‚のとは違う場合には,configureの--with-headersおよび--with-libraries
    405 ã‚ªãƒ—ションにより,ヘッダファイルおよびライブラリの置かれたディレクトリ
    406 ã‚’指定するå¿
    407 è¦ãŒã‚る.--without-xmlは,AUTOSAR XMLファイルの読み込み機
    408 èƒ½ï¼ˆASPカーネル用にはå¿
    409 è¦ãªã„)を取り込まないことを指定するオプションで
    410 ã‚る(AUTOSAR XMLファイルの読み込み機能を取り込むには,Xerces-C++ XML
    411 Parserがå¿
    412 è¦ã«ãªã‚‹ï¼‰ï¼Ž
    413 
    414 ã¾ãŸï¼Œãƒ›ã‚¹ãƒˆã‚·ã‚¹ãƒ†ãƒ ã«ã‚ˆã£ã¦ã¯ï¼Œæœ€é©åŒ–レベルを上げると正しくコンパイル
    415 ã§ããªã„ことが知られている.そのような場合には,最適化レベルを下げるか,
    416 æœ€é©åŒ–を抑止するように,Makefileを修正するå¿
    417 è¦ãŒã‚る.
    418 
    419 ãªãŠï¼Œã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã®ä½¿ç”¨æ–¹æ³•ã«ã¤ã„ては,「7.コンフィギュレータ
    420 ã®ä½¿ã„方」の章で説明する.
    421 
    422 3.3 サンプルプログラムの構築と実行
    423 
    424 æ¬¡ã«ï¼ŒASPカーネル上で動作するサンプルプログラムを構築する方法を説明する.
    425 
    426 ã¾ãšï¼Œã‚µãƒ³ãƒ—ルプログラムのオブジェクトファイルを置くディレクトリを作成
    427 ã—,コンフィギュレーションスクリプトを実行する.例えば,オブジェクトファ
    428 ã‚¤ãƒ«ã‚’置くディレクトリを,ASPカーネルのソースファイルを展開したディレ
    429 ã‚¯ãƒˆãƒªã®ä¸‹ã®OBJという名称のディレクトリにする場合には,次のコマンドを
    430 å®Ÿè¡Œã™ã‚‹ï¼ˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®å ´æ‰€ã¨åç§°ã¯ä»»æ„ã«æ±ºã‚ã¦ã‚ˆã„).
     338ただし,Boostをインストールしたディレクトリおよび名称が標準で想定してい
     339るものとは違う場合には,configureの--with-headersおよび--with-libraries
     340オプションにより,ヘッダファイルおよびライブラリの置かれたディレクトリ
     341を指定する必要がある.--without-xmlは,AUTOSAR XMLファイルの読み込み機
     342能(ASPカーネル用には必要ない)を取り込まないことを指定するオプションで
     343ある(AUTOSAR XMLファイルの読み込み機能を取り込むには,Xerces-C++ XML
     344Parserが必要になる).
     345
     346また,ホストシステムによっては,最適化レベルを上げると正しくコンパイル
     347できないことが知られている.そのような場合には,最適化レベルを下げるか,
     348最適化を抑止するように,Makefileを修正する必要がある.
     349
     350なお,コンフィギュレータの使用方法については,「7.コンフィギュレータ
     351の使い方」の章で説明する.
     352
     3533.3 サンプルプログラムの構築と実行
     354
     355次に,ASPカーネル上で動作するサンプルプログラムを構築する方法を説明する.
     356
     357まず,サンプルプログラムのオブジェクトファイルを置くディレクトリを作成
     358し,コンフィギュレーションスクリプトを実行する.例えば,オブジェクトファ
     359イルを置くディレクトリを,ASPカーネルのソースファイルを展開したディレ
     360クトリの下のOBJという名称のディレクトリにする場合には,次のコマンドを
     361実行する(ディレクトリの場所と名称は任意に決めてよい).
    431362
    432363        % cd asp
    433364        % mkdir OBJ
    434365        % cd OBJ
    435         % perl ../configure -T <ターゲット略称>
    436 
    437 ã“こで,<ターゲット略称>は,targetディレクトリの下に置かれているターゲッ
    438 ãƒˆä¾å­˜éƒ¨ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®åç§°ã§ã‚る.コンフィギュレーションスクリプトのオ
    439 ãƒ—ションについては,「5.コンフィギュレーションスクリプトの使い方」の
    440 ç« ã§èª¬æ˜Žã™ã‚‹ï¼Ž
    441 
    442 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トの実行により,カレントディレクトリには,
    443 ã‚µãƒ³ãƒ—ルプログラムを構築するためのMakefile,サンプルプログラム用のコン
    444 ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ï¼ˆsample1.cfg),サンプルプログラム本体
    445 ï¼ˆsample1.hおよびsample1.c)が生成される.
    446 
    447 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トの実行後,å¿
    448 è¦ã§ã‚ればMakefileを修正す
    449 ã‚‹ï¼ŽMakefileの修正方法については,「6.Makefileの修正方法」の章で説明
    450 ã™ã‚‹ï¼Ž
    451 
    452 ãã®å¾Œï¼Œmake dependで依存関係ファイル(Makefile.depend)を生成した後,
    453 makeコマンドによりサンプルプログラムのロードモジュール(aspまたは
    454 asp.exe)が生成できる.依存関係ファイルの生成には若干時間がかかる.
     366        % perl ../configure -T <ターゲット略称>
     367
     368ここで,<ターゲット略称>は,targetディレクトリの下に置かれているターゲッ
     369ト依存部ディレクトリの名称である.コンフィギュレーションスクリプトのオ
     370プションについては,「5.コンフィギュレーションスクリプトの使い方」の
     371章で説明する.
     372
     373コンフィギュレーションスクリプトの実行により,カレントディレクトリには,
     374サンプルプログラムを構築するためのMakefile,サンプルプログラム用のコン
     375フィギュレーションファイル(sample1.cfg),サンプルプログラム本体
     376(sample1.hおよびsample1.c)が生成される.
     377
     378コンフィギュレーションスクリプトの実行後,必要であればMakefileを修正す
     379る.Makefileの修正方法については,「6.Makefileの修正方法」の章で説明
     380する.
     381
     382その後,make dependで依存関係ファイル(Makefile.depend)を生成した後,
     383makeコマンドによりサンプルプログラムのロードモジュール(aspまたは
     384asp.exe)が生成できる.依存関係ファイルの生成には若干時間がかかる.
    455385
    456386        % make depend
    457387        % make
    458388
    459 ã“こで構築したサンプルプログラム(sample1.h,sample1.c,sample1.cfg)
    460 ã¯ï¼ŒASPカーネルの基本的な動作を確認するためのものである.このプログラ
    461 ãƒ ã®æ¦‚要説明は,sample1.cのå
    462 ˆé ­ã®ã‚³ãƒ¡ãƒ³ãƒˆã«ã‚る.
    463 
    464 3.4 カーネルを関数単位でライブラリ化する方法
    465 
    466 å‰ç¯€ã®æ‰‹é †ã§ã¯ï¼Œã‚«ãƒ¼ãƒãƒ«ã‚’ファイル単位でコンパイルし,ライブラリ化して
    467 ã„たが,カーネルのコードサイズを縮小するためには,使用しないサービスコー
    468 ãƒ«ã¯ãƒªãƒ³ã‚¯ã—ない方が望ましい.そこでASPカーネルでは,カーネルを関数単位
    469 ã§ã‚³ãƒ³ãƒ‘イルし,ライブラリ化する方法を用意している.
    470 
    471 ã“の方法でサンプルプログラムを構築するには,コンフィギュレーションスク
    472 ãƒªãƒ—トに,それを指示するオプション(-f)を付加するだけでよい.
     389ここで構築したサンプルプログラム(sample1.h,sample1.c,sample1.cfg)
     390は,ASPカーネルの基本的な動作を確認するためのものである.このプログラ
     391ムの概要説明は,sample1.cの先頭のコメントにある.
     392
     3933.4 カーネルを関数単位でライブラリ化する方法
     394
     395前節の手順では,カーネルをファイル単位でコンパイルし,ライブラリ化して
     396いたが,カーネルのコードサイズを縮小するためには,使用しないサービスコー
     397ルはリンクしない方が望ましい.そこでASPカーネルでは,カーネルを関数単位
     398でコンパイルし,ライブラリ化する方法を用意している.
     399
     400この方法でサンプルプログラムを構築するには,コンフィギュレーションスク
     401リプトに,それを指示するオプション(-f)を付加するだけでよい.
    473402
    474403        % mkdir OBJ_LIB
    475404        % cd OBJ_LIB
    476         % perl ../configure -T <ターゲット略称> -f
    477 
    478 ã“こで,OBJ_LIBというディレクトリの場所と名称は,任意に決めてよい.これ
    479 ä»¥é™ã®æ‰‹é †ã¯ï¼Œå‰ç¯€ã¨åŒã˜ã§ã‚る.
    480 
    481 3.5 アプリケーションとカーネルを別ã€
    482 ã«æ§‹ç¯‰ã™ã‚‹æ–¹æ³•
    483 
    484 å‰ç¯€ã§èª¬æ˜Žã—た方法では,アプリケーションとカーネルを同時に生成するため,
    485 ã‚ªãƒ–ジェクトファイルを置くディレクトリに非常に多くのファイルが作成され
    486 ã¦ï¼Œæ‰±ã„にくくなる.そこで,カーネルを修正する頻度が低い場合には,カー
    487 ãƒãƒ«ã¯äº‹å‰ã«æ§‹ç¯‰ã—ておき,後でアプリケーションだけを構築する方法を用意
    488 ã—ている.以下では,サンプルプログラムを構築を例に,その手順について説
    489 æ˜Žã™ã‚‹ï¼Ž
    490 
    491 ã¾ãšï¼Œã‚«ãƒ¼ãƒãƒ«ã‚’構築するディレクトリを作成し,コンフィギュレーションス
    492 ã‚¯ãƒªãƒ—トを実行する.例えば,カーネルを構築するディレクトリを,ASPカー
    493 ãƒãƒ«ã®ã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’展開したディレクトリの下のKERNEL_LIBという名称の
    494 ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行する(ディレクトリの場所
    495 ã¨åç§°ã¯ä»»æ„ã«æ±ºã‚ã¦ã‚ˆã„).
     405        % perl ../configure -T <ターゲット略称> -f
     406
     407ここで,OBJ_LIBというディレクトリの場所と名称は,任意に決めてよい.これ
     408以降の手順は,前節と同じである.
     409
     4103.5 アプリケーションとカーネルを別々に構築する方法
     411
     412前節で説明した方法では,アプリケーションとカーネルを同時に生成するため,
     413オブジェクトファイルを置くディレクトリに非常に多くのファイルが作成され
     414て,扱いにくくなる.そこで,カーネルを修正する頻度が低い場合には,カー
     415ネルは事前に構築しておき,後でアプリケーションだけを構築する方法を用意
     416している.以下では,サンプルプログラムを構築を例に,その手順について説
     417明する.
     418
     419まず,カーネルを構築するディレクトリを作成し,コンフィギュレーションス
     420クリプトを実行する.例えば,カーネルを構築するディレクトリを,ASPカー
     421ネルのソースファイルを展開したディレクトリの下のKERNEL_LIBという名称の
     422ディレクトリにする場合には,次のコマンドを実行する(ディレクトリの場所
     423と名称は任意に決めてよい).
    496424
    497425        % mkdir KERNEL_LIB
    498426        % cd KERNEL_LIB
    499         % perl ../configure -T <ターゲット略称> -f
    500 
    501 ã“れにより,カーネルを構築するディレクトリに,Makefile,sample1.cfg,
    502 sample1.h,sample1.cが生成されるが,Makefile以外は実質的には使用しない.
    503 
    504 make dependで依存関係ファイル(Makefile.depend)を生成した後,make
    505 libkernel.aによりカーネルライブラリ(libkernel.a)が生成できる.
     427        % perl ../configure -T <ターゲット略称> -f
     428
     429これにより,カーネルを構築するディレクトリに,Makefile,sample1.cfg,
     430sample1.h,sample1.cが生成されるが,Makefile以外は実質的には使用しない.
     431
     432make dependで依存関係ファイル(Makefile.depend)を生成した後,make
     433libkernel.aによりカーネルライブラリ(libkernel.a)が生成できる.
    506434
    507435        % make depend
    508436        % make libkernel.a
    509437
    510 æ¬¡ã«ï¼Œã‚¢ãƒ—リケーションを構築するディレクトリを作成し,コンフィギュレー
    511 ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トを実行する.例えば,アプリケーションを構築するディレク
    512 ãƒˆãƒªã‚’,ASPカーネルのソースファイルを展開したディレクトリの下のAPLとい
    513 ã†åç§°ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行する(ディレクト
    514 ãƒªã®å ´æ‰€ã¨åç§°ã¯ä»»æ„ã«æ±ºã‚ã¦ã‚ˆã„).
     438次に,アプリケーションを構築するディレクトリを作成し,コンフィギュレー
     439ションスクリプトを実行する.例えば,アプリケーションを構築するディレク
     440トリを,ASPカーネルのソースファイルを展開したディレクトリの下のAPLとい
     441う名称のディレクトリにする場合には,次のコマンドを実行する(ディレクト
     442リの場所と名称は任意に決めてよい).
    515443
    516444        % cd ..
    517445        % mkdir APL
    518446        % cd APL
    519         % perl ../configure -T <ターゲット略称> -L ../KERNEL_LIB
    520 
    521 ã“こで-Lオプションには,カーネルを構築したディレクトリのパスを指定する.
    522 
    523 æœ€å¾Œã«ï¼Œmake dependで依存関係ファイル(Makefile.depend)を生成した後,
    524 makeコマンドによりサンプルプログラムのロードモジュール(aspまたは
    525 asp.exe)が生成できる.
     447        % perl ../configure -T <ターゲット略称> -L ../KERNEL_LIB
     448
     449ここで-Lオプションには,カーネルを構築したディレクトリのパスを指定する.
     450
     451最後に,make dependで依存関係ファイル(Makefile.depend)を生成した後,
     452makeコマンドによりサンプルプログラムのロードモジュール(aspまたは
     453asp.exe)が生成できる.
    526454
    527455        % make depend
    528456        % make
    529457
    530 ã“の手順では,アプリケーション構築時にはカーネルの再構築がå¿
    531 è¦ã‹ãƒã‚§ãƒƒ
    532 ã‚¯ã—ないため,カーネルのソースコードを修正した場合には,カーネルを構築
    533 ã—たディレクトリでmake libkernel.aを再実行するå¿
    534 è¦ãŒã‚る.
    535 
    536 ä»¥ä¸Šã§ã¯ï¼Œã‚«ãƒ¼ãƒãƒ«ã¨ã‚¢ãƒ—リケーションを別ã€
    537 ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§æ§‹ç¯‰ã—たが,
    538 -Lオプションにカレントディレクトリ(ただし,"."という記述では不可)を指
    539 å®šã™ã‚‹ã“とで,カーネルとアプリケーションを同じディレクトリで別ã€
    540 ã«æ§‹ç¯‰
    541 ã™ã‚‹ã“ともできる.å
    542 ·ä½“的には,次の手順となる.
     458この手順では,アプリケーション構築時にはカーネルの再構築が必要かチェッ
     459クしないため,カーネルのソースコードを修正した場合には,カーネルを構築
     460したディレクトリでmake libkernel.aを再実行する必要がある.
     461
     462以上では,カーネルとアプリケーションを別々のディレクトリで構築したが,
     463-Lオプションにカレントディレクトリ(ただし,"."という記述では不可)を指
     464定することで,カーネルとアプリケーションを同じディレクトリで別々に構築
     465することもできる.具体的には,次の手順となる.
    543466
    544467        % mkdir OBJ
    545468        % cd OBJ
    546         % perl ../configure -T <ターゲット略称> -L ../OBJ
     469        % perl ../configure -T <ターゲット略称> -L ../OBJ
    547470        % make depend
    548471        % make libkernel.a
     
    550473        % make
    551474
    552 ã“こで,make cleankernelは,カーネルライブラリを生成するための中間ファ
    553 ã‚¤ãƒ«ã‚’削除するものである.この手順では,make dependによりカーネルライ
    554 ãƒ–ラリに関する依存関係を生成しないため,カーネルのソースコードを修正し
    555 ãŸå ´åˆã«ã¯ï¼Œå¿
    556 ãšmake cleankernel(または,make clean)してから,make
    557 libkernel.aするå¿
    558 è¦ãŒã‚るので注意すること.
    559 
    560 ãªãŠï¼Œmake realcleanすると,make dependとmakeにより生成したファイルをす
    561 ã¹ã¦å‰Šé™¤ã™ã‚‹ï¼Žãã‚Œã«å¯¾ã—て,make cleanでは,make dependにより生成した依
    562 å­˜é–¢ä¿‚ファイルは削除しない.
    563 
    564 
    565 ï¼”.ディレクトリ構成・ファイル構成
    566 
    567 4.1 é
    568 å¸ƒãƒ‘ッケージのディレクトリ構成
    569 
    570         include/                アプリケーション向けヘッダファイル
    571         kernel/                 ã‚«ãƒ¼ãƒãƒ«ã®ã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«
    572         syssvc/                 ã‚·ã‚¹ãƒ†ãƒ ã‚µãƒ¼ãƒ“スのヘッダファイル,ソースファイル
    573         library/                サポートライブラリのソースファイル
    574         target/                 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨
    575         arch/                   ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã®å
    576 ±é€šéƒ¨åˆ†
    577                 gcc/            GCC開発環境依存部
    578                 logtrace/       ãƒˆãƒ¬ãƒ¼ã‚¹ãƒ­ã‚°è¨˜éŒ²ã®ã‚µãƒ³ãƒ—ルコード
    579         pdic/                   PDIC(デバイスドライバのOS非依存部分)
    580         utils/                  ユーティリティプログラム
    581         sample/                 ã‚µãƒ³ãƒ—ルプログラムとMakefile
    582         doc/                    ドキュメント
    583         test/                   ãƒ†ã‚¹ãƒˆãƒ—ログラム
    584         extension/              拡張パッケージ
    585 
    586 4.2 ターゲット非依存部のファイル構成
    587 
    588 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆéžä¾å­˜éƒ¨ï¼ˆãƒ†ã‚¹ãƒˆãƒ—ログラムと拡張パッケージは除く)の各ファイ
    589 ãƒ«ã®æ¦‚要は次の通り.
    590 
    591         README.txt                      TOPPERS/ASPカーネルの簡単な紹介
    592         configure                       ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—ト(GNU開発環境用)
    593         MANIFEST                        個別パッケージのファイルリスト
     475ここで,make cleankernelは,カーネルライブラリを生成するための中間ファ
     476イルを削除するものである.この手順では,make dependによりカーネルライ
     477ブラリに関する依存関係を生成しないため,カーネルのソースコードを修正し
     478た場合には,必ずmake cleankernel(または,make clean)してから,make
     479libkernel.aする必要があるので注意すること.
     480
     481なお,make realcleanすると,make dependとmakeにより生成したファイルをす
     482べて削除する.それに対して,make cleanでは,make dependにより生成した依
     483存関係ファイルは削除しない.
     484
     485
     4864.ディレクトリ構成・ファイル構成
     487
     4884.1 配布パッケージのディレクトリ構成
     489
     490        include/                アプリケーション向けヘッダファイル
     491        kernel/                 カーネルのソースファイル
     492        syssvc/                 システムサービスのヘッダファイル,ソースファイル
     493        library/                サポートライブラリのソースファイル
     494        target/                 ターゲット依存部
     495        arch/                   ターゲット依存部の共通部分
     496                gcc/            GCC開発環境依存部
     497                logtrace/       トレースログ記録のサンプルコード
     498        pdic/                   PDIC(デバイスドライバのOS非依存部分)
     499        utils/                  ユーティリティプログラム
     500        sample/                 サンプルプログラムとMakefile
     501        doc/                    ドキュメント
     502        test/                   テストプログラム
     503        extension/              拡張パッケージ
     504
     5054.2 ターゲット非依存部のファイル構成
     506
     507ターゲット非依存部(テストプログラムと拡張パッケージは除く)の各ファイ
     508ルの概要は次の通り.
     509
     510        README.txt                      TOPPERS/ASPカーネルの簡単な紹介
     511        configure                       コンフィギュレーションスクリプト(GNU開発環境用)
     512        MANIFEST                        個別パッケージのファイルリスト
    594513
    595514        include/
    596                 kernel.h                ASPカーネルを使用するための定義
    597                 sil.h                   ã‚·ã‚¹ãƒ†ãƒ ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãƒ¬ã‚¤ãƒ¤ã‚’使用するための定義
    598                 t_stddef.h              TOPPERSå
    599 ±é€šãƒ˜ãƒƒãƒ€ãƒ•ã‚¡ã‚¤ãƒ«
    600                 itron.h                 ITRON仕様å
    601 ±é€šè¦å®šã®ãƒ‡ãƒ¼ã‚¿åž‹ãƒ»å®šæ•°ãƒ»ãƒžã‚¯ãƒ­
    602                 t_syslog.h              システムログ出力を行うための定義
    603                 t_stdlib.h              基本的なライブラリ関数を使用するための定義
    604                 queue.h                 ã‚­ãƒ¥ãƒ¼æ“ä½œãƒ©ã‚¤ãƒ–ラリを使用するための定義
    605                 test_lib.h              テストプログラム用ライブラリを使用するための定義
    606                 histogram.h             å®Ÿè¡Œæ™‚間分布集計モジュールを使用するための定義
    607                 log_output.h    システムログのフォーマット出力を使用するための定義
     515                kernel.h                ASPカーネルを使用するための定義
     516                sil.h                   システムインタフェースレイヤを使用するための定義
     517                t_stddef.h              TOPPERS共通ヘッダファイル
     518                itron.h                 ITRON仕様共通規定のデータ型・定数・マクロ
     519                t_syslog.h              システムログ出力を行うための定義
     520                t_stdlib.h              基本的なライブラリ関数を使用するための定義
     521                queue.h                 キュー操作ライブラリを使用するための定義
     522                test_lib.h              テストプログラム用ライブラリを使用するための定義
     523                histogram.h             実行時間分布集計モジュールを使用するための定義
     524                log_output.h    システムログのフォーマット出力を使用するための定義
    608525
    609526        kernel/
    610                 Makefile.kernel         ã‚«ãƒ¼ãƒãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«æ§‹æˆã®å®šç¾©
    611                 kernel_impl.h           ã‚«ãƒ¼ãƒãƒ«å®Ÿè£
    612 ç”¨æ¨™æº–ヘッダファイル
    613                 kernel_int.h            kernel_cfg.c用のヘッダファイル
    614                 kernel_rename.def       ã‚«ãƒ¼ãƒãƒ«ã®å†
    615 éƒ¨è­˜åˆ¥åã®ãƒªãƒãƒ¼ãƒ å®šç¾©
    616                 kernel_rename.h         ã‚«ãƒ¼ãƒãƒ«ã®å†
    617 éƒ¨è­˜åˆ¥åã®ãƒªãƒãƒ¼ãƒ 
    618                 kernel_unrename.h       ã‚«ãƒ¼ãƒãƒ«ã®å†
    619 éƒ¨è­˜åˆ¥åã®ãƒªãƒãƒ¼ãƒ è§£é™¤       
    620                 kernel_api.csv          コンフィギュレータの静的APIテーブル
    621                 kernel_def.csv          コンフィギュレータの値取得シンボルテーブル
    622                 kernel.tf                       ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã®ãƒ‘ス2のテンプレートファイル
    623                 kernel_check.tf         ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã®ãƒ‘ス3のテンプレートファイル
    624                 genoffset.tf            オフセットファイル生成用のテンプレートファイル
    625                 allfunc.h               ã™ã¹ã¦ã®é–¢æ•°ã‚’コンパイルするための定義
    626                 check.h                 ã‚¨ãƒ©ãƒ¼ãƒã‚§ãƒƒã‚¯ç”¨ãƒžã‚¯ãƒ­
    627                 startup.c               ã‚«ãƒ¼ãƒãƒ«ã®åˆæœŸåŒ–と終了処理
    628                 task.h                  タスク操作ルーチン関連の定義
    629                 task.c                  タスク操作ルーチン
    630                 wait.h                  å¾
    631 ã¡çŠ¶æ
    632 ‹æ“ä½œãƒ«ãƒ¼ãƒãƒ³é–¢é€£ã®å®šç¾©
    633                 wait.c                  å¾
    634 ã¡çŠ¶æ
    635 ‹æ“ä½œãƒ«ãƒ¼ãƒãƒ³
    636                 time_event.h    タイムイベント管理関連の定義
    637                 time_event.c    タイムイベント管理
    638                 task_manage.c   ã‚¿ã‚¹ã‚¯ç®¡ç†æ©Ÿèƒ½
    639                 task_refer.c    タスク状æ
    640 ‹å‚ç
    641 §æ©Ÿèƒ½
    642                 task_sync.c             ã‚¿ã‚¹ã‚¯ä»˜å±žåŒæœŸæ©Ÿèƒ½
    643                 task_except.c   ã‚¿ã‚¹ã‚¯ä¾‹å¤–処理機能
    644                 semaphore.h             ã‚»ãƒžãƒ•ã‚©æ©Ÿèƒ½é–¢é€£ã®å®šç¾©
    645                 semaphore.c             ã‚»ãƒžãƒ•ã‚©æ©Ÿèƒ½
    646                 eventflag.h             ã‚¤ãƒ™ãƒ³ãƒˆãƒ•ãƒ©ã‚°æ©Ÿèƒ½é–¢é€£ã®å®šç¾©
    647                 eventflag.c             ã‚¤ãƒ™ãƒ³ãƒˆãƒ•ãƒ©ã‚°æ©Ÿèƒ½
    648                 dataqueue.h             ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼æ©Ÿèƒ½é–¢é€£ã®å®šç¾©
    649                 dataqueue.c             ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼æ©Ÿèƒ½
    650                 pridataq.h              優å
    651 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼æ©Ÿèƒ½é–¢é€£ã®å®šç¾©
    652                 pridataq.c              優å
    653 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼æ©Ÿèƒ½
    654                 mailbox.h               ãƒ¡ãƒ¼ãƒ«ãƒœãƒƒã‚¯ã‚¹æ©Ÿèƒ½é–¢é€£ã®å®šç¾©
    655                 mailbox.c               ãƒ¡ãƒ¼ãƒ«ãƒœãƒƒã‚¯ã‚¹æ©Ÿèƒ½
    656                 mempfix.h               å›ºå®šé•·ãƒ¡ãƒ¢ãƒªãƒ—ール機能関連の定義
    657                 mempfix.c               å›ºå®šé•·ãƒ¡ãƒ¢ãƒªãƒ—ール機能
    658                 time_manage.c   ã‚·ã‚¹ãƒ†ãƒ æ™‚刻管理機能
    659                 cyclic.h                周期ハンドラ機能関連の定義
    660                 cyclic.c                周期ハンドラ機能
    661                 alarm.h                 ã‚¢ãƒ©ãƒ¼ãƒ ãƒãƒ³ãƒ‰ãƒ©æ©Ÿèƒ½é–¢é€£ã®å®šç¾©
    662                 alarm.c                 ã‚¢ãƒ©ãƒ¼ãƒ ãƒãƒ³ãƒ‰ãƒ©æ©Ÿèƒ½
    663                 sys_manage.c    システム状æ
    664 ‹ç®¡ç†æ©Ÿèƒ½
    665                 interrupt.h             å‰²è¾¼ã¿ç®¡ç†æ©Ÿèƒ½é–¢é€£ã®å®šç¾©
    666                 interrupt.c             å‰²è¾¼ã¿ç®¡ç†æ©Ÿèƒ½
    667                 exception.h             CPU例外管理機能関連の定義
    668                 exception.c             CPU例外管理機能
     527                Makefile.kernel         カーネルのファイル構成の定義
     528                kernel_impl.h           カーネル実装用標準ヘッダファイル
     529                kernel_int.h            kernel_cfg.c用のヘッダファイル
     530                kernel_rename.def       カーネルの内部識別名のリネーム定義
     531                kernel_rename.h         カーネルの内部識別名のリネーム
     532                kernel_unrename.h       カーネルの内部識別名のリネーム解除       
     533                kernel_api.csv          コンフィギュレータの静的APIテーブル
     534                kernel_def.csv          コンフィギュレータの値取得シンボルテーブル
     535                kernel.tf                       コンフィギュレータのパス2のテンプレートファイル
     536                kernel_check.tf         コンフィギュレータのパス3のテンプレートファイル
     537                genoffset.tf            オフセットファイル生成用のテンプレートファイル
     538                allfunc.h               すべての関数をコンパイルするための定義
     539                check.h                 エラーチェック用マクロ
     540                startup.c               カーネルの初期化と終了処理
     541                task.h                  タスク操作ルーチン関連の定義
     542                task.c                  タスク操作ルーチン
     543                wait.h                  待ち状態操作ルーチン関連の定義
     544                wait.c                  待ち状態操作ルーチン
     545                time_event.h    タイムイベント管理関連の定義
     546                time_event.c    タイムイベント管理
     547                task_manage.c   タスク管理機能
     548                task_refer.c    タスク状態参照機能
     549                task_sync.c             タスク付属同期機能
     550                task_except.c   タスク例外処理機能
     551                semaphore.h             セマフォ機能関連の定義
     552                semaphore.c             セマフォ機能
     553                eventflag.h             イベントフラグ機能関連の定義
     554                eventflag.c             イベントフラグ機能
     555                dataqueue.h             データキュー機能関連の定義
     556                dataqueue.c             データキュー機能
     557                pridataq.h              優先度データキュー機能関連の定義
     558                pridataq.c              優先度データキュー機能
     559                mailbox.h               メールボックス機能関連の定義
     560                mailbox.c               メールボックス機能
     561                mempfix.h               固定長メモリプール機能関連の定義
     562                mempfix.c               固定長メモリプール機能
     563                time_manage.c   システム時刻管理機能
     564                cyclic.h                周期ハンドラ機能関連の定義
     565                cyclic.c                周期ハンドラ機能
     566                alarm.h                 アラームハンドラ機能関連の定義
     567                alarm.c                 アラームハンドラ機能
     568                sys_manage.c    システム状態管理機能
     569                interrupt.h             割込み管理機能関連の定義
     570                interrupt.c             割込み管理機能
     571                exception.h             CPU例外管理機能関連の定義
     572                exception.c             CPU例外管理機能
    669573
    670574        syssvc/
    671                 banner.h                カーネル起動メッセージの出力のための定義
    672                 banner.c                カーネル起動メッセージの出力
    673                 banner.cfg              カーネル起動メッセージの出力のコンフィギュレー
    674                                                 ションファイル
    675                 logtask.h               ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã‚’使用するための定義
    676                 logtask.c               ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯
    677                 logtask.cfg             ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã®ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«
    678                 serial.h                シリアルインタフェースドライバを使用するための定義
    679                 serial.c                シリアルインタフェースドライバ
    680                 serial.cfg              シリアルドライバのコンフィギュレーションファイル
    681                 syslog.h                システムログ機能を使用するための定義
    682                 syslog.c                システムログ機能
    683                 syslog.cfg              システムログ機能のコンフィギュレーションファイル
     575                banner.h                カーネル起動メッセージの出力のための定義
     576                banner.c                カーネル起動メッセージの出力
     577                banner.cfg              カーネル起動メッセージの出力のコンフィギュレー
     578                                                ションファイル
     579                logtask.h               システムログタスクを使用するための定義
     580                logtask.c               システムログタスク
     581                logtask.cfg             システムログタスクのコンフィギュレーションファイル
     582                serial.h                シリアルインタフェースドライバを使用するための定義
     583                serial.c                シリアルインタフェースドライバ
     584                serial.cfg              シリアルドライバのコンフィギュレーションファイル
     585                syslog.h                システムログ機能を使用するための定義
     586                syslog.c                システムログ機能
     587                syslog.cfg              システムログ機能のコンフィギュレーションファイル
    684588
    685589        library/
    686                 histogram.c             å®Ÿè¡Œæ™‚間分布集計モジュール
    687                 log_output.c    システムログのフォーマット出力
    688                 strerror.c              エラーメッセージ文字列を返す関数
    689                 t_perror.c              エラーメッセージの出力
    690                 test_lib.c              テストプログラム用ライブラリ
    691                 vasyslog.c              可変数引数のシステムログライブラリ
     590                histogram.c             実行時間分布集計モジュール
     591                log_output.c    システムログのフォーマット出力
     592                strerror.c              エラーメッセージ文字列を返す関数
     593                t_perror.c              エラーメッセージの出力
     594                test_lib.c              テストプログラム用ライブラリ
     595                vasyslog.c              可変数引数のシステムログライブラリ
    692596
    693597        arch/gcc/
    694                 MANIFEST                個別パッケージのファイルリスト
    695                 tool_stddef.h   t_stddef.hの開発環境依存部(GCC用)
     598                MANIFEST                個別パッケージのファイルリスト
     599                tool_stddef.h   t_stddef.hの開発環境依存部(GCC用)
    696600
    697601        arch/logtrace/
    698                 MANIFEST                個別パッケージのファイルリスト
    699                 trace_config.h  トレースログに関する設定
    700                 trace_config.c  トレースログ機能
    701                 trace_dump.c    トレースログのダンプ
     602                MANIFEST                個別パッケージのファイルリスト
     603                trace_config.h  トレースログに関する設定
     604                trace_config.c  トレースログ機能
     605                trace_dump.c    トレースログのダンプ
    702606
    703607        utils/
    704                 applyrename             ãƒ•ã‚¡ã‚¤ãƒ«ã«ãƒªãƒãƒ¼ãƒ ã‚’適用
    705                 genoffset               offset.hの生成(GNU開発環境用)
    706                 genrename               ãƒªãƒãƒ¼ãƒ ãƒ˜ãƒƒãƒ€ãƒ•ã‚¡ã‚¤ãƒ«ã®ç”Ÿæˆ
    707                 gentest                 ãƒ†ã‚¹ãƒˆãƒ—ログラムの生成
    708                 makedep                 ä¾å­˜é–¢ä¿‚リストの生成(GNU開発環境用)
    709                 makerelease             ãƒªãƒªãƒ¼ã‚¹ãƒ‘ッケージの生成
     608                applyrename             ファイルにリネームを適用
     609                genoffset               offset.hの生成(GNU開発環境用)
     610                genrename               リネームヘッダファイルの生成
     611                gentest                 テストプログラムの生成
     612                makedep                 依存関係リストの生成(GNU開発環境用)
     613                makerelease             リリースパッケージの生成
    710614
    711615        sample/
    712                 Makefile                サンプルのMakefile(GNU開発環境用)
    713                 sample1.h               ã‚µãƒ³ãƒ—ルプログラム(1)に関する定義
    714                 sample1.c               ã‚µãƒ³ãƒ—ルプログラム(1)
    715                 sample1.cfg             ã‚µãƒ³ãƒ—ルプログラム(1)のコンフィギュレーションファイル
     616                Makefile                サンプルのMakefile(GNU開発環境用)
     617                sample1.h               サンプルプログラム(1)に関する定義
     618                sample1.c               サンプルプログラム(1)
     619                sample1.cfg             サンプルプログラム(1)のコンフィギュレーションファイル
    716620
    717621        doc/
    718                 user.txt                        ユーザーズマニュアル
    719                 asp_spec.txt            TOPPERS/ASPカーネルの仕様概要
    720                 extension.txt           æ©Ÿèƒ½æ‹¡å¼µãƒ»ãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°ã‚¬ã‚¤ãƒ‰
    721                 porting.txt                     ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ ポーティングガイド
    722                 configurator.txt        コンフィギュレータ仕様
    723                 design.txt                      設計メモ
    724                 version.txt                     å¤‰æ›´å±¥æ­´
    725 
    726 
    727 ï¼•ï¼Žã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トの使い方
    728 
    729 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—ト(configure)は,ASPカーネルおよびアプ
    730 ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ãƒ—ログラムを構築するためにå¿
    731 è¦ãªåŸºæœ¬çš„なコンフィギュレーショ
    732 ãƒ³ã‚’行うためのプログラムである.
    733 
    734 ASPカーネルを用いてアプリケーションを作成する場合には,まずオブジェクト
    735 ãƒ•ã‚¡ã‚¤ãƒ«ã‚’置くディレクトリを作成し,そのディレクトリでコンフィギュレー
    736 ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トを実行する.オブジェクトファイルを置くディレクトリの場
    737 æ‰€ã¨åç§°ã¯ï¼Œä»»æ„ã«æ±ºã‚ã¦ã‚ˆã„.
    738 
    739 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トに対するオプションは次の通り.
    740 
    741         -T <ターゲット略称>
    742                 ターゲットシステムの名称を,targetディレクトリの下に置かれてい
    743                 るターゲット依存部ディレクトリの名称で指定する(å¿
    744 é ˆï¼‰ï¼Ž
    745 
    746         -A <アプリケーションプログラム名>
    747                 アプリケーションプログラムの名称を指定する.省略した場合には,
    748                 サンプルプログラム(sample1)となる.
    749 
    750         -a <アプリケーションのディレクトリ名>
    751                 アプリケーションプログラムのソースファイル(システムコンフィギュ
    752                 レーションファイルを除く)を置いたディレクトリ名を指定する.省
    753                 略した場合には,オブジェクトファイルを置くディレクトリに置かれ
    754                 ていることを仮定する.システムコンフィギュレーションファイルは,
    755                 オブジェクトファイルを置くディレクトリに置くこと.
    756 
    757         -U <オブジェクトファイル名>
    758                 アプリケーションプログラムのメインのオブジェクトファイル(-A
    759                 で指定したアプリケーションプログラム名に".o"を付加したもの)以
    760                 外に,リンクすべきオブジェクトファイルの名称を,".o"を付加した
    761                 形で指定する.""で囲むことによって,複数のファイルを指定するこ
    762                 とも可能である(-Uオプションを複数使ってはならない).
    763 
    764         -L <カーネルライブラリのディレクトリ名>
    765                 事前に構築したカーネルライブラリ(libkernel.a)を用いて,アプリ
    766                 ケーションのみを構築する場合には,このオプションにカーネルライ
    767                 ブラリの置かれたディレクトリ名を指定する.このオプションの使用
    768                 例については,「3.5 アプリケーションとカーネルを別ã€
    769 ã«æ§‹ç¯‰ã™ã‚‹
    770                 方法」の節を参ç
    771 §ã™ã‚‹ã“と.
     622                user.txt                        ユーザーズマニュアル
     623                asp_spec.txt            TOPPERS/ASPカーネルの仕様概要
     624                extension.txt           機能拡張・チューニングガイド
     625                porting.txt                     ターゲット依存部 ポーティングガイド
     626                configurator.txt        コンフィギュレータ仕様
     627                design.txt                      設計メモ
     628                version.txt                     変更履歴
     629
     630
     6315.コンフィギュレーションスクリプトの使い方
     632
     633コンフィギュレーションスクリプト(configure)は,ASPカーネルおよびアプ
     634リケーションプログラムを構築するために必要な基本的なコンフィギュレーショ
     635ンを行うためのプログラムである.
     636
     637ASPカーネルを用いてアプリケーションを作成する場合には,まずオブジェクト
     638ファイルを置くディレクトリを作成し,そのディレクトリでコンフィギュレー
     639ションスクリプトを実行する.オブジェクトファイルを置くディレクトリの場
     640所と名称は,任意に決めてよい.
     641
     642コンフィギュレーションスクリプトに対するオプションは次の通り.
     643
     644        -T <ターゲット略称>
     645                ターゲットシステムの名称を,targetディレクトリの下に置かれてい
     646                るターゲット依存部ディレクトリの名称で指定する(必須).
     647
     648        -A <アプリケーションプログラム名>
     649                アプリケーションプログラムの名称を指定する.省略した場合には,
     650                サンプルプログラム(sample1)となる.
     651
     652        -a <アプリケーションのディレクトリ名>
     653                アプリケーションプログラムのソースファイル(システムコンフィギュ
     654                レーションファイルを除く)を置いたディレクトリ名を指定する.省
     655                略した場合には,オブジェクトファイルを置くディレクトリに置かれ
     656                ていることを仮定する.システムコンフィギュレーションファイルは,
     657                オブジェクトファイルを置くディレクトリに置くこと.
     658
     659        -U <オブジェクトファイル名>
     660                アプリケーションプログラムのメインのオブジェクトファイル(-A
     661                で指定したアプリケーションプログラム名に".o"を付加したもの)以
     662                外に,リンクすべきオブジェクトファイルの名称を,".o"を付加した
     663                形で指定する.""で囲むことによって,複数のファイルを指定するこ
     664                とも可能である(-Uオプションを複数使ってはならない).
     665
     666        -L <カーネルライブラリのディレクトリ名>
     667                事前に構築したカーネルライブラリ(libkernel.a)を用いて,アプリ
     668                ケーションのみを構築する場合には,このオプションにカーネルライ
     669                ブラリの置かれたディレクトリ名を指定する.このオプションの使用
     670                例については,「3.5 アプリケーションとカーネルを別々に構築する
     671                方法」の節を参照すること.
    772672
    773673        -f
    774                 カーネルを関数単位でコンパイルしライブラリ化する場合に,このオ
    775                 プションを指定する.このオプションの使用例については,「3.4 カー
    776                 ネルを関数単位でライブラリ化する方法」の節を参ç
    777 §ã™ã‚‹ã“と.
    778 
    779         -D <ASPカーネルのソースディレクトリ名>
    780                 ASPカーネルのソースファイルを置いたディレクトリ名を指定する.省
    781                 略した場合には,configureの置かれているディレクトリとなる.
    782 
    783         -l <プログラミング言語>
    784                 アプリケーションプログラムのプログラミング言語を指定する.現時
    785                 点では,cとc++のみをサポートしている.
    786 
    787         -t <テンプレートディレクトリ名>
    788                 Makefileやサンプルプログラムのテンプレートの置かれたディレクト
    789                 リ名を指定する.省略した場合には,ASPカーネルのソースファイルを
    790                 置いたディレクトリの下のsampleディレクトリとなる.
    791 
    792         -m <テンプレートMakefile名>
    793                 Makefileのテンプレートとするファイル名を指定する.省略した場合
    794                 には,Makefileとなる.
    795 
    796         -d <実行環境名>
    797                 ターゲットシステム上でのプログラムの実行環境(ないしは,デバッ
    798                 グ環境)の名称を指定する.このオプションを指定すると,実行環境
    799                 を指定するシンボル(TOPPERS_<デバッグ環境名>)がマクロ定義され
    800                 る.省略した場合には,実行環境を指定するシンボルはマクロ定義さ
    801                 れない.
     674                カーネルを関数単位でコンパイルしライブラリ化する場合に,このオ
     675                プションを指定する.このオプションの使用例については,「3.4 カー
     676                ネルを関数単位でライブラリ化する方法」の節を参照すること.
     677
     678        -D <ASPカーネルのソースディレクトリ名>
     679                ASPカーネルのソースファイルを置いたディレクトリ名を指定する.省
     680                略した場合には,configureの置かれているディレクトリとなる.
     681
     682        -l <プログラミング言語>
     683                アプリケーションプログラムのプログラミング言語を指定する.現時
     684                点では,cとc++のみをサポートしている.
     685
     686        -t <テンプレートディレクトリ名>
     687                Makefileやサンプルプログラムのテンプレートの置かれたディレクト
     688                リ名を指定する.省略した場合には,ASPカーネルのソースファイルを
     689                置いたディレクトリの下のsampleディレクトリとなる.
     690
     691        -m <テンプレートMakefile名>
     692                Makefileのテンプレートとするファイル名を指定する.省略した場合
     693                には,Makefileとなる.
     694
     695        -d <実行環境名>
     696                ターゲットシステム上でのプログラムの実行環境(ないしは,デバッ
     697                グ環境)の名称を指定する.このオプションを指定すると,実行環境
     698                を指定するシンボル(TOPPERS_<デバッグ環境名>)がマクロ定義され
     699                る.省略した場合には,実行環境を指定するシンボルはマクロ定義さ
     700                れない.
    802701
    803702        -r
    804                 トレースログ記録のサンプルコードを有効にする場合に,このオプショ
    805                 ンを指定する.このオプションの使用例については,「11.6 トレース
    806                 ログ記録のサンプルコードの使用方法」の節を参ç
    807 §ã™ã‚‹ã“と.
    808 
    809         -p <perlのパス名>
    810                 perlのパス名を指定する.省略した場合には,/usr/local/binと
    811                 /usr/binを探索し,perlのパス名を決定する.
    812 
    813         -g <コンフィギュレータのパス名>
    814                 コンフィギュレータ(cfg)のパス名を指定する.省略した場合には,
    815                 デフォルトのパス名(ASPカーネルのソースディレクトリの下の
    816                 cfg/cfg/cfg)となる.
    817 
    818         -o <オプション文字列>
    819                 コンパイラに与えるオプション文字列で,シンボル定義以外のもの.
    820                 シンボル定義のオプションは,-Oオプションを使用する.オプション
    821                 文字列にスペースが含まれる場合には,"-O2 -Wall"のように,""で囲
    822                 んで記述するå¿
    823 è¦ãŒã‚る.
    824 
    825         -O <オプション文字列>
    826                 コンパイラに与えるシンボル定義のためのオプション文字列.オプショ
    827                 ン文字列にスペースが含まれる場合には,"-DTEST -DPERF"のように,
    828                 ""で囲んで記述するå¿
    829 è¦ãŒã‚る.
    830 
    831         -k <オプション文字列>
    832                 リンカに与えるオプション文字列.オプション文字列にスペースが含
    833                 まれる場合には,""で囲んで記述するå¿
    834 è¦ãŒã‚る.
    835 
    836 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トが行う処理は次の通りである.
    837 
    838 (1) Makefileの生成
    839 
    840 ãƒ†ãƒ³ãƒ—レートディレクトリ(デフォルトでは,sample)から適切なMakefileを
    841 é¸æŠžã—,å¿
    842 è¦ãªç®‡æ‰€ã‚’書き換えて,Makefileを生成する.
    843 
    844 (2) サンプルプログラムの生成
    845 
    846 æŒ‡å®šã—たアプリケーションプログラムがテンプレートディレクトリにある場合,
    847 é©åˆ‡ãªã‚¢ãƒ—リケーションプログラムのソースファイルを選択し,å¿
    848 è¦ãªç®‡æ‰€ã‚’
    849 æ›¸ãæ›ãˆã¦ï¼Œã‚¢ãƒ—リケーションプログラムのソースファイル(例えば,
    850 sample1.h,sample1.c,sample1.cfg)を生成する.
    851 
    852 (3) コンフィギュレータが用意できているかのチェック
    853 
    854 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ï¼ˆcfg)の実行ファイルがあるかチェックし,ファイルがな
    855 ã„場合には,その旨を出力する.
    856 
    857 
    858 ï¼–.Makefileの修正方法
    859 
    860 å‰ã®ç« ã§èª¬æ˜Žã—たように,コンフィギュレーションスクリプトに与えるオプショ
    861 ãƒ³ç­‰ã‹ã‚‰Makefileが生成されるが,コンフィギュレーションスクリプトで対応
    862 ã§ããªã„場合には,Makefileを直接修正するå¿
    863 è¦ãŒã‚る.ここでは,Makefile
    864 ã®ä¸­ã§ï¼Œä¿®æ­£ãŒå¿
    865 è¦ã¨ãªã‚‹å¯èƒ½æ€§ã®é«˜ã„箇所について説明する.
    866 
    867 ãªãŠï¼ŒMakefileを修正した後にコンフィギュレーションスクリプトを再実行す
    868 ã‚‹ã¨ï¼Œä¿®æ­£ã—たMakefileが上書きされてしまうので注意すること(古いものが
    869 Makefile.bakに保存される).
    870 
    871 6.1 Makefileの変数定義
    872 
    873 (A) ターゲット略称
    874 
    875 TARGETには,ターゲットシステムの名称を,targetディレクトリの下に置かれ
    876 ã¦ã„るターゲット依存部ディレクトリの名称で指定する.この定義は,通常は,
    877 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トに対する-Tオプションにより行う.
    878 
    879 (B) オブジェクトファイルの拡張子
    880 
    881 Cygwin環境でコンパイルする時には,OBJEXTを"exe"に定義するå¿
    882 è¦ãŒã‚る.こ
    883 ã‚Œã¯ï¼ŒCygwin環境では,ロードモジュールのファイル名に拡張子".exe"が付加
    884 ã•ã‚Œã‚‹ã®ã«å¯¾å¿œã™ã‚‹ãŸã‚ã®ã‚‚のである.Cygwin環境であることを判定できれば,
    885 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トがこの定義を行う.
    886 
    887 (C) 実行環境(ターゲット依存)
    888 
    889 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã«ã‚ˆã£ã¦ã¯ï¼Œå®Ÿè¡Œç’°å¢ƒã«å¯¾å¿œã—てターゲット依存部のコードを差し
    890 æ›ãˆã‚‹å ´åˆãŒã‚る.これを可能にするために,実行環境の名称をDBGENVに定義
    891 ã—ている.この定義は,通常は,コンフィギュレーションスクリプトに対す
    892 ã‚‹-Dオプションにより行う.どのターゲットがどの実行環境に対応しているか
    893 ã¯ï¼Œã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚ºãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’参ç
    894 §ã™ã‚‹ã“と.
    895 
    896 (D) カーネルライブラリのディレクトリ名
    897 
    898 KERNEL_LIBには,カーネルライブラリの置かれたディレクトリ名を定義する.
    899 ã“の定義は,通常は,コンフィギュレーションスクリプトに対する-Lオプショ
    900 ãƒ³ã«ã‚ˆã‚Šè¡Œã†ï¼Ž
    901 
    902 (E) カーネルを関数単位でコンパイルするかどうか
    903 
    904 KERNEL_FUNCOBJSは,カーネルを関数単位でコンパイルする場合にはtrueに定義
    905 ã—,ファイル単位でコンパイルする場合には未定義とする.この定義は,通常
    906 ã¯ï¼Œã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トに対する-fオプションにより行う.
    907 
    908 (F) å
    909 ±é€šã‚³ãƒ³ãƒ‘イルオプション
    910 
    911 ã™ã¹ã¦ã®ãƒ—ログラムにå
    912 ±é€šã™ã‚‹ã‚³ãƒ³ãƒ‘イルオプションの追加がå¿
    913 è¦ãªå ´åˆã«ã¯ï¼Œ
    914 ä¸‹ã®å¤‰æ•°ã®å®šç¾©ã‚’変更する.そのコンパイルオプションが,特定のターゲット
    915 ã§å¸¸ã«å¿
    916 è¦ãªå ´åˆã«ã¯ï¼Œã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜ã®å®šç¾©ã‚’å
    917 ¥ã‚ŒãŸMakefile.target等を修
    918 æ­£ã™ã¹ãã§ã‚る.
    919 
    920         CDEFS           ã‚³ãƒ³ãƒ‘イラに対する-Dオプションを記述する.
    921         INCLUDES        コンパイラに対する-Iオプションを記述する.
    922         COPTS           ã‚³ãƒ³ãƒ‘イラに対するその他のオプションを記述する.
    923         LDFLAGS         ãƒªãƒ³ã‚«ã«å¯¾ã™ã‚‹ã‚ªãƒ—ションを記述する.
    924         LIBS            ライブラリリンクのためのオプションを記述する.
    925 
    926 è¿½åŠ ã®å¯èƒ½æ€§ã®ã‚るコンパイルオプションについては,「6.2 コンパイルオプ
    927 ã‚·ãƒ§ãƒ³ã€ã®ç¯€ã‚’参ç
    928 §ã®ã“と.
    929 
    930 (G) アプリケーションプログラム名
    931 
    932 APPLNAMEには,アプリケーションプログラム名を定義する.システムコンフィ
    933 ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«åã¯ï¼ŒAPPLNAMEに定義した名前に拡張子".cfg"を付加
    934 ã—た名前とする.また,アプリケーションのメインファイルは,APPLNAMEに定
    935 ç¾©ã—た名前に拡張子".c"を付加した名前とする.この定義は,通常は,コンフィ
    936 ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トに対する-Aオプションにより行う.
    937 
    938 (H) アプリケーションのディレクトリ名
    939 
    940 ã‚¢ãƒ—リケーションのソースファイルを,オブジェクトファイルを置くのとは別
    941 ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ç½®ãå ´åˆã«ã¯ï¼ŒAPPLDIRにそのディレクトリ名を定義する.こ
    942 ã®å®šç¾©ã¯ï¼Œé€šå¸¸ã¯ï¼Œã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トに対する-aオプション
    943 ã«ã‚ˆã‚Šè¡Œã†ï¼Žã‚¢ãƒ—リケーションのソースファイルを置くディレクトリが複数あ
    944 ã‚‹å ´åˆã«ã¯ï¼ŒAPPL_DIRの定義を変更することで対応する.
    945 
    946 (I) アプリケーションのプログラムファイル名
    947 
    948 ã‚¢ãƒ—リケーションが複数のソースファイルで構成される場合には,そのオブジェ
    949 ã‚¯ãƒˆãƒ•ã‚¡ã‚¤ãƒ«åã‚’,APPL_ASMOBJS,APPL_COBJS,APPL_CXXOBJSに列挙する.
    950 
    951 (J) アプリケーションのコンパイルオプション
    952 
    953 ã‚¢ãƒ—リケーションのコンパイルにå¿
    954 è¦ãªã‚³ãƒ³ãƒ‘イルオプションや,アプリケー
    955 ã‚·ãƒ§ãƒ³ãŒãƒ©ã‚¤ãƒ–ラリをå¿
    956 è¦ã¨ã™ã‚‹å ´åˆã«ã¯ï¼ŒAPPL_CFLAGSおよびAPPL_LIBSに定
    957 ç¾©ã™ã‚‹ï¼Ž
    958 
    959 (K) ロードモジュールのファイル名
    960 
    961 æ¨™æº–のロードモジュールのファイル名をOBJNAMEに定義する.デフォルトはasp
    962 ã§ã‚る.
    963 
    964 (L) ターゲットファイルの定義
    965 
    966 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ"all"の依存ファイルとして,ロードモジュールの形式を指定する.
    967 å
    968 ·ä½“的には,ELF形式の時は$(OBJFILE),バイナリ形式の時は$(OBJNAME).bin,
    969 ãƒ¢ãƒˆãƒ­ãƒ¼ãƒ© S形式の時は$(OBJNAME).srecを指定する.$(OBJFILE)は,Cygwin
    970 ç’°å¢ƒã§OBJEXTを"exe"に定義した時には$(OBJNAME).exe,そうでない場合には
    971 $(OBJNAME)となる.
    972 
    973 (M) makedepのオプションの定義
    974 
    975 Cygwin環境でルートディレクトリが"cygdrive"でない場合には,makedepの-Rオ
    976 ãƒ—ションでルートディレクトリ名を与えるå¿
    977 è¦ãŒã‚る.また,Makefileのター
    978 ã‚²ãƒƒãƒˆéƒ¨ï¼ˆ":"の左側)に複数のファイル名を記述すると(カーネルを関数単位
    979 ã§ãƒ©ã‚¤ãƒ–ラリ化する場合に,このような記述が生成される)正しく動作しない
    980 å ´åˆã«ã¯ï¼ˆCygwin環境のGNU Makeでこのような制限があるという報告がある),
    981 makedepに-Sオプションを付与するå¿
    982 è¦ãŒã‚る.
    983 
    984 makedepのオプションは,次の例のように,MAKEDEP_OPTSに定義する.
     703                トレースログ記録のサンプルコードを有効にする場合に,このオプショ
     704                ンを指定する.このオプションの使用例については,「11.6 トレース
     705                ログ記録のサンプルコードの使用方法」の節を参照すること.
     706
     707        -p <perlのパス名>
     708                perlのパス名を指定する.省略した場合には,/usr/local/binと
     709                /usr/binを探索し,perlのパス名を決定する.
     710
     711        -g <コンフィギュレータのパス名>
     712                コンフィギュレータ(cfg)のパス名を指定する.省略した場合には,
     713                デフォルトのパス名(ASPカーネルのソースディレクトリの下の
     714                cfg/cfg/cfg)となる.
     715
     716        -o <オプション文字列>
     717                コンパイラに与えるオプション文字列で,シンボル定義以外のもの.
     718                シンボル定義のオプションは,-Oオプションを使用する.オプション
     719                文字列にスペースが含まれる場合には,"-O2 -Wall"のように,""で囲
     720                んで記述する必要がある.
     721
     722        -O <オプション文字列>
     723                コンパイラに与えるシンボル定義のためのオプション文字列.オプショ
     724                ン文字列にスペースが含まれる場合には,"-DTEST -DPERF"のように,
     725                ""で囲んで記述する必要がある.
     726
     727        -k <オプション文字列>
     728                リンカに与えるオプション文字列.オプション文字列にスペースが含
     729                まれる場合には,""で囲んで記述する必要がある.
     730
     731コンフィギュレーションスクリプトが行う処理は次の通りである.
     732
     733(1) Makefileの生成
     734
     735テンプレートディレクトリ(デフォルトでは,sample)から適切なMakefileを
     736選択し,必要な箇所を書き換えて,Makefileを生成する.
     737
     738(2) サンプルプログラムの生成
     739
     740指定したアプリケーションプログラムがテンプレートディレクトリにある場合,
     741適切なアプリケーションプログラムのソースファイルを選択し,必要な箇所を
     742書き換えて,アプリケーションプログラムのソースファイル(例えば,
     743sample1.h,sample1.c,sample1.cfg)を生成する.
     744
     745(3) コンフィギュレータが用意できているかのチェック
     746
     747コンフィギュレータ(cfg)の実行ファイルがあるかチェックし,ファイルがな
     748い場合には,その旨を出力する.
     749
     750
     7516.Makefileの修正方法
     752
     753前の章で説明したように,コンフィギュレーションスクリプトに与えるオプショ
     754ン等からMakefileが生成されるが,コンフィギュレーションスクリプトで対応
     755できない場合には,Makefileを直接修正する必要がある.ここでは,Makefile
     756の中で,修正が必要となる可能性の高い箇所について説明する.
     757
     758なお,Makefileを修正した後にコンフィギュレーションスクリプトを再実行す
     759ると,修正したMakefileが上書きされてしまうので注意すること(古いものが
     760Makefile.bakに保存される).
     761
     7626.1 Makefileの変数定義
     763
     764(A) ターゲット略称
     765
     766TARGETには,ターゲットシステムの名称を,targetディレクトリの下に置かれ
     767ているターゲット依存部ディレクトリの名称で指定する.この定義は,通常は,
     768コンフィギュレーションスクリプトに対する-Tオプションにより行う.
     769
     770(B) オブジェクトファイルの拡張子
     771
     772Cygwin環境でコンパイルする時には,OBJEXTを"exe"に定義する必要がある.こ
     773れは,Cygwin環境では,ロードモジュールのファイル名に拡張子".exe"が付加
     774されるのに対応するためのものである.Cygwin環境であることを判定できれば,
     775コンフィギュレーションスクリプトがこの定義を行う.
     776
     777(C) 実行環境(ターゲット依存)
     778
     779ターゲットによっては,実行環境に対応してターゲット依存部のコードを差し
     780換える場合がある.これを可能にするために,実行環境の名称をDBGENVに定義
     781している.この定義は,通常は,コンフィギュレーションスクリプトに対す
     782る-Dオプションにより行う.どのターゲットがどの実行環境に対応しているか
     783は,ターゲット依存部のユーザーズマニュアルを参照すること.
     784
     785(D) カーネルライブラリのディレクトリ名
     786
     787KERNEL_LIBには,カーネルライブラリの置かれたディレクトリ名を定義する.
     788この定義は,通常は,コンフィギュレーションスクリプトに対する-Lオプショ
     789ンにより行う.
     790
     791(E) カーネルを関数単位でコンパイルするかどうか
     792
     793KERNEL_FUNCOBJSは,カーネルを関数単位でコンパイルする場合にはtrueに定義
     794し,ファイル単位でコンパイルする場合には未定義とする.この定義は,通常
     795は,コンフィギュレーションスクリプトに対する-fオプションにより行う.
     796
     797(F) 共通コンパイルオプション
     798
     799すべてのプログラムに共通するコンパイルオプションの追加が必要な場合には,
     800下の変数の定義を変更する.そのコンパイルオプションが,特定のターゲット
     801で常に必要な場合には,ターゲット依存の定義を入れたMakefile.target等を修
     802正すべきである.
     803
     804        CDEFS           コンパイラに対する-Dオプションを記述する.
     805        INCLUDES        コンパイラに対する-Iオプションを記述する.
     806        COPTS           コンパイラに対するその他のオプションを記述する.
     807        LDFLAGS         リンカに対するオプションを記述する.
     808        LIBS            ライブラリリンクのためのオプションを記述する.
     809
     810追加の可能性のあるコンパイルオプションについては,「6.2 コンパイルオプ
     811ション」の節を参照のこと.
     812
     813(G) アプリケーションプログラム名
     814
     815APPLNAMEには,アプリケーションプログラム名を定義する.システムコンフィ
     816ギュレーションファイル名は,APPLNAMEに定義した名前に拡張子".cfg"を付加
     817した名前とする.また,アプリケーションのメインファイルは,APPLNAMEに定
     818義した名前に拡張子".c"を付加した名前とする.この定義は,通常は,コンフィ
     819ギュレーションスクリプトに対する-Aオプションにより行う.
     820
     821(H) アプリケーションのディレクトリ名
     822
     823アプリケーションのソースファイルを,オブジェクトファイルを置くのとは別
     824のディレクトリに置く場合には,APPLDIRにそのディレクトリ名を定義する.こ
     825の定義は,通常は,コンフィギュレーションスクリプトに対する-aオプション
     826により行う.アプリケーションのソースファイルを置くディレクトリが複数あ
     827る場合には,APPL_DIRの定義を変更することで対応する.
     828
     829(I) アプリケーションのプログラムファイル名
     830
     831アプリケーションが複数のソースファイルで構成される場合には,そのオブジェ
     832クトファイル名を,APPL_ASMOBJS,APPL_COBJS,APPL_CXXOBJSに列挙する.
     833
     834(J) アプリケーションのコンパイルオプション
     835
     836アプリケーションのコンパイルに必要なコンパイルオプションや,アプリケー
     837ションがライブラリを必要とする場合には,APPL_CFLAGSおよびAPPL_LIBSに定
     838義する.
     839
     840(K) ロードモジュールのファイル名
     841
     842標準のロードモジュールのファイル名をOBJNAMEに定義する.デフォルトはasp
     843である.
     844
     845(L) ターゲットファイルの定義
     846
     847ターゲット"all"の依存ファイルとして,ロードモジュールの形式を指定する.
     848具体的には,ELF形式の時は$(OBJFILE),バイナリ形式の時は$(OBJNAME).bin,
     849モトローラ S形式の時は$(OBJNAME).srecを指定する.$(OBJFILE)は,Cygwin
     850環境でOBJEXTを"exe"に定義した時には$(OBJNAME).exe,そうでない場合には
     851$(OBJNAME)となる.
     852
     853(M) makedepのオプションの定義
     854
     855Cygwin環境でルートディレクトリが"cygdrive"でない場合には,makedepの-Rオ
     856プションでルートディレクトリ名を与える必要がある.また,Makefileのター
     857ゲット部(":"の左側)に複数のファイル名を記述すると(カーネルを関数単位
     858でライブラリ化する場合に,このような記述が生成される)正しく動作しない
     859場合には(Cygwin環境のGNU Makeでこのような制限があるという報告がある),
     860makedepに-Sオプションを付与する必要がある.
     861
     862makedepのオプションは,次の例のように,MAKEDEP_OPTSに定義する.
    985863
    986864MAKEDEP_OPTS = -R cygdrive -S
    987865
    988 6.2 コンパイルオプション
    989 
    990 ASPカーネルのコード中には,assertマクロが使われている.assertマクロは,
    991 NDEBUGを定義することで,オブジェクトコード中から消すことができる.カー
    992 ãƒãƒ«ã®ãƒ‡ãƒãƒƒã‚°ãŒçµ‚了すれば,-DNDEBUGを指定してコンパイルした方が効率が
    993 ã‚ˆããªã‚‹ï¼Ž
    994 
    995 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã«ãŠã„て,コンパイルオプションに-Werror(警告をエラー扱
    996 ã„する)を指定している場合がある.そのようなターゲットにおいて,アプリ
    997 ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã§è­¦å‘ŠãŒé¿ã‘られない場合には,ターゲット依存部を修正してコン
    998 ãƒ‘イルオプションを削除するå¿
    999 è¦ãŒã‚る.
    1000 
    1001 ã¾ãŸï¼ŒTOPPERS_OMIT_SYSLOGを定義してコンパイルすることで,システムログ出
    1002 åŠ›ã‚’抑止することができる.
    1003 
    1004 
    1005 ï¼—.コンフィギュレータの使い方
    1006 
    1007 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ï¼ˆcfg)は,TOPPERS新世代カーネル統合仕様書の2.12.5節
    1008 ã®è¨˜è¿°ã®é€šã‚Šï¼Œ3つのパスで構成される.
    1009 
    1010 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«åã‚’パラメー
    1011 ã‚¿ã«å–り,以下のオプションを持つ(重要なもののみ).
     8666.2 コンパイルオプション
     867
     868ASPカーネルのコード中には,assertマクロが使われている.assertマクロは,
     869NDEBUGを定義することで,オブジェクトコード中から消すことができる.カー
     870ネルのデバッグが終了すれば,-DNDEBUGを指定してコンパイルした方が効率が
     871よくなる.
     872
     873ターゲット依存部において,コンパイルオプションに-Werror(警告をエラー扱
     874いする)を指定している場合がある.そのようなターゲットにおいて,アプリ
     875ケーションで警告が避けられない場合には,ターゲット依存部を修正してコン
     876パイルオプションを削除する必要がある.
     877
     878また,TOPPERS_OMIT_SYSLOGを定義してコンパイルすることで,システムログ出
     879力を抑止することができる.
     880
     881
     8827.コンフィギュレータの使い方
     883
     884コンフィギュレータ(cfg)は,TOPPERS新世代カーネル統合仕様書の2.12.5節
     885の記述の通り,3つのパスで構成される.
     886
     887コンフィギュレータは,システムコンフィギュレーションファイル名をパラメー
     888タに取り,以下のオプションを持つ(重要なもののみ).
    1012889
    1013890        --help
    1014                 オプションのリストと説明を表示する.
    1015 
    1016         -vï¼»--versionï¼½
    1017                 コンフィギュレータのバージョンを表示する.
    1018 
    1019         -kï¼»--kernelï¼½<カーネル名>
    1020                 カーネルの名称を指定する.デフォルトはasp.
    1021 
    1022         -pï¼»--passï¼½<パス番号>
    1023                 パス番号を指定する.1~3のいずれか.
    1024 
    1025         -Iï¼»--include-pathï¼½<インクルードパス名>
    1026                 INCLUDEディレクティブにおいて,インクルードするコンフィギュレー
    1027                 ションファイルを探すパス名を指定する.
    1028 
    1029         -Tï¼»--template-fileï¼½<テンプレートファイル名>
    1030                 テンプレートファイルの名称を指定する.パス2とパス3で有効.
    1031 
    1032         --api-table <静的APIテーブルファイル名>
    1033                 静的APIテーブルのファイル名を指定する.
    1034 
    1035         --cfg1-def-table <値取得シンボルテーブルファイル名>
    1036                 値取得シンボルテーブルのファイル名を指定する.
    1037 
    1038         -rï¼»--rom-imageï¼½<ロードモジュール名>
    1039                 ロードモジュールをSレコードフォーマットの形に変換したファイルの
    1040                 名称を指定する.パス3でのみ有効.
    1041 
    1042         -s [--symbol-table] <シンボルファイル名>
    1043                 ロードモジュール中の各シンボルとアドレスの対応表を含むシンボル
    1044                 ファイルの名称を指定する.パス3でのみ有効.
    1045 
    1046         --id-output-file <ID番号出力ファイル名>
    1047                 オブジェクトのID番号の割付け結果を,指定した名前のファイルに書
    1048                 き出す.パス2でのみ有効.
    1049 
    1050         --id-input-file <ID番号å
    1051 ¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«å>
    1052                 オブジェクトのID番号の割付けを,指定した名前のファイルから取り
    1053                 込む.パス2でのみ有効.
     891                オプションのリストと説明を表示する.
     892
     893        -v[--version]
     894                コンフィギュレータのバージョンを表示する.
     895
     896        -k[--kernel]<カーネル名>
     897                カーネルの名称を指定する.デフォルトはasp.
     898
     899        -p[--pass]<パス番号>
     900                パス番号を指定する.1~3のいずれか.
     901
     902        -I[--include-path]<インクルードパス名>
     903                INCLUDEディレクティブにおいて,インクルードするコンフィギュレー
     904                ションファイルを探すパス名を指定する.
     905
     906        -T[--template-file]<テンプレートファイル名>
     907                テンプレートファイルの名称を指定する.パス2とパス3で有効.
     908
     909        --api-table <静的APIテーブルファイル名>
     910                静的APIテーブルのファイル名を指定する.
     911
     912        --cfg1-def-table <値取得シンボルテーブルファイル名>
     913                値取得シンボルテーブルのファイル名を指定する.
     914
     915        -r[--rom-image]<ロードモジュール名>
     916                ロードモジュールをSレコードフォーマットの形に変換したファイルの
     917                名称を指定する.パス3でのみ有効.
     918
     919        -s [--symbol-table] <シンボルファイル名>
     920                ロードモジュール中の各シンボルとアドレスの対応表を含むシンボル
     921                ファイルの名称を指定する.パス3でのみ有効.
     922
     923        --id-output-file <ID番号出力ファイル名>
     924                オブジェクトのID番号の割付け結果を,指定した名前のファイルに書
     925                き出す.パス2でのみ有効.
     926
     927        --id-input-file <ID番号入力ファイル名>
     928                オブジェクトのID番号の割付けを,指定した名前のファイルから取り
     929                込む.パス2でのみ有効.
    1054930
    1055931        --external-id
    1056                 オブジェクトのID番号を保持する変数の定義を生成する.パス2でのみ
    1057                 有効.
    1058 
    1059         -Mï¼»--print-dependenciesï¼½<ターゲットシンボル>
    1060                 システムコンフィギュレーションファイルの依存関係を出力する.
    1061                 Makefile中の依存関係を生成する際に用いる.
    1062 
    1063 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã®è©³ç´°ä»•æ§˜ã«ã¤ã„ては,別途PDFファイルの形でé
    1064 å¸ƒã—てい
    1065 ã‚‹ã€ŒTOPPERS新世代カーネル用コンフィギュレータ仕様」を参ç
    1066 §ã™ã‚‹ã“と.
    1067 
    1068 
    1069 ï¼˜ï¼Žã‚·ã‚¹ãƒ†ãƒ ã‚µãƒ¼ãƒ“ス
    1070 
    1071 8.1 システムログ機能
    1072 
    1073 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã¯ï¼Œã‚«ãƒ¼ãƒãƒ«å†
    1074 ã§ç™ºç”Ÿã—た異常事象やカーネルのトレースロ
    1075 ã‚°ï¼Œã‚·ã‚¹ãƒ†ãƒ ã‚µãƒ¼ãƒ“スやアプリケーションで発生した異常事象やトレースログ
    1076 ã‚’,ログæƒ
    1077 å ±ã¨ã—て記録するための機能である.また,記録したログæƒ
    1078 å ±ã‚’取
    1079 ã‚Šå‡ºã™æ©Ÿèƒ½ã‚‚持つ.
    1080 
    1081 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã§syslog.cfg
    1082 ã‚’インクルードすることで,システムに組み込むことができる.システムログ
    1083 å‡ºåŠ›ã‚’行うソースファイルでは,t_syslog.hをインクルードする.また,シス
    1084 ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã®ãã®ä»–のサービスコールを呼び出すソースファイルでは,
    1085 syslog.hをインクルードする.
    1086 
    1087 8.1.1 システムログ機能の位置付け
    1088 
    1089 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã¯ï¼Œã‚«ãƒ¼ãƒãƒ«å†
    1090 ã‹ã‚‰ã‚‚呼び出すことができるため,カーネル
    1091 ã‚ˆã‚Šä¸‹ã®éšŽå±¤ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ä½ç½®ä»˜ã‘ることができる.この意味では,他のシ
    1092 ã‚¹ãƒ†ãƒ ã‚µãƒ¼ãƒ“スとは位置付けが異なる.
    1093 
    1094 ä¸€æ–¹ï¼Œãƒ­ã‚°æƒ
    1095 å ±ã‚’システム外部に出力するためには,シリアルインタフェース
    1096 ãƒ‰ãƒ©ã‚¤ãƒãªã©ï¼Œã‚«ãƒ¼ãƒãƒ«ä¸Šã§å‹•ä½œã™ã‚‹ã‚·ã‚¹ãƒ†ãƒ ã‚µãƒ¼ãƒ“スを用いるå¿
    1097 è¦ãŒã‚る.
    1098 ãã“で,ログæƒ
    1099 å ±ã‚’システム外部に出力するためのサービス(これを,システ
    1100 ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã¨å‘¼ã¶ï¼‰ã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã¨ã¯åˆ†é›¢ã—て実è£
    1101 ã™ã‚‹ã“ととし,
    1102 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã¯ãƒ­ã‚°æƒ
    1103 å ±ã®è¨˜éŒ²ãƒ»å–出しのための機能に絞っている.
    1104 
    1105 ä»¥ä¸Šã®ã‚ˆã†ã«ï¼Œã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã¯ã‚«ãƒ¼ãƒãƒ«ã‚ˆã‚Šä¸‹ã®éšŽå±¤ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã‚ã‚‹
    1106 ãŒï¼Œã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã®ä¸­ã§ãƒ­ã‚°æ™‚刻を取り出すために,カーネルの機能をå¿
    1107 
    1108 è¦ã¨ã™ã‚‹ï¼Žå®Ÿè£
    1109 ä¸Šã¯ï¼Œã‚«ãƒ¼ãƒãƒ«ã®å†
    1110 éƒ¨å¤‰æ•°ã‚’直接参ç
    1111 §ã—ている.そのため,カー
    1112 ãƒãƒ«ã®å®Ÿè¡Œé–‹å§‹å‰ã‚„終了後は,ログ時刻は正しく記録されない.
    1113 
    1114 8.1.2 ログバッファへの記録と低レベル出力
    1115 
    1116 ä¸Šè¿°ã—たように,ログæƒ
    1117 å ±ã‚’システムの外部に出力するためには,カーネル上
    1118 ã§å‹•ä½œã™ã‚‹ã‚·ã‚¹ãƒ†ãƒ ã‚µãƒ¼ãƒ“スを用いるå¿
    1119 è¦ãŒã‚るため,カーネルの動作を継続
    1120 ã§ããªã„ような重大な異常事象が起こった場合には,ログæƒ
    1121 å ±ã‚’出力できなく
    1122 ãªã‚‹ï¼Žã¾ãŸï¼Œã“れらのシステムサービス自身をデバッグする場合にも,ログæƒ
    1123 
    1124 å ±ã®å‡ºåŠ›ãŒã§ããªã„.
    1125 
    1126 ãã“で,カーネル上で動作するシステムサービスが使えない場合にでもログæƒ
    1127 
    1128 å ±ã‚’出力するために,低レベル出力機能を用意する.低レベル出力機能は,ター
    1129 ã‚²ãƒƒãƒˆä¾å­˜ã«ç”¨æ„ã™ã‚‹ä½Žãƒ¬ãƒ™ãƒ«ã®æ–‡å­—出力関数(target_fput_log)を用いてロ
    1130 ã‚°æƒ
    1131 å ±ã‚’出力する機能である.低レベルの文字出力関数は,ターゲット依存部
    1132 ã§ç”¨æ„ã™ã‚‹ã“ととしているが,最終製品に組み込まれる場合などでは,文字を
    1133 å‡ºåŠ›ã™ã‚‹æ–¹æ³•ãŒãªã„状況も考えられる.そのような場合,低レベルの文字出力
    1134 é–¢æ•°ã«é€ã‚‰ã‚ŒãŸæ–‡å­—は,メモリ上に残しておくか,捨ててしまうしかない.
    1135 
    1136 ãƒ­ã‚°æƒ
    1137 å ±ã‚’,ログバッファへ記録するか低レベル出力機能を用いて出力するか
    1138 ã®è¨­å®šã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã®ã‚µãƒ¼ãƒ“スコール(syslog_msk_log)によって行
    1139 ã†ã“とができる.syslog_msk_logの使い方については後述する.デフォルトで
    1140 ã¯ï¼ˆã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã‚’動作させず,syslog_msk_logも呼び出さない場合),
    1141 ã™ã¹ã¦ã®ãƒ­ã‚°æƒ
    1142 å ±ã‚’低レベル出力機能を用いて出力し,ログバッファには記録
    1143 ã—ない.
    1144 
    1145 ä½Žãƒ¬ãƒ™ãƒ«å‡ºåŠ›æ©Ÿèƒ½ã‚’用いると,ログメッセージの作成処理(printf相当の処理)
    1146 ã¨ä½Žãƒ¬ãƒ™ãƒ«ã®æ–‡å­—出力処理をカーネルå†
    1147 ã§è¡Œã†ãŸã‚ã«ï¼Œã‚«ãƒ¼ãƒãƒ«ã®å¿œç­”性が悪
    1148 ããªã‚‹ã“とに注意しなければならない.特に,低レベルの文字出力処理はデバ
    1149 ã‚¤ã‚¹ã‚’ポーリングする形で実è£
    1150 ã™ã‚‹ã®ãŒé€šå¸¸ã§ï¼Œãã®å ´åˆã«ã¯ï¼Œã‚«ãƒ¼ãƒãƒ«ã®å¿œ
    1151 ç­”性は実用的と言えない程に悪くなる.
    1152 
    1153 8.1.3 ログæƒ
    1154 å ±ã®ç¨®åˆ¥
    1155 
    1156 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã¯ï¼Œãƒ­ã‚°æƒ
    1157 å ±ã«ä»¥ä¸‹ã®ç¨®åˆ¥ã‚’設けている.
    1158 
    1159                 LOG_TYPE_COMMENT        コメント
    1160                 LOG_TYPE_ASSERT         ã‚¢ã‚µãƒ¼ã‚·ãƒ§ãƒ³ã®å¤±æ•—
    1161                 LOG_TYPE_INH            割込みハンドラ
    1162                 LOG_TYPE_ISR            割込みサービスルーチン
    1163                 LOG_TYPE_CYC            周期ハンドラ
    1164                 LOG_TYPE_ALM            アラームハンドラ
    1165                 LOG_TYPE_OVR            オーバランハンドラ
    1166                 LOG_TYPE_EXC            CPU例外ハンドラ
    1167                 LOG_TYPE_TEX            タスク例外処理ルーチン
    1168                 LOG_TYPE_TSKSTAT        タスク状æ
    1169 ‹å¤‰åŒ–
    1170                 LOG_TYPE_DSP            ディスパッチャ
    1171                 LOG_TYPE_SVC            サービスコール
    1172 
    1173 ãƒ­ã‚°æƒ
    1174 å ±ã®ç¨®åˆ¥ã®ä¸­ã§ï¼ŒLOG_TYPE_COMMENTとLOG_TYPE_ASSERT以外は,カーネル
    1175 ã®ãƒˆãƒ¬ãƒ¼ã‚¹ãƒ­ã‚°ã«ç”¨ã„るためのものであるが,使用するかどうかはターゲット
    1176 ä¾å­˜éƒ¨ã«ä»»ã•ã‚Œã¦ã„る.
    1177 
    1178 8.1.4 ログæƒ
    1179 å ±ã®é‡è¦åº¦
    1180 
    1181 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã¯ï¼Œãƒ­ã‚°æƒ
    1182 å ±ã‚’出力する際に指定する重要度に基づいて,実
    1183 éš›ã«å‡ºåŠ›ã™ã‚‹ãƒ­ã‚°æƒ
    1184 å ±ã‚’動的に設定することができる.これは,UNIXのシステ
    1185 ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã‚’まねたもので,ログの重要度の種類や指定方法もUNIXのAPIを参考
    1186 ã«ã—ている.また,低レベル出力機能を用いて出力するログæƒ
    1187 å ±ã‚‚,重要度に
    1188 åŸºã¥ã„て動的に設定することができる.
    1189 
    1190 å
    1191 ·ä½“的には,ログの重要度として次の8段階を用意している.
    1192 
    1193                 LOG_EMERG               ã‚«ãƒ¼ãƒãƒ«ã®å‹•ä½œã‚’継続できないエラー
     932                オブジェクトのID番号を保持する変数の定義を生成する.パス2でのみ
     933                有効.
     934
     935        -M[--print-dependencies]<ターゲットシンボル>
     936                システムコンフィギュレーションファイルの依存関係を出力する.
     937                Makefile中の依存関係を生成する際に用いる.
     938
     939コンフィギュレータの詳細仕様については,別途PDFファイルの形で配布してい
     940る「TOPPERS新世代カーネル用コンフィギュレータ仕様」を参照すること.
     941
     942
     9438.システムサービス
     944
     9458.1 システムログ機能
     946
     947システムログ機能は,カーネル内で発生した異常事象やカーネルのトレースロ
     948グ,システムサービスやアプリケーションで発生した異常事象やトレースログ
     949を,ログ情報として記録するための機能である.また,記録したログ情報を取
     950り出す機能も持つ.
     951
     952システムログ機能は,システムコンフィギュレーションファイルでsyslog.cfg
     953をインクルードすることで,システムに組み込むことができる.システムログ
     954出力を行うソースファイルでは,t_syslog.hをインクルードする.また,シス
     955テムログ機能のその他のサービスコールを呼び出すソースファイルでは,
     956syslog.hをインクルードする.
     957
     9588.1.1 システムログ機能の位置付け
     959
     960システムログ機能は,カーネル内からも呼び出すことができるため,カーネル
     961より下の階層のモジュールと位置付けることができる.この意味では,他のシ
     962ステムサービスとは位置付けが異なる.
     963
     964一方,ログ情報をシステム外部に出力するためには,シリアルインタフェース
     965ドライバなど,カーネル上で動作するシステムサービスを用いる必要がある.
     966そこで,ログ情報をシステム外部に出力するためのサービス(これを,システ
     967ムログタスクと呼ぶ)は,システムログ機能とは分離して実装することとし,
     968システムログ機能はログ情報の記録・取出しのための機能に絞っている.
     969
     970以上のように,システムログ機能はカーネルより下の階層のモジュールである
     971が,システムログ機能の中でログ時刻を取り出すために,カーネルの機能を必
     972要とする.実装上は,カーネルの内部変数を直接参照している.そのため,カー
     973ネルの実行開始前や終了後は,ログ時刻は正しく記録されない.
     974
     9758.1.2 ログバッファへの記録と低レベル出力
     976
     977上述したように,ログ情報をシステムの外部に出力するためには,カーネル上
     978で動作するシステムサービスを用いる必要があるため,カーネルの動作を継続
     979できないような重大な異常事象が起こった場合には,ログ情報を出力できなく
     980なる.また,これらのシステムサービス自身をデバッグする場合にも,ログ情
     981報の出力ができない.
     982
     983そこで,カーネル上で動作するシステムサービスが使えない場合にでもログ情
     984報を出力するために,低レベル出力機能を用意する.低レベル出力機能は,ター
     985ゲット依存に用意する低レベルの文字出力関数(target_fput_log)を用いてロ
     986グ情報を出力する機能である.低レベルの文字出力関数は,ターゲット依存部
     987で用意することとしているが,最終製品に組み込まれる場合などでは,文字を
     988出力する方法がない状況も考えられる.そのような場合,低レベルの文字出力
     989関数に送られた文字は,メモリ上に残しておくか,捨ててしまうしかない.
     990
     991ログ情報を,ログバッファへ記録するか低レベル出力機能を用いて出力するか
     992の設定は,システムログ機能のサービスコール(syslog_msk_log)によって行
     993うことができる.syslog_msk_logの使い方については後述する.デフォルトで
     994は(システムログタスクを動作させず,syslog_msk_logも呼び出さない場合),
     995すべてのログ情報を低レベル出力機能を用いて出力し,ログバッファには記録
     996しない.
     997
     998低レベル出力機能を用いると,ログメッセージの作成処理(printf相当の処理)
     999と低レベルの文字出力処理をカーネル内で行うために,カーネルの応答性が悪
     1000くなることに注意しなければならない.特に,低レベルの文字出力処理はデバ
     1001イスをポーリングする形で実装するのが通常で,その場合には,カーネルの応
     1002答性は実用的と言えない程に悪くなる.
     1003
     10048.1.3 ログ情報の種別
     1005
     1006システムログ機能は,ログ情報に以下の種別を設けている.
     1007
     1008                LOG_TYPE_COMMENT        コメント
     1009                LOG_TYPE_ASSERT         アサーションの失敗
     1010                LOG_TYPE_INH            割込みハンドラ
     1011                LOG_TYPE_ISR            割込みサービスルーチン
     1012                LOG_TYPE_CYC            周期ハンドラ
     1013                LOG_TYPE_ALM            アラームハンドラ
     1014                LOG_TYPE_OVR            オーバランハンドラ
     1015                LOG_TYPE_EXC            CPU例外ハンドラ
     1016                LOG_TYPE_TEX            タスク例外処理ルーチン
     1017                LOG_TYPE_TSKSTAT        タスク状態変化
     1018                LOG_TYPE_DSP            ディスパッチャ
     1019                LOG_TYPE_SVC            サービスコール
     1020
     1021ログ情報の種別の中で,LOG_TYPE_COMMENTとLOG_TYPE_ASSERT以外は,カーネル
     1022のトレースログに用いるためのものであるが,使用するかどうかはターゲット
     1023依存部に任されている.
     1024
     10258.1.4 ログ情報の重要度
     1026
     1027システムログ機能は,ログ情報を出力する際に指定する重要度に基づいて,実
     1028際に出力するログ情報を動的に設定することができる.これは,UNIXのシステ
     1029ムログ機能をまねたもので,ログの重要度の種類や指定方法もUNIXのAPIを参考
     1030にしている.また,低レベル出力機能を用いて出力するログ情報も,重要度に
     1031基づいて動的に設定することができる.
     1032
     1033具体的には,ログの重要度として次の8段階を用意している.
     1034
     1035                LOG_EMERG               カーネルの動作を継続できないエラー
    11941036                LOG_ALERT
    11951037                LOG_CRIT
    1196                 LOG_ERROR               é‡è¦æ€§ã®ä½Žã„システムエラー
    1197                 LOG_WARNING             è­¦å‘Šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ï¼Žã‚·ã‚¹ãƒ†ãƒ ã¯å®‰å
    1198 ¨ã«ç¶™ç¶šå‹•ä½œã§ãã‚‹
     1038                LOG_ERROR               重要性の低いシステムエラー
     1039                LOG_WARNING             警告メッセージ.システムは安全に継続動作できる
    11991040                LOG_NOTICE
    12001041                LOG_INFO
    1201                 LOG_DEBUG               ãƒ‡ãƒãƒƒã‚°ã®ãŸã‚ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
    1202 
    1203 ã©ã®é‡è¦åº¦ã®ãƒ­ã‚°æƒ
    1204 å ±ã‚’ログバッファに記録するかと,どの重要度のログæƒ
    1205 å ±
    1206 ã‚’低レベル出力機能を用いて出力するかは,システムログ機能のサービスコー
    1207 ãƒ«ï¼ˆsyslog_msk_log)によって設定することができる.
    1208 
    1209 8.1.5 ログæƒ
    1210 å ±ã®ãƒ‡ãƒ¼ã‚¿æ§‹é€ 
    1211 
    1212 ãƒ­ã‚°æƒ
    1213 å ±ã‚’格納するためのデータ型として,SYSLOG構造体を用意している.
    1214 SYSLOG構造体には,ログæƒ
    1215 å ±ã®ç¨®åˆ¥ï¼ˆlogtypeフィールド),ログ時刻
    1216 ï¼ˆlogtimフィールド),その他のログæƒ
    1217 å ±ï¼ˆloginfoフィールド)が含まれる.
    1218 
    1219 SYSLOG構造体に格納されたログæƒ
    1220 å ±ã‚’出力する場合には,ログ時刻は出力関数
    1221 ï¼ˆsyslog_wri_log)によって書き込まれるため,出力関数を呼ぶ側で書き込む
    1222 å¿
    1223 è¦ã¯ãªã„.
    1224 
    1225 8.1.6 システムログ機能のサービスコール
    1226 
    1227 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã®æä¾›ã™ã‚‹ã‚µãƒ¼ãƒ“スコールは次の通りである.これらのサー
    1228 ãƒ“スコールを呼び出すソースファイルでは,syslog.hをインクルードするå¿
    1229 è¦
    1230 ãŒã‚る.
     1042                LOG_DEBUG               デバッグのためのメッセージ
     1043
     1044どの重要度のログ情報をログバッファに記録するかと,どの重要度のログ情報
     1045を低レベル出力機能を用いて出力するかは,システムログ機能のサービスコー
     1046ル(syslog_msk_log)によって設定することができる.
     1047
     10488.1.5 ログ情報のデータ構造
     1049
     1050ログ情報を格納するためのデータ型として,SYSLOG構造体を用意している.
     1051SYSLOG構造体には,ログ情報の種別(logtypeフィールド),ログ時刻
     1052(logtimフィールド),その他のログ情報(loginfoフィールド)が含まれる.
     1053
     1054SYSLOG構造体に格納されたログ情報を出力する場合には,ログ時刻は出力関数
     1055(syslog_wri_log)によって書き込まれるため,出力関数を呼ぶ側で書き込む
     1056必要はない.
     1057
     10588.1.6 システムログ機能のサービスコール
     1059
     1060システムログ機能の提供するサービスコールは次の通りである.これらのサー
     1061ビスコールを呼び出すソースファイルでは,syslog.hをインクルードする必要
     1062がある.
    12311063
    12321064(1) ER syslog_wri_log(uint_t prio, const SYSLOG *p_syslog)
    12331065
    1234 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã«ï¼Œp_syslogで指定されるログæƒ
    1235 å ±ã‚’,prioで指定される重
    1236 è¦åº¦ã§å‡ºåŠ›ã™ã‚‹ï¼ˆãƒ­ã‚°ãƒãƒƒãƒ•ã‚¡ã¸è¨˜éŒ²ã™ã‚‹ã‹ä½Žãƒ¬ãƒ™ãƒ«å‡ºåŠ›æ©Ÿèƒ½ã‚’用いて出力す
    1237 ã‚‹ï¼‰ï¼Ž
    1238 
    1239 ãƒ—ロトタイプ宣言において,*p_syslogにconst指定がされているが,実際には,
    1240 ã“の関数の中で,*p_syslogのlogtimフィールドにシステム時刻を書き込んでい
    1241 ã‚‹ï¼Ž
     1066システムログ機能に,p_syslogで指定されるログ情報を,prioで指定される重
     1067要度で出力する(ログバッファへ記録するか低レベル出力機能を用いて出力す
     1068る).
     1069
     1070プロトタイプ宣言において,*p_syslogにconst指定がされているが,実際には,
     1071この関数の中で,*p_syslogのlogtimフィールドにシステム時刻を書き込んでい
     1072る.
    12421073
    12431074(2) ER_UINT syslog_rea_log(SYSLOG *p_syslog)
    12441075
    1245 ãƒ­ã‚°ãƒãƒƒãƒ•ã‚¡ã‹ã‚‰ãƒ­ã‚°æƒ
    1246 å ±ã‚’1つ取り出す.ログバッファが空の時はE_OBJ,そ
    1247 ã†ã§ãªã„場合は,ログバッファのオーバフローにより失われたログæƒ
    1248 å ±ã®æ•°
    1249 ï¼ˆãƒ­ã‚°æƒ
    1250 å ±ãŒå¤±ã‚ã‚Œã¦ã„ない場合は0)を返す.システムログタスクが用いるこ
    1251 ã¨ã‚’想定している.
     1076ログバッファからログ情報を1つ取り出す.ログバッファが空の時はE_OBJ,そ
     1077うでない場合は,ログバッファのオーバフローにより失われたログ情報の数
     1078(ログ情報が失われていない場合は0)を返す.システムログタスクが用いるこ
     1079とを想定している.
    12521080
    12531081(3) ER syslog_msk_log(uint_t logmask, uint_t lowmask)
    12541082
    1255 ãƒ­ã‚°ãƒãƒƒãƒ•ã‚¡ã«è¨˜éŒ²ã™ã¹ããƒ­ã‚°æƒ
    1256 å ±ã®é‡è¦åº¦ã®ç¤ºã™ãƒ“ットマップ(logmask)と,
    1257 ä½Žãƒ¬ãƒ™ãƒ«å‡ºåŠ›æ©Ÿèƒ½ã‚’用いて出力すべきログæƒ
    1258 å ±ã®é‡è¦åº¦ã‚’示すビットマップ
    1259 ï¼ˆlowmask)を設定する.ビットマップを作るためのマクロとして,LOG_MASKと
    1260 LOG_UPTOを用意している.
     1083ログバッファに記録すべきログ情報の重要度の示すビットマップ(logmask)と,
     1084低レベル出力機能を用いて出力すべきログ情報の重要度を示すビットマップ
     1085(lowmask)を設定する.ビットマップを作るためのマクロとして,LOG_MASKと
     1086LOG_UPTOを用意している.
    12611087
    12621088(4) ER syslog_ref_log(T_SYSLOG_RLOG *pk_rlog)
    12631089
    1264 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã®çŠ¶æ
    1265 ‹ã‚’参ç
    1266 §ã™ã‚‹ï¼Žå
    1267 ·ä½“的には,ログバッファに記録されて
    1268 ã„るログæƒ
    1269 å ±ã®æ•°ï¼ˆT_SYSLOG_RLOG構造体のcountフィールド),ログバッファ
    1270 ã®ã‚ªãƒ¼ãƒãƒ•ãƒ­ãƒ¼ã«ã‚ˆã‚Šå¤±ã‚ã‚ŒãŸãƒ­ã‚°æƒ
    1271 å ±ã®æ•°ï¼ˆlostフィールド),ログバッファ
    1272 ã«è¨˜éŒ²ã™ã¹ããƒ­ã‚°æƒ
    1273 å ±ã®é‡è¦åº¦ã®ç¤ºã™ãƒ“ットマップ(logmaskフィールド),低
    1274 ãƒ¬ãƒ™ãƒ«å‡ºåŠ›æ©Ÿèƒ½ã‚’用いて出力すべきログæƒ
    1275 å ±ã®é‡è¦åº¦ã‚’示すビットマップ
    1276 ï¼ˆlowmaskフィールド)を参ç
    1277 §ã™ã‚‹ã“とができる.
    1278 
    1279 8.1.7 システムログ機能のためのライブラリ関数とマクロ
    1280 
    1281 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°å‡ºåŠ›ã®ãŸã‚ã®ãƒ©ã‚¤ãƒ–ラリ関数とマクロは次の通りである.これら
    1282 ã ã‘を呼び出すソースファイルでは,t_syslog.hをインクルードすればよい.
     1090システムログ機能の状態を参照する.具体的には,ログバッファに記録されて
     1091いるログ情報の数(T_SYSLOG_RLOG構造体のcountフィールド),ログバッファ
     1092のオーバフローにより失われたログ情報の数(lostフィールド),ログバッファ
     1093に記録すべきログ情報の重要度の示すビットマップ(logmaskフィールド),低
     1094レベル出力機能を用いて出力すべきログ情報の重要度を示すビットマップ
     1095(lowmaskフィールド)を参照することができる.
     1096
     10978.1.7 システムログ機能のためのライブラリ関数とマクロ
     1098
     1099システムログ出力のためのライブラリ関数とマクロは次の通りである.これら
     1100だけを呼び出すソースファイルでは,t_syslog.hをインクルードすればよい.
    12831101
    12841102(1) void _syslog_n(uint_t prio, uint_t type, intptr_t arg1, ..., intptr_t argn)
    1285     ※ nは0~6のいずれか.
    1286 
    1287 ãƒ­ã‚°ç¨®åˆ¥ãŒtype,パラメータがarg1~argnのログæƒ
    1288 å ±ã‚’,重要度prioで出力す
    1289 ã‚‹ãŸã‚ã®é–¢æ•°ï¼Ž
     1103    ※ nは0~6のいずれか.
     1104
     1105ログ種別がtype,パラメータがarg1~argnのログ情報を,重要度prioで出力す
     1106るための関数.
    12901107
    12911108(2) void syslog_n(uint_t prio, const char *format, arg1, ..., argn)
    1292     ※ nは0~5のいずれか.
    1293 
    1294 format文字列およびそれに続く引数から作成されるメッセージを,ログ種別が
    1295 LOG_TYPE_COMMENTのログæƒ
    1296 å ±ã¨ã—て,重要度prioで出力するためのマクロ.
    1297 
    1298 formatはメッセージのフォーマット記述,arg1~argnはフォーマット記述中で
    1299 å‚ç
    1300 §ã•ã‚Œã‚‹å€¤ã§ï¼Œprintfのフォーマット記述のサブセットとなっている.arg1~
    1301 argnは,このマクロ中でintptr_t型にキャストされるため,intptr_t型に型変
    1302 æ›ã§ãã‚‹ä»»æ„ã®åž‹ã‚’渡すことができ,型チェックはされない.formatおよび
    1303 arg1~argnには,次の制限がある.
    1304 
    1305 ãƒ»formatのフォーマット記述は,定数文字列を渡すことを想定しており,この
    1306 ãƒžã‚¯ãƒ­å‡¦ç†ã‚’終えた後も変化してはならない.
    1307 
    1308 ãƒ»format中に使えるフォーマット指定は次の通り.
    1309 
    1310         %d              引数をint_t型とみなし,10進数で表示
    1311         %u              引数をuint_t型とみなし,10進数で表示
    1312         %x              引数をuint_t型とみなし,16進数(英文字は小文字)で表示
    1313         %X              引数をuint_t型とみなし,16進数(英文字は大文字)で表示
    1314         %p              引数をポインタとみなし,16進数(英文字は小文字)で表示
    1315         %c              引数を文字コードとみなし,文字を表示
    1316         %s              引数を文字列を示すポインタとみなし,文字列を表示
    1317         %%              '%'を表示(引数は取らない)
    1318 
    1319 %d, %u, %x, %Xにおいては,'%'の直後に表示桁数を指定する10進数値を記述す
    1320 ã‚‹ã“とができる.その場合,表示すべき文字列が指定した桁数に満たない場合
    1321 ã«ã¯ï¼ŒæŒ‡å®šã—た桁数å†
    1322 ã«å³è©°ã‚ã§è¡¨ç¤ºã™ã‚‹ï¼Ž10進数値が'0'で始まる場合には,
    1323 ãã®é–“に'0'を埋める.
    1324 
    1325 ã¾ãŸï¼Œintptr_t型のサイズがlong型のサイズ以上である環境においては,次の
    1326 ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆæŒ‡å®šã‚‚使用することができる.この他のフォーマット指定に'l'
    1327 ã‚’付加した場合には無視する(%lcと%lsには対応していない).
    1328 
    1329         %ld             å¼•æ•°ã‚’long_t型とみなし,10進数で表示
    1330         %lu             å¼•æ•°ã‚’ulong_t型とみなし,10進数で表示
    1331         %lx             å¼•æ•°ã‚’ulong_t型とみなし,16進数(英文字は小文字)で表示
    1332         %lX             å¼•æ•°ã‚’ulong_t型とみなし,16進数(英文字は大文字)で表示
    1333 
    1334 ãƒ»arg1~argnにポインタを渡す場合(%sに対応する引数の場合)に,ポインタ
    1335 ã®æŒ‡ã™ãƒ‡ãƒ¼ã‚¿ã¯ï¼Œã“のマクロ処理を終えた後も変化してはならない.定数文字
    1336 åˆ—を渡すことを想定している.
     1109    ※ nは0~5のいずれか.
     1110
     1111format文字列およびそれに続く引数から作成されるメッセージを,ログ種別が
     1112LOG_TYPE_COMMENTのログ情報として,重要度prioで出力するためのマクロ.
     1113
     1114formatはメッセージのフォーマット記述,arg1~argnはフォーマット記述中で
     1115参照される値で,printfのフォーマット記述のサブセットとなっている.arg1~
     1116argnは,このマクロ中でintptr_t型にキャストされるため,intptr_t型に型変
     1117換できる任意の型を渡すことができ,型チェックはされない.formatおよび
     1118arg1~argnには,次の制限がある.
     1119
     1120・formatのフォーマット記述は,定数文字列を渡すことを想定しており,この
     1121マクロ処理を終えた後も変化してはならない.
     1122
     1123・format中に使えるフォーマット指定は次の通り.
     1124
     1125        %d              引数をint_t型とみなし,10進数で表示
     1126        %u              引数をuint_t型とみなし,10進数で表示
     1127        %x              引数をuint_t型とみなし,16進数(英文字は小文字)で表示
     1128        %X              引数をuint_t型とみなし,16進数(英文字は大文字)で表示
     1129        %p              引数をポインタとみなし,16進数(英文字は小文字)で表示
     1130        %c              引数を文字コードとみなし,文字を表示
     1131        %s              引数を文字列を示すポインタとみなし,文字列を表示
     1132        %%              '%'を表示(引数は取らない)
     1133
     1134%d, %u, %x, %Xにおいては,'%'の直後に表示桁数を指定する10進数値を記述す
     1135ることができる.その場合,表示すべき文字列が指定した桁数に満たない場合
     1136には,指定した桁数内に右詰めで表示する.10進数値が'0'で始まる場合には,
     1137その間に'0'を埋める.
     1138
     1139また,intptr_t型のサイズがlong型のサイズ以上である環境においては,次の
     1140フォーマット指定も使用することができる.この他のフォーマット指定に'l'
     1141を付加した場合には無視する(%lcと%lsには対応していない).
     1142
     1143        %ld             引数をlong_t型とみなし,10進数で表示
     1144        %lu             引数をulong_t型とみなし,10進数で表示
     1145        %lx             引数をulong_t型とみなし,16進数(英文字は小文字)で表示
     1146        %lX             引数をulong_t型とみなし,16進数(英文字は大文字)で表示
     1147
     1148・arg1~argnにポインタを渡す場合(%sに対応する引数の場合)に,ポインタ
     1149の指すデータは,このマクロ処理を終えた後も変化してはならない.定数文字
     1150列を渡すことを想定している.
    13371151
    13381152(3) void syslog(uint_t prio, const char *format, ...)
    13391153
    1340 format文字列およびそれに続く引数から作成されるメッセージを,ログ種別が
    1341 LOG_TYPE_COMMENTのログæƒ
    1342 å ±ã¨ã—て,重要度prioで出力するための関数で,引
    1343 æ•°ã®æ•°ã‚’可変にしたもの.formatに続く引数は最大5個まで.formatおよびそれ
    1344 ã«ç¶šãå¼•æ•°ã«ã¯ï¼Œsyslog_nと同様の制限がある.
    1345 
    1346 ã“のライブラリ関数は,可変数引数を処理するためにå†
    1347 éƒ¨ã§æ–‡å­—列をスキャン
    1348 ã™ã‚‹ï¼Žãã®ãŸã‚ï¼Œå®Ÿè¡Œæ™‚間が長くなる可能性があり,割込み禁止状æ
    1349 ‹ã§å‘¼ã³å‡º
    1350 ã™ã¹ãã§ã¯ãªã„.主にアプリケーションプログラムが用いることを想定してい
    1351 ã‚‹ï¼Ž
     1154format文字列およびそれに続く引数から作成されるメッセージを,ログ種別が
     1155LOG_TYPE_COMMENTのログ情報として,重要度prioで出力するための関数で,引
     1156数の数を可変にしたもの.formatに続く引数は最大5個まで.formatおよびそれ
     1157に続く引数には,syslog_nと同様の制限がある.
     1158
     1159このライブラリ関数は,可変数引数を処理するために内部で文字列をスキャン
     1160する.そのため,実行時間が長くなる可能性があり,割込み禁止状態で呼び出
     1161すべきではない.主にアプリケーションプログラムが用いることを想定してい
     1162る.
    13521163
    13531164(4) UINT LOG_MASK(UINT prio)
    13541165
    1355 é‡è¦åº¦prioのみセットされたビットマップを作るマクロ.syslog_msk_logに渡
    1356 ã™å¼•æ•°ã‚’作るために用いる.
     1166重要度prioのみセットされたビットマップを作るマクロ.syslog_msk_logに渡
     1167す引数を作るために用いる.
    13571168
    13581169(5) UINT LOG_UPTO(UINT prio)
    13591170
    1360 é‡è¦åº¦prio以上の重要度がすべてセットされたビットマップを作るマクロ.
    1361 syslog_msk_logに渡す引数を作るために用いる.
    1362 
    1363 8.1.8 システムログ機能のその他のサービス
    1364 
    1365 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã¯ï¼Œå‰è¨˜ã®ã‚µãƒ¼ãƒ“スコール等に加えて,初期化処理のための
    1366 é–¢æ•°ã‚’持つ.
     1171重要度prio以上の重要度がすべてセットされたビットマップを作るマクロ.
     1172syslog_msk_logに渡す引数を作るために用いる.
     1173
     11748.1.8 システムログ機能のその他のサービス
     1175
     1176システムログ機能は,前記のサービスコール等に加えて,初期化処理のための
     1177関数を持つ.
    13671178
    13681179(1) void syslog_initialize(intptr_t exinf)
    13691180
    1370 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã‚’初期化する.ログバッファにログæƒ
    1371 å ±ãŒè¨˜éŒ²ã•ã‚Œã¦ã„ã‚‹å ´
    1372 åˆã«ã¯ï¼Œæ¶ˆåŽ»ã•ã‚Œã‚‹ï¼Žsyslog.cfgによって,カーネルに初期化ルーチンとして
    1373 ç™»éŒ²ã•ã‚Œã‚‹ï¼Žexinfは無視される.
    1374 
    1375 8.2 シリアルインタフェースドライバ
    1376 
    1377 ã‚·ãƒªã‚¢ãƒ«ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãƒ‰ãƒ©ã‚¤ãƒã¯ï¼Œã‚·ãƒªã‚¢ãƒ«ãƒãƒ¼ãƒˆã‚’扱うためのドライバで
    1378 ã‚る.
    1379 
    1380 ã‚·ãƒªã‚¢ãƒ«ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãƒ‰ãƒ©ã‚¤ãƒã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤
    1381 ãƒ«ã§serial.cfgをインクルードすることで,システムに組み込むことができる.
    1382 ã‚·ãƒªã‚¢ãƒ«ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãƒ‰ãƒ©ã‚¤ãƒã‚’呼び出すソースファイルでは,serial.hを
    1383 ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã™ã‚‹ï¼Ž
    1384 
    1385 ã‚·ãƒªã‚¢ãƒ«ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãƒ‰ãƒ©ã‚¤ãƒã¯ï¼Œãƒãƒ¼ãƒˆæ¯Žã«ã‚»ãƒžãƒ•ã‚©ã‚’2個ずつ使用する.
    1386 ã‚»ãƒžãƒ•ã‚©ã‚’生成する静的APIは,serial.cfgに含まれている.
    1387 
    1388 8.2.1 シリアルインタフェースドライバのサービスコール
    1389 
    1390 ã‚·ãƒªã‚¢ãƒ«ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãƒ‰ãƒ©ã‚¤ãƒã‚’呼び出すサービスコールの仕様は次の通り
    1391 ã§ã‚る.この中で,シリアルポートのID番号(portid)の解釈はターゲット依
    1392 å­˜ã¨ãªã‚‹ï¼Ž
    1393 
    1394 ã“れらのサービスコールは,非タスクコンテキストから呼び出すことはできな
    1395 ã„.また,serial_rea_datとserial_wri_datは,ディスパッチ保留状æ
    1396 ‹ã§å‘¼ã³
    1397 å‡ºã™ã“とはできない.いずれも,呼び出した場合にはE_CTXエラーとなる.
     1181システムログ機能を初期化する.ログバッファにログ情報が記録されている場
     1182合には,消去される.syslog.cfgによって,カーネルに初期化ルーチンとして
     1183登録される.exinfは無視される.
     1184
     11858.2 シリアルインタフェースドライバ
     1186
     1187シリアルインタフェースドライバは,シリアルポートを扱うためのドライバで
     1188ある.
     1189
     1190シリアルインタフェースドライバは,システムコンフィギュレーションファイ
     1191ルでserial.cfgをインクルードすることで,システムに組み込むことができる.
     1192シリアルインタフェースドライバを呼び出すソースファイルでは,serial.hを
     1193インクルードする.
     1194
     1195シリアルインタフェースドライバは,ポート毎にセマフォを2個ずつ使用する.
     1196セマフォを生成する静的APIは,serial.cfgに含まれている.
     1197
     11988.2.1 シリアルインタフェースドライバのサービスコール
     1199
     1200シリアルインタフェースドライバを呼び出すサービスコールの仕様は次の通り
     1201である.この中で,シリアルポートのID番号(portid)の解釈はターゲット依
     1202存となる.
     1203
     1204これらのサービスコールは,非タスクコンテキストから呼び出すことはできな
     1205い.また,serial_rea_datとserial_wri_datは,ディスパッチ保留状態で呼び
     1206出すことはできない.いずれも,呼び出した場合にはE_CTXエラーとなる.
    13981207
    13991208(1) ER serial_opn_por(ID portid)
    14001209
    1401 portidで指定されたシリアルポートをオープンし,受信/送信が可能な状æ
    1402 ‹ã«
    1403 ã™ã‚‹ï¼Ž
     1210portidで指定されたシリアルポートをオープンし,受信/送信が可能な状態に
     1211する.
    14041212
    14051213(2) ER serial_cls_por(ID portid)
    14061214
    1407 portidで指定されたシリアルポートをクローズする.
     1215portidで指定されたシリアルポートをクローズする.
    14081216
    14091217(3) ER_UINT serial_rea_dat(ID portid, char *buf, uint_t len)
    14101218
    1411 portidで指定されたシリアルポートから,lenバイトの文字列を受信し,bufか
    1412 ã‚‰ã®é ˜åŸŸã«å
    1413 ¥ã‚Œã‚‹ï¼Žlenバイト受信するまで,å¾
    1414 ã¡çŠ¶æ
    1415 ‹ã¨ãªã‚‹ï¼Žå—信した文字数
    1416 ã¾ãŸã¯ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’返す.
     1219portidで指定されたシリアルポートから,lenバイトの文字列を受信し,bufか
     1220らの領域に入れる.lenバイト受信するまで,待ち状態となる.受信した文字数
     1221またはエラーコードを返す.
    14171222
    14181223(4) ER_UINT serial_wri_dat(ID portid, const char *buf, uint_t len)
    14191224
    1420 portidで指定されたシリアルポートに,bufからのlenバイトの文字列を送信す
    1421 ã‚‹ï¼Žlenバイト送信バッファにå
    1422 ¥ã‚Œã‚‹ã¾ã§ï¼Œå¾
    1423 ã¡çŠ¶æ
    1424 ‹ã¨ãªã‚‹ï¼Žé€ä¿¡ã—た文字数ま
    1425 ãŸã¯ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’返す.
     1225portidで指定されたシリアルポートに,bufからのlenバイトの文字列を送信す
     1226る.lenバイト送信バッファに入れるまで,待ち状態となる.送信した文字数ま
     1227たはエラーコードを返す.
    14261228
    14271229(5) ER serial_ctl_por(ID portid, uint_t ioctl)
    14281230
    1429 portidで指定されたシリアルポートの制御æƒ
    1430 å ±ã‚’,ioctlで示される値に設定す
    1431 ã‚‹ï¼Ž
    1432 
    1433 ioctlには,以下の制御æƒ
    1434 å ±ã‚’表す定数を,ビット毎に論理和をとったものを
    1435 æŒ‡å®šã™ã‚‹ï¼Ž
    1436 
    1437         IOCTL_ECHO(エコーバックモード)
    1438                 このビットを設定すると,シリアルインタフェースドライバがエコー
    1439                 バックを行う.å
    1440 ·ä½“的には,バッファから文字を取り出す度に,その
    1441                 文字を書き出す.
    1442 
    1443         IOCTL_CRLF(改行モード)
    1444                 LF(line feed)を書き出すと,CR(carriage return)+LFに変換し
    1445                 て書き出す.
    1446 
    1447         IOCTL_FCSND(送信フロー制御)
    1448                 文字を送信する処理に対して,XON/XOFFによるフロー制御を行う.
    1449                 すなわち,STOP(コントロール-S)を受信すると送信を停止し,
    1450                 START(コントロール-Q)を受信すると送信を再開する.
    1451 
    1452         IOCTL_FCANY(送信フロー制御で任意の文字で送信再開)
    1453                 IOCTL_FCSNDを指定している時に,送信停止中に受信した任意の文字
    1454                 で送信を再開する.
    1455 
    1456         IOCTL_FCRCV(受信フロー制御)
    1457                 文字を受信する処理に対して,XON/XOFFによるフロー制御を行う.
    1458                 すなわち,受信バッファの残り領域が少なくなるとSTOP(コントロー
    1459                 ル-S)を送出し,残り領域が増えればSTART(コントロール-Q)を送
    1460                 出する.
    1461 
    1462 ãªãŠï¼Œã‚ªãƒ¼ãƒ—ン直後のデフォルトの設定値は(IOCTL_ECHO | IOCTL_CRLF |
    1463 IOCTL_FCSND | IOCTL_FCRCV)である.
     1231portidで指定されたシリアルポートの制御情報を,ioctlで示される値に設定す
     1232る.
     1233
     1234ioctlには,以下の制御情報を表す定数を,ビット毎に論理和をとったものを
     1235指定する.
     1236
     1237        IOCTL_ECHO(エコーバックモード)
     1238                このビットを設定すると,シリアルインタフェースドライバがエコー
     1239                バックを行う.具体的には,バッファから文字を取り出す度に,その
     1240                文字を書き出す.
     1241
     1242        IOCTL_CRLF(改行モード)
     1243                LF(line feed)を書き出すと,CR(carriage return)+LFに変換し
     1244                て書き出す.
     1245
     1246        IOCTL_FCSND(送信フロー制御)
     1247                文字を送信する処理に対して,XON/XOFFによるフロー制御を行う.
     1248                すなわち,STOP(コントロール-S)を受信すると送信を停止し,
     1249                START(コントロール-Q)を受信すると送信を再開する.
     1250
     1251        IOCTL_FCANY(送信フロー制御で任意の文字で送信再開)
     1252                IOCTL_FCSNDを指定している時に,送信停止中に受信した任意の文字
     1253                で送信を再開する.
     1254
     1255        IOCTL_FCRCV(受信フロー制御)
     1256                文字を受信する処理に対して,XON/XOFFによるフロー制御を行う.
     1257                すなわち,受信バッファの残り領域が少なくなるとSTOP(コントロー
     1258                ル-S)を送出し,残り領域が増えればSTART(コントロール-Q)を送
     1259                出する.
     1260
     1261なお,オープン直後のデフォルトの設定値は(IOCTL_ECHO | IOCTL_CRLF |
     1262IOCTL_FCSND | IOCTL_FCRCV)である.
    14641263
    14651264(6) ER serial_ref_por(ID portid, T_SERIAL_RPOR *pk_rpor)
    14661265
    1467 portidで指定されたシリアルポートの状æ
    1468 ‹ã‚’参ç
    1469 §ã—,pk_rporで指定されるパケッ
    1470 ãƒˆã«è¿”す.パケット中のreacntには受信バッファ中の文字数を,wricntには送
    1471 ä¿¡ãƒãƒƒãƒ•ã‚¡ä¸­ã®æ–‡å­—数を返す.
    1472 
    1473 8.2.2 シリアルインタフェースドライバのその他のサービス
    1474 
    1475 ã‚·ãƒªã‚¢ãƒ«ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãƒ‰ãƒ©ã‚¤ãƒã¯ï¼Œå‰è¨˜ã®ã‚µãƒ¼ãƒ“スコールに加えて,初期化
    1476 å‡¦ç†ã¨æœªé€ä¿¡æ–‡å­—の取出し処理を持つ.初期化処理は,カーネルに初期化ルー
    1477 ãƒãƒ³ã¨ã—て登録する.また,ターゲット依存で,初期化処理,終了処理,割込
    1478 ã¿ã‚µãƒ¼ãƒ“スルーチンを持つ.これらの登録処理はserial.cfgに含まれる.
     1266portidで指定されたシリアルポートの状態を参照し,pk_rporで指定されるパケッ
     1267トに返す.パケット中のreacntには受信バッファ中の文字数を,wricntには送
     1268信バッファ中の文字数を返す.
     1269
     12708.2.2 シリアルインタフェースドライバのその他のサービス
     1271
     1272シリアルインタフェースドライバは,前記のサービスコールに加えて,初期化
     1273処理と未送信文字の取出し処理を持つ.初期化処理は,カーネルに初期化ルー
     1274チンとして登録する.また,ターゲット依存で,初期化処理,終了処理,割込
     1275みサービスルーチンを持つ.これらの登録処理はserial.cfgに含まれる.
    14791276
    14801277(1) void serial_initialize(intptr_t exinf)
    14811278
    1482 ã‚·ãƒªã‚¢ãƒ«ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãƒ‰ãƒ©ã‚¤ãƒã‚’初期化する.カーネルに初期化ルーチンと
    1483 ã—て登録する.exinfは無視する.
     1279シリアルインタフェースドライバを初期化する.カーネルに初期化ルーチンと
     1280して登録する.exinfは無視する.
    14841281
    14851282(2) bool_t serial_get_chr(ID portid, char *p_c)
    14861283
    1487 portidで指定されたシリアルポートの送信バッファ中の文字を,p_cの指す番地
    1488 ã«å–り出し,trueを返す関数.文字がなかった時には,falseを返す.終了処理
    1489 ãƒ«ãƒ¼ãƒãƒ³ä¸­ã§å‘¼ã³å‡ºã™ã“とを想定している.
    1490 
    1491 8.3 システムログタスク
    1492 
    1493 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã‹ã‚‰ãƒ­ã‚°æƒ
    1494 å ±ã‚’取り出し,それをシ
    1495 ã‚¹ãƒ†ãƒ ã®å¤–部に出力するためのサービスである.
    1496 
    1497 ASPカーネルのリリースパッケージに含まれるシステムログタスクは,シリアル
    1498 ãƒãƒ¼ãƒˆã«ãƒ­ã‚°æƒ
    1499 å ±ã‚’文字列の形で出力するもので,システムログタスクの一例
    1500 ã¨ã„う位置付けで提供している.
    1501 
    1502 ã“のシステムログタスクは,システムコンフィギュレーションファイルで
    1503 logtask.cfgをインクルードすることで,システムに組み込むことができる.シ
    1504 ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã®ã‚µãƒ¼ãƒ“スを呼び出すソースファイルでは,logtask.hをイン
    1505 ã‚¯ãƒ«ãƒ¼ãƒ‰ã™ã‚‹ï¼Ž
    1506 
    1507 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œé–‹å§‹ã•ã‚Œã‚‹ã¨ï¼Œé‡è¦åº¦ãŒLOG_EMERGのログæƒ
    1508 å ±ã‚’低レ
    1509 ãƒ™ãƒ«å‡ºåŠ›æ©Ÿèƒ½ã‚’用いて出力し,重要度がLOG_NOTICEかそれより高いログæƒ
    1510 å ±ã‚’
    1511 ãƒ­ã‚°ãƒãƒƒãƒ•ã‚¡ã«è¨˜éŒ²ã™ã‚‹ã‚ˆã†ã«ï¼Œã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã®è¨­å®šãŒå¤‰æ›´ã•ã‚Œã‚‹ï¼Ž
    1512 
    1513 8.3.1 システムログタスクのサービスコール
    1514 
    1515 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã®ã‚µãƒ¼ãƒ“スを呼び出すサービスコールの仕様は次の通りで
    1516 ã‚る.
     1284portidで指定されたシリアルポートの送信バッファ中の文字を,p_cの指す番地
     1285に取り出し,trueを返す関数.文字がなかった時には,falseを返す.終了処理
     1286ルーチン中で呼び出すことを想定している.
     1287
     12888.3 システムログタスク
     1289
     1290システムログタスクは,システムログ機能からログ情報を取り出し,それをシ
     1291ステムの外部に出力するためのサービスである.
     1292
     1293ASPカーネルのリリースパッケージに含まれるシステムログタスクは,シリアル
     1294ポートにログ情報を文字列の形で出力するもので,システムログタスクの一例
     1295という位置付けで提供している.
     1296
     1297このシステムログタスクは,システムコンフィギュレーションファイルで
     1298logtask.cfgをインクルードすることで,システムに組み込むことができる.シ
     1299ステムログタスクのサービスを呼び出すソースファイルでは,logtask.hをイン
     1300クルードする.
     1301
     1302システムログタスクが実行開始されると,重要度がLOG_EMERGのログ情報を低レ
     1303ベル出力機能を用いて出力し,重要度がLOG_NOTICEかそれより高いログ情報を
     1304ログバッファに記録するように,システムログ機能の設定が変更される.
     1305
     13068.3.1 システムログタスクのサービスコール
     1307
     1308システムログタスクのサービスを呼び出すサービスコールの仕様は次の通りで
     1309ある.
    15171310
    15181311(1) ER logtask_flush(uint_t count)
    15191312
    1520 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã®ãƒ­ã‚°ãƒãƒƒãƒ•ã‚¡ä¸­ã®ãƒ­ã‚°æƒ
    1521 å ±ã®æ•°ãŒcount以下になるまでå¾
    1522 ã¤ï¼Ž
    1523 countが0の場合には,シリアルインタフェースドライバの送信バッファが空に
    1524 ãªã‚‹ã®ã‚‚å¾
    1525 ã¤ï¼Ž
    1526 
    1527 8.3.2 システムログタスクのその他のサービス
    1528 
    1529 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã¯ï¼Œå‰è¨˜ã®ã‚µãƒ¼ãƒ“スコールに加えて,メイン処理と終了処
    1530 ç†ã‚’持つ.メイン処理はタスクとして,終了処理は終了処理ルーチンとして登
    1531 éŒ²ã™ã‚‹ï¼Žã“れらの登録処理はlogtask.cfgに含まれる.
     1313システムログ機能のログバッファ中のログ情報の数がcount以下になるまで待つ.
     1314countが0の場合には,シリアルインタフェースドライバの送信バッファが空に
     1315なるのも待つ.
     1316
     13178.3.2 システムログタスクのその他のサービス
     1318
     1319システムログタスクは,前記のサービスコールに加えて,メイン処理と終了処
     1320理を持つ.メイン処理はタスクとして,終了処理は終了処理ルーチンとして登
     1321録する.これらの登録処理はlogtask.cfgに含まれる.
    15321322
    15331323(1) void logtask_main(intptr_t exinf)
    15341324
    1535 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã®ãƒ¡ã‚¤ãƒ³å‡¦ç†ï¼Žexinfには,ログæƒ
    1536 å ±ã‚’出力するシリアルポー
    1537 ãƒˆã®ID番号を渡す.
     1325システムログタスクのメイン処理.exinfには,ログ情報を出力するシリアルポー
     1326トのID番号を渡す.
    15381327
    15391328(2) void logtask_terminate(intptr_t exinf)
    15401329
    1541 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã®çµ‚了処理.シリアルインタフェースドライバの送信バッ
    1542 ãƒ•ã‚¡ã«è“„積されたデータと,ログバッファに記録されたログæƒ
    1543 å ±ã‚’,低レベル
    1544 å‡ºåŠ›æ©Ÿèƒ½ã‚’用いて出力する.出力すべきログæƒ
    1545 å ±ãŒã‚る場合には,それを出力
    1546 ã™ã‚‹å‰ã«ï¼Œ"-- buffered messages --"という文字列を出力する.exinfは無視
    1547 ã™ã‚‹ï¼Ž
    1548 
    1549 ã“の関数を終了処理ルーチンとして登録することで,カーネル終了時点で未出
    1550 åŠ›ã®ãƒ­ã‚°æƒ
    1551 å ±ã®ã»ã¨ã‚“どを出力することができる.ただし,未出力のログæƒ
    1552 å ±
    1553 ã®å†
    1554 ï¼Œã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã®ãƒ¡ã‚¤ãƒ³å‡¦ç†ãŒï¼Œãƒ­ã‚°ãƒãƒƒãƒ•ã‚¡ã‹ã‚‰å–り出したが,
    1555 ã¾ã ã‚·ãƒªã‚¢ãƒ«ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãƒ‰ãƒ©ã‚¤ãƒã«é€ä¿¡ã—ていないæƒ
    1556 å ±ã¯ï¼Œã“の関数では
    1557 å‡ºåŠ›ã§ããªã„.
    1558 
    1559 8.4 カーネル起動メッセージの出力
    1560 
    1561 ã‚«ãƒ¼ãƒãƒ«èµ·å‹•ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®å‡ºåŠ›ã¯ï¼Œã‚«ãƒ¼ãƒãƒ«ã®èµ·å‹•æ™‚に,カーネルの名称やバー
    1562 ã‚¸ãƒ§ãƒ³ç•ªå·ï¼Œè‘—作権表示などを出力するための機能である.
    1563 
    1564 ã‚«ãƒ¼ãƒãƒ«èµ·å‹•ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®å‡ºåŠ›ã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«
    1565 ã§banner.cfgをインクルードすることで,システムに組み込むことができる.
    1566 
    1567 ã‚«ãƒ¼ãƒãƒ«èµ·å‹•ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®å‡ºåŠ›ã¯ï¼Œæ¬¡ã®é–¢æ•°ã§æ§‹æˆã•ã‚Œã‚‹ï¼Ž
     1330システムログタスクの終了処理.シリアルインタフェースドライバの送信バッ
     1331ファに蓄積されたデータと,ログバッファに記録されたログ情報を,低レベル
     1332出力機能を用いて出力する.出力すべきログ情報がある場合には,それを出力
     1333する前に,"-- buffered messages --"という文字列を出力する.exinfは無視
     1334する.
     1335
     1336この関数を終了処理ルーチンとして登録することで,カーネル終了時点で未出
     1337力のログ情報のほとんどを出力することができる.ただし,未出力のログ情報
     1338の内,システムログタスクのメイン処理が,ログバッファから取り出したが,
     1339まだシリアルインタフェースドライバに送信していない情報は,この関数では
     1340出力できない.
     1341
     13428.4 カーネル起動メッセージの出力
     1343
     1344カーネル起動メッセージの出力は,カーネルの起動時に,カーネルの名称やバー
     1345ジョン番号,著作権表示などを出力するための機能である.
     1346
     1347カーネル起動メッセージの出力は,システムコンフィギュレーションファイル
     1348でbanner.cfgをインクルードすることで,システムに組み込むことができる.
     1349
     1350カーネル起動メッセージの出力は,次の関数で構成される.
    15681351
    15691352(1) void print_banner(intptr_t exinf)
    15701353
    1571 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã‚’用いて,カーネル起動メッセージを出力する.banner.cfg
    1572 ã«ã‚ˆã£ã¦ï¼Œã‚«ãƒ¼ãƒãƒ«ã«åˆæœŸåŒ–ルーチンとして登録される.exinfは無視される.
    1573 
    1574 
    1575 ï¼™ï¼Žã‚µãƒãƒ¼ãƒˆãƒ©ã‚¤ãƒ–ラリ
    1576 
    1577 ã‚µãƒãƒ¼ãƒˆãƒ©ã‚¤ãƒ–ラリは,アプリケーションやシステムサービスを作成するため
    1578 ã«åˆ©ç”¨ã§ãã‚‹ãƒ©ã‚¤ãƒ–ラリ関数群である.
    1579 
    1580 9.1 基本的なライブラリ関数
    1581 
    1582 åŸºæœ¬çš„なライブラリ関数を用いる場合には,t_stdlib.hをインクルードし,å¿
    1583 
    1584 è¦ã«å¿œã˜ã¦strerror.cとt_perror.cをコンパイル・リンクする.
     1354システムログ機能を用いて,カーネル起動メッセージを出力する.banner.cfg
     1355によって,カーネルに初期化ルーチンとして登録される.exinfは無視される.
     1356
     1357
     13589.サポートライブラリ
     1359
     1360サポートライブラリは,アプリケーションやシステムサービスを作成するため
     1361に利用できるライブラリ関数群である.
     1362
     13639.1 基本的なライブラリ関数
     1364
     1365基本的なライブラリ関数を用いる場合には,t_stdlib.hをインクルードし,必
     1366要に応じてstrerror.cとt_perror.cをコンパイル・リンクする.
    15851367
    15861368(1) const char *itron_strerror(ER ercd)
    15871369
    1588 ercdで示されるエラーコードに対応するメインエラーコードの文字列を返す.
     1370ercdで示されるエラーコードに対応するメインエラーコードの文字列を返す.
    15891371
    15901372(2) void t_perror(uint_t prio, const char *file, int_t line,
    15911373                                                                                const char *expr, ER ercd);
    15921374
    1593 ã‚µãƒ¼ãƒ“スコールがエラーを返した場合に用いることを想定した関数で,ファイ
    1594 ãƒ«åï¼Œè¡Œç•ªå·ï¼Œãƒ¡ã‚¤ãƒ³ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ç­‰ã‚’,重要度prioで,システムログ機能を
    1595 ç”¨ã„て出力する.
    1596 
    1597 9.2 キュー操作ライブラリ関数
    1598 
    1599 ã‚­ãƒ¥ãƒ¼æ“ä½œãƒ©ã‚¤ãƒ–ラリは,キューヘッダを含むリング構造のダブルリンクキュー
    1600 ã‚’扱うライブラリである.キューヘッダの次エントリはキューのå
    1601 ˆé ­ã®ã‚¨ãƒ³ãƒˆ
    1602 ãƒªï¼Œå‰ã‚¨ãƒ³ãƒˆãƒªã¯ã‚­ãƒ¥ãƒ¼ã®æœ«å°¾ã®ã‚¨ãƒ³ãƒˆãƒªã¨ã™ã‚‹ï¼Žã¾ãŸï¼Œã‚­ãƒ¥ãƒ¼ã®å
    1603 ˆé ­ã®ã‚¨ãƒ³
    1604 ãƒˆãƒªã®å‰ã‚¨ãƒ³ãƒˆãƒªã¨ï¼Œã‚­ãƒ¥ãƒ¼ã®æœ«å°¾ã®ã‚¨ãƒ³ãƒˆãƒªã®æ¬¡ã‚¨ãƒ³ãƒˆãƒªã¯ï¼Œã‚­ãƒ¥ãƒ¼ãƒ˜ãƒƒãƒ€
    1605 ã¨ã™ã‚‹ï¼Žç©ºã®ã‚­ãƒ¥ãƒ¼ã¯ï¼Œæ¬¡ã‚¨ãƒ³ãƒˆãƒªï¼Œå‰ã‚¨ãƒ³ãƒˆãƒªã¨ã‚‚自分自身を指すキューヘッ
    1606 ãƒ€ã§ã‚らわす.
    1607 
    1608 ã‚­ãƒ¥ãƒ¼æ“ä½œãƒ©ã‚¤ãƒ–ラリ関数を用いる場合には,queue.hをインクルードする.
    1609 
    1610 ã‚­ãƒ¥ãƒ¼ãƒ˜ãƒƒãƒ€ã¨ã‚¨ãƒ³ãƒˆãƒªã®ãŸã‚ã®ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã¨ã—て,QUEUE構造体を用いる.
    1611 QUEUE構造体の定義は次の通り.
     1375サービスコールがエラーを返した場合に用いることを想定した関数で,ファイ
     1376ル名,行番号,メインエラーコード等を,重要度prioで,システムログ機能を
     1377用いて出力する.
     1378
     13799.2 キュー操作ライブラリ関数
     1380
     1381キュー操作ライブラリは,キューヘッダを含むリング構造のダブルリンクキュー
     1382を扱うライブラリである.キューヘッダの次エントリはキューの先頭のエント
     1383リ,前エントリはキューの末尾のエントリとする.また,キューの先頭のエン
     1384トリの前エントリと,キューの末尾のエントリの次エントリは,キューヘッダ
     1385とする.空のキューは,次エントリ,前エントリとも自分自身を指すキューヘッ
     1386ダであらわす.
     1387
     1388キュー操作ライブラリ関数を用いる場合には,queue.hをインクルードする.
     1389
     1390キューヘッダとエントリのためのデータ構造として,QUEUE構造体を用いる.
     1391QUEUE構造体の定義は次の通り.
    16121392
    16131393        typedef struct queue {
    1614                 struct queue *p_next;           /* 次エントリへのポインタ */
    1615                 struct queue *p_prev;           /* 前エントリへのポインタ */
     1394                struct queue *p_next;           /* 次エントリへのポインタ */
     1395                struct queue *p_prev;           /* 前エントリへのポインタ */
    16161396        } QUEUE;
    16171397
    1618 ã‚­ãƒ¥ãƒ¼æ“ä½œã®ãŸã‚ã«ç”¨æ„ã—ている関数は次の通り.
     1398キュー操作のために用意している関数は次の通り.
    16191399
    16201400(1) void queue_initialize(QUEUE *p_queue);
    16211401
    1622 ã‚­ãƒ¥ãƒ¼ã‚’初期化する.p_queueにはキューヘッダを指定する.
     1402キューを初期化する.p_queueにはキューヘッダを指定する.
    16231403
    16241404(2) void queue_insert_prev(QUEUE *p_queue, QUEUE *p_entry);
    16251405
    1626 p_queueで指定するエントリの前に,p_entryで指定するエントリを挿å
    1627 ¥ã™ã‚‹ï¼Ž
    1628 p_queueにキューヘッダを指定した場合には,キューの末尾にp_entryで指定す
    1629 ã‚‹ã‚¨ãƒ³ãƒˆãƒªã‚’挿å
    1630 ¥ã™ã‚‹ã“とになる.
     1406p_queueで指定するエントリの前に,p_entryで指定するエントリを挿入する.
     1407p_queueにキューヘッダを指定した場合には,キューの末尾にp_entryで指定す
     1408るエントリを挿入することになる.
    16311409
    16321410(3) void queue_insert_next(QUEUE *p_queue, QUEUE *p_entry);
    16331411
    1634 p_queueで指定するエントリの次に,p_entryで指定するエントリを挿å
    1635 ¥ã™ã‚‹ï¼Ž
    1636 p_queueにキューヘッダを指定した場合には,キューのå
    1637 ˆé ­ã«p_entryで指定す
    1638 ã‚‹ã‚¨ãƒ³ãƒˆãƒªã‚’挿å
    1639 ¥ã™ã‚‹ã“とになる.
     1412p_queueで指定するエントリの次に,p_entryで指定するエントリを挿入する.
     1413p_queueにキューヘッダを指定した場合には,キューの先頭にp_entryで指定す
     1414るエントリを挿入することになる.
    16401415
    16411416(4) void queue_delete(QUEUE *p_entry);
    16421417
    1643 p_entryで指定するエントリを,キューから削除する.
     1418p_entryで指定するエントリを,キューから削除する.
    16441419
    16451420(5) QUEUE *queue_delete_next(QUEUE *p_queue);
    16461421
    1647 p_queueで指定するエントリの次のエントリをキューから削除し,削除したエン
    1648 ãƒˆãƒªã‚’返す.p_queueにキューヘッダを指定した場合には,キューのå
    1649 ˆé ­ã®ã‚¨ãƒ³
    1650 ãƒˆãƒªã‚’取り出すことになる.p_queueに空のキューを指定して呼び出してはなら
    1651 ãªã„.
     1422p_queueで指定するエントリの次のエントリをキューから削除し,削除したエン
     1423トリを返す.p_queueにキューヘッダを指定した場合には,キューの先頭のエン
     1424トリを取り出すことになる.p_queueに空のキューを指定して呼び出してはなら
     1425ない.
    16521426
    16531427(6) bool_t queue_empty(QUEUE *p_queue);
    16541428
    1655 ã‚­ãƒ¥ãƒ¼ãŒç©ºã®å ´åˆã«ã¯true,そうでない場合にはfalseを返す.p_queueには
    1656 ã‚­ãƒ¥ãƒ¼ãƒ˜ãƒƒãƒ€ã‚’指定する.
    1657 
    1658 9.3 システムログ出力用ライブラリ関数
    1659 
    1660 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°å‡ºåŠ›ç”¨ãƒ©ã‚¤ãƒ–ラリ関数は,ログæƒ
    1661 å ±ã‚’フォーマット出力するため
    1662 ã«ï¼Œã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ãŠã‚ˆã³ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã§ç”¨ã„るための関数群である.
    1663 
    1664 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°å‡ºåŠ›ç”¨ãƒ©ã‚¤ãƒ–ラリ関数を用いる場合には,log_output.hをインク
    1665 ãƒ«ãƒ¼ãƒ‰ã—,log_output.cをコンパイル・リンクする.
     1429キューが空の場合にはtrue,そうでない場合にはfalseを返す.p_queueには
     1430キューヘッダを指定する.
     1431
     14329.3 システムログ出力用ライブラリ関数
     1433
     1434システムログ出力用ライブラリ関数は,ログ情報をフォーマット出力するため
     1435に,システムログタスクおよびシステムログ機能で用いるための関数群である.
     1436
     1437システムログ出力用ライブラリ関数を用いる場合には,log_output.hをインク
     1438ルードし,log_output.cをコンパイル・リンクする.
    16661439
    16671440(1) void syslog_printf(const char *format, const intptr_t *p_args,
    16681441                                                                                                void (*putc)(char))
    16691442
    1670 formatで指定されるフォーマット記述とp_argsで指定される引数列から作成し
    1671 ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’,1文字出力関数putcを用いて出力する.
     1443formatで指定されるフォーマット記述とp_argsで指定される引数列から作成し
     1444たメッセージを,1文字出力関数putcを用いて出力する.
    16721445
    16731446(2) void syslog_print(const SYSLOG *p_syslog, void (*putc)(char))
    16741447
    1675 p_syslogで指定されるログæƒ
    1676 å ±ã‚’文字列に直し,1文字出力関数putcを用いて出
    1677 åŠ›ã™ã‚‹ï¼Ž
     1448p_syslogで指定されるログ情報を文字列に直し,1文字出力関数putcを用いて出
     1449力する.
    16781450
    16791451(3) void syslog_lostmsg(uint_t lost, void (*putc)(char))
    16801452
    1681 lost個のログæƒ
    1682 å ±ãŒå¤±ã‚ã‚ŒãŸæ—¨ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’,1文字出力関数putcを用いて出
    1683 åŠ›ã™ã‚‹ï¼Ž
    1684 
    1685 9.4 実行時間分布集計モジュール
    1686 
    1687 å®Ÿè¡Œæ™‚間分布集計モジュールは,システムのリアルタイム性能を評価するため
    1688 ã«ï¼Œãƒ—ログラム区間の実行時間を計測し,その分布を集計・表示するためのラ
    1689 ã‚¤ãƒ–ラリ関数群である.
    1690 
    1691 å®Ÿè¡Œæ™‚間分布集計モジュールを用いる場合には,histogram.hをインクルードし,
    1692 histogram.cをコンパイル・リンクする.
    1693 
    1694 å®Ÿè¡Œæ™‚間分布集計モジュールは,複数のプログラム区間の実行時間を計測・集
    1695 è¨ˆãƒ»è¡¨ç¤ºã™ã‚‹ã“とができる.プログラム区間毎に,実行時間分布を記録するた
    1696 ã‚ã®ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’持つ.どのデータ構造を用いるかを,ID番号(histid)で指
    1697 å®šã™ã‚‹ï¼Žä½¿ç”¨ã§ãã‚‹ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã®æ•°ã¯ï¼ŒTNUM_HISTで定義される.すなわち,
    1698 ID番号として,1~TNUM_HISTを指定することができる.TNUM_HISTは,デフォル
    1699 ãƒˆå€¤ãŒhistgram.cの中で定義されており,コンパイルオプションやターゲット
    1700 ä¾å­˜éƒ¨ï¼ˆtarget_test.hまたはそこからインクルードされるファイル)により変
    1701 æ›´ã™ã‚‹ã“とができる.
    1702 
    1703 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã§è¨­å®šã‚’変更していない場合,実行時間分布集計モジュール
    1704 ã¯ï¼Œã‚«ãƒ¼ãƒãƒ«ã®æ€§èƒ½è©•ä¾¡ç”¨ã‚·ã‚¹ãƒ†ãƒ æ™‚刻を参ç
    1705 §ã™ã‚‹æ©Ÿèƒ½ï¼ˆget_utm)を用いて実
    1706 è¡Œæ™‚間を計測する.そのため,実行時間はマイクロ秒単位で記録される(精度
    1707 ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜ï¼‰ï¼Žã¾ãŸï¼Œè¨˜éŒ²ã•ã‚Œã‚‹æ™‚間には,計測のためのオーバヘッド
    1708 ï¼ˆget_utmの実行時間+α)が含まれる.
    1709 
    1710 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã§è¨­å®šã‚’変更している場合の仕様については,ターゲット依
    1711 å­˜éƒ¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚ºãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’参ç
    1712 §ã™ã‚‹ã“と.
     1453lost個のログ情報が失われた旨のメッセージを,1文字出力関数putcを用いて出
     1454力する.
     1455
     14569.4 実行時間分布集計モジュール
     1457
     1458実行時間分布集計モジュールは,システムのリアルタイム性能を評価するため
     1459に,プログラム区間の実行時間を計測し,その分布を集計・表示するためのラ
     1460イブラリ関数群である.
     1461
     1462実行時間分布集計モジュールを用いる場合には,histogram.hをインクルードし,
     1463histogram.cをコンパイル・リンクする.
     1464
     1465実行時間分布集計モジュールは,複数のプログラム区間の実行時間を計測・集
     1466計・表示することができる.プログラム区間毎に,実行時間分布を記録するた
     1467めのデータ構造を持つ.どのデータ構造を用いるかを,ID番号(histid)で指
     1468定する.使用できるデータ構造の数は,TNUM_HISTで定義される.すなわち,
     1469ID番号として,1~TNUM_HISTを指定することができる.TNUM_HISTは,デフォル
     1470ト値がhistgram.cの中で定義されており,コンパイルオプションやターゲット
     1471依存部(target_test.hまたはそこからインクルードされるファイル)により変
     1472更することができる.
     1473
     1474ターゲット依存部で設定を変更していない場合,実行時間分布集計モジュール
     1475は,カーネルの性能評価用システム時刻を参照する機能(get_utm)を用いて実
     1476行時間を計測する.そのため,実行時間はマイクロ秒単位で記録される(精度
     1477はターゲット依存).また,記録される時間には,計測のためのオーバヘッド
     1478(get_utmの実行時間+α)が含まれる.
     1479
     1480ターゲット依存部で設定を変更している場合の仕様については,ターゲット依
     1481存部のユーザーズマニュアルを参照すること.
    17131482
    17141483(1) void init_hist(ID histid, uint_t maxval, uint_t histarea[])
    17151484
    1716 histidで指定されたデータ構造を初期化する.maxvalには記録する最大時間を,
    1717 histareaには記録領域のå
    1718 ˆé ­ç•ªåœ°ã‚’指定する.histareaで始まる記憶領域は,
    1719 è¦ç´ æ•°ãŒmaxvalに指定した値+1のuint_t型のé
    1720 åˆ—として確保する.例えば,
    1721 maxvalに1000を指定する場合には,histareaには要素数が1001のuint_t型のé
    1722 
    1723 åˆ—のå
    1724 ˆé ­ç•ªåœ°ã‚’渡す.
     1485histidで指定されたデータ構造を初期化する.maxvalには記録する最大時間を,
     1486histareaには記録領域の先頭番地を指定する.histareaで始まる記憶領域は,
     1487要素数がmaxvalに指定した値+1のuint_t型の配列として確保する.例えば,
     1488maxvalに1000を指定する場合には,histareaには要素数が1001のuint_t型の配
     1489列の先頭番地を渡す.
    17251490
    17261491(2) void begin_measure(ID histid)
    17271492
    1728 å®Ÿè¡Œæ™‚間を計測するプログラム区間の直前に呼び出す関数.histidで指定され
    1729 ãŸãƒ‡ãƒ¼ã‚¿æ§‹é€ ã«ï¼Œç¾åœ¨ã®ã‚·ã‚¹ãƒ†ãƒ æ™‚刻を記録する.
     1493実行時間を計測するプログラム区間の直前に呼び出す関数.histidで指定され
     1494たデータ構造に,現在のシステム時刻を記録する.
    17301495
    17311496(3) void end_measure(ID histid)
    17321497
    1733 å®Ÿè¡Œæ™‚間を計測するプログラム区間の直後に呼び出す関数.現在のシステム時
    1734 åˆ»ã¨ï¼Œhistidで指定されたデータ構造に記録された開始時刻から,プログラム
    1735 åŒºé–“の実行時間を求め,その結果を記録する.
     1498実行時間を計測するプログラム区間の直後に呼び出す関数.現在のシステム時
     1499刻と,histidで指定されたデータ構造に記録された開始時刻から,プログラム
     1500区間の実行時間を求め,その結果を記録する.
    17361501
    17371502(4) void print_hist(ID histid)
    17381503
    1739 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã‚’用いて,実行時間分布の計測結果を出力する.
    1740 
    1741 
    1742 ï¼‘0.テストプログラム
    1743 
    1744 ãƒ†ã‚¹ãƒˆãƒ—ログラムは,カーネルの機能テストおよび性能評価を行うためのプロ
    1745 ã‚°ãƒ©ãƒ ç¾¤ã§ã‚る.
    1746 
    1747 10.1 テストプログラム用ライブラリ
    1748 
    1749 ãƒ†ã‚¹ãƒˆãƒ—ログラム用ライブラリは,プログラム中のチェックポイントが正しい
    1750 é †åºã§å®Ÿè¡Œã•ã‚ŒãŸã“となど,プログラムが正しく動作していることをチェック
    1751 ã™ã‚‹ãŸã‚ã®é–¢æ•°ç¾¤ã§ã‚る.プログラムが正しく動作していないことを検出した
    1752 å ´åˆã«ã¯ï¼Œãƒ—ログラムを終了させる.
    1753 
    1754 ãƒ†ã‚¹ãƒˆãƒ—ログラム用ライブラリ関数を用いる場合には,test_lib.hをインクルー
    1755 ãƒ‰ã—,test_lib.cをコンパイル・リンクする.
     1504システムログ機能を用いて,実行時間分布の計測結果を出力する.
     1505
     1506
     150710.テストプログラム
     1508
     1509テストプログラムは,カーネルの機能テストおよび性能評価を行うためのプロ
     1510グラム群である.
     1511
     151210.1 テストプログラム用ライブラリ
     1513
     1514テストプログラム用ライブラリは,プログラム中のチェックポイントが正しい
     1515順序で実行されたことなど,プログラムが正しく動作していることをチェック
     1516するための関数群である.プログラムが正しく動作していないことを検出した
     1517場合には,プログラムを終了させる.
     1518
     1519テストプログラム用ライブラリ関数を用いる場合には,test_lib.hをインクルー
     1520ドし,test_lib.cをコンパイル・リンクする.
    17561521
    17571522(1) void check_point(uint_t count)
    17581523
    1759 ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆã‚’通過する際に呼び出す関数.countには,何番目のチェック
    1760 ãƒã‚¤ãƒ³ãƒˆã§ã‚るかを指定する(最初のチェックポイントでは1を指定する).
    1761 countの値が,最初のチェックポイントにおいては1でない場合に,それ以降の
    1762 ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆã«ãŠã„ては,前のチェックポイント通過時にcountに指定した
    1763 å€¤ã«1を加えた値でない場合に,プログラムが正しく動作していないと見なし,
    1764 ãƒ—ログラムを終了させる.
     1524チェックポイントを通過する際に呼び出す関数.countには,何番目のチェック
     1525ポイントであるかを指定する(最初のチェックポイントでは1を指定する).
     1526countの値が,最初のチェックポイントにおいては1でない場合に,それ以降の
     1527チェックポイントにおいては,前のチェックポイント通過時にcountに指定した
     1528値に1を加えた値でない場合に,プログラムが正しく動作していないと見なし,
     1529プログラムを終了させる.
    17651530
    17661531(2) void check_finish(uint_t count)
    17671532
    1768 æœ€å¾Œã®ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆã«åˆ°é”した際に呼び出す関数.countには,何番目の
    1769 ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆã§ã‚るかを指定する(最初のチェックポイントでは1を指定す
    1770 ã‚‹ï¼‰ï¼Žcountの値が,前のチェックポイント通過時にcountに指定した値に1を加
    1771 ãˆãŸå€¤ã§ãªã„場合に,プログラムが正しく動作していないと見なす.この関数
    1772 ã¯ï¼Œãƒ—ログラムが正しく動作している/いないに関わらず,プログラムを終了
    1773 ã•ã›ã‚‹ï¼Ž
     1533最後のチェックポイントに到達した際に呼び出す関数.countには,何番目の
     1534チェックポイントであるかを指定する(最初のチェックポイントでは1を指定す
     1535る).countの値が,前のチェックポイント通過時にcountに指定した値に1を加
     1536えた値でない場合に,プログラムが正しく動作していないと見なす.この関数
     1537は,プログラムが正しく動作している/いないに関わらず,プログラムを終了
     1538させる.
    17741539
    17751540(3) void check_assert(bool_t exp)
    17761541
    1777 expが真であることをチェックしたい場合に呼び出す関数.expが偽である場合
    1778 ã«ï¼Œãƒ—ログラムが正しく動作していないと見なし,プログラムを終了させる.
     1542expが真であることをチェックしたい場合に呼び出す関数.expが偽である場合
     1543に,プログラムが正しく動作していないと見なし,プログラムを終了させる.
    17791544
    17801545(4) void check_ercd(ER ercd, ER expected_ercd)
    17811546
    1782 ercdがexpected_ercdに一致していることをチェックしたい場合に呼び出す関数.
    1783 ercdがexpected_ercdに一致していない場合に,プログラムが正しく動作してい
    1784 ãªã„と見なし,プログラムを終了させる.
     1547ercdがexpected_ercdに一致していることをチェックしたい場合に呼び出す関数.
     1548ercdがexpected_ercdに一致していない場合に,プログラムが正しく動作してい
     1549ないと見なし,プログラムを終了させる.
    17851550
    17861551(5) void check_state(bool_t ctx, bool_t loc, PRI ipm,
    17871552                                                bool_t dsp, bool_t dpn, bool_t tex)
    17881553
    1789 ã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã«ãŠã„て,システム状æ
    1790 ‹ãŒæœŸå¾
    1791 ã—たものになっているか
    1792 ãƒã‚§ãƒƒã‚¯ã—たい時に呼び出す関数.ctx,loc,dsp,dpn,texにはそれぞれ
    1793 sns_ctx(),sns_loc(),sns_dsp(),sns_dpn(),sns_tex()の返値として期å¾
    1794 ã•
    1795 ã‚Œã‚‹å€¤ã‚’,ipmにはget_ipm()で参ç
    1796 §ã§ãã‚‹å‰²è¾¼ã¿å„ªå
    1797 ˆåº¦ãƒžã‚¹ã‚¯ã¨ã—て期å¾
    1798 ã•ã‚Œ
    1799 ã‚‹å€¤ã‚’指定する.このå†
    1800 ã®ã„ずれかが期å¾
    1801 ã•ã‚Œã‚‹å€¤ã¨ä¸€è‡´ã—ていない場合に,
    1802 ãƒ—ログラムが正しく動作していないと見なし,プログラムを終了させる.
     1554タスクコンテキストにおいて,システム状態が期待したものになっているか
     1555チェックしたい時に呼び出す関数.ctx,loc,dsp,dpn,texにはそれぞれ
     1556sns_ctx(),sns_loc(),sns_dsp(),sns_dpn(),sns_tex()の返値として期待さ
     1557れる値を,ipmにはget_ipm()で参照できる割込み優先度マスクとして期待され
     1558る値を指定する.この内のいずれかが期待される値と一致していない場合に,
     1559プログラムが正しく動作していないと見なし,プログラムを終了させる.
    18031560
    18041561(6) void check_state_i(bool_t ctx, bool_t loc,
    18051562                                                bool_t dsp, bool_t dpn, bool_t tex)
    18061563
    1807 éžã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã«ãŠã„て,システム状æ
    1808 ‹ãŒæœŸå¾
    1809 ã—たものになっているか
    1810 ãƒã‚§ãƒƒã‚¯ã—たい時に呼び出す関数.ctx,loc,dsp,dpn,texにはそれぞれ
    1811 sns_ctx(),sns_loc(),sns_dsp(),sns_dpn(),sns_tex()の返値として期å¾
    1812 ã•
    1813 ã‚Œã‚‹å€¤ã‚’指定する.このå†
    1814 ã®ã„ずれかが期å¾
    1815 ã•ã‚Œã‚‹å€¤ã¨ä¸€è‡´ã—ていない場合に,
    1816 ãƒ—ログラムが正しく動作していないと見なし,プログラムを終了させる.
     1564非タスクコンテキストにおいて,システム状態が期待したものになっているか
     1565チェックしたい時に呼び出す関数.ctx,loc,dsp,dpn,texにはそれぞれ
     1566sns_ctx(),sns_loc(),sns_dsp(),sns_dpn(),sns_tex()の返値として期待さ
     1567れる値を指定する.この内のいずれかが期待される値と一致していない場合に,
     1568プログラムが正しく動作していないと見なし,プログラムを終了させる.
    18171569
    18181570(7) void set_bit_func(BIT_FUNC bit_func)
    18191571
    1820 ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆã«ãŠã„て呼び出す自己診断関数を設定するための関数.
     1572チェックポイントにおいて呼び出す自己診断関数を設定するための関数.
    18211573
    18221574(8) void test_start(char *progname)
    18231575
    1824 ãƒ†ã‚¹ãƒˆé–‹å§‹æ™‚に,テストプログラム名を出力するための関数.
     1576テスト開始時に,テストプログラム名を出力するための関数.
    18251577
    18261578(9) void syslog_flush(void)
    18271579
    1828 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã«è¨˜éŒ²ã•ã‚ŒãŸãƒ­ã‚°æƒ
    1829 å ±ã‚’,低レベル出力機能に用いる文字出
    1830 åŠ›é–¢æ•°ã«ã‚ˆã‚Šå‡ºåŠ›ã™ã‚‹ï¼Ž
     1580システムログ機能に記録されたログ情報を,低レベル出力機能に用いる文字出
     1581力関数により出力する.
    18311582
    18321583(10) void test_finish(void)
    18331584
    1834 ãƒ—ログラムを終了させる関数.チェックポイントを使用しない場合に,この関
    1835 æ•°ã‚’用いる.
    1836 
    1837 10.2 カーネルの整合性検査
    1838 
    1839 ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆã«ãŠã„て呼び出す自己診断に使うためのプログラムとして,
    1840 ã‚«ãƒ¼ãƒãƒ«ã®æ•´åˆæ€§æ¤œæŸ»ã‚’用意している.カーネルの整合性検査は,カーネルå†
    1841 
    1842 ã®å„データ構造の一貫性を検査する(現時点では未完成).
    1843 
    1844 ã‚«ãƒ¼ãƒãƒ«ã®æ•´åˆæ€§æ¤œæŸ»ã‚’用いる場合には,bit_kernel.cをコンパイル・リンク
    1845 ã™ã‚‹ï¼Ž
     1585プログラムを終了させる関数.チェックポイントを使用しない場合に,この関
     1586数を用いる.
     1587
     158810.2 カーネルの整合性検査
     1589
     1590チェックポイントにおいて呼び出す自己診断に使うためのプログラムとして,
     1591カーネルの整合性検査を用意している.カーネルの整合性検査は,カーネル内
     1592の各データ構造の一貫性を検査する(現時点では未完成).
     1593
     1594カーネルの整合性検査を用いる場合には,bit_kernel.cをコンパイル・リンク
     1595する.
    18461596
    18471597(1) ER bit_kernel(void)
    18481598
    1849 ã‚«ãƒ¼ãƒãƒ«å†
    1850 ã®å„データ構造の一貫性を検査し,一貫性が確認できた場合にE_OK,
    1851 ã§ããªã‹ã£ãŸå ´åˆã«E_SYSエラーを返す関数.E_SYSエラーを返す際のサブエラー
    1852 ã‚³ãƒ¼ãƒ‰ã¨ã—て,一貫性が確認できなかったé 
    1853 ç›®ã‚’示すコードを返す.
    1854 
    1855 10.3 機能テストプログラム
    1856 
    1857 testディレクトリに置かれた"test"で始まるプログラムは,カーネルの機能テ
    1858 ã‚¹ãƒˆã‚’行うためのプログラムである.
    1859 
    1860 æ©Ÿèƒ½ãƒ†ã‚¹ãƒˆãƒ—ログラムはテストプログラム用ライブラリを使用しているため,
    1861 æ§‹ç¯‰ã™ã‚‹å ´åˆã«ã¯ï¼ŒMakefileのAPPL_COBJSに,test_lib.oを追加するå¿
    1862 è¦ãŒã‚
    1863 ã‚‹ï¼Žã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トを使用する場合には,-Uオプションで
    1864 test_lib.oを指定する.å
    1865 ·ä½“的には,次のコマンドを実行すればよい(構築用
    1866 ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãŒï¼ŒASPカーネルのソースファイルを展開したディレクトリの直
    1867 ä¸‹ã«ã‚ると仮定している).
    1868 
    1869         % perl ../configure -T <ターゲット略称> -A <機能テストプログラム名> \
     1599カーネル内の各データ構造の一貫性を検査し,一貫性が確認できた場合にE_OK,
     1600できなかった場合にE_SYSエラーを返す関数.E_SYSエラーを返す際のサブエラー
     1601コードとして,一貫性が確認できなかった項目を示すコードを返す.
     1602
     160310.3 機能テストプログラム
     1604
     1605testディレクトリに置かれた"test"で始まるプログラムは,カーネルの機能テ
     1606ストを行うためのプログラムである.
     1607
     1608機能テストプログラムはテストプログラム用ライブラリを使用しているため,
     1609構築する場合には,MakefileのAPPL_COBJSに,test_lib.oを追加する必要があ
     1610る.コンフィギュレーションスクリプトを使用する場合には,-Uオプションで
     1611test_lib.oを指定する.具体的には,次のコマンドを実行すればよい(構築用
     1612のディレクトリが,ASPカーネルのソースファイルを展開したディレクトリの直
     1613下にあると仮定している).
     1614
     1615        % perl ../configure -T <ターゲット略称> -A <機能テストプログラム名> \
    18701616                                                                                        -a ../test -U test_lib.o
    18711617
    1872 ãŸã ã—,CPU例外処理のテスト(1)~(13)は,同一のシステムコンフィギュレー
    1873 ã‚·ãƒ§ãƒ³ã‚’å
    1874 ±ç”¨ã—ているため,test_cpuexc.cfgを次のようにコピーしておくå¿
    1875 è¦
    1876 ãŒã‚る.
    1877 
    1878         % cp ../test/test_cpuexc.cfg test_cpuexc<テスト番号>.cfg
    1879 
    1880 ç¾ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ç”¨æ„ã—ている機能テストプログラムは次の通り.
    1881 
    1882 (1) test_cpuexc1                        CPU例外処理のテスト(1)
    1883 (2) test_cpuexc2                        CPU例外処理のテスト(2)
    1884 (3) test_cpuexc3                        CPU例外処理のテスト(3)
    1885 (4) test_cpuexc4                        CPU例外処理のテスト(4)
    1886 (5) test_cpuexc5                        CPU例外処理のテスト(5)
    1887 (6) test_cpuexc6                        CPU例外処理のテスト(6)
    1888 (7) test_cpuexc7                        CPU例外処理のテスト(7)
    1889 (8) test_cpuexc8                        CPU例外処理のテスト(8)
    1890 (9) test_cpuexc9                        CPU例外処理のテスト(9)
    1891 (10) test_cpuexc10                      CPU例外処理のテスト(10)
    1892 (11) test_cpuexc11                      CPU例外処理のテスト(11)
    1893 (12) test_cpuexc12                      CPU例外処理のテスト(12)
    1894 (13) test_cpuexc13                      CPU例外処理のテスト(13)
    1895 (14) test_dlynse                        sil_dly_nseに関するテスト
    1896 (15) test_sem1                          セマフォ機能のテスト(1)
    1897 (16) test_sem2                          セマフォ機能のテスト(2)
    1898 (17) test_sysstat1                      システム状æ
    1899 ‹ã«é–¢ã™ã‚‹ãƒ†ã‚¹ãƒˆ(1)
    1900 (18) test_task1                         ã‚¿ã‚¹ã‚¯ç®¡ç†ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ†ã‚¹ãƒˆ(1)
    1901 (19) test_tex1                          タスク例外処理に関するテスト(1)
    1902 (20) test_tex2                          タスク例外処理に関するテスト(2)
    1903 (21) test_utm1                          get_utmに関するテスト(1)
    1904 
    1905 CPU例外処理のテストプログラムの一部は,CPU例外ハンドラからリターンした
    1906 å ´åˆã«ï¼ŒCPU例外を発生させた命令の次から実行が継続されることを前提に作成
    1907 ã•ã‚Œã¦ã„る.この前提が成り立たない場合には,テストプログラムのターゲッ
    1908 ãƒˆä¾å­˜å®šç¾©ã«ãŠã„て,CANNOT_RETURN_CPUEXCをマクロ定義することがå¿
    1909 è¦ã§ã‚
    1910 ã‚‹ï¼Žè©³ã—くは,「ターゲット依存部 ポーティングガイド」を参ç
    1911 §ã™ã‚‹ã“と.
    1912 
    1913 10.4 性能評価プログラム
    1914 
    1915 testディレクトリに置かれた"perf"で始まるプログラムは,カーネルの性能評
    1916 ä¾¡ã‚’行うためのプログラムである.
    1917 
    1918 æ€§èƒ½è©•ä¾¡ãƒ—ログラムは,計測対象となる処理を繰り返し実行し,その実行時間
    1919 ã‚’計測して,実行時間分布を表示する.
    1920 
    1921 è¨ˆæ¸¬ã—た実行時間には,時間計測のオーバヘッド(時間計測処理の実行にかか
    1922 ã‚‹æ™‚間)が含まれる.計測対象の処理の正味の実行時間を求めるためには,計
    1923 æ¸¬ã•ã‚ŒãŸæ™‚間から,時間計測のオーバヘッドを計測するためのプログラム
    1924 ï¼ˆperf0)で計測された時間を減算するå¿
    1925 è¦ãŒã‚る.
    1926 
    1927 ã¾ãŸï¼Œå®Ÿè¡Œæ™‚間の計測は,別に記述がない限り割込みを許可したまま行うため,
    1928 å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ï¼ˆå°‘なくとも,タイマ割込みハンドラ)の処理時間が含まれた
    1929 å®Ÿè¡ŒçµæžœãŒè¨ˆæ¸¬ã•ã‚Œã‚‹ï¼Ž
    1930 
    1931 ã‚«ãƒ¼ãƒãƒ«ã®æ€§èƒ½è©•ä¾¡ã«ã‚たっては,ハードウェア(特にキャッシュ)の設定に
    1932 ç•™æ„ã™ã‚‹å¿
    1933 è¦ãŒã‚る.
    1934 
    1935 æ€§èƒ½è©•ä¾¡ãƒ—ログラムはテストプログラム用ライブラリと実行時間分布集計モ
    1936 ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用しているため,構築する場合には,MakefileのAPPL_COBJSに,
    1937 test_lib.oとhistogram.oを追加するå¿
    1938 è¦ãŒã‚る.コンフィギュレーションスク
    1939 ãƒªãƒ—トを使用する場合には,-Uオプションでtest_lib.oとhistgram.oを指定す
    1940 ã‚‹ï¼Žå
    1941 ·ä½“的には,次のコマンドを実行すればよい(構築用のディレクトリが,
    1942 ASPカーネルのソースファイルを展開したディレクトリの直下にあると仮定して
    1943 ã„る).
    1944 
    1945         % perl ../configure -T <ターゲット略称> -A <性能評価プログラム名> \
     1618ただし,CPU例外処理のテスト(1)~(13)は,同一のシステムコンフィギュレー
     1619ションを共用しているため,test_cpuexc.cfgを次のようにコピーしておく必要
     1620がある.
     1621
     1622        % cp ../test/test_cpuexc.cfg test_cpuexc<テスト番号>.cfg
     1623
     1624現バージョンで用意している機能テストプログラムは次の通り.
     1625
     1626(1) test_cpuexc1                        CPU例外処理のテスト(1)
     1627(2) test_cpuexc2                        CPU例外処理のテスト(2)
     1628(3) test_cpuexc3                        CPU例外処理のテスト(3)
     1629(4) test_cpuexc4                        CPU例外処理のテスト(4)
     1630(5) test_cpuexc5                        CPU例外処理のテスト(5)
     1631(6) test_cpuexc6                        CPU例外処理のテスト(6)
     1632(7) test_cpuexc7                        CPU例外処理のテスト(7)
     1633(8) test_cpuexc8                        CPU例外処理のテスト(8)
     1634(9) test_cpuexc9                        CPU例外処理のテスト(9)
     1635(10) test_cpuexc10                      CPU例外処理のテスト(10)
     1636(11) test_cpuexc11                      CPU例外処理のテスト(11)
     1637(12) test_cpuexc12                      CPU例外処理のテスト(12)
     1638(13) test_cpuexc13                      CPU例外処理のテスト(13)
     1639(14) test_dlynse                        sil_dly_nseに関するテスト
     1640(15) test_sem1                          セマフォ機能のテスト(1)
     1641(16) test_sem2                          セマフォ機能のテスト(2)
     1642(17) test_sysstat1                      システム状態に関するテスト(1)
     1643(18) test_task1                         タスク管理モジュールのテスト(1)
     1644(19) test_tex1                          タスク例外処理に関するテスト(1)
     1645(20) test_tex2                          タスク例外処理に関するテスト(2)
     1646(21) test_utm1                          get_utmに関するテスト(1)
     1647
     1648CPU例外処理のテストプログラムの一部は,CPU例外ハンドラからリターンした
     1649場合に,CPU例外を発生させた命令の次から実行が継続されることを前提に作成
     1650されている.この前提が成り立たない場合には,テストプログラムのターゲッ
     1651ト依存定義において,CANNOT_RETURN_CPUEXCをマクロ定義することが必要であ
     1652る.詳しくは,「ターゲット依存部 ポーティングガイド」を参照すること.
     1653
     165410.4 性能評価プログラム
     1655
     1656testディレクトリに置かれた"perf"で始まるプログラムは,カーネルの性能評
     1657価を行うためのプログラムである.
     1658
     1659性能評価プログラムは,計測対象となる処理を繰り返し実行し,その実行時間
     1660を計測して,実行時間分布を表示する.
     1661
     1662計測した実行時間には,時間計測のオーバヘッド(時間計測処理の実行にかか
     1663る時間)が含まれる.計測対象の処理の正味の実行時間を求めるためには,計
     1664測された時間から,時間計測のオーバヘッドを計測するためのプログラム
     1665(perf0)で計測された時間を減算する必要がある.
     1666
     1667また,実行時間の計測は,別に記述がない限り割込みを許可したまま行うため,
     1668割込みハンドラ(少なくとも,タイマ割込みハンドラ)の処理時間が含まれた
     1669実行結果が計測される.
     1670
     1671カーネルの性能評価にあたっては,ハードウェア(特にキャッシュ)の設定に
     1672留意する必要がある.
     1673
     1674性能評価プログラムはテストプログラム用ライブラリと実行時間分布集計モ
     1675ジュールを使用しているため,構築する場合には,MakefileのAPPL_COBJSに,
     1676test_lib.oとhistogram.oを追加する必要がある.コンフィギュレーションスク
     1677リプトを使用する場合には,-Uオプションでtest_lib.oとhistgram.oを指定す
     1678る.具体的には,次のコマンドを実行すればよい(構築用のディレクトリが,
     1679ASPカーネルのソースファイルを展開したディレクトリの直下にあると仮定して
     1680いる).
     1681
     1682        % perl ../configure -T <ターゲット略称> -A <性能評価プログラム名> \
    19461683                                                                        -a ../test -U "test_lib.o histogram.o"
    19471684
    1948 ç¾ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ç”¨æ„ã—ている性能評価プログラムは次の通り.
    1949 
    1950 (1) perf0               æ™‚間計測のオーバヘッドの評価
    1951 
    1952 æ™‚間計測のオーバヘッドを計測するためのプログラム.å
    1953 ·ä½“的には,空のプロ
    1954 ã‚°ãƒ©ãƒ ï¼ˆbegin_mearsureとend_measureを続けて呼び出すプログラム)の実行時
    1955 é–“を計測する.
    1956 
    1957 ä»–の性能評価プログラムで計測された時間から,このプログラムで計測された
    1958 æ™‚間を減算した時間が,計測対象の処理の正味の実行時間である.
    1959 
    1960 (2) perf1               slp_tsk,wup_tskによるタスク切換え時間の評価
    1961 
    1962 slp_tsk,wup_tskによるタスク切換え時間を計測するためのプログラム.å
    1963 ·ä½“
    1964 çš„には,高い優å
    1965 ˆåº¦ã®ã‚¿ã‚¹ã‚¯ãŒèµ·åºŠå¾
    1966 ã¡çŠ¶æ
    1967 ‹ã§ã‚る時に,低い優å
    1968 ˆåº¦ã®ã‚¿ã‚¹ã‚¯
    1969 ãŒwup_tskにより高い優å
    1970 ˆåº¦ã®ã‚¿ã‚¹ã‚¯ã‚’起床し,高い優å
    1971 ˆåº¦ã®ã‚¿ã‚¹ã‚¯ã«åˆ‡ã‚Šæ›ã‚
    1972 ã‚‹ã¾ã§ã®æ™‚間と,高い優å
    1973 ˆåº¦ã®ã‚¿ã‚¹ã‚¯ãŒslp_tskにより起床å¾
    1974 ã¡çŠ¶æ
    1975 ‹ã¨ãªã‚Šï¼Œä½Ž
    1976 ã„優å
    1977 ˆåº¦ã®ã‚¿ã‚¹ã‚¯ã«åˆ‡ã‚Šæ›ã‚ã‚‹ã¾ã§ã®æ™‚間を計測する.
    1978 
    1979 (3) perf2               snd_pdqの処理時間の評価
    1980 
    1981ʌ㻌
    1982 ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã«è“„積されているデータの数により,snd_pdqの処理時間が
    1983 ã©ã®ã‚ˆã†ã«å¤‰åŒ–するかを計測するためのプログラム.å
    1984 ·ä½“的には,優å
    1985 ˆåº¦ãƒ‡ãƒ¼
    1986 ã‚¿ã‚­ãƒ¥ãƒ¼ä¸­ã«é«˜ã„優å
    1987 ˆåº¦ã®ãƒ‡ãƒ¼ã‚¿ãŒn個蓄積されている時に,snd_dtqにより低
    1988 ã„優å
    1989 ˆåº¦ã®ãƒ‡ãƒ¼ã‚¿ã‚’å
    1990 ¥ã‚Œã‚‹ã®ã«ã‹ã‹ã‚‹æ™‚間を計測する.nを0,10,20,30,40,
    1991 50,100,200,300と変化させて計測する.
    1992 
    1993 (4) perf3               set_flgの処理時間の評価
    1994 
    1995 å¾
    1996 ã¡è§£é™¤ã™ã‚‹ã‚¿ã‚¹ã‚¯ã®æ•°ã«ã‚ˆã‚Šï¼Œset_flgの処理時間がどのように変化するかを
    1997 è¨ˆæ¸¬ã™ã‚‹ãŸã‚ã®ãƒ—ログラム.å
    1998 ·ä½“的には,TA_WMUL属性のイベントフラグに対し
    1999 ã¦ï¼Œn個のタスクがå¾
    2000 ã£ã¦ã„る時に,set_flgによりそのすべてをå¾
    2001 ã¡è§£é™¤ã™ã‚‹
    2002 ã®ã«ã‹ã‹ã‚‹æ™‚間を計測する.nを0,1,2,3,4,5,10,20と変化させて計測す
    2003 ã‚‹ï¼Ž
    2004 
    2005 (5) perf4               act_tsk,iact_tskの処理時間とタスク切換え時間の評価
    2006 
    2007 act_tsk,iact_tskの処理時間とタスク切換え時間を計測するためのプログラム.
    2008 å
    2009 ·ä½“的には,(1) タスク切換えを起こさないact_tskの処理時間,(2) タスク切
    2010 æ›ãˆã‚’起こすact_tskの処理時間(タスク切換え時間を含む),(3) タスク切換
    2011 ãˆã‚’起こすiact_tskの処理時間(タスク切換え時間とタイマ割込み中で実行さ
    2012 ã‚Œã‚‹ã‚·ã‚¹ãƒ†ãƒ æ™‚刻の更新処理時間を含む)の3つの時間を計測する.
    2013 
    2014 ï¼‘1.使用上の注意とヒント
    2015 
    2016 11.1 タイマドライバの組込み
    2017 
    2018 ã‚¿ã‚¤ãƒžãƒ‰ãƒ©ã‚¤ãƒã‚’システムに組み込むために,システムコンフィギュレーショ
    2019 ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã®å
    2020 ˆé ­ã§target_timer.cfgをインクルードするå¿
    2021 è¦ãŒã‚る.
    2022 
    2023 11.2 assertマクロの処理
    2024 
    2025 ASPカーネルのコード中には,assertマクロが使われている.assertマクロの定
    2026 ç¾©ã¯t_stddef.hに含まれ,assertが失敗した場合の最後の処理(通常は,プロ
    2027 ã‚°ãƒ©ãƒ ã‚’停止させる処理)は,ターゲット依存部のTOPPERS_assert_abortで決
    2028 å®šã•ã‚Œã‚‹ï¼Ž
    2029 
    2030 assertが失敗した場合,システム開発中はデバッガに落とすのが望ましいが,
    2031 ã‚·ã‚¹ãƒ†ãƒ ç¨¼åƒæ™‚の対処法は,システムに対する要件に依存する.そこで,ター
    2032 ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã®TOPPERS_assert_abortを,システム要件に合致した適切な処理
    2033 ã«ç½®ãæ›ãˆã‚‹å¿
    2034 è¦ãŒã‚る.システム要件によっては,NDEBUGを定義してassert
    2035 ãƒžã‚¯ãƒ­ã®å‡¦ç†ã‚’オブジェクトコード中から消す(「6.2 コンパイルオプション」
    2036 ã®ç¯€ã‚’参ç
    2037 §ï¼‰æ–¹æ³•ã‚‚考えられる.
    2038 
    2039 11.3 システムログ機能の扱い
    2040 
    2041 TOPPERS/ASPカーネルでは,システム開発時の利便性を考æ
    2042 ®ã—,システムログ機
    2043 èƒ½ã‚’組み込む設定をデフォルトとしている.
    2044 
    2045 ãã‚Œã«å¯¾ã—て,TOPPERS/ASPカーネルを用いたシステムを機器に組み込む場合は,
    2046 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ãŒæ„å‘³ãŒãªã„場合も多い.機器への組込みに際してのシステ
    2047 ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã®è¨­å®šæ–¹æ³•ã«ã¯ï¼Œä»¥ä¸‹ã®æ–¹æ³•ãŒè€ƒãˆã‚‰ã‚Œã‚‹ï¼Ž
    2048 
    2049 (1) システムログ機能を用いない
    2050 
    2051 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã‚’一切使用しない場合には,システムログ機能をシステムに
    2052 çµ„み込まず(システムコンフィギュレーションファイルでsyslog.cfgをインク
    2053 ãƒ«ãƒ¼ãƒ‰ã—ない),システムログ機能のサービスコールを呼び出すソースファイ
    2054 ãƒ«ã‚’TOPPERS_OMIT_SYSLOGを定義してコンパイルすればよい.
    2055 
    2056 (2) ログæƒ
    2057 å ±ã®è“„積のみを行う
    2058 
    2059 æ©Ÿå™¨ã«çµ„み込んだ状æ
    2060 ‹ã§ï¼Œã‚·ãƒªã‚¢ãƒ«ãƒãƒ¼ãƒˆç­‰ã‚’介してシステムを外部と接続す
    2061 ã‚‹ã“とができる場合には,システム稼働時にはログæƒ
    2062 å ±ã®è“„積のみを行い,シ
    2063 ã‚¹ãƒ†ãƒ ã«éšœå®³ãŒèµ·ããŸæ™‚などにログæƒ
    2064 å ±ã‚’取り出すことで,障害の原因分析の
    2065 åŠ©ã‘とすることができる.
    2066 
    2067 å
    2068 ·ä½“的な設定方法として,次の2つの方法が考えられる.
    2069 
    2070 (2-1) 低レベル出力をメモリに蓄積する
    2071 
    2072 å¿
    2073 è¦ãªãƒ­ã‚°æƒ
    2074 å ±ã‚’低レベル出力機能を用いて出力するように設定し,低レベル
    2075 ã®æ–‡å­—出力関数(target_fput_log)に送られた文字をメモリ(å
    2076 ¸åž‹çš„にはリン
    2077 ã‚°ãƒãƒƒãƒ•ã‚¡ï¼‰ã«è“„積するようにする.システムの障害時には,そのメモリ領域
    2078 ã‚’読み出す.
    2079 
    2080 (2-2) システムログ機能のログバッファに蓄積する
    2081 
    2082 å¿
    2083 è¦ãªãƒ­ã‚°æƒ
    2084 å ±ã‚’システムログ機能のログバッファに記録するように設定する.
    2085 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã‚’動作させないと,ログæƒ
    2086 å ±ã¯ãƒ­ã‚°ãƒãƒƒãƒ•ã‚¡ã«è“„積されて
    2087 ã„く.システムの障害時には,ログバッファの領域を読み出すか,システムロ
    2088 ã‚°ã‚¿ã‚¹ã‚¯ã‚’動作させてログæƒ
    2089 å ±ã‚’出力させる.
    2090 
    2091 (3) 開発時の設定のままとする
    2092 
    2093 ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°æ©Ÿèƒ½ã®è¨­å®šã‚’,システム開発時のまま変更せず,シリアルポート
    2094 ç­‰ã«ãƒ­ã‚°æƒ
    2095 å ±ã‚’垂れ流す方法も考えられる.
    2096 
    2097 11.4 オブジェクトIDの管理
    2098 
    2099 TOPPERS/ASPカーネルでは,オブジェクトのID番号を,コンフィギュレータが割
    2100 ã‚Šä»˜ã‘る方法が基本となっている.
    2101 
    2102 ã‚¢ãƒ—リケーションプログラム中でオブジェクトのID番号を参ç
    2103 §ã™ã‚‹å ´åˆã«ã¯ï¼Œ
    2104 æ¬¡ã®2つの方法が考えられる.
    2105 
    2106 (1) オブジェクト識別名を用いる
    2107 
    2108 ã‚ªãƒ–ジェクト生成のための静的API(CRE_YYY)の第1パラメータに記述したオブ
    2109 ã‚¸ã‚§ã‚¯ãƒˆè­˜åˆ¥åã‚’,アプリケーションプログラム中でも用いる方法.
    2110 
    2111 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã¯ï¼Œã‚ªãƒ–ジェクト識別名を,割り付けたID番号にマクロ定
    2112 ç¾©ã™ã‚‹C言語プリプロセッサのディレクティブ(#define)をkernel_cfg.hに生
    2113 æˆã™ã‚‹ãŸã‚ï¼Œã‚¢ãƒ—リケーションプログラムからkernel_cfg.hをインクルードす
    2114 ã‚‹å¿
    2115 è¦ãŒã‚る.
    2116 
    2117 ã“の方法は,オブジェクトコード中にID番号が直接埋め込まれるために実行効
    2118 çŽ‡ãŒè‰¯ã„一方で,コンフィギュレータが実行されてkernel_cfg.hが書き換わる
    2119 åº¦ã«ï¼Œã‚¢ãƒ—リケーションプログラムの再コンパイルがå¿
    2120 è¦ã«ãªã‚‹ã¨ã„う欠点が
    2121 ã‚る.そのため,アプリケーションプログラムを構成するファイルの中で,一
    2122 éƒ¨ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ã¿ã§ã‚ªãƒ–ジェクト識別名を参ç
    2123 §ã™ã‚‹æ§‹æˆã«ã™ã‚‹ã¨ã„った工夫を
    2124 ã™ã‚‹ã“とが望ましい.
    2125 
    2126 (2) オブジェクトのID番号を保持する変数を用いる
    2127 
    2128 ã‚ªãƒ–ジェクトのID番号を保持するconst属性を付加した変数を用意し,アプリケー
    2129 ã‚·ãƒ§ãƒ³ãƒ—ログラム中では,その変数を用いる方法.
    2130 
    2131 ä¾‹ãˆã°ï¼ŒTASK1というオブジェクト識別名のタスクに対して,次のような変数を
    2132 ç”¨æ„ã™ã‚‹ï¼Ž
     1685現バージョンで用意している性能評価プログラムは次の通り.
     1686
     1687(1) perf0               時間計測のオーバヘッドの評価
     1688
     1689時間計測のオーバヘッドを計測するためのプログラム.具体的には,空のプロ
     1690グラム(begin_mearsureとend_measureを続けて呼び出すプログラム)の実行時
     1691間を計測する.
     1692
     1693他の性能評価プログラムで計測された時間から,このプログラムで計測された
     1694時間を減算した時間が,計測対象の処理の正味の実行時間である.
     1695
     1696(2) perf1               slp_tsk,wup_tskによるタスク切換え時間の評価
     1697
     1698slp_tsk,wup_tskによるタスク切換え時間を計測するためのプログラム.具体
     1699的には,高い優先度のタスクが起床待ち状態である時に,低い優先度のタスク
     1700がwup_tskにより高い優先度のタスクを起床し,高い優先度のタスクに切り換わ
     1701るまでの時間と,高い優先度のタスクがslp_tskにより起床待ち状態となり,低
     1702い優先度のタスクに切り換わるまでの時間を計測する.
     1703
     1704(3) perf2               snd_pdqの処理時間の評価
     1705
     1706優先度データキューに蓄積されているデータの数により,snd_pdqの処理時間が
     1707どのように変化するかを計測するためのプログラム.具体的には,優先度デー
     1708タキュー中に高い優先度のデータがn個蓄積されている時に,snd_dtqにより低
     1709い優先度のデータを入れるのにかかる時間を計測する.nを0,10,20,30,40,
     171050,100,200,300と変化させて計測する.
     1711
     1712(4) perf3               set_flgの処理時間の評価
     1713
     1714待ち解除するタスクの数により,set_flgの処理時間がどのように変化するかを
     1715計測するためのプログラム.具体的には,TA_WMUL属性のイベントフラグに対し
     1716て,n個のタスクが待っている時に,set_flgによりそのすべてを待ち解除する
     1717のにかかる時間を計測する.nを0,1,2,3,4,5,10,20と変化させて計測す
     1718る.
     1719
     1720(5) perf4               act_tsk,iact_tskの処理時間とタスク切換え時間の評価
     1721
     1722act_tsk,iact_tskの処理時間とタスク切換え時間を計測するためのプログラム.
     1723具体的には,(1) タスク切換えを起こさないact_tskの処理時間,(2) タスク切
     1724換えを起こすact_tskの処理時間(タスク切換え時間を含む),(3) タスク切換
     1725えを起こすiact_tskの処理時間(タスク切換え時間とタイマ割込み中で実行さ
     1726れるシステム時刻の更新処理時間を含む)の3つの時間を計測する.
     1727
     172811.使用上の注意とヒント
     1729
     173011.1 タイマドライバの組込み
     1731
     1732タイマドライバをシステムに組み込むために,システムコンフィギュレーショ
     1733ンファイルの先頭でtarget_timer.cfgをインクルードする必要がある.
     1734
     173511.2 assertマクロの処理
     1736
     1737ASPカーネルのコード中には,assertマクロが使われている.assertマクロの定
     1738義はt_stddef.hに含まれ,assertが失敗した場合の最後の処理(通常は,プロ
     1739グラムを停止させる処理)は,ターゲット依存部のTOPPERS_assert_abortで決
     1740定される.
     1741
     1742assertが失敗した場合,システム開発中はデバッガに落とすのが望ましいが,
     1743システム稼働時の対処法は,システムに対する要件に依存する.そこで,ター
     1744ゲット依存部のTOPPERS_assert_abortを,システム要件に合致した適切な処理
     1745に置き換える必要がある.システム要件によっては,NDEBUGを定義してassert
     1746マクロの処理をオブジェクトコード中から消す(「6.2 コンパイルオプション」
     1747の節を参照)方法も考えられる.
     1748
     174911.3 システムログ機能の扱い
     1750
     1751TOPPERS/ASPカーネルでは,システム開発時の利便性を考慮し,システムログ機
     1752能を組み込む設定をデフォルトとしている.
     1753
     1754それに対して,TOPPERS/ASPカーネルを用いたシステムを機器に組み込む場合は,
     1755システムログ機能が意味がない場合も多い.機器への組込みに際してのシステ
     1756ムログ機能の設定方法には,以下の方法が考えられる.
     1757
     1758(1) システムログ機能を用いない
     1759
     1760システムログ機能を一切使用しない場合には,システムログ機能をシステムに
     1761組み込まず(システムコンフィギュレーションファイルでsyslog.cfgをインク
     1762ルードしない),システムログ機能のサービスコールを呼び出すソースファイ
     1763ルをTOPPERS_OMIT_SYSLOGを定義してコンパイルすればよい.
     1764
     1765(2) ログ情報の蓄積のみを行う
     1766
     1767機器に組み込んだ状態で,シリアルポート等を介してシステムを外部と接続す
     1768ることができる場合には,システム稼働時にはログ情報の蓄積のみを行い,シ
     1769ステムに障害が起きた時などにログ情報を取り出すことで,障害の原因分析の
     1770助けとすることができる.
     1771
     1772具体的な設定方法として,次の2つの方法が考えられる.
     1773
     1774(2-1) 低レベル出力をメモリに蓄積する
     1775
     1776必要なログ情報を低レベル出力機能を用いて出力するように設定し,低レベル
     1777の文字出力関数(target_fput_log)に送られた文字をメモリ(典型的にはリン
     1778グバッファ)に蓄積するようにする.システムの障害時には,そのメモリ領域
     1779を読み出す.
     1780
     1781(2-2) システムログ機能のログバッファに蓄積する
     1782
     1783必要なログ情報をシステムログ機能のログバッファに記録するように設定する.
     1784システムログタスクを動作させないと,ログ情報はログバッファに蓄積されて
     1785いく.システムの障害時には,ログバッファの領域を読み出すか,システムロ
     1786グタスクを動作させてログ情報を出力させる.
     1787
     1788(3) 開発時の設定のままとする
     1789
     1790システムログ機能の設定を,システム開発時のまま変更せず,シリアルポート
     1791等にログ情報を垂れ流す方法も考えられる.
     1792
     179311.4 オブジェクトIDの管理
     1794
     1795TOPPERS/ASPカーネルでは,オブジェクトのID番号を,コンフィギュレータが割
     1796り付ける方法が基本となっている.
     1797
     1798アプリケーションプログラム中でオブジェクトのID番号を参照する場合には,
     1799次の2つの方法が考えられる.
     1800
     1801(1) オブジェクト識別名を用いる
     1802
     1803オブジェクト生成のための静的API(CRE_YYY)の第1パラメータに記述したオブ
     1804ジェクト識別名を,アプリケーションプログラム中でも用いる方法.
     1805
     1806コンフィギュレータは,オブジェクト識別名を,割り付けたID番号にマクロ定
     1807義するC言語プリプロセッサのディレクティブ(#define)をkernel_cfg.hに生
     1808成するため,アプリケーションプログラムからkernel_cfg.hをインクルードす
     1809る必要がある.
     1810
     1811この方法は,オブジェクトコード中にID番号が直接埋め込まれるために実行効
     1812率が良い一方で,コンフィギュレータが実行されてkernel_cfg.hが書き換わる
     1813度に,アプリケーションプログラムの再コンパイルが必要になるという欠点が
     1814ある.そのため,アプリケーションプログラムを構成するファイルの中で,一
     1815部のファイルのみでオブジェクト識別名を参照する構成にするといった工夫を
     1816することが望ましい.
     1817
     1818(2) オブジェクトのID番号を保持する変数を用いる
     1819
     1820オブジェクトのID番号を保持するconst属性を付加した変数を用意し,アプリケー
     1821ションプログラム中では,その変数を用いる方法.
     1822
     1823例えば,TASK1というオブジェクト識別名のタスクに対して,次のような変数を
     1824用意する.
    21331825
    21341826const ID TASK1_id = TASK1;
    21351827
    2136 ã‚¢ãƒ—リケーションプログラム中では,この変数(TASK1_id)を用いることで,
    2137 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ãŒå®Ÿè¡Œã•ã‚Œã¦kernel_cfg.hが書き換わる度に,上記の変数
    2138 å®šç¾©ã‚’含んだファイルのみを再コンパイルすればよいことになる.
    2139 
    2140 ã“の方法は,アプリケーションプログラムの再コンパイルを最小限にできる利
    2141 ç‚¹ãŒã‚る一方で,変数のためのメモリ領域がå¿
    2142 è¦ã«ãªã‚‹ã“とに加えて,(プロ
    2143 ã‚»ãƒƒã‚µã«ã‚ˆã£ã¦ã¯ï¼‰å¤‰æ•°ã‚¢ã‚¯ã‚»ã‚¹ã®ãŸã‚ã®ã‚ªãƒ¼ãƒãƒ˜ãƒƒãƒ‰ãŒç”Ÿã˜ã‚‹ã¨ã„う欠点が
    2144 ã‚る.また,定数ではなく変数であることから,他の変数の初期化には使えな
    2145 ã„という制限がある.
    2146 
    2147 ãªãŠï¼ŒTOPPERS/ASPカーネルのコンフィギュレータは,--external-idオプショ
    2148 ãƒ³ã‚’付加することにより,上記の変数定義をkernel_cfg.c中に生成する機能を
    2149 æŒã£ã¦ã„るので,すべてのオブジェクトIDをこの方法で参ç
    2150 §ã™ã‚‹å ´åˆã«ã¯ï¼Œã“
    2151 ã®æ©Ÿèƒ½ã‚’用いることを推奨する.
    2152 
    2153 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã«ã‚ˆã‚‹ID番号割付けのもう1つの課題として,コンフィギュ
    2154 ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã®ä¿®æ­£ã«ã‚ˆã‚Šï¼Œã‚ªãƒ–ジェクトIDの割付けが変わってしまう
    2155 ã“とが挙げられる.これは,アプリケーションソフトウェアの設計仕様書にID
    2156 ç•ªå·ãŒè¨˜è¼‰ã•ã‚Œã¦ã„る場合や,デバッグ作業においてID番号を直接扱っている
    2157 å ´åˆã«ï¼Œä½œæ¥­åŠ¹çŽ‡ã‚’低下させる可能性が考えられる.
    2158 
    2159 ã“の問題に対応するために,TOPPERS/ASPカーネルのコンフィギュレータに,
    2160 ID番号の割付け結果をファイルに書き出す機能(--id-output-fileオプション)
    2161 ã¨ï¼ŒID番号の割付けをファイルから取り込む機能(--id-input-fileオプション)
    2162 ã‚’用意している.これらの機能を用いて,コンフィギュレータを実行する度に,
    2163 å‰å›žã«å®Ÿè¡Œã—た時にファイルに書き出したID番号の割付けを取り込むことで,
    2164 å‰å›žå®Ÿè¡Œæ™‚と同じ割付けを行うことができる.ただし,TOPPERS/ASPカーネルで
    2165 ã¯ï¼ŒID番号に抜けがあるのは許されないため,オブジェクトの数が減った場合
    2166 ã«ã¯ï¼ˆID番号が大きい方のオブジェクトが減った場合を除いて)エラーとなる.
    2167 ã“の場合には,ダミーのオブジェクトを生成する方法で回避するしかない.
    2168 
    2169 11.5 カーネルのå†
    2170 éƒ¨ã‚·ãƒ³ãƒœãƒ«ã®ãƒªãƒãƒ¼ãƒ 
    2171 
    2172 ASPカーネルでは,モジュールå†
    2173 éƒ¨ã®åç§°ãŒä»–のモジュールå†
    2174 éƒ¨ã®åç§°ã¨è¡çªã™
    2175 ã‚‹ã“とを避けるために,カーネルのå†
    2176 éƒ¨ã‚·ãƒ³ãƒœãƒ«ã¯ï¼ŒC言語レベルで,å
    2177 ˆé ­ãŒ
    2178 "_kernel_"または"_KERNEL_"である名称としている.
    2179 
    2180 ã“れをソースコードの可読性と両立させるために,ASPカーネルでは,ソースコー
    2181 ãƒ‰ã¯è‡ªç„¶ãªåå‰ã‚’用いて記述し,C言語プリプロセッサのマクロ定義(#define)
    2182 ã‚’用いて,それを"_kernel_"または"_KERNEL_"で始まる名前(自然な名前が
    2183 yyyyyの場合には,_kernel_yyyyy)にリネームする仕組みを用いている.
    2184 
    2185 å
    2186 ·ä½“的には,関連するディレクトリにxxx_rename.defを置き,そこからリネー
    2187 ãƒ ã®ãŸã‚ã®ãƒ˜ãƒƒãƒ€ãƒ•ã‚¡ã‚¤ãƒ«ï¼ˆxxx_rename.hおよびxxx_unrename.h)を生成する
    2188 ãƒ„ール(utils/genrename)を用意している.
    2189 
    2190 ã“の仕組みは,ソースコードの可読性向上に役立つ一方で,弊害もある.例え
    2191 ã°ï¼Œå¤šãã®ãƒ‡ãƒãƒƒã‚¬ã§ï¼Œã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã®åç§°ã¨ã‚ªãƒ–ジェクトコード中の名称
    2192 ãŒç•°ãªã‚‹ãŸã‚ã«ï¼Œã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã®å¤‰æ•°åã‚’指定して値を読んだり,関数名を
    2193 æŒ‡å®šã—てブレークポイントを置くといったことができない.
    2194 
    2195 ã“の状況に対応するために,ASPカーネルでは,ソースコード中の該当する名称
    2196 ã‚’リネームするためのユーティリティ(utils/applyrename)を用意している.
    2197 applyrenameユーティリティに,リネーム定義ファイル(xxx_rename.def)のプ
    2198 ãƒªãƒ•ã‚£ãƒƒã‚¯ã‚¹ï¼ˆxxxの部分)と,リネームしたいファイルリストを与えると,リ
    2199 ãƒãƒ¼ãƒ å‡¦ç†ã‚’行なう.例えば,kernelディレクトリのすべてのファイルに対し
    2200 ã¦ï¼Œã‚«ãƒ¼ãƒãƒ«ã®å†
    2201 éƒ¨ã‚·ãƒ³ãƒœãƒ«ã‚’リネームするには,次のコマンドを実行すれば
    2202 ã‚ˆã„.
     1828アプリケーションプログラム中では,この変数(TASK1_id)を用いることで,
     1829コンフィギュレータが実行されてkernel_cfg.hが書き換わる度に,上記の変数
     1830定義を含んだファイルのみを再コンパイルすればよいことになる.
     1831
     1832この方法は,アプリケーションプログラムの再コンパイルを最小限にできる利
     1833点がある一方で,変数のためのメモリ領域が必要になることに加えて,(プロ
     1834セッサによっては)変数アクセスのためのオーバヘッドが生じるという欠点が
     1835ある.また,定数ではなく変数であることから,他の変数の初期化には使えな
     1836いという制限がある.
     1837
     1838なお,TOPPERS/ASPカーネルのコンフィギュレータは,--external-idオプショ
     1839ンを付加することにより,上記の変数定義をkernel_cfg.c中に生成する機能を
     1840持っているので,すべてのオブジェクトIDをこの方法で参照する場合には,こ
     1841の機能を用いることを推奨する.
     1842
     1843コンフィギュレータによるID番号割付けのもう1つの課題として,コンフィギュ
     1844レーションファイルの修正により,オブジェクトIDの割付けが変わってしまう
     1845ことが挙げられる.これは,アプリケーションソフトウェアの設計仕様書にID
     1846番号が記載されている場合や,デバッグ作業においてID番号を直接扱っている
     1847場合に,作業効率を低下させる可能性が考えられる.
     1848
     1849この問題に対応するために,TOPPERS/ASPカーネルのコンフィギュレータに,
     1850ID番号の割付け結果をファイルに書き出す機能(--id-output-fileオプション)
     1851と,ID番号の割付けをファイルから取り込む機能(--id-input-fileオプション)
     1852を用意している.これらの機能を用いて,コンフィギュレータを実行する度に,
     1853前回に実行した時にファイルに書き出したID番号の割付けを取り込むことで,
     1854前回実行時と同じ割付けを行うことができる.ただし,TOPPERS/ASPカーネルで
     1855は,ID番号に抜けがあるのは許されないため,オブジェクトの数が減った場合
     1856には(ID番号が大きい方のオブジェクトが減った場合を除いて)エラーとなる.
     1857この場合には,ダミーのオブジェクトを生成する方法で回避するしかない.
     1858
     185911.5 カーネルの内部シンボルのリネーム
     1860
     1861ASPカーネルでは,モジュール内部の名称が他のモジュール内部の名称と衝突す
     1862ることを避けるために,カーネルの内部シンボルは,C言語レベルで,先頭が
     1863"_kernel_"または"_KERNEL_"である名称としている.
     1864
     1865これをソースコードの可読性と両立させるために,ASPカーネルでは,ソースコー
     1866ドは自然な名前を用いて記述し,C言語プリプロセッサのマクロ定義(#define)
     1867を用いて,それを"_kernel_"または"_KERNEL_"で始まる名前(自然な名前が
     1868yyyyyの場合には,_kernel_yyyyy)にリネームする仕組みを用いている.
     1869
     1870具体的には,関連するディレクトリにxxx_rename.defを置き,そこからリネー
     1871ムのためのヘッダファイル(xxx_rename.hおよびxxx_unrename.h)を生成する
     1872ツール(utils/genrename)を用意している.
     1873
     1874この仕組みは,ソースコードの可読性向上に役立つ一方で,弊害もある.例え
     1875ば,多くのデバッガで,ソースコード中の名称とオブジェクトコード中の名称
     1876が異なるために,ソースコード中の変数名を指定して値を読んだり,関数名を
     1877指定してブレークポイントを置くといったことができない.
     1878
     1879この状況に対応するために,ASPカーネルでは,ソースコード中の該当する名称
     1880をリネームするためのユーティリティ(utils/applyrename)を用意している.
     1881applyrenameユーティリティに,リネーム定義ファイル(xxx_rename.def)のプ
     1882リフィックス(xxxの部分)と,リネームしたいファイルリストを与えると,リ
     1883ネーム処理を行なう.例えば,kernelディレクトリのすべてのファイルに対し
     1884て,カーネルの内部シンボルをリネームするには,次のコマンドを実行すれば
     1885よい.
    22031886
    22041887        % cd kernel
    22051888        % ../utils/applyrename kernel *
    22061889
    2207 ã¾ãŸï¼Œã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã«å¯¾ã—て,カーネ
    2208 ãƒ«ã®å†
    2209 éƒ¨ã‚·ãƒ³ãƒœãƒ«ã‚’リネームするには,次のようなコマンドを実行すればよい.
     1890また,ターゲット依存部のディレクトリのすべてのファイルに対して,カーネ
     1891ルの内部シンボルをリネームするには,次のようなコマンドを実行すればよい.
    22101892
    22111893        % cd target/dve68k_gcc/
     
    22131895        % ../../utils/applyrename ../../kernel/kernel *
    22141896
    2215 11.6 トレースログ記録のサンプルコードの使用方法
    2216 
    2217 ãƒˆãƒ¬ãƒ¼ã‚¹ãƒ­ã‚°è¨˜éŒ²ã®ã‚µãƒ³ãƒ—ルコードがターゲット依存部に組み込まれている場
    2218 åˆã«ã¯ï¼Œã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—トにそれを使用することを指示する
    2219 ã‚ªãƒ—ション(-r)を付加することで,メモリ上にトレースログを記録する機能
    2220 ãŒæœ‰åŠ¹ã«ãªã‚‹ï¼Ž
    2221 
    2222 ãƒˆãƒ¬ãƒ¼ã‚¹ãƒ­ã‚°è¨˜éŒ²ã®ä½¿ç”¨æ–¹æ³•ã®ä¸€ä¾‹ã¨ã—て,システム起動時にトレースログの
    2223 è¨˜éŒ²ã‚’開始し,システム終了時に記録したトレースログをダンプするためには,
    2224 ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ¬¡ã®ã‚ˆã†ãªè¨˜è¿°ã‚’追加する.
     189711.6 トレースログ記録のサンプルコードの使用方法
     1898
     1899トレースログ記録のサンプルコードがターゲット依存部に組み込まれている場
     1900合には,コンフィギュレーションスクリプトにそれを使用することを指示する
     1901オプション(-r)を付加することで,メモリ上にトレースログを記録する機能
     1902が有効になる.
     1903
     1904トレースログ記録の使用方法の一例として,システム起動時にトレースログの
     1905記録を開始し,システム終了時に記録したトレースログをダンプするためには,
     1906システムコンフィギュレーションファイルに次のような記述を追加する.
    22251907
    22261908        #include "logtrace/trace_config.h"
     
    22281910        ATT_TER({ TA_NULL, target_fput_log, trace_dump });
    22291911
    2230 ã“こで,初期化ルーチン(trace_initialize)への引数は,初期化直後のトレー
    2231 ã‚¹ãƒ­ã‚°ã®å‹•ä½œãƒ¢ãƒ¼ãƒ‰ã‚’指定するものである.指定できる動作モードについては,
    2232 arch/logtrace/trace_config.h中のコメントに説明がある.
    2233 
    2234 çµ‚了処理ルーチン(trace_dump)は,記録されたトレースログをターゲット依
    2235 å­˜ã®ä½Žãƒ¬ãƒ™ãƒ«å‡ºåŠ›æ©Ÿèƒ½ï¼ˆtarget_fput_log)を利用してダンプするためのもので
    2236 ã‚る.トレースログを別の方法で取り出す場合には,終了処理ルーチンを登録
    2237 ã™ã‚‹å¿
    2238 è¦ã¯ãªã„.
    2239 
    2240 ä»¥ä¸Šã®æ–¹æ³•ã§ã¯ï¼Œtrace_initializeを初期化ルーチンで,trace_dumpを終了処
    2241 ç†ãƒ«ãƒ¼ãƒãƒ³ã§å‘¼ã³å‡ºã—ているため,初期化ルーチンを呼び出す前や終了処理ルー
    2242 ãƒãƒ³ã‚’呼び出した後には,トレースログ記録の機能を利用できない.初期化ルー
    2243 ãƒãƒ³ã‚’呼び出す前や終了処理ルーチンを呼び出した後に実行される処理(例え
    2244 ã°ï¼Œã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトの初期化処理や,trace_initializeよりもå
    2245 ˆã«ç™»éŒ²
    2246 ã—た初期化ルーチン,trace_dumpよりもå
    2247 ˆã«ç™»éŒ²ã—た終了処理ルーチン)でト
    2248 ãƒ¬ãƒ¼ã‚¹ãƒ­ã‚°è¨˜éŒ²ã®æ©Ÿèƒ½ã‚’利用するためには,trace_initializeとtrace_dumpを
    2249 é©åˆ‡ãªå ´æ‰€ã§å‘¼ã¶ã‚ˆã†ã«ä¿®æ­£ã™ã‚‹ã“とがå¿
    2250 è¦ã§ã‚る.
    2251 
    2252 11.7 システムの起動時の初期化処理
    2253 
    2254 ã‚·ã‚¹ãƒ†ãƒ ã®èµ·å‹•æ™‚にアプリケーションでå¿
    2255 è¦ã¨ãªã‚‹åˆæœŸåŒ–処理を行うための機
    2256 èƒ½ã¨ã—て初期化ルーチンが用意されているが,初期化ルーチンが実行されるよ
    2257 ã‚Šã‚‚早いタイミングで実行することがå¿
    2258 è¦ãªåˆæœŸåŒ–処理がある場合がある.
    2259 
    2260 ã“のような場合に用いるために,標準的なスタートアップモジュールから,ター
    2261 ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ä¾å­˜ã®åˆæœŸåŒ–フック(hardware_init_hook)を呼び出すことと
    2262 ã—ている.hardware_init_hookは,カーネルのターゲット依存部で用意されて
    2263 ã„るのが標準であるが,これをアプリケーションで用意したものに置き換え,
    2264 ãã®ä¸­ã§ã‚¢ãƒ—リケーションでå¿
    2265 è¦ã¨ãªã‚‹åˆæœŸåŒ–処理を行うことができる.
    2266 
    2267 ãŸã ã—,hardware_init_hookの作成する場合には,bssセクションとdataセクショ
    2268 ãƒ³ãŒåˆæœŸåŒ–されていないことや,ライブラリが初期化されていないこと,C言語
    2269 ã§è¨˜è¿°ã§ãã‚‹ã¨ã¯é™ã‚‰ãªã„ことなどに注意がå¿
    2270 è¦ã§ã‚る.作成にあたっては,
    2271 ã€Œã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ ポーティングガイド」を参ç
    2272 §ã™ã‚‹ã“と.
    2273 
    2274 ã‚«ãƒ¼ãƒãƒ«ã®ã‚¹ã‚¿ãƒ¼ãƒˆã‚¢ãƒƒãƒ—モジュールがhardware_init_hookを呼び出すように
    2275 å®Ÿè£
    2276 ã•ã‚Œã¦ã„ない場合には,スタートアップモジュールをアプリケーションで
    2277 ç”¨æ„ã—たものに置き換える方法を推奨する.
    2278 
    2279 11.8 rodataセクションをRAMに置く場合
    2280 
    2281 ä½•ã‚‰ã‹ã®ç†ç”±ã§rodataセクションをRAMに置く場合,dataセクションと同様に,
    2282 ãã®åˆæœŸå€¤ã¯ROMに置き,スタートアップモジュールでRAMにコピーするのが素
    2283 ç›´ã§ã‚る.これを実現するには,dataセクションの取扱いを参考に,リンカス
    2284 ã‚¯ãƒªãƒ—トとスタートアップモジュールを修正するå¿
    2285 è¦ãŒã‚るが,それに加えて,
    2286 ä»¥ä¸‹ã®æŽªç½®ãŒå¿
    2287 è¦ã§ã‚る.
    2288 
    2289 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã¯ï¼Œãƒ‘ス1とパス3において,ロードモジュールのシンボル
    2290 ãƒ•ã‚¡ã‚¤ãƒ«ã‚’用いて,ロードモジュールå†
    2291 ã®rodataセクションを読み込むことで,
    2292 å„種の定数値を取得する.そのため,rodataセクションをdataセクションと同
    2293 æ§˜ã«æ‰±ã†ã¨ï¼Œãã®ã‚¢ã‚¯ã‚»ã‚¹ã‚¢ãƒ‰ãƒ¬ã‚¹ï¼ˆRAMå†
    2294 ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ï¼ŒVMAと呼ぶ)とé
    2295 ç½®ã‚¢
    2296 ãƒ‰ãƒ¬ã‚¹ï¼ˆROMå†
    2297 ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ï¼ŒLMAと呼ぶ)が一致しなくなるために,定数値を取
    2298 å¾—することができず,エラーとなる.
    2299 
    2300 ãƒ‘ス1でのエラーを回避するためには,パス1のリンク時(cfg1_outをリンクす
    2301 ã‚‹æ™‚)には,rodataセクションのアクセスアドレスとé
    2302 ç½®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’一致させ
    2303 ã‚‹ãƒªãƒ³ã‚«ã‚¹ã‚¯ãƒªãƒ—ト(標準のリンカスクリプトはこのようになっている)を用
    2304 ã„る.サンプルのMakefileでは,LDSCRIPTによりリンカスクリプトを指定する
    2305 ã®ã§ã¯ãªãï¼ŒLDFLAGSとCFG1_OUT_LDFLAGSに異なるリンカスクリプトを用いるオ
    2306 ãƒ—ションを設定すればよい.
    2307 
    2308 ãƒ‘ス3でのエラーを回避するためには,コンフィギュレータのパス3のテンプレー
    2309 ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã«ãŠã„て,rodataセクションのå†
    2310 å®¹ã‚’,é
    2311 ç½®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹
    2312 ã‚¢ãƒ‰ãƒ¬ã‚¹ã«ã‚³ãƒ”ーする.そのためには,パス3のテンプレートファイルのターゲッ
    2313 ãƒˆä¾å­˜éƒ¨ã§ï¼ŒLMA.ORDER_LIST等のテンプレートファイル変数を設定すればよい.
    2314 å
    2315 ·ä½“的な方法は,「ターゲット依存部 ポーティングガイド」を参ç
    2316 §ã™ã‚‹ã“と.
    2317 
    2318 
    2319 ï¼‘2.参考æƒ
    2320 å ±
    2321 
    2322 12.1 利用条件と利用報告
    2323 
    2324 ASPカーネルの利用条件は,各ファイルのå
    2325 ˆé ­ã«è¡¨ç¤ºã•ã‚Œã¦ã„る.著作権は,各
    2326 ãƒ•ã‚¡ã‚¤ãƒ«ã®å
    2327 ˆé ­ã«è¡¨ç¤ºã•ã‚Œã¦ã„る著作権è€
    2328 ãŒä¿æœ‰ã—ている.
    2329 
    2330 åˆ©ç”¨æ¡ä»¶ã®(3)の(b)において,利用の形æ
    2331 ‹ã‚’TOPPERSプロジェクトに報告する方
    2332 æ³•ã¨ã—ては,ASPカーネルを利用した製品の名称と応用分野,製品化した会社名
    2333 ã¨æ¥­ç¨®ç­‰ã®æƒ
    2334 å ±ã‚’,以下のURLのページから報告するものとする.
     1912ここで,初期化ルーチン(trace_initialize)への引数は,初期化直後のトレー
     1913スログの動作モードを指定するものである.指定できる動作モードについては,
     1914arch/logtrace/trace_config.h中のコメントに説明がある.
     1915
     1916終了処理ルーチン(trace_dump)は,記録されたトレースログをターゲット依
     1917存の低レベル出力機能(target_fput_log)を利用してダンプするためのもので
     1918ある.トレースログを別の方法で取り出す場合には,終了処理ルーチンを登録
     1919する必要はない.
     1920
     1921以上の方法では,trace_initializeを初期化ルーチンで,trace_dumpを終了処
     1922理ルーチンで呼び出しているため,初期化ルーチンを呼び出す前や終了処理ルー
     1923チンを呼び出した後には,トレースログ記録の機能を利用できない.初期化ルー
     1924チンを呼び出す前や終了処理ルーチンを呼び出した後に実行される処理(例え
     1925ば,カーネルオブジェクトの初期化処理や,trace_initializeよりも先に登録
     1926した初期化ルーチン,trace_dumpよりも先に登録した終了処理ルーチン)でト
     1927レースログ記録の機能を利用するためには,trace_initializeとtrace_dumpを
     1928適切な場所で呼ぶように修正することが必要である.
     1929
     193011.7 システムの起動時の初期化処理
     1931
     1932システムの起動時にアプリケーションで必要となる初期化処理を行うための機
     1933能として初期化ルーチンが用意されているが,初期化ルーチンが実行されるよ
     1934りも早いタイミングで実行することが必要な初期化処理がある場合がある.
     1935
     1936このような場合に用いるために,標準的なスタートアップモジュールから,ター
     1937ゲットシステム依存の初期化フック(hardware_init_hook)を呼び出すことと
     1938している.hardware_init_hookは,カーネルのターゲット依存部で用意されて
     1939いるのが標準であるが,これをアプリケーションで用意したものに置き換え,
     1940その中でアプリケーションで必要となる初期化処理を行うことができる.
     1941
     1942ただし,hardware_init_hookの作成する場合には,bssセクションとdataセクショ
     1943ンが初期化されていないことや,ライブラリが初期化されていないこと,C言語
     1944で記述できるとは限らないことなどに注意が必要である.作成にあたっては,
     1945「ターゲット依存部 ポーティングガイド」を参照すること.
     1946
     1947カーネルのスタートアップモジュールがhardware_init_hookを呼び出すように
     1948実装されていない場合には,スタートアップモジュールをアプリケーションで
     1949用意したものに置き換える方法を推奨する.
     1950
     195111.8 rodataセクションをRAMに置く場合
     1952
     1953何らかの理由でrodataセクションをRAMに置く場合,dataセクションと同様に,
     1954その初期値はROMに置き,スタートアップモジュールでRAMにコピーするのが素
     1955直である.これを実現するには,dataセクションの取扱いを参考に,リンカス
     1956クリプトとスタートアップモジュールを修正する必要があるが,それに加えて,
     1957以下の措置が必要である.
     1958
     1959コンフィギュレータは,パス1とパス3において,ロードモジュールのシンボル
     1960ファイルを用いて,ロードモジュール内のrodataセクションを読み込むことで,
     1961各種の定数値を取得する.そのため,rodataセクションをdataセクションと同
     1962様に扱うと,そのアクセスアドレス(RAM内のアドレス,VMAと呼ぶ)と配置ア
     1963ドレス(ROM内のアドレス,LMAと呼ぶ)が一致しなくなるために,定数値を取
     1964得することができず,エラーとなる.
     1965
     1966パス1でのエラーを回避するためには,パス1のリンク時(cfg1_outをリンクす
     1967る時)には,rodataセクションのアクセスアドレスと配置アドレスを一致させ
     1968るリンカスクリプト(標準のリンカスクリプトはこのようになっている)を用
     1969いる.サンプルのMakefileでは,LDSCRIPTによりリンカスクリプトを指定する
     1970のではなく,LDFLAGSとCFG1_OUT_LDFLAGSに異なるリンカスクリプトを用いるオ
     1971プションを設定すればよい.
     1972
     1973パス3でのエラーを回避するためには,コンフィギュレータのパス3のテンプレー
     1974トファイルにおいて,rodataセクションの内容を,配置アドレスからアクセス
     1975アドレスにコピーする.そのためには,パス3のテンプレートファイルのターゲッ
     1976ト依存部で,LMA.ORDER_LIST等のテンプレートファイル変数を設定すればよい.
     1977具体的な方法は,「ターゲット依存部 ポーティングガイド」を参照すること.
     1978
     1979
     198012.参考情報
     1981
     198212.1 利用条件と利用報告
     1983
     1984ASPカーネルの利用条件は,各ファイルの先頭に表示されている.著作権は,各
     1985ファイルの先頭に表示されている著作権者が保有している.
     1986
     1987利用条件の(3)の(b)において,利用の形態をTOPPERSプロジェクトに報告する方
     1988法としては,ASPカーネルを利用した製品の名称と応用分野,製品化した会社名
     1989と業種等の情報を,以下のURLのページから報告するものとする.
    23351990
    23361991        http://www.toppers.jp/report.html
    23371992
    2338 ã¾ãŸãã®éš›ã«ï¼ŒASPカーネルを使用してのコメントやご意見もいただけると幸い
    2339 ã§ã‚る.
    2340 
    2341 12.2 保証・適用性・サポート
    2342 
    2343 ASPカーネルは無保証で提供されているものである.開発è€
    2344 ãŠã‚ˆã³TOPPERSプロ
    2345 ã‚¸ã‚§ã‚¯ãƒˆã¯ï¼ŒASPカーネルに関して,特定の使用目的に対する適合性も含めて,
    2346 ã„かなる保証も行わない.また,ASPカーネルの利用により直接的または間接的
    2347 ã«ç”Ÿã˜ãŸã„かなる損害に関しても,その責任を負わない.
    2348 
    2349 é–‹ç™ºè€
    2350 ãŠã‚ˆã³TOPPERSプロジェクトは,ASPカーネルに関するサポートの約束は
    2351 ã—ていない.ASPカーネルに関して質問がある場合は,後述のTOPPERSユーザー
    2352 ã‚ºãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã‚’利用していただけると幸いである.確実なサポートがå¿
    2353 
    2354 è¦ãªå ´åˆã«ã¯ï¼Œæœ‰å„Ÿã§ã‚µãƒãƒ¼ãƒˆã‚µãƒ¼ãƒ“スを提供している会社に相談されたい.
    2355 
    2356 12.3 バグレポート
    2357 
    2358 ASPカーネルにバグや問題点を発見された場合には,後述のTOPPERSユーザーズ
    2359 ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã«å ±å‘Šã—て欲しい.
    2360 
    2361 ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã«ãƒã‚°ã‚„問題点などを報告する場合には,å¿
    2362 è¦ã«å¿œã˜ã¦æ¬¡ã®
    2363 æƒ
    2364 å ±ã‚’知らせて欲しい.
    2365 
    2366         使用しているカーネルに関するæƒ
    2367 å ±
    2368                 ・ターゲット非依存部のバージョン
    2369                 ・使用しているターゲット依存部とそのバージョン
    2370                 ・TOPPERSプロジェクトからのリリースに対する改造箇所(あれば)
    2371 
    2372         ターゲットシステムに関するæƒ
    2373 å ±
    2374                 ・ターゲットプロセッサの種類
    2375                 ・ターゲットボード等の種類
    2376 
    2377         ホストに関するæƒ
    2378 å ±
    2379                 ・OSのバージョン(サービスパックの適用状況も)
    2380                 ・コンパイラなどの開発環境のバージョン(Cygwinのバージョンも)
    2381 
    2382 12.4 ウェブサイト
    2383 
    2384 TOPPERSプロジェクトのウェブサイトは,以下のURLにある.
     1993またその際に,ASPカーネルを使用してのコメントやご意見もいただけると幸い
     1994である.
     1995
     199612.2 保証・適用性・サポート
     1997
     1998ASPカーネルは無保証で提供されているものである.開発者およびTOPPERSプロ
     1999ジェクトは,ASPカーネルに関して,特定の使用目的に対する適合性も含めて,
     2000いかなる保証も行わない.また,ASPカーネルの利用により直接的または間接的
     2001に生じたいかなる損害に関しても,その責任を負わない.
     2002
     2003開発者およびTOPPERSプロジェクトは,ASPカーネルに関するサポートの約束は
     2004していない.ASPカーネルに関して質問がある場合は,後述のTOPPERSユーザー
     2005ズメーリングリストを利用していただけると幸いである.確実なサポートが必
     2006要な場合には,有償でサポートサービスを提供している会社に相談されたい.
     2007
     200812.3 バグレポート
     2009
     2010ASPカーネルにバグや問題点を発見された場合には,後述のTOPPERSユーザーズ
     2011メーリングリストに報告して欲しい.
     2012
     2013メーリングリストにバグや問題点などを報告する場合には,必要に応じて次の
     2014情報を知らせて欲しい.
     2015
     2016        使用しているカーネルに関する情報
     2017                ・ターゲット非依存部のバージョン
     2018                ・使用しているターゲット依存部とそのバージョン
     2019                ・TOPPERSプロジェクトからのリリースに対する改造箇所(あれば)
     2020
     2021        ターゲットシステムに関する情報
     2022                ・ターゲットプロセッサの種類
     2023                ・ターゲットボード等の種類
     2024
     2025        ホストに関する情報
     2026                ・OSのバージョン(サービスパックの適用状況も)
     2027                ・コンパイラなどの開発環境のバージョン(Cygwinのバージョンも)
     2028
     202912.4 ウェブサイト
     2030
     2031TOPPERSプロジェクトのウェブサイトは,以下のURLにある.
    23852032
    23862033        http://www.toppers.jp/
    23872034
    2388 TOPPERSプロジェクトやASPカーネルに関する最新æƒ
    2389 å ±ã¯ï¼Œã“のウェブサイトか
    2390 ã‚‰å¾—ることができる.また,ASPカーネルの最新版は,このウェブサイトからダ
    2391 ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹ã“とができる.
    2392 
    2393 12.5 TOPPERSユーザーズメーリングリスト
    2394 
    2395 ASPカーネルを含むTOPPERSプロジェクトの開発成果物のユーザに対するæƒ
    2396 å ±æ
    2397 ä¾›ãŠã‚ˆã³ãƒ¦ãƒ¼ã‚¶ç›¸äº’間のæƒ
    2398 å ±äº¤æ›ã‚’容易にするために,TOPPERSユーザーズメー
    2399 ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆï¼ˆusers@toppers.jp)を用意している.
    2400 
    2401 ã“のメーリングリストには,誰でも自由に登録し,メールを送付することがで
    2402 ãã‚‹ï¼ˆç™»éŒ²è€
    2403 ä»¥å¤–はメールを送付できない).また,送付されたメールは,誰
    2404 ã§ã‚‚自由にウェブサイトで読むことができる.
    2405 
    2406 ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã¸ã®ç™»éŒ²æ–¹æ³•ã«ã¤ã„ては,以下のURLのページに説明がある.
     2035TOPPERSプロジェクトやASPカーネルに関する最新情報は,このウェブサイトか
     2036ら得ることができる.また,ASPカーネルの最新版は,このウェブサイトからダ
     2037ウンロードすることができる.
     2038
     203912.5 TOPPERSユーザーズメーリングリスト
     2040
     2041ASPカーネルを含むTOPPERSプロジェクトの開発成果物のユーザに対する情報提
     2042供およびユーザ相互間の情報交換を容易にするために,TOPPERSユーザーズメー
     2043リングリスト(users@toppers.jp)を用意している.
     2044
     2045このメーリングリストには,誰でも自由に登録し,メールを送付することがで
     2046きる(登録者以外はメールを送付できない).また,送付されたメールは,誰
     2047でも自由にウェブサイトで読むことができる.
     2048
     2049メーリングリストへの登録方法については,以下のURLのページに説明がある.
    24072050
    24082051        http://www.toppers.jp/community.html
    24092052
    2410 12.6 TOPPERSプロジェクトのメンバ向けのサービス
    2411 
    2412 TOPPERSプロジェクトのメンバに対しては,上記に加えて,ASPカーネルに関連
    2413 ã—て次のサービスを用意している.
    2414 
    2415 (1) TOPPERS開発è€
    2416 ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆ
    2417 
    2418 TOPPERSプロジェクトのメンバは,ASPカーネルに関する質問,バグや問題点な
    2419 ã©ã®å ±å‘Šã«ï¼ŒTOPPERS開発è€
    2420 ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆï¼ˆdev@toppers.jp)を利用するこ
    2421 ã¨ãŒã§ãã‚‹ï¼Ž
    2422 
    2423 (2) ASPカーネルの開発支援サイト
    2424 
    2425 ASPカーネルの開発支援のためのTRAC(バグトラッキングシステム)が,以下の
    2426 URLにある(TRACへのアクセスには,会員パスワードがå¿
    2427 è¦ã§ã‚る).
     205312.6 TOPPERSプロジェクトのメンバ向けのサービス
     2054
     2055TOPPERSプロジェクトのメンバに対しては,上記に加えて,ASPカーネルに関連
     2056して次のサービスを用意している.
     2057
     2058(1) TOPPERS開発者メーリングリスト
     2059
     2060TOPPERSプロジェクトのメンバは,ASPカーネルに関する質問,バグや問題点な
     2061どの報告に,TOPPERS開発者メーリングリスト(dev@toppers.jp)を利用するこ
     2062とができる.
     2063
     2064(2) ASPカーネルの開発支援サイト
     2065
     2066ASPカーネルの開発支援のためのTRAC(バグトラッキングシステム)が,以下の
     2067URLにある(TRACへのアクセスには,会員パスワードが必要である).
    24282068
    24292069        http://dev.toppers.jp/trac/asp/
    24302070
    2431 TOPPERSプロジェクトのメンバは,このサイトから,ウェブインタフェースおよ
    2432 ã³subversionサーバにより,ASPカーネルの開発中のバージョンを得ることがで
    2433 ãã‚‹ï¼Žã¾ãŸï¼Œãƒã‚°ãƒˆãƒ©ãƒƒã‚­ãƒ³ã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“とができ,過去
    2434 ã®ãƒã‚°å±¥æ­´ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚„,バグの登録をすることができる.
    2435 
    2436 12.7 TOPPERSプロジェクトへの参加
    2437 
    2438 TOPPERSプロジェクトでは,何からの形でプロジェクトに貢献していただける方,
    2439 ãƒ—ロジェクトで開発したソフトウェアをお使いの方,プロジェクトに興味をお
    2440 æŒã¡ã®æ–¹ã®å‚加を求めている.TOPPERSプロジェクトへの参加方法については,
    2441 ä»¥ä¸‹ã®ãƒšãƒ¼ã‚¸ã«èª¬æ˜ŽãŒã‚る.
     2071TOPPERSプロジェクトのメンバは,このサイトから,ウェブインタフェースおよ
     2072びsubversionサーバにより,ASPカーネルの開発中のバージョンを得ることがで
     2073きる.また,バグトラッキングデータベースにアクセスすることができ,過去
     2074のバグ履歴へのアクセスや,バグの登録をすることができる.
     2075
     207612.7 TOPPERSプロジェクトへの参加
     2077
     2078TOPPERSプロジェクトでは,何からの形でプロジェクトに貢献していただける方,
     2079プロジェクトで開発したソフトウェアをお使いの方,プロジェクトに興味をお
     2080持ちの方の参加を求めている.TOPPERSプロジェクトへの参加方法については,
     2081以下のページに説明がある.
    24422082
    24432083        http://www.toppers.jp/joinus.html
    24442084
    24452085
    2446 ï¼‘3.リファレンス
    2447 
    2448 13.1 サービスコール一覧
    2449 
    2450 (1) タスク管理機能
     208613.リファレンス
     2087
     208813.1 サービスコール一覧
     2089
     2090(1) タスク管理機能
    24512091
    24522092        ER ercd = act_tsk(ID tskid)
     
    24602100        ER ercd = ref_tsk(ID tskid, T_RTSK *pk_rtsk)
    24612101
    2462 (2) タスク付属同期機能
     2102(2) タスク付属同期機能
    24632103
    24642104        ER ercd = slp_tsk(void)
     
    24732113        ER ercd = dly_tsk(RELTIM dlytim)
    24742114
    2475 (3) タスク例外処理機能
     2115(3) タスク例外処理機能
    24762116
    24772117        ER ercd = ras_tex(ID tskid, TEXPTN rasptn)
     
    24822122        ER ercd = ref_tex(ID tskid, T_RTEX *pk_rtex)
    24832123
    2484 (4) 同期・通信機能
     2124(4) 同期・通信機能
    24852125
    24862126        ER ercd = sig_sem(ID semid)
     
    25332173        ER ercd = ref_mbx(ID mbxid, T_RMBX *pk_rmbx)
    25342174
    2535 (5) メモリプール管理機能
     2175(5) メモリプール管理機能
    25362176
    25372177        ER ercd = get_mpf(ID mpfid, void **p_blk)
     
    25422182        ER ercd = ref_mpf(ID mpfid, T_RMPF *pk_rmpf)
    25432183
    2544 (6) 時間管理機能
     2184(6) 時間管理機能
    25452185
    25462186        ER ercd = get_tim(SYSTIM *p_systim)
     
    25572197        ER ercd = ref_alm(ID almid, T_RALM *pk_ralm)
    25582198
    2559 (7) システム状æ
    2560 ‹ç®¡ç†æ©Ÿèƒ½
     2199(7) システム状態管理機能
    25612200
    25622201        ER ercd = rot_rdq(PRI tskpri)
     
    25772216        ER ercd = ext_ker(void)
    25782217
    2579 (8) 割込み管理機能
     2218(8) 割込み管理機能
    25802219
    25812220        ER ercd = dis_int(INTNO intno)
     
    25842223        ER ercd = get_ipm(PRI *p_intpri)
    25852224
    2586 (9) CPU例外管理機能
     2225(9) CPU例外管理機能
    25872226
    25882227        bool_t stat = xsns_dpn(void *p_excinf)
    25892228        bool_t stat = xsns_xpn(void *p_excinf)
    25902229
    2591 13.2 静的API一覧
    2592 
    2593 (1) タスク管理機能
     223013.2 静的API一覧
     2231
     2232(1) タスク管理機能
    25942233
    25952234        CRE_TSK(ID tskid, { ATR tskatr, intptr_t exinf, TASK task,
    25962235                                                                PRI itskpri, SIZE stksz, STK_T *stk })
    25972236
    2598 (3) タスク例外処理機能
     2237(3) タスク例外処理機能
    25992238
    26002239        DEF_TEX(ID tskid, { ATR texatr, TEXRTN texrtn })
    26012240
    2602 (4) 同期・通信機能
     2241(4) 同期・通信機能
    26032242
    26042243        CRE_SEM(ID semid, { ATR sematr, uint_t isemcnt, uint_t maxsem })
     
    26082247        CRE_MBX(ID mbxid, { ATR mbxatr, PRI maxmpri, void *mprihd })
    26092248
    2610 (5) メモリプール管理機能
     2249(5) メモリプール管理機能
    26112250
    26122251        CRE_MPF(ID mpfid, { ATR mpfatr, uint_t blkcnt, uint_t blksz,
    26132252                                                                                MPF_T *mpf, void *mpfmb })
    26142253
    2615 (6) 時間管理機能
     2254(6) 時間管理機能
    26162255
    26172256        CRE_CYC(ID cycid, { ATR cycatr, intptr_t exinf, CYCHDR cychdr,
     
    26192258        CRE_ALM(ID almid, { ATR almatr, intptr_t exinf, ALMHDR almhdr })
    26202259
    2621 (8) 割込み管理機能
     2260(8) 割込み管理機能
    26222261
    26232262        CFG_INT(INTNO intno, { ATR intatr, PRI intpri })
     
    26252264        DEF_INH(INHNO inhno, { ATR inhatr, INTHDR inthdr })
    26262265
    2627 (9) CPU例外管理機能
     2266(9) CPU例外管理機能
    26282267
    26292268        DEF_EXC(EXCNO excno, { ATR excatr, EXCHDR exchdr })
    26302269
    2631 (10) システム構成管理機能
     2270(10) システム構成管理機能
    26322271
    26332272        DEF_ICS({ SIZE istksz, STK_T *istk })
     
    26352274        ATT_TER({ ATR teratr, intptr_t exinf, TERRTN terrtn })
    26362275
    2637 13.3 バージョン履歴
    2638 
    2639         2006å¹´10月29日       Release 1.A.0           æœ€åˆã®ãƒªãƒªãƒ¼ã‚¹
    2640         2007å¹´2月20日        Release 1.A.1
    2641         2007å¹´2月20日        Release 1.A.2
    2642         2007å¹´7月12日        Release 1.B.0           ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã‚’新バージョンに
    2643         2007å¹´7月12日        Release 1.B.1           ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ¡ä»¶ã®å
    2644 ¥ã‚Œæ›ãˆ
    2645         2007å¹´7月16日        Release 1.B.2
    2646         2007å¹´7月21日        Release 1.B.3           ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªæ§‹æˆã®å¤‰æ›´
    2647         2007å¹´8月20日        Release 1.B.4           æ‹¡å¼µãƒ‘ッケージの追加
    2648         2007å¹´10月16日       Release 1.B.5
    2649         2007å¹´11月15日       Release 1.0.0           æ­£å¼ç‰ˆã®ãƒªãƒªãƒ¼ã‚¹
    2650         2007å¹´12月23日       Release 1.1.0
    2651         2008å¹´3月19日        Release 1.2.0
    2652         2008å¹´3月21日        Release 1.2.1
    2653         2008å¹´4月12日        Release 1.3.0           ä¸€èˆ¬å
    2654 ¬é–‹ã«å‘けての最終修正
    2655         2008å¹´5月13日        Release 1.3.1           æœ€åˆã®ä¸€èˆ¬å
    2656 ¬é–‹ç‰ˆ
    2657         2008å¹´8月21日        Release 1.3.2
    2658         2009å¹´5月11日        Release 1.4.0
    2659         2010å¹´6月28日        Release 1.5.0           æ‹¡å¼µãƒ‘ッケージを一般å
    2660 ¬é–‹
    2661         2010å¹´8月1日 Release 1.6.0           cfg-1.6に対応
    2662         2011å¹´5月8日 Release 1.7.0           å‹•çš„生成機能拡張パッケージ等の追加
    2663         2012å¹´12月26日       Release 1.8.0
    2664         2014å¹´1月6日 Release 1.9.0           ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒãƒƒãƒ•ã‚¡æ©Ÿèƒ½æ‹¡å¼µã®è¿½åŠ 
    2665         2014å¹´11月17日       Release 1.9.1
    2666         2015å¹´5月30日        Release 1.9.2
    2667         2017å¹´4月29日        Release 1.9.3
    2668 
    2669 ä»¥ä¸Š
     227613.3 バージョン履歴
     2277
     2278        2006年10月29日     Release 1.A.0           最初のリリース
     2279        2007年2月20日      Release 1.A.1
     2280        2007年2月20日      Release 1.A.2
     2281        2007年7月12日      Release 1.B.0           コンフィギュレータを新バージョンに
     2282        2007年7月12日      Release 1.B.1           ライセンス条件の入れ換え
     2283        2007年7月16日      Release 1.B.2
     2284        2007年7月21日      Release 1.B.3           ディレクトリ構成の変更
     2285        2007年8月20日      Release 1.B.4           拡張パッケージの追加
     2286        2007年10月16日     Release 1.B.5
     2287        2007年11月15日     Release 1.0.0           正式版のリリース
     2288        2007年12月23日     Release 1.1.0
     2289        2008年3月19日      Release 1.2.0
     2290        2008年3月21日      Release 1.2.1
     2291        2008年4月12日      Release 1.3.0           一般公開に向けての最終修正
     2292        2008年5月13日      Release 1.3.1           最初の一般公開版
     2293        2008年8月21日      Release 1.3.2
     2294        2009年5月11日      Release 1.4.0
     2295        2010年6月28日      Release 1.5.0           拡張パッケージを一般公開
     2296        2010年8月1日       Release 1.6.0           cfg-1.6に対応
     2297        2011年5月8日       Release 1.7.0           動的生成機能拡張パッケージ等の追加
     2298        2012年12月26日     Release 1.8.0
     2299        2014年1月6日       Release 1.9.0           メッセージバッファ機能拡張の追加
     2300        2014年11月17日     Release 1.9.1
     2301        2015年5月30日      Release 1.9.2
     2302        2017年4月29日      Release 1.9.3
     2303
     2304以上
Note: See TracChangeset for help on using the changeset viewer.