NORTi Simulator User's Guide μITRON 仕様リアルタイム OS シミュレータ NORTi Simulator ユーザーズガイド NORTi Simulator User's Guide μITRON 仕様リアルタイム OS シミュレータ ユーザーズガイド 2003 年 2 月 第 1 版 株式会社ミスポ 〒213-0012 川崎市高津区坂戸 3--2-1 かながわサイエンスパーク 西 300-G Copyright 2003 by MiSPO Co.,Ltd. NORTi Simulator User's Guide 目次 第 1 章 導入 1 1.1 はじめに ........................................................................... 1 1.2 特長 .............................................................................. 1 1.4 基本的な仕組 ....................................................................... 2 H8, M16C, 8086, Z80, KC160 でご利用のお客様へ .................................... 3 NORTi3 Standard をご使用のお客様へ ............................................... 3 NORTi4 Compact Edition をご使用のお客様へ ........................................ 3 その他の制限事項 ................................................................ 3 WindowsXP 及び Windows2000 用のインストール ....................................... 4 Windows98 及び Windows98SE 及び WindowsMe のインストール ........................... 7 1.7 ファイル構成 ........................................................................ 8 NORTiSIM フォルダ................................................................ 8 ヘッダファイル .................................................................. 8 ライブラリファイル .............................................................. 9 ソースファイル .................................................................. 9 サンプルファイル ................................................................ 9 1.8 Borland C++Builder 6 日本語版でご使用の場合 ......................................... 10 C++Builder のインストール ....................................................... 10 プロジェクトファイルのコピー ................................................... 12 新規プロジェクトの準備 ......................................................... 13 プロジェクトへファイルを追加 ................................................... 15 プロジェクトの設定 ............................................................. 17 ソースコードの変更 ............................................................. 21 プロジェクトメインモジュールの変更 ............................................. 21 実機依存ヘッダーファイルインクルードの無効化 ................................... 22 RAM DISK のメモリ領域変更 ....................................................... 22 コンフィグレーションの変更 ..................................................... 23 その他の処理 ................................................................... 24 メイクと実行 ................................................................... 26 1.9 Microsoft Visual C++ 6.0 でご使用の場合.............................................. 29 Visual C++ 6.0 のインストール ................................................... 29 プロジェクトファイルのコピー ................................................... 30 新規プロジェクトの準備 ......................................................... 31 プロジェクトへファイルを追加 ................................................... 34 プロジェクトの設定 ............................................................. 37 ソースコードの変更 ............................................................. 40 NORTi Simulator User's Guide 実機依存ヘッダーファイルインクルードの無効化 ................................... 40 RAM DISK のメモリ領域変更 ....................................................... 40 コンフィグレーションの変更 ..................................................... 41 その他の処理 ................................................................... 42 ビルドと実行 ................................................................... 43 第 2 章 シミュレータの操作 46 2.1 概要 ............................................................................. 46 2.2 スタート・ストップボタン............................................................... 46 2.2 タイマ割込み周期調整............................................................... 46 2.3LAN ポートの選択 ................................................................... 46 2.4 タスクステートウォッチャ ............................................................. 47 2.5 起動・終了......................................................................... 47 2.6 更新 ............................................................................. 48 2.7 グラフ表示 ........................................................................ 48 2.8 ヘルプ ............................................................................ 48 2.9 タスクタブ ......................................................................... 49 2.11 イベントフラグタブ.................................................................. 50 2.12 メイルボックスタブ ................................................................. 50 2.13 メッセージバッファタブ .............................................................. 51 2.14 固定長メモリプールタブ ............................................................. 51 2.15 可変長メモリプールタブ ............................................................. 51 2.16 ランデブ用ポートタブ ............................................................... 52 2.17 アラームハンドラタブ ............................................................... 52 2.18 周期起動ハンドラタブ............................................................... 52 2.19 レディキュータブ ................................................................... 52 2.20 ミューテックスタブ .................................................................. 53 2.21 データキュータブ .................................................................. 53 2.22 オーバーランハンドラタブ............................................................ 53 2.23 タスク例外ルーチンタブ ............................................................. 53 2.24 割り込みサービスルーチンタブ ....................................................... 54 2.25 サービスコールルーチンタブ ......................................................... 54 2.26 機能............................................................................. 54 オプション ..................................................................... 55 ステータスの自動更新 ........................................................... 55 タスクプロファイル ............................................................. 56 オブジェクト一覧 ............................................................... 58 システムコールカバレッジ ....................................................... 58 NORTi Simulator User's Guide 第 3 章 プログラミング上の注意事項 59 3.1Windows API による待ち ............................................................. 59 3.2 二重起動.......................................................................... 59 3.3Active X, VB 等による GUI ........................................................... 59 3.4 エンディアン ....................................................................... 59 3.5 型のサイズ ........................................................................ 59 3.6 メモリサイズ ....................................................................... 59 3.7 タスクスタックサイズ................................................................. 59 3.8 カーネルタイマ ..................................................................... 59 3.9 メモリの直接参照 ................................................................... 59 3.10 メモリリーク ....................................................................... 60 3.11 ディスパッチの誤差 ................................................................ 60 3.12 割込みハンドラ .................................................................... 60 3.13 タスクやハンドラ以外でのシステムコール .............................................. 60 3.14 スレッド内ループ................................................................... 60 3.15 名前つきハンドル .................................................................. 60 3.16 デバッグメッセージ ................................................................. 60 お問い合わせ先 61 第 1 章 導入 NORTi Simulator User's Guide 第 1 章 導入 1.1 はじめに NORTi Simulator は、NORTi ベースの組込みアプリケーションプログラム開発のスタイルを一変させる 画期的で実用的なシミュレータです。NORTi Simulator を使うことにより、実際のターゲットが無くても、 Windows 上でアプリケーションプログラムのシミュレーションが可能となり、開発機材を購入するための 費用の削減と、大幅な開発工数の短縮が見込める NORTi と NORTi Simulator を活用し、効率的な組 込みシステム開発を実現してください。 本書は、NORTi Simulator の概要と基本的な操作方法と具体的な導入方法について説明しています。 μITRON4.0 仕様のシステムコールについては「NORTi Version 4 ユーザーズガイド カーネル編」を、 ご参照してください。また、ITRON TCP/IP API 仕様のサービスコールについては、「NORTi Version 4 ユーザーズガイド ネットワーク編」を参照してください。 1.2 特長 ・μITRON のタスクを Windows スレッドに割り当て、μITRON 仕様システムコールをシミュレーション ・インストラクションシミュレータではなくペンティアムのネイティブコードで実行されるため超高速 ・NORTi TCP/IP と互換 API で、パソコンの Ethernet ポートを利用可能 ・NORTi 付属シリアル入出力ドライバと互換 API で、パソコンの COM ポートを利用可能 ・Windows API も利用可能なため、デバッグ・シミュレーション用の入出力を自在に追加可能 ・タスクステートウォッチャが装備され、各資源の状態とタスクの状態遷移をモニタ可能 -1- 第 1 章 導入 NORTi Simulator User's Guide 1.3 概要 実際のターゲットに搭載するためのソースコードを、C++ Builder、あるいは、 Visual C++ 6.0 でコンパイ ルし、「シミュレータエンジン」とリンクすることで、Windows 上で実行可能なプログラムとなります。シミュ レータエンジンは、μITRON 仕様システムコールのシミュレーション機能、ITRON TCP/IP API 仕様プ ロトコルスタックのシミュレーション機能を提供します。さらに、シミュレータエンジンに付属する「タスクス テートウォッチャ」が、カーネルの管理する各資源(オブジェクト)状態表示機能とタスク状態遷移グラフ 表示機能を提供します。NORTi Simulator では、パソコンの COM ポートや Ethernet ポートを使えること が従来のシミュレータにはなかった大きな特長で、実際のターゲットに極めて近いシミュレーションが可 能です。つまり、一台のパソコンでネットデバックやシミュレーション実行中のプログラムから Ethernet や COM ポートを使っての、他のパソコンやターゲットとの通信が可能です。I/O のシミュレーションについ ては、画面上にスイッチボックスを表示するコンポーネントをサンプル添付しています。これをユーザが ターゲットに合わせて拡張することにより、個々の入出力レベルのシミュレーション、さらに、システム全 体の総合的なシミュレーションが可能となります。デバッグには、C++ Builder、あるいは、 Visual C++ 6.0 に付属のデバッガを使用することができ、効率の良いデバッグが可能です。 1.4 基本的な仕組 NORTi Simulator は、μITRON ベースの組込みアプリケーションプログラムを Windows 上でシミュレー ション実行、および、デバッグするためのライブラリとユーティリティから構成されています。 NORTi シミュレータは、μITRON のタスクを Windows のスレッドに割り当てることで、μITRON 仕様 OS 向けに書かれたユーザープログラムを Windows 上でシミュレーションしています。 ユーザープログラムによってタスクが生成されると、シミュレータエンジンは、Windows のスレッドを生成 し、μITRON のタスクを割り当てます。各システムコールのシミュレーション実現のためには、μITRON カーネルと同等の管理ブロックおよび制御用コードがシミュレータエンジン内に実装されており、μ ITRON カーネルと同等のスケジューリングアルゴリズムによって実行すべきスレッドを選択します。 TCP/IP プロトコルスタックには、Windows のプロトコルスタックでなく、NORTi とまったく同じプロトコルス タックのソースを使用しており、Ethernet コントローラドライバ入出力のレベルで、Windows 用のパケット ドライバを割り当てることにより、NORTi と完全に互換の TCP/IP のシミュレーションを実現しています。 タスクステートウォッチャは、シミュレータエンジンとは別プロセスとして実装されており、シミュレータエン ジンとプロセス間通信を行うことによって、タスクやイベントフラグやメイルボックス等のオブジェクトの状 態表示と、タスクの状態遷移グラフ表示機能を実現しています。 タスクは、Windows のスレッドのひとつに過ぎないため、μITRON のシステムコールだけでなく Windows の API も使うことができ、それを活用することによって周辺のシミュレーション機能を実現することができ ます。 -2- 第 1 章 導入 NORTi Simulator User's Guide 1.5 NORTi Simulator 使用上の制限 H8, M16C, 8086, Z80, KC160 でご利用のお客様へ これらの 16/8 ビットプロセッサでは、int 型の変数のサイズが 16 ビットですが、NORTi Simulator では、 int 型が 32 ビットとなります。ITRON で再定義してある INT,UINT 等も全てカーネル編ユーザーズガイド の「データタイプ(32 ビット CPU の場合)」が適用されますので、int 型のサイズに依存しないようにプログ ラムを記述してください。 NORTi3 Standard をご使用のお客様へ NORTi Simulator は、NORTi Version 4 をベースとしており、NORTi Version 4 と同様に NORTi3 Extended 互換のシステムコールもサポートしています。しかし、そのサブセットである NORTi3 Standard とは完全に互換ではありません。NORTi3 Standard と NORTi3 Extended との違いをご理解の上、 NORTi Simulator をご利用ください。 NORTi4 Compact Edition をご使用のお客様へ 同様に、NORTi Simulator は、NORTi Version 4 のサブセットである NORTi4 Compact Edition とも完全 に互換ではありません。NORTi4 Compact Edition と NORTi Version 4 との違いをご理解の上、NORTi Simulator をご利用ください。 その他の制限事項 NORTi Simulator は、その実現方法による性質上、実際のターゲット CPU やクロスコンパイラを使った 場合と異なる結果となる場合があります。具体的には、「第 3 章 プログラミング上の注意事項」を参照し てください。 -3- 第 1 章 導入 NORTi Simulator User's Guide 1.6 インストール CD-ROM から各 OS バージョンに合わせたインストールプログラムを起動します。 ・WindowsXP 及び Windows2000 の場合 Win2KXP.EXE ・Windows98 及び Windows98SE 及び WindowsMe の場合 Win98.EXE ※WindowsNT 及び Windows95 以前はサポート対象外です ※Windows98 及び Windows98SE 及び WindowsMe では OS の仕様制限で、速度が WindowsXP 及び Windows2000 に比べ遅く なります。なるべく WindowsXP 及び Windows2000 をお使いに成る事を推奨致します。 WindowsXP 及び Windows2000 用のインストール 起動すると下記のダイアログが表示されインストールを開始します。メニューに従いインストールを進め ます。 -> -> インストール先フォルダはデフォルトで C:\NORTiSIM に成ります。 (以降このフォルダでインストールされた場合で解説します。) -> -4- -> 第 1 章 導入 NORTi Simulator User's Guide コピー終了後キャプチャエンジンドライバのインストールへ続きます。 -> -> -> キャプチャエンジンドライバのインストールヘルプ画面が表示されますので、Windows2000 又は WindowsXP 用の手順に従いドライバをインストールしてください。セットアップ情報ファイルは C:\NORTiSIM\bin\cap2000.inf にコピーされていますのでこちらを指定してください。 -> -5- 第 1 章 導入 NORTi Simulator User's Guide 最初にお読み下さいを閉じると下記の画面表示が出ます。指示に従い再起動を行って下さい。 -6- 第 1 章 導入 NORTi Simulator User's Guide Windows98 及び Windows98SE 及び WindowsMe のインストール 起動すると下記のダイアログが表示されインストールを開始します。メニューに従いインストールを進め ます。 -> -> インストール先フォルダは C:\NORTiSIM に成ります。(以降このフォルダでインストールされた場合で解 説します。) -> コピー終了後指示に従い再起動を行って下さい。 -> -7- -> 第 1 章 導入 NORTi Simulator User's Guide 1.7 ファイル構成 NORTiSIM フォルダ NORTi Simulator をインストールすると NORTiSIM フォルダに以下のファイルが構成されます。 /NORTiSIM/BIN /NORTiSIM/INC /NORTiSIM/SRC /NORTiSIM/SMP/SIM/**/XXX/ /NORTiSIM/LIB/XXX /NORTiSIM/DOC DLLファイルとタスクステートウォッチャ ヘッダファイル ソースファイル アプリケーション・プロジェクト ライブラリ ドキュメント ここで説明するフォルダ名の XXX の部分は、コンパイラに依存します。またサンプルフォルダの**は、 サンプル名を示します。ディスク内容についての最新の情報は、ディスク内の補足説明書または README を参照してください。 ヘッダファイル INC フォルダには、次のヘッダファイルが収められています。 1) Kernel.h 2) nosys4.h 3) nocfg4.h 4) norti3.h 5) nosys3.h 6) nosio.h 7) non*.h 8) nosimapi.h 9) gocfg3.h gocfg4.h gos4rsh.h gosv3.h gosv4.h gosys3.h gosys4.h misystem.h カーネル標準ヘッダ システム内部定義ヘッダ コンフギュレーションヘッダ NORTi3 互換用カーネル標準ヘッダ NORTi3 互換用システム内部定義ヘッダ シリアル入出力関数ヘッダ ネットワーク用のヘッダ シミュレータAPI用ヘッダ (割込み、入出力API) シミュレータ内部定義ヘッダ 項目 1)~7)は、μITRON のアプリで使用するヘッダファイルであり、NORTi に付属するカーネル編また はネットワーク編のユーザーズガイドを参照してください。 項目 8)は、割込み、入出力 API が必要なときにインクルードしてください。 項目 9)は、シミュレータ内部でのみ使用されます。直接インクルードしないでください。 -8- 第 1 章 導入 NORTi Simulator User's Guide ライブラリファイル LIB フォルダには、次のライブラリファイルが収められています。 engine4d.lib engine4.lib nagros4d.lib nagros4.lib nosimapi.lib n4nsim.lib シミュレータエンジン・カーネルライブラリ(μITRON3.0仕様のシステムコー ルのみを使う場合は、engine.libの方をご使用ください) シミュレータAPI用ライブラリ (割込み、コントロールパネル) シミュレータエンジン・ネットワークライブラリ engine4(または engine).lib、nosimapi.lib は、必ずリンクしてください。 n4nsim.lib は、NORTi 互換の TCP/IP プロトコルスタックのライブラリです。TCP/IP を使用しないシミュ レーションでは、リンク不要です。 ソースファイル SRC フォルダには、プロトコルスタックのソースファイル(non*.c)が収められています。 サンプルファイル SMP フォルダには、次のサンプルリファイルが収められています。 1) guibase シミュレータのベースとなるテンプレート用のサンプルです。別なフォルダに コピーして、テンプレートとしてお使いください。 2) netbase ネットワークをシミュレーションするときは、項1)ではなく、netbaseをテンプ レートとして使用してください。 3) nosioaxs シリアルポートを利用したサンプルです。 5) flipflop タスク2個を起動するサンプルです。 6) swbox8 スイッチボックスのサンプルです。 4) frmsmp スイッチボックス、LEDのGUIのソースです。 GUIを作成する場合の参考にしてください。 -9- 第 1 章 導入 NORTi Simulator User's Guide 1.8 Borland C++Builder 6 日本語版でご使用の場合 ここでは NORTi 標準添付のターゲットボード用サンプルアプリケーションを C++Builder を使用して NORTi Simulator 上で動作させる迄の手順を説明します。 (参考例の手順は弊社評価ボード SH7615 EVA BOD+のサンプルソフトを例として行います) C++Builder のインストール インストールは C++Builder のマニュアルに従いますが、選択項目で迷いそうな部分を抜粋して掲載致 します。 C++Builder のセットアップランチャから C++ Builder を選びます。 手順に従いセットアップを進めて下さい。セットアップタイプは標準(T)を選択します。 - 10 - 第 1 章 導入 NORTi Simulator User's Guide 分散デバックの確認が有りますが、その他の作業で使用していなければ不要です。 InterBaseClient の確認が有りますが、その他の作業で使用していなければ不要です。 フォルダ構成はデフォルトで下記に設定されています。 - 11 - 第 1 章 導入 NORTi Simulator User's Guide プロジェクトファイルのコピー 新規に作成する C++Builder プロジェクト用フォルダを作成します。ここでは以下のパスにフォルダ work と bc60 を作成します。 C:\NORTiSIM\smp\sim\work C:\NORTiSIM\smp\sim\work\bc60 以下のファイルを作成したフォルダにコピーします。 ファイル名 説明 コピー元 フォルダ コピー先 フォルダ net7615.c ネットワークサンプルアプリケーション ※1 ※4 nonecfg.c TCP/IP・カーネルコンフィグレーション ※1 ※4 nonedrvr.c LANコントローラードライバ ※2 ※4 nonethw.c LANコントローラー割込み関数 ※2 ※4 nossim.c シリアル入出力ドライバ ※2 ※4 nosimapi.res GUIリソース ※3 ※5 FrmMain.dfm コントロールパネルフォーム ※3 ※5 FrmSwBx8.dfm スイッチボックスフォーム ※3 ※5 FrmLed7Seg.dfm 7セグメントLEDフォーム ※3 ※5 ※1 C:\NORTi\SMP\SH\MS7615 ※2 C:\NORTiSIM\smp\sim\netdemo ※3 C:\NORTiSIM\smp\sim\netdemo\bc60 ※4 C:\NORTiSIM\smp\sim\work ※5 C:\NORTiSIM\smp\sim\work\bc60 - 12 - 第 1 章 導入 NORTi Simulator User's Guide 新規プロジェクトの準備 C++Builder のプロジェクトを以下の手順で新規作成します。 C++Builder を起動し、[表示]メニューの[プロジェクト マネージャ]をクリックします。[プロジェクト マネー ジャ]ダイアログが表示されます。+マークをクリックしてツリー表示を展開します。 表示されたファイルから Project1.res を選択後、[削除]ボタンをクリックしてプロジェクトから削除します。 同様に、Unit1.cpp もプロジェクトから削除し、Project1.cpp のみを残します。 - 13 - 第 1 章 導入 NORTi Simulator User's Guide [ファイル]メニューの[プロジェクトに名前を付けて保存]をクリックします。[Project1 に名前を付けて保 存]ダイアログが表示されます。[ファイル名]にプロジェクト名を入力し、[保存]ボタンをクリックします。こ の例では、C:\NORTiSIM\smp\sim\work\bc60 に test.bpr という名のプロジェクトを保存します。 [プロジェクト マネージャ]に表示されるファイル名がプロジェクト名と同じ名前に変わります。 以上の操作で新規プロジェクトが作成されました。 - 14 - 第 1 章 導入 NORTi Simulator User's Guide プロジェクトへファイルを追加 作成したプロジェクトにソースコードファイル、リソースファイル、ライブラリファイルを追加します。 [プロジェクト マネージャ]で表示されるファイルから test.exe を選択し、右クリックして表示されるポップ アップメニューから[追加]を選択します。 [プロジェクトに追加]ダイアログが表示されます。[ファイルの種類]を[すべてのファイル (*.*)]に設定し ます。 C:\NORTiSIM\smp\sim\work\bc60\nortisim.res を選択し、[開く]ボタンをクリックします。 - 15 - 第 1 章 導入 NORTi Simulator User's Guide [プロジェクト マネージャ]に追加したファイルが表示されることを確認します。 同様に、以下のファイルを全てプロジェクトに追加します。 以下のファイルを作成したフォルダにコピーします。 ファイル名 フォルダ nosimapi.res 説明 GUIリソース net7615.c ネットワークサンプルアプリケーション ※2 nonecfg.c カーネル・TCP/IPコンフィグレーション ※2 nonedrvr.c LANコントローラードライバ ※2 nonethw.c LANコントローラー割込み関数 ※2 nossim.c シリアル入出力ドライバ ※2 noncons.c telnetデーモン用コンソール入出力関数 ※3 nondhcp.c DHCPクライアント ※3 nondump.c パケットダンプ ※3 nonechc.c Echoクライアント ※3 nonecho.c Echoサーバ ※3 nonedns.c DNS ※3 nonfile.c 簡易ファイルシステム ※3 nonftpc.c FTPクライアント ※3 nonftpd.c FTPサーバ ※3 nonping.c pingコマンド ※3 nonramd.c 簡易ファイルシステム RAMディスクドライバ ※3 nonshel.c telnet COMMAND SHELL ※3 nontelc.c telnetクライアント ※3 ※1 - 16 - 第 1 章 導入 NORTi Simulator User's Guide nonteld.c telnetデーモン ※3 nontftp.c TFTP ※3 nonelan.c LANドライバ上位処理関数 ※4 nosio.c シリアル入出力関数 ※4 engine4d.lib シミュレータエンジン・カーネルライブラリ ※5 n4nsim.lib シミュレータエンジン・ネットワークライブラリ ※5 nosimapi.lib シミュレータAPI用ライブラリ ※5 ※1 C:\NORTiSIM\smp\sim\work\bc60 ※2 C:\NORTiSIM\smp\sim\work ※3 C:\NORTiSIM\netsmp\src ※4 C:\NORTiSIM\src ※5 C:\NORTiSIM\lib\bc60 プロジェクトの設定 アプリケーションをメイクするために必要なプロジェクトの設定を行います。大部分のプロジェクト設定値 は初期値のまま変更する必要はありません。ここでは変更が必要な設定値のみ説明します。 [プロジェクト]メニューの[オプション]をクリックします。[test.exe のプロジェクトオプション]ダイアログが表 示されます。[ディレクトリ/条件]タブをクリックします。 - 17 - 第 1 章 導入 NORTi Simulator User's Guide [インクルードパス]に表示されているパスの最後尾に、以下の2つのパスをセミコロン(;)で区切って追加 します。 $(NORTiSIM)\inc $(NORTiSIM)\netsmp\inc ※NORTiSIM はインストール時に設定される環境変数です。NORTi Simulator をインストールしたディレ クトリ(デフォルトでは C:\NORTiSIM)を意味します。 - 18 - 第 1 章 導入 NORTi Simulator User's Guide [中間出力]に中間ファイル(*.obj)を出力するフォルダを入力します。 この例では、C:\NORTiSIM\smp\sim\work\bc60 を入力します。 - 19 - 第 1 章 導入 NORTi Simulator User's Guide [条件]の[条件定義]に表示されているマクロの最後尾に、以下のマクロをセミコロン(;)で区切って追加 します。 LITTLE_ENDIAN DHCP による IP アドレス自動取得機能を使用する場合は以下のマクロを追加します。 DHCP 以上の操作でプロジェクトの設定は完了しました。 - 20 - 第 1 章 導入 NORTi Simulator User's Guide ソースコードの変更 プロジェクトメインモジュール(この例では test.cpp)に NORTi Simulator を起動する為の処理を追加しま す。また、ターゲットボードサンプルアプリケーションを NORTi Simulator 上で動作させる為には、ター ゲットに依存するソースコード部分を変更する必要があります。 プロジェクトメインモジュールの変更 コントロールパネル、スイッチボックス、7 セグメント LED を生成する為の処理を追加します。 ファイル名:test.cpp //--------------------------------------------------------------------------#include <vcl.h> #include "nosimapi.h" #pragma hdrstop //--------------------------------------------------------------------------class DELPHICLASS TvfMain; TvfMain class DELPHICLASS TvfLed7Seg; TvfMain class DELPHICLASS TvfSwBox8; *vfMain = 0; *vfLed7Seg = 0; TvfSwBox8 *vfSwBox8 = 0; //--------------------------------------------------------------------------extern "C" int simulation_main( void ); extern NOSIMAPI void *gpv_simulation_main; //--------------------------------------------------------------------------WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { gpv_simulation_main = simulation_main; Application->Initialize(); Application->CreateForm(__classid(TvfMain), &vfMain); Application->CreateForm(__classid(TvfLed7Seg), &vfLed7Seg); Application->CreateForm(__classid(TvfSwBox8), &vfSwBox8); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try - 21 - 第 1 章 導入 NORTi Simulator User's Guide { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0; } //--------------------------------------------------------------------------- 実機依存ヘッダーファイルインクルードの無効化 実機に依存するヘッダファイルをインクルードしている部分を、以下のように NORIiSIM マクロを使用し て無効化します。NORTiSIM マクロは NORTi Simulator 版 kernel.h に定義されています。 ファイル名:net7615.c #if !defined(NORTiSIM) #if defined(MS7709A) #include "nos7709a.h" #include "sh7709a.h" #elif defined(MS7709) #include "nos7709.h" #include "sh7709.h" #elif defined(MiNET7042) #include "net7042.h" #elif defined(MS7750) #include "nos7750.h" #include "sh7750.h" #elif defined(MS7615) || defined(SH7615EV) #include "nos7615.h" #include "sh7615.h" #endif #endif /* #if !defined(NORTiSIM) */ RAM DISK のメモリ領域変更 ターゲットボードでは特定アドレスのメモリ領域に割り当てている RAM DISK 領域を、以下のようにグ ローバル変数に割り当てます。 ファイル名:net7615.c - 22 - 第 1 章 導入 NORTi Simulator User's Guide #if defined(NORTiSIM) unsigned long RamDiskBuf[0x80000/sizeof(long)]; #endif : TASK MainTask(void) { ER ercd; INT i; : /* ファイルシステムと RAM ディスクの初期化 */ ercd = file_ini(file, NFILE, 0, 0); if (ercd != E_OK) goto END; #if (defined(MS7709A) || defined(MS7709) || defined(MS7750)) /* (注) EDO-DRAM の後半 1MB (AC100000~AC1FFFFF) を使用します. */ /* この領域に変数やスタックを割り当てないよう注意してください. */ ercd = disk_ini(disk, "A:", ramdisk, 0xac100000, 0x100000); if (ercd != E_OK) goto END; : #elif defined(NORTiSIM) ercd = disk_ini(disk, (char *)"A:", ramdisk, (UW)RamDiskBuf, sizeof(RamDiskBuf)); if (ercd != E_OK) goto END; #endif : コンフィグレーションの変更 NORTi Simulator 版ネットワークでは製品版ネットワークより1つ多くセマフォを使用します。この為、 カーネル・TCP/IP コンフィグレーションファイルにおいてセマフォ ID の上限値を1つ増やします。 ファイル名:nonecfg.c /***************************************************************************** * カーネルコンフィグレーション * ******************************************************************************/ - 23 - 第 1 章 導入 NORTi Simulator User's Guide #define TSKID_MAX 11+TCP_TSKID_CNT /* タスク ID 上限 */ #if defined(NORTiSIM) #define SEMID_MAX 2+TCP_SEMID_CNT /* セマフォ ID 上限 */ #else #define SEMID_MAX 1+TCP_SEMID_CNT /* セマフォ ID 上限 */ #endif #define FLGID_MAX 1 /* イベントフラグ ID 上限 */ #define MBXID_MAX 1+TCP_MBXID_CNT #define MBFID_MAX 4 /* メッセージバッファ ID 上限 */ #define PORID_MAX 1 /* ランデブ用ポート ID 上限 */ #define MPLID_MAX 1 /* 可変長メモリプール ID 上限 */ #define MPFID_MAX 1+TCP_MPFID_CNT #define CYCNO_MAX 1 /* 周期起動ハンドラ番号上限 */ #define ALMNO_MAX 1 /* アラームハンドラ番号上限 */ #define SYSMSZ 2048 /* システムメモリサイズ */ #define ISTKSZ 512 /* 割り込みハンドラのスタックサイズ */ #define KNL_LEVEL 14 /* カーネルの割り込みレベル */ /* メイルボックス ID 上限 */ /* 固定長メモリプール ID 上限 */ #include "nocfg4.h" その他の処理 ここでは NORTi Simulator の 7 セグメント LED に 1 秒間隔で 16 進数を表示する処理の例を紹介しま す。 ファイル名:net7615.c TASK MainTask(void) { ER ercd; INT i; : END: #if defined(NORTiSIM) if (ercd == E_OK) { for (i = 0;;) { tslp_tsk(1000/MSEC); put_7seg((i++) & 0xf); } } else { - 24 - 第 1 章 導入 NORTi Simulator User's Guide put_7seg( 0xe ); /* error */ for (;;) slp_tsk(); } #else for (;;) slp_tsk(); #endif} - 25 - 第 1 章 導入 NORTi Simulator User's Guide メイクと実行 ここまでの作業でサンプルアプリケーションをメイクする為の準備は全て終わりました。 [プロジェクト]メニューの[test をメイク]をクリックし、メイクを実行します。 メイクが正常に終了したことを[コンパイル]ダイアログで確認します。 - 26 - 第 1 章 導入 NORTi Simulator User's Guide [実行]メニューの[実行]をクリックします。NORTi Simulator が起動し、コントロールパネル、7 セグメント LED、スイッチボックスが表示されます。 コントロールパネルの LAN ポート選択は初期値で[LAN Port - 未使用]となっています。使用している パソコンの LAN カードを選択します。 - 27 - 第 1 章 導入 NORTi Simulator User's Guide コントロールパネルのスタート・ストップボタンをクリックします。タスクステートウォッチャが起動し、サンプ ルアプリケーションが開始します。 - 28 - 第 1 章 導入 NORTi Simulator User's Guide 1.9 Microsoft Visual C++ 6.0 でご使用の場合 ここでは NORTi 標準添付のターゲットボード用サンプルアプリケーションを、 Visual C++ 6.0 を使用し て NORTi Simulator 上で動作させる迄の手順を説明します。 (参考例の手順は弊社評価ボード SH7615 EVA BOD+のサンプルソフトを例として行います) Visual C++ 6.0 のインストール Visual C++ 6.0 日本語版 Professional Edition または Enterprise Edition をインストールします。 Visual C++ 6.0 インストール後、Visual C++ 6.0 Service Pack 5 を適用します。 Visual Studio 6.0 Service Pack 5 は下記サイトより入手可能です。 http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/VS6SP.asp - 29 - 第 1 章 導入 NORTi Simulator User's Guide プロジェクトファイルのコピー 新規に作成する Visual C++ 6.0 プロジェクト用フォルダを作成します。この例では、以下のバスにフォル ダ work と vc60 を作成します。 C:\NORTiSIM\smp\sim\work C:\NORTiSIM\smp\sim\work\vc60 以下のファイルを作成したプロジェクトフォルダにコピーします。 ファイル名 説明 コピー元 フォルダ コピー先 フォルダ net7615.c ネットワークサンプルアプリケーション ※1 ※4 nonecfg.c TCP/IP・カーネルコンフィグレーション ※1 ※4 nonedrvr.c LANコントローラードライバ ※2 ※4 nonethw.c LANコントローラー割込み関数 ※2 ※4 nossim.c シリアル入出力ドライバ ※2 ※4 nortisim.cpp GUIメイン関数 ※3 ※5 nosimapi.res GUIリソース ※3 ※5 ※1 C:\NORTi\SMP\SH\MS7615 ※2 C:\NORTiSIM\smp\sim\netdemo ※3 C:\NORTiSIM\smp\sim\netdemo\vc60 ※4 C:\NORTiSIM\smp\sim\work ※5 C:\NORTiSIM\smp\sim\work\vc60 - 30 - 第 1 章 導入 NORTi Simulator User's Guide 新規プロジェクトの準備 Visual C++ 6.0 のプロジェクトを以下の手順で新規作成します。 Visual C++ 6.0 を起動し、[ファイル]メニューの[新規作成]をクリックします。[新規作成]ダイアログが表 示されます。[プロジェクト]タブを選択します。 - 31 - 第 1 章 導入 NORTi Simulator User's Guide 作成するプロジェクトの種類は[Win32 Application]を選択します。[プロジェクト名]には作成するプロ ジェクト名を入力します。ここでは test と入力します。[位置]にはプロジェクトファイルを作成するディレク トリを指定します。この例では、C:\NORTISIM\SMP\SIM\WORK\vc60 を入力します。[プラットフォー ム]では[Win32]にチェックがついていることを確認します。以上を設定後、[OK]ボタンをクリックします。 [Win32 Application – ステップ 1/1]ダイアログが表示されます。 - 32 - 第 1 章 導入 NORTi Simulator User's Guide [空のプロジェクト]を選択し、[終了]ボタンをクリックします。 [新規プロジェクト情報]ダイアログが表示されます。[OK]ボタンをクリックします。 以上の操作で新規プロジェクトファイルが作成されました。 - 33 - 第 1 章 導入 NORTi Simulator User's Guide プロジェクトへファイルを追加 作成したプロジェクトにソースコードファイル、リソースファイル、ライブラリファイルを追加します。 Visual C++ 6.0 の[ワークスペース]ウインドウで[FileView]タブを選択し、[test ファイル] プロジェクトを選 択後、右クリックして表示されるポップアップメニューから[ファイルをプロジェクトに追加]を選択します。 - 34 - 第 1 章 導入 NORTi Simulator User's Guide [プロジェクトへファイルを追加]ダイアログが表示されます。[ファイルの種類]を[すべてのファイル (*.*)]に設定します。C:\NORTiSIM\smp\sim\work\vc60 \ nortisim.cpp を選択し、[OK]ボタンをクリッ クします。 [ワークスペース]ウインドウの[FileView]に追加したファイルが表示されることを確認します。 - 35 - 第 1 章 導入 NORTi Simulator User's Guide 同様に以下のファイルを全てプロジェクトに追加します。 ファイル名 説明 フォル ダ nortisim.cpp GUIメイン関数 ※1 nonecfg.c GUIリソース ※1 net7615.c ネットワークサンプルアプリケーション ※2 nonecfg.c カーネル・TCP/IPコンフィグレーション ※2 nonedrvr.c LANコントローラードライバ ※2 nonethw.c LANコントローラー割込み関数 ※2 nossim.c シリアル入出力ドライバ ※2 noncons.c telnetデーモン用コンソール入出力関数 ※3 nondhcp.c DHCPクライアント ※3 nondump.c パケットダンプ ※3 nonechc.c Echoクライアント ※3 nonecho.c Echoサーバ ※3 nonedns.c DNS ※3 nonfile.c 簡易ファイルシステム ※3 nonftpc.c FTPクライアント ※3 nonftpd.c FTPサーバ ※3 nonping.c pingコマンド ※3 nonramd.c 簡易ファイルシステム RAMディスクドライバ ※3 nonshel.c telnet COMMAND SHELL ※3 nontelc.c telnetクライアント ※3 nonteld.c telnetデーモン ※3 nontftp.c TFTP ※3 nonelan.c LANドライバ上位処理関数 ※4 nosio.c シリアル入出力関数 ※4 engine4d.lib シミュレータエンジン・カーネルライブラリ ※5 n4nsim.lib シミュレータエンジン・ネットワークライブラリ ※5 nosimapi.lib シミュレータAPI用ライブラリ ※5 ※1 C:\NORTiSIM\smp\sim\work\vc60 ※2 C:\NORTiSIM\smp\sim\work ※3 C:\NORTiSIM\netsmp\src ※4 C:\NORTiSIM\src ※5 C:\NORTiSIM\lib\vc60 - 36 - 第 1 章 導入 NORTi Simulator User's Guide プロジェクトの設定 アプリケーションをビルドするために必要なプロジェクトの設定を行います。大部分のプロジェクト設定 値は初期値のまま変更する必要はありません。ここでは変更が必要な設定値のみ説明します。 [プロジェクト]メニューの[設定]をクリックします。[プロジェクトの設定]ダイアログが表示されます。左側の ツリー表示でプロジェクト[test]を選択し、右側の[一般]タブをクリックします。[Microsoft Foundation Class]で[共有 DLL で MFC を使用]を選択します。 - 37 - 第 1 章 導入 NORTi Simulator User's Guide [C/C++]タブをクリックします。[カテゴリ]で[プリコンパイル済みヘッダー]を選択し、[プリコンパイル済み ヘッダーを使用しない]をクリックします。 [カテゴリ]で[プリプロセッサ]を選択し、[プリプロセッサの定義]に以下のマクロを追加します。 LITTLE_ENDIAN DHCP による IP アドレス自動取得機能を使用する場合は以下のマクロを追加します。 DHCP - 38 - 第 1 章 導入 NORTi Simulator User's Guide [インクルードファイルのパス]に以下の2つのパスをカンマで区切って設定します。 $(NORTiSIM)\inc $(NORTiSIM)\netsmp\inc ※NORTiSIM はインストール時に設定される環境変数です。NORTi Simulator をインストールしたディレ クトリ(デフォルトでは C:\NORTiSIM)を意味します。 以上の操作でプロジェクトの設定は完了しました。 - 39 - 第 1 章 導入 NORTi Simulator User's Guide ソースコードの変更 ターゲットボードサンプルアプリケーションを NORTi Simulator 上で動作させる為には、実機に依存する ソースコード部分を変更する必要があります。 ここではネットワークサンプルアプリケーションを例に、変更方法を説明します。 実機依存ヘッダーファイルインクルードの無効化 実機に依存するヘッダファイルをインクルードしている部分を、以下のように NORIiSIM マクロを使用し て無効化します。 NORTiSIM マクロは NORTi Simulator 版 kernel.h に定義されています。 ファイル名:net7615.c #if !defined(NORTiSIM) #if defined(MS7709A) #include "nos7709a.h" #include "sh7709a.h" #elif defined(MS7709) #include "nos7709.h" #include "sh7709.h" #elif defined(MiNET7042) #include "net7042.h" #elif defined(MS7750) #include "nos7750.h" #include "sh7750.h" #elif defined(MS7615) || defined(SH7615EV) #include "nos7615.h" #include "sh7615.h" #endif #endif /* #if !defined(NORTiSIM) */ RAM DISK のメモリ領域変更 ターゲットボードでは特定アドレスのメモリ領域に割り当てている RAM DISK 領域を、以下のようにグ ローバル変数に割り当てます。 ファイル名:net7615.c #if defined(NORTiSIM) unsigned long RamDiskBuf[0x80000/sizeof(long)]; #endif : TASK MainTask(void) { - 40 - 第 1 章 導入 NORTi Simulator User's Guide ER ercd; INT i; : /* ファイルシステムと RAM ディスクの初期化 */ ercd = file_ini(file, NFILE, 0, 0); if (ercd != E_OK) goto END; #if (defined(MS7709A) || defined(MS7709) || defined(MS7750)) /* (注) EDO-DRAM の後半 1MB (AC100000~AC1FFFFF) を使用します. */ /* この領域に変数やスタックを割り当てないよう注意してください. */ ercd = disk_ini(disk, "A:", ramdisk, 0xac100000, 0x100000); if (ercd != E_OK) goto END; : #elif defined(NORTiSIM) ercd = disk_ini(disk, (char *)"A:", ramdisk, (UW)RamDiskBuf, sizeof(RamDiskBuf)); if (ercd != E_OK) goto END; #endif : コンフィグレーションの変更 NORTi Simulator 版ネットワークでは製品版ネットワークより1つ多くセマフォを使用します。この為、 カーネル・TCP/IP コンフィグレーションファイルにおいてセマフォ ID の上限値を1つ増やします。 ファイル名:nonecfg.c /***************************************************************************** * カーネルコンフィグレーション * ******************************************************************************/ #define TSKID_MAX 11+TCP_TSKID_CNT /* タスク ID 上限 */ #if defined(NORTiSIM) #define SEMID_MAX 2+TCP_SEMID_CNT /* セマフォ ID 上限 */ #else #define SEMID_MAX 1+TCP_SEMID_CNT /* セマフォ ID 上限 */ #endif - 41 - 第 1 章 導入 NORTi Simulator User's Guide #define FLGID_MAX 1 /* イベントフラグ ID 上限 */ #define MBXID_MAX 1+TCP_MBXID_CNT #define MBFID_MAX 4 /* メッセージバッファ ID 上限 */ #define PORID_MAX 1 /* ランデブ用ポート ID 上限 */ #define MPLID_MAX 1 /* 可変長メモリプール ID 上限 */ #define MPFID_MAX 1+TCP_MPFID_CNT #define CYCNO_MAX 1 /* 周期起動ハンドラ番号上限 */ #define ALMNO_MAX 1 /* アラームハンドラ番号上限 */ #define SYSMSZ 2048 /* システムメモリサイズ */ #define ISTKSZ 512 /* 割り込みハンドラのスタックサイズ */ #define KNL_LEVEL 14 /* カーネルの割り込みレベル */ /* メイルボックス ID 上限 */ /* 固定長メモリプール ID 上限 */ #include "nocfg4.h" その他の処理 ここでは NORTi Simulator の 7 セグメント LED ウインドウに数値を表示する処理の例を紹介します。 ファイル名:net7615.c TASK MainTask(void) { ER ercd; INT i; : END: #if defined(NORTiSIM) if (ercd == E_OK) { for (i = 0;;) { tslp_tsk(1000/MSEC); put_7seg((i++) & 0xf); } } else { put_7seg( 0xe ); /* error */ for (;;) slp_tsk(); } #else for (;;) slp_tsk(); #endif} - 42 - 第 1 章 導入 NORTi Simulator User's Guide ビルドと実行 ここまでの作業でサンプルアプリケーションをビルドする準備は全て終わりました。 [ビルド]メニューの[ビルド]をクリックしビルドを実行します。 ビルドが正常に終了したことを[アウトプット]ウインドウで確認します。 - 43 - 第 1 章 導入 NORTi Simulator User's Guide ビルドが正常に終了したら、 [ビルド]メニューの[デバッグの開始] → [実行]をクリックします。NORTi Simulator が起動し、コントロールパネル、7 セグメント LED、スイッチボックスが表示されます。 コントロールパネルの LAN ポート選択は初期値で[LAN Port - 未使用]となっています。使用している パソコンの LAN ポートを選択します。 - 44 - 第 1 章 導入 NORTi Simulator User's Guide コントロールパネルのスタート・ストップボタンをクリックします。タスクステートウォッチャが起動し、サンプ ルアプリケーションが開始します。 - 45 - 第 2 章 シミュレータの操作 NORTi Simulator User's Guide 第 2 章 シミュレータの操作 2.1 概要 NORTi Simulator を使ったアプリケーションを起動すると、下図のコントロールパネルが表示されます。 2.2 スタート・ストップボタン このボタンをクリックすることにより、アプリケーションが起動します。再度クリックするとアプリケーションが 停止します。 2.2 タイマ割込み周期調整 このスライダを調整することにより、シミュレーションしているタイマ割込みの周期を変更できます。スライ ダの右側に表示されているのは、現在の割込み周期[msec]です。 2.3LAN ポートの選択 TCP/IP プロトコルスタックのシミュレーションを行う場合に使用するパソコンの LAN ポートを、ここで選択 できます。 - 46 - 第 2 章 シミュレータの操作 NORTi Simulator User's Guide 2.4 タスクステートウォッチャ タスクステートウォッチャでは以下の情報を表示することが可能です。 これらの情報は、ターゲットプログラムが実行・停止すると自動的に更新されます。 μITRON3.0仕様,μITRON4.0仕様共通 μITRON4.0仕様のみ • タスク • ミューテックス • セマフォ • データキュー • イベントフラグ • オーバーランハンドラ • メイルボックス • タスク例外ルーチン • メッセージバッファ • 割り込みサービスルーチン • 固定長メモリプール • サービスコールルーチン • 可変長メモリプール • ランデブ用ポート • アラームハンドラ • 周期起動ハンドラ • レディキュー 2.5 起動・終了 NORTi Simulator コントロールパネルによりシミュレーションをスタートすると、タスクステートウオッチャー ダイアログが、表示されます。 NORTi Simulator コントロールパネルによりシミュレーションを終了しても、タスクステートウォッチャは、 終了しません。デバック終了時にタスクステートウォッチャを閉じてください。 - 47 - 第 2 章 シミュレータの操作 NORTi Simulator User's Guide 2.6 更新 プログラムが停止中であれば、[更新]ボタンを押下することによりステータス情報の表示を更新すること ができます。 リスト上に表示されるテータス情報の更新はタスクが切り替わった時に行われます。 シミュレーション実行中は、『更新』ボタンが使用できませんのでデバッグ中に更新させる場合にはタブ を切り替えれば更新されます。 2.7 グラフ表示 本機能により、システムコールの実行箇所をウィンドウ上で色を付けた表示や、システムコールカバレッ ジ情報をファイルに出力することが可能です。ただし、システムコールカバレッジ機能を有効にした場 合、シミュレーションの実行とタスク遷移のグラフ表示が遅くなります。 2.8 ヘルプ ヘルプが表示されます。 - 48 - 第 2 章 シミュレータの操作 NORTi Simulator User's Guide 2.9 タスクタブ タスクID タスクの ID 番号です。 タスク名 タスク生成時に指定された関数の名前です。タスクが生成されていない場 合は表示されません。 タスクの状態が次の略号で表示されます。未登録(タスクが未生成、または ID範囲外)の場合は空欄となります。 タスク状態 優先度 • RUN ……… RUN 状態 • RDY ……… READY 状態 • WAI ……… WAIT 状態 • SUS ……… SUSPEND 状態 • WAS ……… WAIT-SUSPEND 状態 タスクの現在の優先度が 10 進数で表示されます。 未登録とDORMAUNT状態のタスクでは空欄となります。 起床要求カウント 起床要求キューイング数が 10 進数で表示されます。 未登録と DORMANT 状態のタスクでは空欄となります。 強制待ち要求カウント 強制待ち要求ネスト数が 10 進数で表示されます。 未登録と DORMANT 状態のタスクでは空欄となります。 待ち要因 タスクが WAIT 状態の場合、何を待っているかが次の略号で表示されま す。 タスクが WAIT 状態でない場合は空欄となります。 • SLP ……… 起床待ち • TSK ……… 時間待ち • POR ……… ランデブ終了待ち • FLG ……… イベントフラグ成立待ち • SMB ……… メッセージバッファでの送信待ち • CAL ……… ランデブ呼び出し待ち • ACP ……… ランデブ受け付け待ち • SEM ……… セマフォ獲得待ち • MBX ……… メイルボックスメッセージ受信待ち • MBF ……… メッセージバッファでの受信待ち • MPL ……… 可変長メモリブロック獲得待ち • MPF ……… 固定長メモリブロック獲得待ち • SDT ……… データキュー送信待ち • RDT ……… データキュー受信待ち • MTX ……… ミューテックス資源獲得待ち - 49 - 第 2 章 シミュレータの操作 NORTi Simulator User's Guide 2.10 セマフォタブ セマフォID セマフォカウント セマフォのID番号です。 待ちタスク このセマフォを待っている先頭タスクの名前と ID 番号が表示されま 現在のセマフォカウント値が 10 進数で表示されます。 す。 ID 番号は 10 進数で表示されます。 セマフォ ID 範囲外や待ちタスクがない場合は空欄となります。 複数の待ちタスクがある場合はその並びが表示されます。 セマフォカウントが 1 以上の場合、待ちタスクはあり得ません。 2.11 イベントフラグタブ イベントフラグID フラグパターン イベントフラグのID番号です。 現在のイベントフラグ値が 16 進数で表示されます。 イベントフラグ ID 範囲外の場合は空欄となります。 待ちタスク このイベントフラグの成立を待っている先頭タスクの名前と ID 番号 が表示されます。 ID 番号は 10 進数で表示されます。 イベントフラグ ID 範囲外や待ちタスクがない場合は空欄となります。 複数の待ちタスクがある場合はその並びが表示されます。 2.12 メイルボックスタブ メイルボックスID メッセージアドレス メイルボックスのID番号です。 メイルボックスの先頭にあるメッセージのアドレスが 16 進数で表示さ れます。 メイルボックス ID 範囲外やメッセージがない場合は空欄となります。 待ちタスク このメイルボックスでメッセージ受信を待っている先頭タスクの名前 と ID 番号が表示されます。ID 番号は 10 進数で表示されます。 メイルボックス ID 範囲外や待ちタスクがない場合は空欄となります。 複数の待ちタスクがある場合はその並びが表示されます。 - 50 - 第 2 章 シミュレータの操作 NORTi Simulator User's Guide 2.13 メッセージバッファタブ メッセージバッファID メッセージ メッセージバッファのID番号です。 メッセージバッファの先頭にあるメッセージの内容が先頭から最大 4 バイト 16 進数で表示されます。 メッセージバッファ ID 範囲外やメッセージがない場合は空欄となりま す。 バッファの先頭に入っているメッセージの長さを表わすヘッダのサイ ズがデフォルトの値 4 バイトと異なる場合、正しくメッセージデータを 表示することができません。この場合にはオプションダイアログで正 しいヘッダサイズを設定してください。 送信待ちタスク 送信待ちタスクの名前と ID 番号が表示されます。ID 番号は 10 進数 で表示されます。 送信待ちタスクがない場合は空欄となります。 複数の送信待ちタスクがある場合はその並びが表示されます。 受信待ちタスク 受信待ちタスクの名前と ID 番号が表示されます。ID 番号は 10 進数 で表示されます。 受信待ちタスクがない場合は空欄となります。 複数の送信待ちタスクがある場合はその並びが表示されます。 2.14 固定長メモリプールタブ メモリプールID 空きメモリブロック数 メモリプールのID番号です。 メモリプールにある空きメモリブロックの個数が 10 進数で表示されま す。 送信待ちタスク 送信待ちタスクの名前と ID 番号が表示されます。ID 番号は 10 進数 で表示されます。 送信待ちタスクがない場合は空欄となります。 複数の送信待ちタスクがある場合はその並びが表示されます。 2.15 可変長メモリプールタブ メモリプールID 総空きメモリサイズ メモリプールのID番号です。 最大連続空きメモリサイズ メモリプールにある最大の連続空きメモリサイズが 10 進数で表示さ メモリプールにある空きメモリの総サイズが 10 進数で表示されます。 れます。 待ちタスク このメモリプールでメモリ獲得を待っている先頭タスクの名前と ID 番 号が表示されます。ID 番号は 10 進数で表示されます。 メモリプール ID 範囲外や待ちタスクがない場合は空欄となります。 複数の待ちタスクがある場合はその並びが表示されます。 - 51 - 第 2 章 シミュレータの操作 NORTi Simulator User's Guide 2.16 ランデブ用ポートタブ ランデブ用ポートID 呼び出し待ちタスク ランデブ用ポートのID番号です。 待ちタスク 呼び出し側の待ちタスクの名前と ID 番号が表示されます。ID 番号 現在のセマフォカウント値が 10 進数で表示されます。 は 10 進数で表示されます。 呼び出し待ちタスクがない場合は空欄となります。 複数の呼び出し待ちタスクがある場合はその並びが表示されます。 受け付け待ちタスク 受け付け側の待ちタスクの名前と ID 番号が表示されます。ID 番号 は 10 進数で表示されます。 受け付け待ちタスクがない場合は空欄となります。 複数の受け付け待ちタスクがある場合はその並びが表示されます。 2.17 アラームハンドラタブ ハンドラ番号 起動時間 アラームハンドラの番号です。 ハンドラ起動時間(シミュレーション上での時間)が、上位:下位の形 式の 16 進数で表示されます。 ハンドラ番号範囲外やアラームハンドラが定義されていない場合は 空欄となります。 2.18 周期起動ハンドラタブ ハンドラ番号 活性状態 周期起動ハンドラの番号です。 周期起動ハンドラの活性状態が「ON」または「OFF」で表示されま す。 ハンドラ番号範囲外や周期起動ハンドラが定義されていない場合 は空欄となります。 起動時間 次の起動時間(シミュレーション上での時間)が、上位:下位の形式 の 16 進数で表示されます。 ハンドラ番号範囲外や周期起動ハンドラが定義されていない場合 は空欄となります。 2.19 レディキュータブ 優先度 レディキューの各優先度です。 優先度1はレディーキューテーブルのトップ(RDQ[0])を指します。 実行待ちタスク この優先度で実行待っているタスクの名前と ID 番号が表示されま す。ID 番号は 10 進数で表示されます。 優先度範囲外や実行待ちタスクがない場合は空欄となります。 複数の実行待ちタスクがある場合はその並びが表示されます。 - 52 - 第 2 章 シミュレータの操作 NORTi Simulator User's Guide 2.20 ミューテックスタブ ミューテックスID ロック待ちタスク ミューテックスID番号が表示されます。 ロック待ちのタスクの名前と ID 番号が表示されます。ID 番号は 10 進数で表示されます。 優先度範囲外や実行待ちタスクがない場合は空欄となります。 複数の実行待ちタスクがある場合はその並びが表示されます。 ロックしているタスク ロックしているタスクの名前と ID 番号が表示されます。ID 番号は 10 進数で表示されます。 優先度範囲外や実行待ちタスクがない場合は空欄となります。 複数の実行待ちタスクがある場合はその並びが表示されます。 2.21 データキュータブ データキューID データ数 データキューのID番号が表示されます。 データ数が表示されます。 受信待ちタスク 受信待ちタスクの名前と ID 番号が表示されます。ID 番号は 10 進数 で表示されます。 優先度範囲外や実行待ちタスクがない場合は空欄となります。 複数の実行待ちタスクがある場合はその並びが表示されます。 送信待ちタスク 送信待ちタスクの名前と ID 番号が表示されます。ID 番号は 10 進数 で表示されます。 優先度範囲外や実行待ちタスクがない場合は空欄となります。 複数の実行待ちタスクがある場合はその並びが表示されます。 2.22 オーバーランハンドラタブ タスクID 活性状態 オーバーランハンドラが設定されているタスクIDが表示されます。 オーバーランハンドラの状態が表示されます。 動作中 ・・・ オーバーランハンドラ動作中 停止中 ・・・ オーバーランハンドラ起動中 残り時間 オーバーランハンドラ起動までの残り時間が表示されます。 2.23 タスク例外ルーチンタブ タスクID タスク例外ルーチンが設定されているタスク ID が表示されます。 ステータス ステータスが表示されます。 動作中 ・・・ 例外ルーチン動作中 停止中 ・・・ 例外ルーチン起動中 例外要因 例外要因が表示されます。 - 53 - 第 2 章 シミュレータの操作 NORTi Simulator User's Guide 2.24 割り込みサービスルーチンタブ 割り込みサービスルーチンID 割り込み番号 割り込みサービスルーチンID番号が表示されます。 関数(ルーチン) 関数のアドレスが表示されます。 設定されている割り込み番号が表示されます。 2.25 サービスコールルーチンタブ サービスコールルーチンID パラメータ数 サービスコールルーチンID番号が表示されます。 サービスコールルーチンのパラメータ数が表示されます。 関数(ルーチン) サービスコール関数のアドレスが表示されます。 2.26 機能 [機能]ボタンで各設定項目が表示されます。 - 54 - 第 2 章 シミュレータの操作 NORTi Simulator User's Guide オプション タスクステートウォッチャの補助的な設定をおこないます。オプションダイアログは、[機能]メニューの [オプション…]から起動することができます。 タスクステートウォッチャを常 に手前に表示します。 タスクステートウォッチャ起動 時にグラフダイアログを表示し ます。 メッセージバッファのヘッダサ イズ システムコールカバレッジを有 効にします。 この項目を設定するとタスクステートウォッチャのウィンドウがほ かのウィンドウに覆われることなく常に最上位に表示されるよう になります。 メッセージバッファの先頭に設定されるメッセージの長さが何バ イトで設定されているかを指定します。 システムコールカバレッジ機能を有効にします。 ただし、システムコールカバレッジ機能を有効にした場合、若干 パフォーマンスが低下します。 ステータスの自動更新 [ステータスの自動更新]をクリックするとチェックマークが表示されステータスが自動更新されます。再 度クリックするとチェックマークが消え自動更新が停止します。 ステータスの自動更新は[機能]メニューで選択できます。 - 55 - 第 2 章 シミュレータの操作 NORTi Simulator User's Guide タスクプロファイル タスクの実行時間・実行回数をタスクごとにプロファイリングし、ダイアログにグラフで表示します。タスク プロファイルダイアログはタスクステートウォッチャの[機能]メニューから[タスクプロファイル]を選択して 起動することができます。 時間 回数 タスク実行時間のプロファイルを表示します。 色 各タスクのグラフ表示色を設定します。 タスク実行回数のプロファイルを表示します。 プルダウンメニューでタスクを選択し色選択ボタンで設定しま す。 更新 最新データで再描画します。 終了 タスクプロファイルを終了します。 グラフエリア タスクのプロファイル情報を表示します。 タスク名リスト タスク名の一覧をリスト表示します。 タスク名を選択すると選択されたタスクのグラフがグラフエリア内 に表示されます。 全タスクがグラフエリア内に表示されている場合には機能しま せん。 ダイヤル 各タスクの棒グラフ幅を調節します。 ログ出力 タスクプロファイルのデータをログファイルに出力します。(*.txt, *.csv, *.log) - 56 - 第 2 章 シミュレータの操作 NORTi Simulator User's Guide ログ出力例 (*.txt) < Task Profile > Date : Mon Sep 17 09:40:56.740 2001 Total Time : 960 Id Task Name Average(%) Time ---------------------------------------------1 NaviMain 82.708333 794 4 MapChange 6.041667 58 7 PowerCheck 2.812500 27 10 PosOutOfRange 2.291667 22 9 TGetGpsPos 1.562500 15 2 VICS 1.562500 15 3 UpdatePos 1.458333 14 6 NaviPeriheral 8 NaviInitIRQ 0.833333 0.520833 8 5 ※ ディスパッチの状態によってはタスク実行時間(シミュレータ内のカウンタ)が0の場合があります。こ の場合、タスクプロファイルではデータとして記録されませんので内部的に1が設定されます。よって、 タスクステートウォッチャのタスク遷移グラフ上との時間に誤差が生じる場合がありますのでご了承くださ い。 ※ ダイアログを表示させた状態で実行を行いますとかなりパフォーマンスが落ちますのでご注意くだ さい。 ※ システムの途中で一旦削除されたタスクのプロファイルデータは保存されていますが、次に同じ ID で別タスクが起動した場合、以前のプロファイルデータに加算されます。削除されたタスクの名前は表 示されません。 - 57 - 第 2 章 シミュレータの操作 NORTi Simulator User's Guide オブジェクト一覧 オブジェクトが一覧表示されます。選択した情報がタスクステータスダイアログに表示されます。(タスク ステータスダイアログと同じ動きをします。) システムコールカバレッジ 本機能により、システムコールの実行箇所をウィンドウ上で色を付けた表示や、システムコールカバレッ ジ情報をファイルに出力することが可能です。ただし、システムコールカバレッジ機能を有効にした場 合、シミュレーションの実行とタスク遷移のグラフ表示が遅くなります。 システムコールカバレッジ機能を有効にするにはオプションダイアログで『システムコールカバレッジを 有効にします』を選択してください。システムコールカバレッジダイアログはタスクステートウォッチャの機 能メニュー[システムコールカバレッジ]で起動することができます。 - 58 - 第 3 章 プログラミング上の注意事項 NORTi Simulator User's Guide 第 3 章 プログラミング上の注意事項 3.1Windows API による待ち タスクの待ちは ITRON システムコールのみによって行ってください。 getc, WaitForSingleObject 等による待ちを行うと、タスクのディスパッチは正常に行われません。 3.2 二重起動 NORTi Simulator の二重起動はできす、エラーになります。 3.3Active X, VB 等による GUI NORTi Simulator 内でウィンドウやボタン等の GUI を Active X, VB などで作成した場合、正常に動作 しないことがありますので、これらは使用しないでください。 3.4 エンディアン NORTi Simulator はペンティアムのネイティブコードで実行されるため、リトルエンディアンとなります。 実際のターゲットがビッグエンディアンの場合はコーディングに注意してください。 3.5 型のサイズ NORTi Simulator はペンティアムのネイティブコードで実行されるため、char は 1 バイト、short は 2 バ イト、int および long は 4 バイトとなります。実際のターゲットとサイズが異なる場合は注意してください。 3.6 メモリサイズ NORTi Simulator 上ではふんだんにメモリが使用できますので、実際のターゲット上でのメモリ不足に 注意してください。 3.7 タスクスタックサイズ NORTi Simulator 上ではタスクはスレッドによって実現されており、スタックもスレッドのものがそのまま使 用されます。タスク生成時のスタックサイズパラメータはタスク情報内に保持されますが、使用されませ ん。 3.8 カーネルタイマ カーネルタイマのソースとして Windows のタイマを使用しており、その精度は Windows に依存していま す。タイマについてはだいたいの目安と考えてください。 3.9 メモリの直接参照 ビットフィールドやアドレスの直接指定によるメモリ参照を行うと Windows のページ違反が起きます。 - 59 - 第 3 章 プログラミング上の注意事項 NORTi Simulator User's Guide 3.10 メモリリーク デバッガ終了時に CwinThread、threadcore の若干のメモリリークが発生する場合がありますが、問題は ありません。 3.11 ディスパッチの誤差 NORTi Simulator 上ではタスクはスレッドによって実現されており、スレッドのディスパッチタイミングは Windows の負荷等によって影響を受けるため、タスクステートウォッチャのグラフ上でも誤差が生じま す。 3.12 割込みハンドラ 割込みハンドラ実行中は割込み禁止状態となります。 3.13 タスクやハンドラ以外でのシステムコール 初期化時を除いて原則的に使用できません。 3.14 スレッド内ループ スレッドを作成して無限ループする場合、ループの最後に Sleep(0)を挿入してください。 3.15 名前つきハンドル CreateEvent、CreateMutex などでハンドルを作成する場合、プロセス ID 等を付加したマシン内でユ ニークな名前付ハンドルとすることを推奨します。 3.16 デバッグメッセージ デバッグの開始時点で次のようなメッセージが表示されることがありますが、問題ありません。 ‘***.DLL’をロードしました、合致するシンボル情報は見つかりませんでした。 - 60 - NORTi Simulator User's Guide お問い合わせ先 お問い合わせ先 株式会社ミスポ宛てのご質問は、電子メールにて承ります。 一般的なお問い合せ:[email protected] 技術サポートご依頼:[email protected] μITRON は Micro Industrial TRON の略称です。 TRON は、The Realtime Operating system Nucleus の略称です。 Windows および Microsoft Visual C++ 6.0 は、Microsoft Corporation の登録商標です。 Borland C++Builder 6 は Borland Software Corporation の登録商標です。 ペンティアム は Intel Corporation の登録商標です。 NORTi は、株式会社ミスポの登録商標です。 本書で使用するコンパイラ名、CPU 名、その他製品名は、各メーカーの商標です。 本書に記載されている内容は、予告無く変更されることがあります。 このプログラムは(有)レイヤー製 PacMon キャプチャエンジンを使用しています。 (デバイスドライバ V.3.07, サブプログラム V.1.25) - 61 -
© Copyright 2024 Paperzz