μ ITRON導入支援プログラム
2002-2024年 佐々木芳
はじめに μITRON仕様OSの動作を確認するためのWindows上のシミュレータです。シミュレーションの技法を考えることにも興味がありますが、それだけでなくWindows上でμITRON仕様OSを理解するための トレーニングツール(cmtoy)としてどのようなことができるかにも興味があり創めました。 μITRON上で動作するサンプルプログラムをcmtoy上で動作させタスク、割り込みハンドラの関連する動きを確認できます。また、Microsoft Visual Studio6.0、Borland C++などのDLLを作成する開発環境があればサンプルプログラムを変更して動作の違いを確認できます。このようにプログラムの動きを確認しながらOSの役割や機能を理解するツールとして考えています。 参考文献 [1] μITRON4.0仕様 Ver4.01.00 (社)トロン協会 ITRON部会 [2] TOPPERS/JSPカーネル 豊橋技術科学大学 [3] マイクロソフト MSDN ライブラリ 2001 年 10 月リリース 1 Cmtoyの概要 cmtoyは、Windowsアプリケーションであり以下のモジュールから構成されています。 cmtoy.exe - GUI(Windowsダイアログアプリケーション) cm.dll - C-Machine(ターゲットハードウェアをシミュレート) kpdll.dll - μITRONカーネルをシミュレート app.dll - μITRON上のアプリケーション ActiveXコントロール - ボタン、LED、A/Dコンバータなどのデバイスをシミュレート これらは、同一プロセス内で実行されるプログラムです。ユーザはμITRON上のアプリケーションをC言語で記述して、DLL形式の実行モジュールとして作成します。各モジュールの関係は下図のとおりです。(スクリプト部は将来DLLとしてGUIから分離する予定) 図 1-1 プログラム構成 C-Machineでは、組み込みCPUのスタータキット程度のハードウェア(CPU、デバイス)をシミュレートします。主な機能は以下のとおりです。今後追加していく予定です。 ・システムタイマ 周期的な割り込みを発生する (μITRONのシステムクロックとして使う) ・外部割込み 単発の割込みを発生する ・LED 8個程度のLEDのランプ ・2桁表示器 8セグメントLEDで1文字(数字)を表示可能 ・ボリューム A/Dコンバータを想定(8ビット〜16ビット) ・スイッチ ON/OFF切り替えスイッチを想定 ・押しボタン 押している間だけON,放すとOFFとなるボタンスイッチ ・シリアルポート RS232-Cをシミュレート(Windowsのハイパーターミナルと通信できる) ・メモリ/IO 物理アドレスに依存したメモリアドレス空間やIOアドレス空間をシミュレート これらを、GUIのダイアログ上にコントロールとして配置して、マウスで操作します。上記のハードウェアに加えて、デバッグ用に出力した文字列を表示するためのデバグ出力ウインドウもダイアログ内に持ちます。以下にcmtoyのダイアログイメージを示します。 (ActiveXコントロールを登録していないとこのウインドウは現れず、cmtoyは起動できません。登録方法は「2.1 インストール」にあります。) 図 1-2 cmtoyのGUIイメージ このダイアログ内の左側の「ハードウェア」の部分に配置されているコントロールがハードウェアをシミュレートするGUIとなります。それ以外の右側の部分はcmtoyを操作をするGUIです。 各ボタンの意味はマウスポインタをその上に持っていくとツールチップが表示されて簡単な説明が表示されます。
図 1-3 「ロード」ボタンのツールチップ μITRON仕様のカーネルであるkpdll.dllは、独自に実装しています。ただし、ヘッダファイルitron.h, kernel_cfg.h, kernel_id.hの部分は、TOPPERS/JSPカーネルのものを利用させてもらいました。TOPPERS/JSPカーネルは豊橋技術科学大学で開発したμITRON4.0仕様に準拠したリアルタイムカーネル(フリーソフトウェア)です。 2 実行方法 2.1 インストール まず、ActiveXコントロールを登録します。コマンドプロンプト(DOS窓)を管理者モードで開き、カレントディレクトリをcmtoy\binに変更し、install.batを実行すると登録できます。以下のようなログがコマンドプロンプトウィンドウに表示されます。 C:\MySample\cmtoy\bin>install C:\MySample\cmtoy\bin>regsvr32 -s push.ocx C:\MySample\cmtoy\bin>regsvr32 -s segled.ocx C:\MySample\cmtoy\bin>regsvr32 -s serial.ocx C:\MySample\cmtoy\bin> これらのActiveXコントロールの登録を解除したい場合は、付属のuninstall.batを実行してください。 次にcmtoy.exe, cm.dll, kpddl.dllを同じディレクトリに配置します。ダウンロード後解凍するとcmtoy\binになっています。 あとはcmtoy.exeを実行するだけです。ActiveXコントロールが登録されていなかったり、登録後フォルダ名を変えたり、フォルダを移動するとcmtoy.exeは起動しません(図1-2のウインドウは現われず警告音が鳴ります)ので、再度install.batを実行してください。 Windows VistaおよびWindows 7でのコマンドプロンプト Vista,Window
7でのコマンドプロンプトは管理者として開いてください。
Cここで、「管理者として実行(A)...」をクリックすると、コマンドプロンプトが開きます。タイトルバーに「管理者:コマンドプロンプト」と表示されることを確認してください。
cmtoy.exeを実行すると、図1-2のウインドウが現われます。 その段階でcm.dllとkpdll.dllはロードされています。その後以下の手順でアプリケーションプログラムをロードして実行します。 @「ロード」ボタンをクリックして、app.dllを指定します。 A「リセット」ボタンをクリックするとμITRONカーネルが実行を始めます。 「ロード」ボタンをクリックすると以下のダイアログボックスが表示されるので、アプリケーションのDLLを選択し「開く」をクリックします。ファイルの一覧にアプリケーションDLLが表示されないときは、「ファイルの場所」でフォルダを変更してください。
「リセット」ボタンをクリックするとカーネルが起動します。 カーネルが初期化を終了すると、アプリケーションプログラムのタスクが動き出します。
図 2-1 ターゲットプログラムが実行開始 ここで、「INT1」をクリックすると外部割込み 1が発生し、割り込みハンドラが起動します。
図 2-2 INT1、INT4をクリック ターゲットプログラム(この場合は、kpdll.dll)もGUIを持つことができます。「ターゲットGUI」をクリックするとkpdll.dllのGUI(モードレスダイアログボックス)を呼び出します。このGUIではタスク スイッチのトレース情報などのターゲットプログラムの持っている情報を表示します。
図 2-3 ターゲットGUIのタスクトレース情報
スクリプトを実行するには、「スクリプト」ボタンをクリックしてスクリプトファイルを指定すると実行を開始します。 以下にサンプルプログラム実行中のcmtoyのウインドウを示します。スクリプトの実行を強制的に終了させるには「強制終了」をクリックします。
図 2-4 サンプルプログラムをスクリプトで実行中 アプリケーションプログラムはC言語で記述します。これらのC言語のソースファイルにいくつかのファイルを追加してWindowsのDLL形式で実行モジュールを作成します。Visual Studio 6.0、Borland C++ 5.5.1などを使うと簡単にDLL形式の実行モジュールを作成できます。付属のサンプルアプリケーション(app.dllなど)はリリースバージョン共有ライブラリ形式 (MFCを使わないDLL形式)で作成しています。
以下はアプリケーションプログラムを作成するときのファイル構成例です。
4 考察 4.1 Visual Studio 6.0のデバッガ デバッグは、まずapp.dswをVisual Studio 6.0で開いて「アクティブな構成の設定」を「Win32 Debug」に変更して、デバッグバージョンでリビルドします。デバッグバージョンではDapp.dllというファイル名でサンプルアプリケーションが作られます。次に「ビルド」メニュの「デバグの開始」→「実行」をするとcmtoyが動き図1-2のウインドウが現われます。ここでアプリケーションタスク、割込みハンドラのソース ファイルを開きブレークポイントを設定することもできます。 もうひとつの方法は、デバッグバージョンのDapp.dllを作成した後ワークスペースを閉じてからcmtoyを起動してDapp.dllをロードします。ここでVisual Studio 6.0で「ビルド」メニュの「デバグの開始」→「プロセスへアタッチ」でcmtoyプロセスにアタッチするとデバッグ可能となります。 アタッチしただけではソースファイルは開かれていないので、「ファイル」メニュの「開く」からデバッグしたいソースファイルを開いてブレークポイントを設定し、cmtoyのウインドウに戻り「リセット」で実行を開始します。
現状のシミュレーションでは、μITRONタスクをWin32のスレッドに割り当てる方法をとっています。この方法で一通りμITRONのスケジューリングをシミュレートできそうなんですが、VisualStudio6.0のデバッガをcmtoyにアタッチするとスレッドの動きがこちらで想定しているようにならないときがあります。(当然cmtoyにバグがある可能性もありますが) 4.2 Regsvr32 これは、ActiveXコントロールを登録するマイクロソフトの再頒布可能なユーティリティです。これで一度登録したActiveXコントロールの登録解除もできます 。通常WindowsのSYSTEMディレクトリに含まれています。既定では、Windows 98/MEではC:\WINDOWS\SYSTEMに、Windows 2000ではC:\WINNT\SYSTEM32に、Windows XPではC:\WINDOWS\SYSTEM32に含まれています。Windows 98/ME付属のREGSVE32.EXEは、Windows 2000/XPでは使えるようですが、Windows 2000/XP付属のREGSVE32.EXEは、Windows 98/MEでは機能しないようです。 4.3 Borland C++ 5.5.1 DLLからイクスポートする関数名がVisual C++とBorland C++で違うことが分かりました。__declspec(dllexport)で宣言した関数名はVisual C++では先頭に_(アンダースコア)が付かないのに、Borland C++では先頭に_(アンダースコア)が付いた関数名になります。cmtoyでは、アプリケーションモジュールをロードしてからイクスポートされた関数エントリポイントを関数名で探しますが、その手順を以下のようにしました。 @Visual C++の関数名で探す。 どちらでも見つからないときはエラーとなります。 4.4 UMLについて サンプルプログラムの説明にUMLを使ってみました。まだ自己流にUML記述を使っている部分も含まれています。しかし、ユースケース図で何をやろうとしているプログラムかがわかりやすくなったような気がします。 使ったことのあるUMLツールはBridgePointとmc3020の組み合わせとRose Realtimeですが、UMLは組込みシステムの開発にも有効だと感じました。これらのツールはUMLのクラス図、状態図、アクションからC/C++/java のソースコードを生成します。そのためXT(Executable and Translatable)UMLともいうようです。 20年くらい前から組込みシステムの各タスクをイベント(メッセージ)駆動型にして動作を状態遷移表(有限状態マシン)として設計していたので、システムをUMLステートチャートで設計することにそれほど違和感はありませんでした。それより有限状態マシンを実装する場合に必要となるイベント定義、イベント送受信/イベントキュー/イベントディスパッチのメカニズム、タスクへのマッピングを自前で実装する必要がないのでシステム要求仕様の分析、実装設計に専念できます。また、BridgePointではオブジェクトコラボレーション図などを自動生成してくれるので、設計の妥当性を確認する手助けになります。また、原則的に同じ手法で設計したUMLモデルからOSを指定してコード生成をするので、設計段階でOSの違いをあまり意識しなくすみそうです。またOSを使わない指定をするとそれなりの動作するコードを生成してくれるので、OSを使う場合も使わない場合も同じように設計、実装できます。 言語 CがCPUに依存しない組込みシステム開発をある程度可能にしたように、XTUMLはOS/プラットフォームに依存しない組込みシステム開発を可能にできるかもしれないと感じました。 その後、構造化分析手法(DFD)を使って分析、設計した組込みシステムをXTUMLで設計、実装する機会がありDFDとUMLの違いがはっきりしてきました。構造化分析では、『リアルタイム・システムの構造化分析 (Derek J. Hatlay, Imtiaz A. Pirbhai 著、立田種広 監訳、日経BP社 発行)』を参考にコンテキスト図から詳細な部分までDFD、CSPEC、PSPECを駆使して行いました。それをXTUMLへ機械的に ※BridgePointはProject Technology社の製品です。(2004年3月30日にProject Technology社はメンター・グラフィックスに買収されたようです) ※mc3020はROX Software社の製品です。日本語対応は(株)東陽テクニカが行っています。 ※Rose Realtimeは、Rational Software社の製品です。
5 Windows Vistaで使用する場合
Windows Vista Home Premium Service
Pack 1
で動作を確認しました。ただ、Vistaではハイパーターミナルが搭載されていないので以下のページを参照して(日本語ページは機械翻訳のようで読みにくい) http://www.windowsvistaplace.com/hyperterminal-alternative-in-windows-vista/downloads/ja/ http://www.windowsvistaplace.com/hyperterminal-alternative-in-windows-vista/downloads/ Windowws XPからhypertrm.dllとhypertrm.exeを取り出してVistaにコピーしました。 具体的には、
3.hypertrm.exeのショートカットをC:\Cmtoy\toolsフォルダにつくり、ファイル名をhypertrm700とする。このショートカットのプロパティを開き、リンク先に
6 Visual C++ 2008 Express Edition
Visual C++ 2008 Express Edition SP1でCmtoyのサンプルプログラムを再コンパイル(リビルド)して、動作を確認しました。Visual
C++ 2008 Express Editionでは別途SDKをインストールする必要はないようです。Visual C++ 2008 Express
Editionについては、以下を参照してください。
7 Windows XP 以前のOSへのインストール Windows XP以前のOS(例えばWindows 2000 Professionalなど)でCmtoyが起動できない場合、led.ocxがinstall.batで登録できないことが考えられます。これは、install.batを実行したDOSプロンプトで以下のコマンドを実行することで確認できます。 regsvr32 -c led.ocx ここで、以下のエラーを通知するダイアログボックスが表示されます。
このような場合は、マイクロソフトの再頒布可能なDLLであるMSVCP60.DLLをマイクロソフトのサイト http://support.microsoft.com/kb/259403/ja
から取得するか、このMSVCP60.LZHをダウンロードして解凍し、MSVCP60.DLLをCmtoy\binへコピーしてください。 (2008年12月18日)
8 ダウンロード ZIP形式のファイルをこちら(V3.01)からダウンロードして解凍してください。解凍後のdocフォルダに解説書Cmtoy_V300.pdfが含まれています。解説書の「2.1インストール」にしたがって下さい。
binフォルダに含まれているサンプルアプリケーション(app.dllなど)はMFCを使用しないDLLのリリースバージョンとしてビルドしています。 動作環境は、Windows 98/ME/2000/XP/Vista/Windows10です。Visual Studio6.0, Visual C++ 2005/2008/2010 Express Edition, Visual Studio 2017, Borland C++などがあればサンプルを変更して実行できます。 9 Windows10でExplzhを使って解凍する場合 Windows10でExplzhを使って解凍すると以下のようなダイアログが表示されますが、「いいえ」をクリックして展開を続行してください。
修正履歴 ●イベントフラグのバグを指摘されました。修正版をこちらからダウンロードしてkpdll.dllを入れ替えてください。(2004年4月3日) ●V1.05でシリアルコントロールに16550の機能を追加しました。(2005年7月11日)
●V1.05a(2005年7月11日) ●V1.06 Visual C++ 2005 Express Editionで動作確認をしました。(2008年1月4日) ●Vista Home Premium Service Pack 1とVisual C++ 2008 Express Edition SP1で動作確認をしました。(2008年11月20日) ●Windows 7で動作確認をしました。Vista,Windows 7でのコマンドプロンプトを使う場合は、管理者モードで実行してください。(2009年12月26日) ●V1.06b(2011年11月1日) ●V2.00(2019年4月1日) ●V2.00b(2019年7月1日) ●V2.00c(2019年10月1日) ●V3.00(2023年3月1日) ●V3.01(2024年4月30日)
|