source: anotherchoice/tags/jsp-1.4.4-full-UTF8/doc/windows.txt@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 68.5 KB
Line 
1
2 = TOPPERS/JSPカーネル ユーザズマニュアル =
3 (Windows シミュレーション環境,タスク−スレッド対応モデル)
4
5 (Release 1.4 対応,最終更新: 20-Dec-2003)
6
7------------------------------------------------------------------------
8 TOPPERS/JSP Kernel
9 Toyohashi Open Platform for Embedded Real-Time Systems/
10 Just Standard Profile Kernel
11
12 Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
13 Toyohashi Univ. of Technology, JAPAN
14
15 上記著作権者
16は,以下の (1)〜(4) の条件か,Free Software Foundation
17 によってå…
18¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
19 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
20 を改変したものを含む.以下同じ)を使用・複製・改変・再é…
21å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
22 利用と呼ぶ)することを無償で許諾する.
23 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
24 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
25 スコード中に含まれていること.
26 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
27 用できる形で再é…
28å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
29å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
30 者
31マニュアルなど)に,上記の著作権表示,この利用条件および下記
32 の無保証規定を掲載すること.
33 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
34 用できない形で再é…
35å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
36 と.
37 (a) 再é…
38å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
39マニュアルなど)に,上記の著
40 作権表示,この利用条件および下記の無保証規定を掲載すること.
41 (b) 再é…
42å¸ƒã®å½¢æ…
43‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
44 報告すること.
45 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
46 害からも,上記著作権者
47およびTOPPERSプロジェクトをå…
48è²¬ã™ã‚‹ã“と.
49
50 本ソフトウェアは,無保証で提供されているものである.上記著作権者
51お
52 よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
53 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
54 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
55
56 @(#) $Id: windows.txt,v 1.19 2004/05/27 08:50:32 honda Exp $
57------------------------------------------------------------------------
58
59このドキュメントでは,TOPPERS/JSP Windowsシミュレーション環境部分につ
60いて解説する.
61
62-------------------------------------------------------
631. Windowsシミュレーション環境 ターゲット依存部の概要
64-------------------------------------------------------
65
66--------------------------------
671.1 ターゲットシステムと開発環境
68--------------------------------
69
70Windowsシミュレーション環境の実行環境としては,次のものを想定している.
71
72 ・Microsoft Windows 2000/XP Pro (x86)
73 #Windows XP Home Editionでの検証は行っていない
74
75また開発環境として次のものを想定している.
76 ・Microsoft Visual C++ 6.0
77 #一部のコードにインラインアセンブラを使用しているため、
78 #MSVC以外の処理系を用いることはできない
79
80また付属する追加機能を利用するために、次のものが必
81要になる場合がある.
82 ・Microsoft VisualBASIC 6.0
83 ・Active Template Library 3.0 (Visual C++ 6.0に含まれる)
84 ・Microsoft Foundation Class Library 6.0 (Visual C++ 6.0に含まれる)
85
86補足
87
88TOPPERS/JSP Windowsシミュレーション環境の開発は次の環境で行われている.
89
90 [OS] ・Microsoft Windows XP Professional
91 + Service Pack 1
92 [処理系] ・Microsoft Visual Studio .NET Academic (主たる開発環境)
93 + .NET Framework ServicePack 1
94 ・Microsoft Visual Studio .NET Enterprise Architect
95 + .NET Framework ServicePack 1
96 ・Microsoft Visual Studio 6.0 Enterprise
97 + Microsoft Visual Studio 6.0 ServicePack5
98 + Microsoft Visual C++ Processor Pack
99 ・RedHat cygwin (API:0.94, 1005.5.0.0)
100
101
102--------------------------
1031.2 サポートする機能の概要
104--------------------------
105
106Windowsシミュレーション環境に依存した機能として,割込みマスクの変更・参
107ç…
108§(chg_ixx, get_ixx)と割り込みの禁止・許可(dis_int, ena_int)をサポートし
109ている.また性能評価用システム時刻参ç…
110§æ©Ÿèƒ½(vxget_tim)をサポートしている.
111
112Windowsシミュレーション環境は,トレースログ出力機構を備えている.同機能
113は,単体起動時ではファイル出力の形で,デバイスエミュレーション機能使用時
114にはCOM通信の形で使用することができる.
115
116-----------------------------------------------------
1171.3 TOPPERS/JSP Windowsシミュレーション環境の制限事項
118
119-----------------------------------------------------
120
121 ・デフォルトのタイマ分解能は100ms
122 Windowsシミュレーション環境ではタイマティックは100msとなっている.
123 ただし単位はmsのままであり,50msのdly_tskを発行した場合 100ms秒後に
124 処理が行われれることになる.
125 ただし,ソースの一部を変更することで,理論上1msにまで変更できる.
126
127 ・タスクスタック,非タスクコンテキスト用スタックは自動生成
128 各コンテキストで必
129要なスタックはWindowsが生成するため,コンフィギュ
130 レータが標準で生成するスタックは利用されない.またスタック領域が不
131 足した場合,Windowsが自動的に領域を再割り当てする.
132
133------------------------------
1341.4 バージョン変遷による変更点
135------------------------------
136
137・Release 1.3 から Release 1.4へ
138 - Windows 9x系カーネルをサポート外に
139 # MicrosoftがWindows98をサポート対象外としたため
140 - メールスロット版デバイスエミュレーション機能を廃止
141 - デバイスエミュレーションのロック範囲が選択式に
142 - プロジェクトディレクトリの移動に伴いパスなどを変更
143
144
145---------------------------------------------
1462.Windowsシミュレーション環境に依存した機能
147---------------------------------------------
148
149この節では,カーネルおよびシステムサービスの機能の中で,Windowsシミュレ
150ーション環境依存の部分について解説する.
151
152------------
1532.1 データ型
154------------
155
156int型 および unsigned int型のサイズは32ビットである.
157 #IA-64など64ビット整数を基本とする環境は考æ…
158®ã—ていない
159
160----------------------------------
1612.2 割込み管理機能と割込みハンドラ
162----------------------------------
163
164Windowsシミュレーション環境ではm68k方式の割込みをエミュレーションしている.
165ただしNMIをサポートしないため,å…
166¨ã¦ã®å‰²ã‚Šè¾¼ã¿ã¯ã‚«ãƒ¼ãƒãƒ«ã®ç®¡ç†å†…
167で発生する.
168CPUロック状æ…
169‹ã‚„初期化ルーチン内
170では割込みマスクに7が設定され,å…
171¨ã¦ã®å‰²ã‚Šè¾¼ã¿
172が禁止される.
173
174デフォルトの割込み要因数は7つであり,7を最大優å…
175ˆåº¦ã¨ã™ã‚‹ï¼Žå‰²ã‚Šè¾¼ã¿è¦å› ã®æ•°ã¯
176cpu_defs.h:15のINT_NUMINTERRUPTSを修正することで任意に増やすことが可能である
177 (ただし最低割込み要因番号は1に固定されている).通常タイマ割込みが要因番号4
178 を利用する.これ以外の割込みはユーザが次の関数を利用して任意に発生させるこ
179 とができる.
180
181 割り込み要求の発生
182 void HALInterruptRequest(unsigned int intno)
183 割り込み要因番号intnoに割り込み要求を発生させる
184
185DEF_INHで指定する割込みハンドラ番号(inhno)は,68000での例外ベクタ番号を
186表し,そのデータ型(INHNO)はunsigned int型に定義されている.DEF_INHで無効
187な例外ベクタ番号を指定した場合の動作は保証されない.
188
189Windowsシミュレーション環境依存の機能として,割込みマスクの値を変更する
190ためのサービスコール chg_imsと,参ç…
191§ã™ã‚‹ãŸã‚ã®ã‚µãƒ¼ãƒ“スコール get_ims を
192サポートしている.なお,割込みマスクの値を表すデータ型はunsigned intであ
193る.
194
195
196TOPPERS/JSP Windowsでは次の関数をサポートしている.
197
198BOOL def_int( unsigned int ims, void * rtn); /* ハンドラ定義 */
199
200ER ena_int(unsigned int ims); /* 許可 */
201ER dis_int(unsigned int ims); /* 禁止 */
202ER chg_ims(unsigned int ims); /* 割込みレベルの設定 */
203ER get_ims(unsigned int *p_ims); /* 割込みレベルの取得 */
204
205def_int : 割込みハンドラ定義
206 割込みハンドラrtnを割込み要因番号imsに対応づける
207
208ena_int : 割込み許可
209 割込み要求を許可する.引数は無視され,å…
210¨è¨±å¯ã¨ãªã‚‹
211
212dis_int : 割込み禁止
213 割込み要求を禁止する.引数は無視され,å…
214¨ç¦æ­¢ã¨ãªã‚‹
215
216chg_ims : 割込みレベル設定
217 割込み要求マスクレベルを引数で設定した値に設定し,
218 以降マスクレベル以下の割込み要求は禁止となる
219
220get_ims : 割込みレベルの取得
221 割込み要求マスクレベルを取得し,引数で示された場所に格納する
222
223
224------------------------------------
2252.3 CPU例外管理機能とCPU例外ハンドラ
226------------------------------------
227
228Windowsシミュレーション環境では、Windowsの例外をCPU例外に割り当てている。
229
230DEF_EXCで指定する割込みハンドラ番号(excno)はWindowsの例外要因番号を表し,そ
231のデータ型(EXCNO)はunsigned int型に定義されている.DEF_EXC で,例外ベクタ番
232号として有効でない値や,CPU例外に対応しない番号を指定した場合の動作は保証さ
233れない.
234
235Windows上で例外が発生した場合,対応付けられたCPU例外ハンドラを起動した後,他
236のWindows例外ハンドラへ処理を渡す.デバッガなどが起動している場合はデバッガ
237によってハンドリングされるため,たいていの場合はエラーとなってその場で停止す
238る.
239
240Windowsシミュレーション環境では,次の引数を伴ってCPU例外ハンドラを起動する.
241
242 void cpuexc_handler( EXCEPTION_POINTERS * exc, int * ctrl )
243 exc : 例外発生時の詳細情
244報を含む構造体へのポインタ
245 ctrl : 例外発生後の動作
246
247ctrlは例外発生後、例外ハンドリングルーチンの動作を決定する。この値に格納すべ
248き値は、UnhandledExceptionFilterが返すべき値である。
249EXCEPTION_CONTINUE_SEARCHが指定された場合は上位の例外ハンドリングルーチンへ
250制御を移し、EXCEPTION_CONTINUE_EXECUTIONが指定された場合は例外が発生した場所
251から実行を再開する。ただし、EXCEPTION_CONTINUE_EXECUTIONを指定する場合には、
252例外発生の原因となった要因を取り除かなければ、再度例外が発生することに注意さ
253れたい。詳細はMSDNライブラリなどを参考のこと。
254
255------------------
2562.4 カーネルタイマ
257------------------
258
259Windowsシミュレーション環境では,カーネルタイマを次の3種類のタイマのうち
260から選択できる.
261
262 ・Windows標準タイマ : 低精度だが低負荷.最小ティックは10ms.
263 ・マルチメディアタイマ : 高精度だが高負荷.最小ティックは1ms.
264 ・タイマなし : 外部プログラムによって独自に供給する場合.
265
266タイマを変更する場合は,sys_defs.h:65-67の定義のうち,各対応行のコメント
267を解除し,他の行(#define TIMER_で始まる行)をコメントアウトする.
268
269タイムティックは100msに設定されているが、hw_timer.h:59の
270TIMER_CLOCK_WINDOWSを修正することで変更できる。しかし、
271TIMER_WINDOWSTIMERは10ms以下で動作させることはできず、また
272TIMER_MULTIMEDIATIMERは前者
273よりも処理が重いため、あまりにも短く設定しす
274ぎるとタイマ処理だけでCPU時間を使い切る恐れがる。
275
276
277-------------------------------------------
2783.Windowsシミュレーション環境に固有な機能
279-------------------------------------------
280
281----------------------------
2823.1 シリアルエミュレーション
283----------------------------
284
285TOPPERS/JSP Windowsは,コンソールを模したシリアルエミュレーション機能を
286備えている.同機能を使用すると,画面に「シリアルå…
287¥å‡ºåŠ›ã€ã¨åã¥ã‘られたウ
288ィンドウを表示し,シリアル出力された内
289容を表示する.また同ウィンドウに足
290して行われたキーå…
291¥åŠ›ã‚’シリアルå…
292¥åŠ›ã¨ã—てアプリケーションに通知する.
293
294
295----------------------
2963.2 デバッグコンソール
297----------------------
298
299TOPPERS/JSP Windowsシミュレーション環境では,デバッグ文字列を出力するための
300専用コンソールを提供している.デバッグコンソールでは簡単な記述でデバッグ文字
301列を出力することができ,通常のシリアルを利用しなくとも画面だけでフローのデバ
302ッグなどが行える.
303 #ItIs/Winに搭載されていたカーネル内
304部情
305報表示は別ユニットとなった
306
307デバッグコンソールを有効にするにはsys_defs.h:56の
308 //#define DEBUG_ENABLE
309のコメントをはずし,宣言を有効にすることで利用可能となる.
310無効にするには該当個所の宣言を削除またはコメントアウトすればよい.
311
312TOPPERS/JSP Windowsシミュレーション環境では,次のデバッグ用機能を提供してい
313る.
314
315OnDebug : デバッグ時のみ有効となる行につける宣言
316 行の頭にOnDebugをつけることで,DEBUG_ENABLE時にのみ有効となる行を簡単に
317 作ることができる.
318
319 DEBUG_ENABLE時 : #define OnDebug(x) x
320 非DEBUG_ENABLE時 : #define OnDebug(x)
321
322 例
323 OnDebug(wsprintf(buffer,"i = %d",i));
324
325unsigned int DebugOut(LPCSTR text) : デバッグコンソールへの出力
326 DebugOut関数はデバッグコンソールへ文字列を出力する.
327
328 非DEBUG_ENABLE時にはコメント行になる.
329
330
331------------------------------
3323.3 タスクトレイ (Notify Icon)
333------------------------------
334
335TOPPERS/JSP Windowsシミュレーション環境では,通常プログラムは見えない存在と
336して動作する.しかしそれではプログラムの終了を確認する手段がなくなってしまう
337危険性を伴う.そのためWindowsシミュレーション環境では画面右下のタスクトレイ
338上にアイコンが表示され,プログラムが現在実行中であるかどうかが確認できるよう
339になっている.
340
341またこのトレイ上のアイコンを右クリックすることで,プログラムを強制終了させる
342ことが可能である.
343
344DEBUG_ENABLE時にはTOPPERS/JSP Windowsシミュレータの本体となるウィンドウを強
345制的に表示させるようになっている.この場合は本体となるウィンドウを終了させる
346ことでプログラムを強制終了させることができる.
347
348
349----------------------------
3503.4 デバイスエミュレーション
351----------------------------
352
353TOPPERS/JSP Windowsシミュレーション環境では、システムに接続されたデバイ
354ス(LEDなど)をエミュレートするための機構をもっている.デバイスエミュレー
355ションでは次のようなことができる.
356
357 ・カーネルが特定の番地をアクセスした場合、デバイスに通知する
358 ・カーネルに対して割り込みを発生させる
359 ・カーネルの起動および終了をデバイスに通知する
360 ※それぞれの機構は専用関数を通して利用する
361
362マッピング対象となる空間は実メモリとは異なる空間である (Intelプロセッサ
363のI/Oポートを想定していただきたい)。そのためマッピングされたされた空間へ
364のアクセスは専用関数を介して行う。デバイスは空間が重複しなければ複数起動
365することが可能である。またカーネルも複数起動することが可能であるが、デバ
366イスエミュレーション機構を利用できるカーネルはシステム内
367で単一である。
368
369デバイスエミュレーションはデフォルトで無効となっているが、config/windows
370/sys_defs.h:58のコメントを解除することで有効にできる。無効にするには該当
371行を再度コメントアウトすれば、関連するå…
372¨ã¦ã®é …
373目が無効となる。
374
375カーネルから利用できるデバイスエミュレーション関連の関数を下に示す。
376またå…
377¨ã¦ã®é–¢æ•°ã¯ãƒ‡ãƒã‚¤ã‚¹ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ç„¡åŠ¹æ™‚にはコメント行として扱われる。
378
379--- ITRONデバイスドライバガイドライン互換インタフェース ---
380
381VB sil_reb_mem(VP mem), VH sil_reh_mem(VP mem), VW sil_rew_mem(VP mem),
382void sil_rek_mem(VP mem, VP data, UINT len)
383 指定されたサイズで、指定されたアドレスにマッピングされているデバイス
384 からメモリリードを行う。後述のDeviceReadのラッパ。
385
386void sil_wrb_mem(VP mem, VB data), void sil_wrh_mem(VP mem, VH data)
387void sil_wrw_mem(VP mem, VW data), void sil_wrk_mem(VP mem, VP data, UINT len)
388 指定されたサイズで、指定されたアドレスにマッピングされているデバイス
389 へメモリ書込みを行う。後述のDeviceWriteのラッパ。
390
391
392--- 独自インターフェース ---
393void InitializeComSupportModule(void)
394 デバイスエミュレーション関連の初期化を行う。
395 基本的にカーネルが起動時に初期化を行うため、ユーザが呼ぶ必
396要はない。
397
398void FinalizeComSupportModule(void)
399 デバイスエミュレーション関連の終了処理を行う。
400 カーネル脱出時に終了処理を行っているので、能動的に呼ぶ必
401要はない。
402
403int DeviceRead(unsigned long address, unsigned long size, void * storage)
404 デバイスからの読出し
405 address : デバイスを識別するためのアドレス値など
406 (実メモリ空間とは独立)
407 size : 読み出す長さ
408 storage : 格納å…
409ˆã¸ã®ãƒã‚¤ãƒ³ã‚¿
410 返却値 : 読み出されたデータのバイト数 または -1(失敗)
411
412 addressにマッピングされたデバイスからsizeバイトのデータを読出し、
413 storageに格納する。マッピングされたデバイスがない場合、関数は-1
414 を返却する。発行時のロック状æ…
415‹ã¯ï¼Œã‚¿ã‚¹ã‚¯æ¯Ž/システムå…
416¨ä½“のどちらかが選
417 択できる (デフォルトはシステムå…
418¨ä½“).
419
420int DeviceWrite(unsigned long address, unsigned long size, void * storage)
421 デバイスへの書込み
422 address : デバイスを識別するためのアドレス値など
423 (実メモリ空間とは独立)
424 size : 書き込む長さ
425 storage : 出力データを格納する領域へのポインタ
426 返却値 : 書き込まれたデータのバイト数 または -1(失敗)
427
428 addressにマッピングされたデバイスへstorageに格納されたsizeバイトのデ
429 ータを書き込む、storageに格納する。マッピングされたデバイスがない場合
430 、関数は-1を返却する。発行時のロック状æ…
431‹ã¯ã‚¿ã‚¹ã‚¯æ¯Ž/システムå…
432¨ä½“が選択
433 可能.
434----------------------------
435
436デバイスエミュレーション機能は,発行時にシステムå…
437¨ä½“をロックさせるか発行
438したタスクのみをロックさせるかを選択することができる.デフォルトでは,発
439行時にはシステムå…
440¨ä½“がロックする.ロック範囲をタスクのみに変更する場合,
441com_support.cpp:697-698を次のように修正する.
442
443---8<---
444 typedef class Request DeviceRequest;
445// typedef class ExclusiveDeviceRequest DeviceRequest;
446---8<---
447
448デバイス本体およびデバイスマネージャに関しては後述の5.1を参ç…
449§ã®ã“と。
450
451-----------------------------------
4523.5 カーネルトレースログ (実行履歴)
453-----------------------------------
454
455Windows依存部では、TOPPERS/JSP rel 1.4からカーネルのトレースログ取得機能
456を実装
457している。本機能はITRONデバッギングインタフェース仕様に準じて実装
458
459されている。以下に本機能を介して利用できる情
460報(イベント)を挙げる。カッコ
461内
462はそれぞれのイベントで取得できる詳細情
463報を示す (※は拡張機能)。
464
465 ・ITRONデバッギングインタフェース仕様(1.00.00)にて定義されたログ
466 - 割込みハンドラの起動 および 終了
467 (割込み番号)
468 - タスクディスパッチの開始 および 終了
469 (タスク番号, コンテキスト状æ…
470‹)
471 - 周期ハンドラの開始 および 終了
472 (周期ハンドラのID, 拡張情
473å ±)
474 - タスク/CPU例外の開始 および 終了
475 (タスク番号, 例外パタン / 例外番号)
476 - タスク状æ…
477‹å¤‰åŒ–
478 # ITRON-DBIFではReadyとRunを区別しない (ディスパッチログを使用)
479 - サービルコールの起動 および 終了
480 [実行] 機能コード, 引数, 呼出å…
481ƒã‚¢ãƒ‰ãƒ¬ã‚¹(※)
482 [終了] 機能コード, エラーコード
483 # サービスコール終了時パラメータはエラーコードのみ
484 # 一部実装
485依存/実装
486定義/独自関数は対象外
487
488カーネルログを無効にするには、config/windows/sys_defs.h内
489で
490EVENTLOG_ENABLEをコメントアウトする。カーネルログはデフォルトで有効とな
491っているが、config/windows/sys_defs.hの当該部をコメントアウトすることで
492無効にできる。
493
494トレースログ機能を利用するには、クライアントソフトウェアが必
495要になる。
496TOPPERS/JSP release 1.4では、jsp/windev/cmdwatchにコマンドラインで動作す
497るログ表示プログラムが同梱されており、同プログラムを実行後にカーネルを起
498動することで、画面にカーネルのログ情
499報を出力することができる。
500 # cmdwatchの実行には、デバイスマネージャが必
501要となる。
502 # デバイスマネージャに関しては、後述の5.1節を参ç…
503§ã•ã‚ŒãŸã„。
504
505VisualBASICからログ情
506報を使用したい場合は、jsp/windev/watcherをビルドし、
507同コントロールを使用する。
508
509カーネルのトレースログは、カーネルと非同期に出力される。そのため、ログ出
510力項
511目が多すぎる場合、カーネルが消費するメモリ量が増大したり、カーネルの
512動作とログ内
513容が一致しないことがある。またカーネル終了時にå…
514¨ã¦ã®ãƒ­ã‚°æƒ…
515å ±
516を出力するため、終了処理が長引くことがある。
517
518出力するログを抑止するには、カーネル内
519部で次の命令を実行する。
520
521・割込み開始/終了ログの抑止
522 BOOL set_intlogmask( unsigned int ims, BOOL mask );
523 ims : 割込み要因番号
524 mask : ログを出力する (TRUE) / ログを抑止する (非TRUE)
525
526
527------------------
5284.開発環境の構築
529------------------
530
531------------------
5324.1 開発環境の概要
533------------------
534
535カーネルを実行するには,JSPカーネルのé…
536å¸ƒã‚­ãƒƒãƒˆã«å«ã¾ã‚Œã‚‹ä»¥å¤–に,以下の
537ツールおよびライブラリが必
538要である.
539
540Microsoft Visual C ++ (6.0/.NET/.NET 2003にて確認)
541 単体にて動作可能
542
543なお、TOPPERS/JSP release 1.3 (patchlevel=1)ではcygwin+gccでのコンパイル
544は行えない。TOPPERS/JSP release 1.4 用のcygwin対応コードは,TOPPERSプロ
545ジェクトの成果物ではないため,å…
546¬å¼ãƒªãƒªãƒ¼ã‚¹ã«ã¯å«ã‚ã¦ã„ない.
547
548-----------------------------------------------
5494.1.1 Microsoft Visual C++を利用する場合 (自動)
550-----------------------------------------------
551
552開発を行っている環境がWindows Scripting Hostの実行環境を持つ場合、かつ使
553用している処理系がMicrosoft VisualC++ 6.0である場合に限り、TOPPERS/JSPの
554生成に自動生成スクリプトが利用できる。
555 # .NET / .NET2003には非対応
556
557注) 自動生成スクリプトは、各サブスクリプトを起動するために、Windows
558Scripting Hostの機能であるWScript.WshShell.Runメソッドを利用している。一
559部のセキュリティソフトウェアは上記メソッドを使用するスクリプトを悪質と判
560断し、実行をブロックする場合がある。
561
562自動生成スクリプトは、 jsp/WINDOWS/configure.vbs という名前で格納されて
563いる。このスクリプトを実行すると、コンフィギュレータの生成およびデバイス
564エミュレータの生成を行い、Visual C++を起動した後サンプルプロジェクトを開
565く。ほとんどの場合では、初期設定のままプロジェクトのビルドを行えば、
566TOPPERS/JSP Windowsシミュレーション環境の実行形式を得ることができる。
567
568次のファイルを実行することで、個々
569の部品ごとに生成することも可能である。
570 コンフィギュレータ/構成チェッカ : jsp/cfg/vc_project/make.vbs
571 デバイスエミュレータ : jsp/windev/make.vbs
572
573-----------------------------------------------
5744.1.2 Microsoft Visual C++を利用する場合 (手動)
575-----------------------------------------------
576
577まずコンフィギュレータを生成する.コンフィギュレータは/cfg/VC_Project/内
578
579にあるMicrosoft Visual C++プロジェクトファイルを開くことにより,諸設定を
580せずとも即ビルドが可能な状æ…
581‹ã«ãªã‚‹ï¼Žæ¨™æº–では,cfg.exeはjsp/cfg/cfg.exeと
582して作成されている.
583
584このとき、同時にカーネルチェッカも生成する。カーネルチェッカをビルドする
585には、メニューから「プロジェクト」「アクティブプロジェクトの設定」「
586checker」を選択し、ビルドメニューからビルドを選択する。カーネルチェッカ
587は "Windows ImageHlp API"を使用しているため、生成時にはライブラリ
588IMAGEHLP.LIBが必
589要になる。サンプルプロジェクトファイルの設定には、プログ
590ラムが使用するライブラリモジュールとしてIMAGEHLP.LIBが追加されている。正
591常にビルドが終了すると、標準では、実行ファイルはjsp/cfg/chk.exeとして作
592成されている。
593
594TOPPERS/JSP Windowsシミュレーション環境の構築はMicrosoft Visual C++のプ
595ロジェクト ワークスペースを利用する./config/WINDOWS/vc_project内
596にある
597プロジェクトファイルおよびワークスペースを開くことで,構築に必
598要な設定を
599å…
600¨ã¦çµ‚えた状æ…
601‹ã§èµ·å‹•ã™ã‚‹ï¼Ž
602
603 #このプロジェクトではサンプルプログラムが生成されるようになっている
604
605付属のサンプルプログラムではすでに設定がされているが,サンプル以外のコン
606フィギュレーションファイルを利用する場合,コンフィギュレータにkernel_id.
607hとkernel_cfg.cを作成させる必
608要がある.以下に設定法を示す.
609 (ここでは,コンフィギュレータは/jsp/cfg/cfg.exeであるとしている)
610
611 (a) Visual C++ に行わせる場合
612 1. 対象となるcfgファイルを選択し,コンテキストメニュー(右クリック)から
613 設定を選択する.
614 2. 一般から「常にカスタムビルドステップを使用」を有効にする
615 3. カスタムビルドタブを選択肢,コマンド部に次のコマンドを打つ
616 ---8<--- ここから ---8<---
617 cd $(InputDir)
618 cl /E /I "../../kernel" /I "../../include" /I "../../config/windows" \
619 $(InputName).cfg | ..\cfg\cfg.exe -s -c -v -obj -lj -cpu windows
620 ---8<--- ここまで ---8<---
621 #行末に\のある行は行末の\を削除し、後続する行を続けてå…
622¥åŠ›ã™ã‚‹
623
624 4. 出力部に次のファイルを打つ
625 kernel_cfg.c
626 kernel_id.h
627 5. メニューから「プロジェクト」「設定」を選択し、ダイアログ内
628のタブ
629 「ビルド後の処理」を選択する
630 6. ビルド後の処理コマンドとして、次のコマンドをå…
631¥åŠ›ã™ã‚‹ã€‚
632 ---8<--- ここから ---8<---
633 cd ..
634 ..\..\cfg\chk.exe -m toppers.exe -cs windows.chk -obj -v -lj
635 ---8<--- ここまで ---8<---
636
637 (b) コマンドラインから直接打つ場合
638 1. Visual C++をインストールした場所のBinフォルダにある
639 VCVARS32.BATを実行する
640
641 #インストール時に「コマンドラインから実行するための
642 #バッチを作らない」と指定するとこのファイルはない
643
644 2. コンフィギュレーションファイルのあるディレクトリで
645 次のコマンドをå…
646¥åŠ›ã™ã‚‹
647 ---8<--- ここから ---8<---
648 cl /E /I "../../kernel" /I "../../include" /I "../../config/windows" \
649 <ファイル名> | ..\..\cfg\cfg.exe -s -c -v -obj -lj -cpu windows
650 ---8<--- ここまで ---8<---
651 #行末に\のある行は行末の\を削除し、後続する行を続けてå…
652¥åŠ›ã™ã‚‹
653
654kernel_id.hとkernel_cfg.cが生成されたら,これらのファイルをプロジェクトに追
655加し,Visual C++からビルドを行えばプログラムが生成される.
656
657付属のプロジェクトファイルでは,それぞれ適切なフォルダにファイルが格納される
658ようになってる.ユーザプログラムはSource FilesとHeader Filesに格納される.サ
659ンプル以外のプログラムを利用される場合,この2つのフォルダに格納されているフ
660ァイルをプロジェクトから削除してから,新しいプログラムを追加する必
661要がある.
662
663
664--------------------------
6655.特殊な機構に関する説明
666--------------------------
667
668----------------------------
6695.1 デバイスエミュレーション
670----------------------------
671
672----------------------------------------
6735.1.1 デバイスエミュレーション環境の作成
674----------------------------------------
675
676デバイスエミュレーション機構は3つのプログラムからなる。
677 ・カーネル
678 デバイスを制御するアプリケーションが搭載されたプログラム。サービ
679 ス対象となるカーネルはシステム内
680で単一 (起動するだけなら複数可)。
681 ・デバイスマネージャ
682 カーネルからの要求に対して適切なデバイスに要求を回送するプログラ
683 ム (イベントディスパッチャ)。カーネルまたはデバイスが起動すると
684 COMによって自動的に起動する。システム内
685で単一。
686 ・デバイス
687 デバイスのエミュレーションを行うプログラム。カーネルから発行され
688 た要求にしたがって処理を行う。マッピング空間が重複しなければ複数
689 起動可能。VisualBASICを利用することもできる。
690
691カーネルのデバイスエミュレーション機能の作成に関しては 3.4デバイスエミュ
692レーション を参ç…
693§ã•ã‚ŒãŸã„。
694
695デバイスマネージャおよびVisualBASIC用デバイスコントロールの作成には次の
696ツールが必
697要になる。
698 ・Microsoft Visual C++ 6.0/.NET/.NET2003
699 ・Microsoft VisualBASIC 6.0/.NET/.NET2003 ※
700 ・COM実行環境 (Windows 2000/XP)
701 ・Active Template Library 3.0 (Visual C++ 6.0以降に含まれる)
702
703 ※ VisualBASICは6.0と.NETの間で言語仕様が大きく変化しているため,
704 .NET以降の場合,後述の作成例はそのままでは使用できない
705
706デバイスマネージャは次のようにして作成する。
707基本的に,ビルドを行うだけでサーバ登録およびプロキシ/スタブ登録を行う.
708
709 (0. アクティブな構成の設定をDebugにするか、例外周りの設定を変える)
710 1. Visual C++を起動し、プロジェクトワークスペースdevicemanager.dswを
711 開く
712 2. ビルドを行う
713 3. OLE Viewを起動し、Interfacesの中にIDeviceとIKernelがあることを
714 確認する (プロキシ/スタブDLLのインストール確認)
715
716 プロキシ/スタブDLLが正しく導å…
717¥ã•ã‚Œãªã„場合は,次の作業を要する.
718 1. コマンドプロンプトを起動する
719 2. Visual C++をインストールしたディレクトリのbin/VCVARS32.BATを実行し
720 関連ツールが使えるようにする
721 3. プロジェクトのあるディレクトリへ移動する
722 4. 次のコマンドを実行する
723 nmake devicemanagerps.mk
724 5. 次のコマンドを実行する
725 regsvr32 devicemanagerps.dll
726
727 デバイスマネージャの実行プログラムの場所を移動したい場合には、
728 次の作業を要する.
729 1. devicemanager.exeを移動する
730 2. 移動したå…
731ˆã§ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行する
732 regsvr32 devicemanager.exe
733
734デバイスマネージャを移動する場合には、次の作業を要する。
735
736 1. コマンドプロンプトを起動し、実行ファイルを移動させる
737 2. 移動させた後、オプション "/RegServer" をつけて実行する
738 > devicemanager.exe /RegServer
739
740デバイスマネージャを削除する場合には、次の作業を要する。
741
742 1. コマンドプロンプトからオプション "/UnregServer" をつけて実行する
743 > devicemanager.exe /UnregServer
744 2. 実行ファイルを削除する
745
746
747VisualBASIC用デバイスコントロールの作成には、次の作業を要する。
748基本的に,ビルドを行うだけでサーバ登録およびプロキシ/スタブ登録を行う.
749
750 1. Visual C++を起動し、プロジェクトワークスペースdevice.dswを開く
751 2. ビルドを行う
752 3. OLEViewを起動し、InterfacesにIDeviceControlがあることを
753 確認する
754
755VisualBASIC用デバイスコントロールの移動には、次の作業を要する。
756
757 1. device.dllを移動する
758 2. コマンドプロンプトから次のコマンドを発行する
759 regsvr32 (移動å…
760ˆ)\device.dll
761
762VisualBASIC用デバイスコントロールの削除には、次の作業を要する。
763
764 1. コマンドプロンプトから次のコマンドを発行する
765 regsvr32 /u (インストールå…
766ˆ)\device.dll
767 2. DLLを削除する
768
769-----------------------------------------------
7705.1.2 VisualBASIC用デバイスコントロールの使い方
771-----------------------------------------------
772
773TOPPERS/JSP Windows のデバイスエミュレーションで利用されるデバイスは、Vi
774sualBASICを利用しても作成可能である。VisualBASICを利用することで、短時間
775でエミュレータを作成できる。本項
776ではVisualBASIC用デバイスコントロールの
777概要と、簡単な作成手順を示す。
778
779TOPPERS/JSP on Windows Device Componentで提供される機能は次の通り
780
781オブジェクト DeviceControl
782
783 メソッド Public Sub Connect()
784 デバイスマネージャとの通信を確立させる。
785 確立前にConnect以外のメソッドを実行すると失敗する。
786 失敗するとE_FAILが返る。
787
788 メソッド Public Sub Close()
789 デバイスマネージャとの通信を終了する。
790 失敗するとE_FAILが返る。
791
792 メソッド Public Sub RaiseInterrupt(ByVal inhno as long)
793 カーネルプロセスにハンドラ番号inhnoの割込みを発生させる。
794 失敗するとE_FAILが返る。0以下の値は設定できない。
795
796 メソッド Public Sub Map(ByVal address as long, ByVal size as long)
797 このデバイスをアドレスaddressからsizeバイトのサイズでマッピングする。
798 以後、対象領域にアクセスがあると、イベントが発生する。
799
800 メソッド Public Sub Unmap(ByVal address as long)
801 アドレスaddressを含むようなマップ済み領域のマッピングを解除する。
802 以後、対象領域にアクセスがあってもイベントは発生しない。
803
804 プロパティ Public Valid as BOOL [R]
805 このデバイスが有効であるときにはTrueとなる。
806
807 プロパティ Public IsKernelStarted as BOOL [R]
808 カーネルが起動しているとTrueとなる。
809
810 プロパティ Public Offset as long [RW]
811 送受信データバッファのオフセット位置を指定/取得する。
812 単位はバイト単位である。
813
814 プロパティ Public AccessSize as short [RW]
815 アクセス単位を指定/取得する。
816 数値は1,2,4のいずれかである。
817
818 プロパティ Public Value as long [RW]
819 プロパティOffsetの位置からプロパティAccessSizeバイトの
820 リトルエンディアンに従い数値表現したものを取得/設定する。
821 アクセスが行われるとOffsetの値をAccessSizeだけ増加させる。
822
823 イベントOnRead時における読込みは無効となる。
824 イベントOnWrite時における書き込みは無効となる。
825
826 イベント Private Sub OnRead(ByVal address as long, ByVal sz as long)
827 カーネルからaddress番地に対するszバイトの読込みがあったことを通
828 知する。デバイスはその返答となる値を格納しなければならない。
829 イベント発生時にはOffsetは常に0となる。
830 OnReadイベント発生時にはValueに対する読込みはできない。
831
832 イベント Private Sub OnWrite(ByVal address as long, ByVal sz as long)
833 カーネルからaddress番地に対するszバイトの書込みがあったことを通
834 知する。デバイスはその値から適切な処理を行わなければならない。
835 イベント発生時にはOffsetは常に0となる。
836 OnWriteイベント発生時にはValueに対する書き込みはできない。
837
838 イベント Private Sub OnKernelStart()
839 カーネルが起動したことを通知する。
840
841 イベント Private Sub OnKernelExit()
842 カーネルが終了したことを通知する。
843
844
845デバイスオブジェクトは送受信データを簡単に扱うために、内
846部にバッファ機構
847を持っている。このバッファ機構はプロパティAccessSize, Offset, Valueの3つ
848を利用して取得/設定することが可能となる。
849
850例として、カーネルから0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xefとい
851う8バイトのデータが送られてきた場合、Valueに格納されているデータはそれぞ
852れAccessSizeに従って次のように取得される。またValueにアクセスすると自動
853的にOffsetがAccessSize分インクリメントされるため、連続して取得すると連続
854するデータを取得することになる。
855
856 表: AccessSizeによるValueの値の変化
857 +----+----------------------------+
858 | | AccessSize |
859 |回数+------+--------+------------+
860 | | 1 | 2 | 4 |
861 +----+------+--------+------------+
862 +----+------+--------+------------+
863 | 1 | 0x01 | 0x2301 | 0x67452301 |
864 | 2 | 0x23 | 0x6745 | 0xefcdab89 |
865 | 3 | 0x45 | 0xab89 | -未定義- |
866 | 4 | 0x67 | 0xefcd | -未定義- |
867 | 5 | 0x89 | 未定義 | -未定義- |
868 | 6 | 0xab | 未定義 | -未定義- |
869 | 7 | 0xcd | 未定義 | -未定義- |
870 | 8 | 0xef | 未定義 | -未定義- |
871 | 9 |未定義| 未定義 | -未定義- |
872 +----+------+--------+------------+
873
874
875sample1.cを改造して、現在動いているタスク番号を表示するようなデバイスを
876作成する手順を示す。この改造はVisualBASIC 6.0での記述である.VB.NET以降
877を使用している場合,適切な形に修正すること.
878
8791. Visual C++ を起動し、カーネルのプロジェクトを開く
880
8812. sample1.cに #include "device.h" を追加する
882
8833. sample1.c:387のsyslogの手前に次の行をå…
884¥ã‚Œã‚‹
885 DeviceWrite(0x1234, 1, &tskno);
886 #この命令によってポート0x1234番地に1バイトのレジスタを持つ
887 #デバイスにデータを出力できる
888
8894. ビルドする
890
8915. VisualBASIC 6.0を起動し、「標準EXE」を選択し、開く
892
8936. メニューから「プロジェクト -> コンポーネント」を選択する
894
8957.コントロールの中から
896 「TOPPERS/JSP on Windows Device Component Type Library」をチェックして、
897 OKを押す。
898
8998.ツールボックスからDeviceControlを選択し、フォームに貼る(DeviceControl1)
900
9019.ラベルをひとつフォームに貼る(Label1)
902
90310.フォームをダブルクリックし、Form_Loadを実装
904する
905
906 Private Sub Form_Load()
907 DeviceControl1.connect 'デバイスマネージャと接続する
908 DeviceControl1.Map &H1234, 1 '0x1234番地に1バイトのレジスタをマップする
909 End Sub
910
91111.続いてForm_Unloadを実装
912する
913
914 Private Sub Form_Unload(Cancel As Integer)
915 DeviceControl1.Close 'デバイスマネージャとの接続を解除する
916 End Sub
917
91812.受信時の動作を記述するために、DeviceControl1_OnWriteを実装
919する
920
921 Private Sub DeviceControl1_OnWrite(ByVal address As Long, ByVal sz As Long)
922 Label1 = Str(DeviceControl1.Value)
923 End Sub
924
92513.プログラムを実行し、カーネルを起動する
92614.シリアルå…
927¥å‡ºåŠ›ã«'r'をå…
928¥åŠ›ã—て、表示される数字が変化すればOK。
929
930補足
931 デバイスのVisibleプロパティをFalseに設定すれば、実行時に絵が表示されない
932
933サンプルとして、windev/devicecontrol/sampleにはWINDOWS/sample2.cで利用できる
934デバイスのユーザインタフェースのVisualBASICプログラムがある。sample2.cのカー
935ネルとともに使用すれば、現在の哲学者
936の状況を表示してくれる。
937
938--------------------------------
9395.1.3 デバイスマネージャの操作法
940--------------------------------
941
942TOPPERS/JSP 1.4に付属のデバイスマネージャから,トレイアイコンを表示する
943ようになっている.トレイアイコンを右クリックすることでメニューを表示する
944ことができる.
945
946メニューには,現在のカーネルの動作状æ…
947‹ï¼ŒæŽ¥ç¶šæ¸ˆã¿ãƒ‡ãƒã‚¤ã‚¹æ•°ï¼Œå‰²ä»˜æ¸ˆã¿ç©ºé–“
948数,接続済みウォッチャ数が表示され,またデバイス一覧と強制終了の項
949目があ
950る.
951
952デバイスマネージャは,カーネルおよび接続デバイスおよび接続ウォッチャがひ
953とつもなくなってから一定時間が経過すると自動的に終了する.しかし,デバイ
954スマネージャが不正動作のために終了しない場合には,メニューから強制終了さ
955せることができる.特にå…
956¨ã¦ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’終了させてもメニュー中の接続デバイ
957ス数が0にならない場合,またカーネルも起動していない状況にも関わらずメニ
958ュー中に「カーネル起動中」と表示される場合は,強制終了することでデバイス
959エミュレーション機能を正常に動作できるようになる.
960
961---------------------------
9625.1.4 おかしいな?と思ったら
963---------------------------
964
965・どう見ても動いてない
966 - sys_defs.hのDEVICE_ENABLEの行が有効になっていますか?
967 - レジストリに次のキーがあるか調べてみてください。
968 51789667-9F20-40AF-AF7F-9856325DFB0B
969 このキーがある場合は、このキーのLocalServer32に記述されたファイルが
970 ちゃんとあるかどうか調べてみてください。また、カーネルを実行中に
971 このファイルも実行されているか確かめて見てください。
972 - VBのデバイス側でもDevice.Connectをちゃんと実行しているか調べてみて
973 ください.
974
975・マッピングで失敗する
976 すでにデバイスマネージャが起動しており、特定ポートが埋まっていると
977 思い込んでいる可能性があります。Ctrl+Alt+Delや、タスクマネージャを
978 使って,メモリに常駐しているデバイスマネージャを一度終了させてから、
979 再度実行してみるとうまく行くかもしれません。
980
981
982--------------------
9835.2 トレースログ機能
984--------------------
985
986----------------------------
9875.2.1 トレースログ環境の作成
988----------------------------
989
990トレースログ機構は、3つのプログラムから構成されている。
991 ・カーネル
992 ログ取得の対象となるカーネル。サービス対象となるカーネルは
993 システム内
994で単一 (ただし、複数指定時には警告あり)。
995 ・デバイスマネージャ
996 カーネルが出力したログを適切なログウォッチャに回送するプロ
997 グラム (イベントディスパッチャ)。カーネル または ウォッチャ
998 が起動すると、COMによって自動起動する。システム内
999で単一。
1000 ・ログウォッチャ (ウォッチャ)
1001 ログを用いた処理を行うプログラム。カーネルが生成したログの
1002 情
1003報に応じて、様々
1004な処理を行う。複数起動可能。
1005
1006トレースログ機能は、前節のデバイスエミュレーション機能を拡張する形で提供
1007されている。環境の構築方法に関しては、5.1.1項
1008を参ç…
1009§ã®ã“と。
1010
1011カーネルログ機構の一部は、デバイスマネージャによって提供されている。デバ
1012イスマネージャの生成・登録・削除については、「5.1.1 デバイスエミュレーシ
1013ョン環境の作成」を参ç…
1014§ã•ã‚ŒãŸã„。
1015
1016VisualBASIC用ログウォッチャコントロール(COM版)の作成には、次の作業を要す
1017る。基本的に,ビルドを行うだけでサーバ登録およびプロキシ/スタブ登録を行
1018う.
1019
1020 1. Visual C++を起動し、プロジェクトワークスペースwatcher.dswを開く
1021 2. ビルドを行う
1022 3. OLEViewを起動し、InterfacesにIKernelLogControlがあることを
1023 確認する
1024
1025VisualBASIC用ログウォッチャコントロール(COM版)の移動には、次の作業を要する。
1026
1027 1. device.dllを移動する
1028 2. コマンドプロンプトから次のコマンドを発行する
1029 regsvr32 (移動å…
1030ˆ)\watcher.dll
1031
1032VisualBASIC用ログウォッチャコントロール(COM版)の削除には、次の作業を要する。
1033
1034 1. コマンドプロンプトから次のコマンドを発行する
1035 regsvr32 /u (インストールå…
1036ˆ)\watcher.dll
1037 2. DLLを削除する
1038
1039
1040-----------------------------------
10415.2.2 コマンドライン ログウォッチャ
1042-----------------------------------
1043
1044コマンドラインログウォッチャは、カーネルログを画面表示すると同時に、
1045"kernel-log-[日付]-[時刻].log"というファイルを生成してログを保存する。フ
1046ァイルはカーネルの起動イベント毎に生成されるため、コマンドラインログウォ
1047ッチャは一度起動すれば、カーネルの起動毎に起動しなおす必
1048要は無い。
1049
1050プログラムを生成するには、Visual C++ 6.0などのMS系処理系で
1051jsp/windev/cmdwatch/cmdwatch.dswを開き、ビルドを行えばよい。
1052
1053コマンドラインログウォッチャはCtrl-Cイベントをフックしているので、プログ
1054ラムを終了するにはCtrl-Cを押下すればよい。Ctrl-Cを押下すれば現在出力して
1055いるログファイルをクローズし、プログラムを停止する。
1056
1057本プログラムはログ機構を使用するための環境を提供すると同時に、ログを使用
1058したプログラムを作成する際のサンプルでもある。
1059
1060Windowsはコンソールアプリケーションの文字表示が遅
1061い。カーネルのログ機構
1062はログウォッチャの速度に依存するため、コマンドラインログウォッチャを使用
1063するとカーネルの速度が低下する。画面表示が必
1064要ないのであれば、ウィンドウ
1065をアイコン化したり、cmdwatch.cppのPrintf関数内
1066で画面へ出力している個所を
1067コメントアウトするなどで速度をあげることができる。
1068
1069------------------------------------
10705.2.3 VB用ログウォッチャコントロール
1071------------------------------------
1072
1073VB用ログウォッチャコントロールは、カーネルが出力したログをVisual BASICア
1074プリケーションで使用するためのコントロールである。本コントロールを使用す
1075ることで、Microsoft Excelなどを使用して統計処理の自動化などが行える。
1076
1077説明内
1078でITRON-DBIFと記載のある個所に関しては、ITRONデバッギングインタフ
1079ェース仕様 1.00.00 を参ç…
1080§ã•ã‚ŒãŸã„。
1081
1082 メソッド Public Sub Open()
1083 ログウォッチャをマネージャへ登録する。
1084
1085 メソッド Public Sub Close()
1086 ログウォッチャを登録解除する。
1087
1088 プロパティ Public Type as Long [R]
1089 最後に発生したログの種別を取得する。
1090
1091 プロパティ Public Logtim as Long [R]
1092 最後に発生したログのカーネル時刻を取得する (単位はms)。
1093
1094 プロパティ Public isValid as Bool [R]
1095 ログウォッチャが正常に動作しているときにTRUEを返す。
1096
1097 プロパティ Public Param (index as Long) as Long [R]
1098 各ログ種別毎の追加情
1099報を取得する。
1100 項
1101目に関してはITRON-DBIFを参ç…
1102§ã•ã‚ŒãŸã„。
1103
1104 イベント Private Sub OnKernelStart()
1105 カーネルが起動したことを通知する。
1106
1107 イベント Private Sub OnkernelExit()
1108 カーネルが終了したことを通知する。
1109
1110 イベント Private Sub OnLogEvent( ByVal type as Long )
1111 イベントの発生を通知する。
1112 type : イベント種別 (ITRON-DBIF)
1113 0x1 : 割込みハンドラ開始 0x81 : 同終了
1114 0x2 : ISR開始 (非サポート) 0x82 : 同終了 (NOSPT)
1115 0x3 : 周期ハンドラ開始 0x83 : 同終了
1116 0x4 : CPU例外開始 0x84 : 同終了
1117 0x5 : タスク例外開始 0x85 : 同終了
1118 0x6 : タスク状æ…
1119‹å¤‰åŒ–
1120 0x7 : タスク->ディスパッチャ 0x87 : ->タスク
1121 0x8 : SVC実行開始 0x88 : SVC実行終了
1122
1123------------------
11245.2.4 ファイル出力
1125------------------
1126
1127トレースログ機能は、前述のデバイスマネージャを介してログを出力する方法の
1128ほかに、ファイルに直接ログをダンプする方法も備える。同手法を有効にするた
1129めには、com_support.cpp:585-586にある定義を次のようにå…
1130¥ã‚Œæ›¿ãˆã‚‹ã€‚
1131
1132--- 修正前 ---
1133//typedef class EventDumpRequest EventRequest;
1134 typedef class Request EventRequest;
1135--- 修正後 ---
1136 typedef class EventDumpRequest EventRequest;
1137//typedef class Request EventRequest;
1138--------------
1139
1140 ※上記修正を行うとデバイスマネージャにログ情
1141報を出力しないため、
1142 ウォッチャが沈黙することに留意されたい。
1143
1144EventDumpRequestが生成するファイルは、ITRONデバッギングインタフェース仕
1145様の標準ログ形式ではなく、同仕様で定義されたログ取得用構造体のダンプイメ
1146ージである。ただし、同ファイルを閲覧/編集するプログラム(winwatch)は、
1147TOPPERSプロジェクトの成果物ではないため、å…
1148¬å¼ãƒªãƒªãƒ¼ã‚¹ã«ã¯å«ã¾ã‚Œãªã„。
1149
1150
1151----------
11526.その他
1153----------
1154
1155------------------------------
11566.1 ディレクトリ・ファイル構成
1157------------------------------
1158
1159------------------------------------------
11606.1.1 TOPPERS/JSP Windows-HAL 構成ファイル
1161------------------------------------------
1162
1163[jsp]
1164 +- [config]
1165 | +- [windows]
1166 | +- api.h : APIガード通過用定義ファイル
1167 | +- com_support.cpp : COM関連機能実装
1168部
1169 | +- com_support.h : COM関連機能定義部
1170 | +- cpu_config.c : プロセッサ依存モジュール
1171 | +- cpu_config.h : プロセッサ依存モジュール
1172 | +- cpu_context.h : タスクコンテキスト操作ルーチン
1173 | +- cpu_defs.c : m68k風の割込みエミュレータ
1174 | +- cpu_defs.h : m68k風の割込みエミュレータ
1175 | +- cpu_rename.h : シンボル名衝突回避ヘッダファイル
1176 | +- cpu_rename.def : 衝突回避シンボル名定義ファイル
1177 | +- cpu_unrename.h : シンボル名衝突回避ヘッダファイル
1178 | +- debugout.c : デバッグコンソールモジュール
1179 | +- debugout.h : デバッグコンソール定義ファイル
1180 | +- device.h : デバイスエミュレーション用定義ファイル
1181 | +- eventlog.c : トレースログ機能 補助関数実装
1182部
1183 | +- eventlog.h ; トレースログ機能 補助関数定義部
1184 | +- hal_msg.h : カーネルシミュレータ メッセージ定義ファイル
1185 | +- hal_resource.rc : TOPPERS/JSP Windows リソースファイル
1186 | +- hw_timer.h : タイマ操作
1187 | +- hw_serial.h : シリアルエミュレーション ヘッダ
1188 | +- hw_serial.c : シリアルエミュレーション 実装
1189
1190 | +- icon1.ico : アイコンファイル
1191 | +- messages.h : デバイスエミュレーションメッセージ定義
1192 | +- primary_thread.c : エントリ
1193 | +- resource.h : リソースID定義ファイル
1194 | +- sys_config.c : システム依存モジュール
1195 | +- sys_config.h : システム依存モジュール
1196 | +- sys_defs.h : システム依存定義ファイル
1197 | +- sys_rename.h : シンボル名衝突回避ヘッダファイル
1198 | +- sys_rename.def : 衝突回避シンボル名定義ファイル
1199 | +- sys_unrename.h : シンボル名衝突回避ヘッダファイル
1200 | +- vitron.h : itron.h衝突回避用ヘッダファイル
1201 | +- vwindows.h : windows.h衝突回避用ヘッダファイル
1202 +- [tools/WINDOWS]
1203 +- configure.vbs : 自動生成スクリプト
1204 +- kernel_cfg.c : コンフィギュレータ生成ファイル
1205 +- kernel_id.h : 自動割当ID定義ファイル
1206 +- sample1.c : サンプルプログラム
1207 +- sample1.h : サンプルプログラム ヘッダー
1208 +- sample1.cfg : サンプルプログラム カーネル構成ファイル
1209 +- sample2.c : サンプルプログラム2 哲学者
1210問題
1211 +- sample2.h : サンプルプログラム2 ヘッダー
1212 +- sample2.cfg : サンプルプログラム2 カーネル構成ファイル
1213 +- windows.chk : Windows用チェックスクリプトファイル
1214 +- [vc_project]
1215 +- Toppers.dsp : Visual C++ プロジェクトファイル
1216 +- Toppers.dsw : Visual C++ ワークスペース
1217
1218
1219---------------------------------------------------------
12206.1.2 TOPPERS/JSP Windows サポートモジュール 構成ファイル
1221---------------------------------------------------------
1222
1223[windev]
1224 +- make.vbs : 自動生成スクリプト
1225 |
1226 +- [cmdwatch] : コマンドラインベース ログウォッチャ
1227 | +- cmdwatch.cpp : ログウォッチャ本体
1228 | +- cmdwatch.dsw : Visual C++ ワークスペースファイル
1229 | +- cmdwatch.dsp : Visual C++ プロジェクトファイル
1230 |
1231 +- [devicemanager] : デバイスマネージャ(COM)
1232 | +- device.cpp : デバイスオブジェクト
1233 | +- device.h : デバイスオブジェクト定義ファイル
1234 | +- device.rgs : デバイスオブジェクト登録ファイル
1235 | +- devicemanager.cpp : メインプログラム
1236 | +- devicemanager.dsp : Visual C++ プロジェクトファイル
1237 | +- devicemanager.dsw : Visual C++ ワークスペース
1238 | +- devicemanager.h : オブジェクト定義ファイル
1239 | +- devicemanager.idl : MIDLオブジェクト記述ファイル
1240 | +- devicemanager.rc : リソースファイル
1241 | +- devicemanager.rgs : AppIDレジストレーションファイル
1242 | +- devicemanagerCP.h : コネクションポイントプロキシ
1243 | +- devicemanager_?.c : プロキシ/スタブコード
1244 | +- devicemanagerps.def : プロキシ/スタブ定義
1245 | +- devicemanagerps.mk : プロキシ/スタブ Makefile
1246 | +- icon1.ico : タスクトレイ用アイコン
1247 | +- informat.bin : Informationオブジェクト登録ファイル
1248 | +- information.cpp : 情
1249報提供オブジェクト
1250 | +- information.h : 情
1251報提供オブジェクト定義ファイル
1252 | +- information.rgs : Informationレジストレーションファイル
1253 | +- kernel.cpp : カーネルオブジェクト
1254 | +- kernel.h : カーネルオブジェクト定義ファイル
1255 | +- kernel.rgs : カーネル登録ファイル
1256 | +- messages.h : メッセージ定義ファイル (旧バージョン用)
1257 | +- range.h : レンジ型定義ファイル
1258 | +- resource.h : リソース定義ファイル
1259 | +- stdafx.cpp : メインオブジェクト
1260 | +- stdafx.h : プリコンパイル対象ヘッダ
1261 |
1262 +- [devicecontrol] : VB用デバイスコントロール(COM)
1263 | +- bmp00001.bmp : コントロール表示用アイコン
1264 | +- device.cpp : DLL関連処理
1265 | +- device.def : プログラム定義ファイル
1266 | +- device.dsp : Visual C++ プロジェクト
1267 | +- device.dsw : Visual C++ ワークスペース
1268 | +- device.h : オブジェクト定義ファイル
1269 | +- device.idl : MIDLオブジェクト定義ファイル
1270 | +- device.rc : リソースファイル
1271 | +- deviceCP.h : コネクションポイントプロキシ
1272 | +- deviceco.bmp : アプリケーションアイコン
1273 | +- devicecontrol.cpp : デバイスコントロール
1274 | +- devicecontrol.h : デバイスコントロール定義ファイル
1275 | +- deviceps.def : プロキシ/スタブ定義
1276 | +- resource.h : リソース定義ファイル
1277 | +- stdafx.h : プリコンパイル対象ヘッダ
1278 | +- stdafx.cpp : (特になし)
1279 | +- [sample] : デバイスのサンプル
1280 | +- form1.frm : フォーム (テキスト)
1281 | +- form1.frx : フォーム (バイナリ)
1282 | +- sample2_ui.vbp : VisualBASICプロジェクトファイル
1283 | +- sample2_ui.vbw : VisualBASICワークスペース
1284 |
1285 +- [watcher] : VB用ログウォッチャコントロール(COM)
1286 +- kernello.bmp : ログウォッチャアイコン
1287 +- kernellogcontrol.cpp : カーネルログウォッチャ 本体
1288 +- kernellogcontrol.h : カーネルログウォッチャ ヘッダファイル
1289 +- resource.h : リソースID定義ファイル
1290 +- stdafx.h : プリコンパイル対象ヘッダファイル
1291 +- stdafx.cpp : (特になし)
1292 +- watcher.cpp : コントロール制御ルーチン
1293 +- watcher.def : プログラム定義ファイル
1294 +- watcher.dsp : プロジェクトファイル
1295 +- watcher.dsw : ワークスペース
1296 +- watcher.rc : リソースファイル
1297 +- watcher_?.c : プロキシ/スタブコード
1298 +- watcherCP.h : コネクションポイント定義ファイル
1299 +- watcherps.def : プロキシ/スタブ定義ファイル
1300
1301------------------
13027.バージョン履歴
1303------------------
1304
1305バージョンは3桁から成り、JSPのバージョン番号と一致する。バージョン以外に
1306名称がついているものは、内
1307部é…
1308å¸ƒ/特殊用途(プロトタイプなど)を意味する。
1309
1310 2003年12月19日 Release 1.4
1311 ・リリース準備
1312 ・プロジェクトディレクトリの移動に伴う修正
1313 - ドキュメント
1314 - プロジェクトファイル
1315
1316 2003年12月 3日 Release 1.4 - Prerelease γ
1317 ・ディスパッチ禁止中に割込みがå…
1318¥ã‚‹ã¨ãƒ‡ã‚£ã‚¹ãƒ‘ッチが起こるバグを修正
1319 ・デバイスマネージャをトレイに載せてメニューを追加
1320 ・COM通信リクエストにExclusiveRequestを追加
1321
1322 2003年11月10日 Release 1.4 - Prerelease β4 (続き)
1323 ・話題沸騰ポットとの仲が悪くなってきたので仲裁/調停
1324 - デバイスマネージャのコードの一部をリファクタ
1325 - ET2003のデモ用にログウォッチャを修正
1326 ・デバイスマネージャのメニューにマップ済みデバイス一覧を追加
1327
1328 2003年 8月21日 Release 1.4 - Prerelease β4 (続き)
1329 ・cygwinでコンパイルできるように手を加えた
1330 ・マルチプロセッサ用にAffinityMaskを設定
1331 ・コンソールの初期化で落ちるパスを見直した
1332
1333 2003年 6月17日 Release 1.4 - Prerelease β4
1334 ・シリアルドライバの更新に合わせてこちらも直す
1335 ・トレースログをファイルにダンプする機能を追加
1336
1337 2003年 5月 9日 Release 1.4 - Prerelease β3
1338 ・COM通信ルーチンを挿し直す
1339 ・システムロック制御の導å…
1340¥
1341 ・デバッグ用変数をいくつか導å…
1342¥
1343 ・マルチメディアタイマを使用
1344
1345 2003年 2月 1日 Release 1.4 - Prerelease β2
1346 ・DesignWave誌の付録にするためにコメントなどを修正
1347
1348 2003年 1月19日 Release 1.4 - Prerelease 2
1349 ・toppers-staff向けにé…
1350å¸ƒ (1.4 Release Candidate)
1351 - Release 1.4 向けの修正
1352 - シリアルコンソールがタスクバーに乗らないのを修正
1353 - sys_putcの実装
1354
1355
1356 2002年12月20日 Release 1.4 - Prerelease 1
1357 ・プロジェクトメンバ向けにé…
1358å¸ƒ
1359 - カーネル内
1360ログポイント 正式反映
1361 - ログ取得機構 バグフィクス
1362 - ログ機構の実装
1363
1364
1365 2002年 9月 4日 Release 1.4 - Technical Preview
1366 ・ログ取得インタフェース実装
1367
1368 - カーネル内
1369ログポイント埋め作業
1370 - デバイスマネージャにログ回送ルーチンを実装
1371
1372 - ウォッチャ作成
1373
1374 2002年 7月 7日 Release 1.3.1(続き)
1375 ・タスク例外が管理スレッド上で実行されてしまうのを回避
1376 この修正によりMSVCでのコンパイルが必
1377須に
1378 ・割込みエミュレータのena_int/dis_intを作り変える
1379 ・ところどころにコメントをうつ
1380 ・DebugOut関数を改造
1381
1382 2002年 6月30日 Release 1.3.1
1383 ・Release 1.3のときに直したと思っていたシリアルドライバのバグを修正
1384 - 管理スレッドがJSPの関数を使い、一貫性が失われるバグを修正
1385 ・Release 1.3の後に見つかったバグのフィックス
1386 - ドキュメントの修正 (デバイスマネージャ チュートリアル)
1387 - カーネル側のデバイスエミュハンドラスレッドのDispatchMessageの
1388 パラメータがポインタになっていなかったのを修正
1389 - ShellNotifyIconの削除に使っていたhWndが登録時と異なっていたために
1390 終了後もアイコンが削除されなかったバグを修正
1391 ・デバイスマネージャの修正
1392 - カーネルにKeepAlive確認割込みを設置し、カーネル強制終了後に
1393 デバイスマネージャに接続できなくなるバグを修正
1394 - 多重カーネル起動時に、どちらに接続するか確認するように修正
1395
1396 2002年 4月 6日 Release 1.3
1397 ・Release 1.3に向けたさまざま調整
1398 - WSH自動生成スクリプトの導å…
1399¥
1400 - 新規コンフィギュレータへの対応
1401 - コンフィギュレーションチェッカをデフォルトで使用するよう修正
1402 - このドキュメントの修正
1403
1404 2001年11月15日 Release 1.2
1405 ・Release1.2をリリース
1406 - 内
1407部と外部のバージョンを合わせるため、rel 1.2をスキップ
1408
1409 2001年11月12日 Release 1.1.6
1410 ・Release1.2に向けたさまざまな調整
1411 - 標準ビルド用ワークスペース & プロジェクトの変更
1412 - 無限待
1413ち回避用強制シャットダウンスレッドの導å…
1414¥
1415 - このドキュメントの修正
1416
1417 2001年11月 1日 Release 1.1.5
1418 ・sample1.cのビルド
1419 - ドキュメント中のsample1.cのビルド方法にあるcfg.exeのパスが間違っているのを修正
1420 # jsp/WINDOWS/cfg.exe -> jsp/cfg/cfg.exe
1421 - 上記修正に伴い、sample1.c用のプロジェクトワークスペースを修正
1422
1423 2001年10月24日 Release 1.1.4
1424 ・デバイスエミュ大暴走対策
1425 - COMデバイスエミュが外部からの割込み要求を受けå…
1426¥ã‚Œãªã„バグを修正
1427
1428 2001年 9月13日 Release 1.1.3
1429 ・検定仕様書対策
1430 - sns_dpnがCPU例外時にFALSEとなるバグを修正
1431 - ShellNotifyIconが消えないバグを修正
1432 - sample1.cのCPU例外をアクセス違反から、ユーザ定義例外へ修正 (例外復帰対策)
1433
1434 2001年 7月29日 Release 1.1.2
1435 ・シリアルコンソールによるスタック破壊の回避
1436 - KeyEventTrapperのCALLBACK指定が不足していたのを修正
1437
1438 2001年 3月24日 Release 1.1.1
1439 ・カーネルのデバイス終了無限待
1440ちの回避
1441 - デバイス終了イベントをSIGNAL状æ…
1442‹ã«ã™ã‚‹å‰ã«å‰Šé™¤ã—てしまい、
1443 カーネルが無限待
1444ちに陥ってしまうバグを修正
1445
1446 2001年 2月23日 Release 1.1
1447 ・TOPPERS/JSP release 1.1に合わせいろいろ修正
1448 - デバイスマネージャのファイル名を規約に従い修正
1449 - デバイスコントロールのファイル名を規約に従い修正
1450 - sample2.cをデバイスデモ用に書き直す
1451
1452 2001年 2月20日 Release 1.0.8
1453 ・バグフィックスとか
1454 - HALMSG_MESSAGESをWM_USERからWM_APPに
1455 - PrimaryDialogHandleの代å…
1456¥ä½ç½®ã‚’修正
1457
1458 2001年 1月29日 Release 1.0.7
1459 ・デバイスコントロールをリリース用に修正
1460 - グラフィックの修正/追加
1461 - OnDraw関数の修正
1462 - IDL helpstringの追加
1463 - device_com.cppにコメントを追加
1464
1465 2001年 1月12日 Release 1.0.6
1466 ・マニュアルのデバイスサポートに関する説明を追加
1467
1468 2001年 1月 4日 Release 1.0.5
1469 ・諸設定部をsys_defs.hに追い出す
1470 ・終了ルーチンの一部を改良
1471
1472 2000年12月30日 Release 1.0.4
1473 ・デバイスサポート機構をつける (COM)
1474 ・一部のハンドルの表記を正式なものにかえる (HANDLE->HWNDなど)
1475
1476 2000年12月21日 Release 1.0.3
1477 ・デバイスサポート機構をつける (メールスロット版)
1478
1479 2000年12月12日 Release 1.0.2
1480 ・Visual C++のプロジェクトファイルの位置を移動
1481 ・この文章のミスを何点か修正
1482
1483 2000年11月24日 Release 1.0.1
1484 ・タスク例外が発生しないバグを修正
1485 ・コンソールシリアルドライバがスタックを破壊するのを修正
1486
1487 2000年11月15日 Release 1.0
1488 ・最初のリリース
1489
1490以上
Note: See TracBrowser for help on using the repository browser.