source: azure_iot_hub_riscv/trunk/asp_baseplatform/monitor/README.txt@ 453

Last change on this file since 453 was 453, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/plain;charset=UTF-8
File size: 19.6 KB
Line 
1
2 = TOPPERS/JSPカーネル ユーザズマニュアル =
3 (monitor、netDeviceの説明、newlib標準入出力の対応)
4
5 (Release 1.4.3 対応,最終更新: 11-27-2010)
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 Copyright (C) 2003-2004 by Takagi Nobuhisa
15 Copyright (C) 2003-2010 by Ryosuke Takeuchi
16 GJ Business Division RICOH COMPANY,LTD. JAPAN
17
18 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
19 によって公表されている GNU General Public License の Version 2 に記
20 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
21 を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
22 利用と呼ぶ)することを無償で許諾する.
23 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
24 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
25 スコード中に含まれていること.
26 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
27 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
28 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
29 の無保証規定を掲載すること.
30 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
31 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
32 と.
33 (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
34 作権表示,この利用条件および下記の無保証規定を掲載すること.
35 (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
36 報告すること.
37 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
38 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
39
40 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
41 よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
42 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
43 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
44------------------------------------------------------------------------
45/*
46 * Copyright (c) 1990 The Regents of the University of California.
47 * All rights reserved.
48 *
49 * Redistribution and use in source and binary forms are permitted
50 * provided that the above copyright notice and this paragraph are
51 * duplicated in all such forms and that any documentation,
52 * advertising materials, and other materials related to such
53 * distribution and use acknowledge that the software was developed
54 * by the University of California, Berkeley. The name of the
55 * University may not be used to endorse or promote products derived
56 * from this software without specific prior written permission.
57 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
58 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
59 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
60 */
61
621.monitorについて
63
641-1.解説
65本モニタは、TOPPERSプロジェクト教育WGの実装教育用に作成されたプログラム
66です。TOPPERS/JSP1.4.1上でタスクとして実行します。実行確認は以下の4つの
67環境環境で実行確認を行っています。
681)m16c(OAKS16-miniとOAKS16) ルネサステクノロジ製TM
692)h8(AKIH8-3048,AKIH8-3069F) PizzaFactory2+GNU(h8300-hms)
70 cygwin+GNU(h8300-hms)
713)sh2(hsb7616it) cygwin+GNU(sh-hitachi-elf)
72
731-2.コンソールの指定
74タスクモニタのコンソールは通常はシリアルデバイスを対象としています。
75MONTSK(タスクモニタのタスク)の起動の引数で渡されるexinfの値をモニタの
76通信出力デバイスとしています。但し、netDeviceのサーバとして起動する場合
77コンソールはWindows上のnetTermとなります。
78
791-3.コンパイルスイッチ
80タスクモニタのビルドで実行機能を指定するコンパイルスイッチについて説明します。
81
821)MONITOR_PORTID
83モニタのデフォルトポートはシリアルコンソール(CONSOLE_PORTID)ですが、
84モニタの起動コンソールを変更したい場合、コンパイルスイッチに
85-DMONITOR_PORTID=nを指定すると変更が可能です。このとき、指定ポートのオープンは
86モニタの起動時に行います。(Ver1.1.0のNEED_OPENのスイッチは削除します)
87
882)SUPPORT_PIPE
89このスイッチを定義すると、外付けのコマンドを拡張します。
90外付けコマンドは第1コマンド"PIPE"で起動します。
91外付けコマンドの連絡関数はpipe_command(B *command);で設定してください。
92
933)SUPPORT_ETHER
94TINETのコマンドサービス及びnetDeviceのコマンド拡張を行います。
95このコマンドは第1コマンド"NET"で起動します。
96
974)START_TASKID
98netDEviceの接続時、自動実行するタスク番号を指定します。
99-DSTART_TASKID=1
100のように指定すると、netDeviceの接続後、教材のプログラムが自動的に実行します。
101
1025)NEED_MONITOR
103このコンパイルスイッチを指定すると、モニタの起動時にneed_monitor()関数を呼び
104出します。この関数の戻り値がFALSEの場合、モニタタスクを終了します。
105
1066)MONITOR_DELAY
107このコンパイルスイッチが指定された場合、モニタの起動時、コンソールの出力を
108MONITOR_DELAY(ms)待ちを行った後で行います。
109
1101-4.TOPPERS/JSPの実装拡張について
111タスクモニタの以下の機能を実現するためにTOPPERS/JSPの実装依存configに
112いくつかの改造が必要です。
113
1141)_kernel_break_waitの定義の追加(必須)
115JSPカーネルのサービスコールでの待ち状態の判定のために、_kernel_break_wait
116ラベルをサービスコールの待ちプログラム位置に定義する必要があります。
117サービスコールの待ちプログラム位置は通常各CPUのcpu_support.Sの何れかの
118位置にあります。
119
1202)iana_tskのリンクポイントの設定(必須ではない)
121タスクモニタでは各タスクの実行履歴をdispatchのタスク切り替え時にiana_tsk
122関数を呼び出すことで情報収集を行っています。そのためiana_tskの呼び出しに
123より、スイッチング時間が大きく低下します。しかし、"log task"コマンドによる
124タスク情報はリアルタイムシステムの検証には有用な手段です。
125通常はコンパイルスイッチMONにより、取り外し可能とし、必要のない場合は
126取り外して、使用してください。
127dispatch関数は通常各CPUのcpu_support.S中にあります。
128
1291-5.タスクモニタのマニュアル
1301)displayコマンド
131display byte [<start address> [<end address>]]
132 <start address>から<end address>までのメモリまたはポート領域を
133 1バイト単位に表示する。<end address>を省略した場合は128バイトの
134 表示を行う。<start adress>を省略した場合は、前回表示を行った次の
135 アドレスから表示を行う。
136
137display half [<start address> [<end address>]]
138 <start address>から<end address>までのメモリまたはポート領域を
139 2バイト単位に表示する。<end address>を省略した場合は128バイトの
140 表示を行う。<start adress>を省略した場合は、前回表示を行った次の
141 アドレスから表示を行う。
142
143display word [<start address> [<end address>]]
144 <start address>から<end address>までのメモリまたはポート領域を
145 4バイト単位に表示する。<end address>を省略した場合は128バイトの
146 表示を行う。<start adress>を省略した場合は、前回表示を行った次の
147 アドレスから表示を行う。
148
149display task
150 登録されたタスクの内容を表示する。表示内容は以下の通り。
151 cur カレントタスクに*、モニタタスクはmonを表示する。
152 id タスクIDを表示する。
153 pri 初期値のタスク優先度
154 state タスクの状態
155 pc RUN状態以外なら、現在のプログラムカウンタ値
156 stack 現在のスタックアドレス
157 inistack 初期値スタックの先頭アドレス
158 inisize 初期値スタックのバイトサイズ
159
160diaplay register
161 カレントタスクが待ち状態となった場合、待ち状態のレジスタの内容を
162 表示する。サービスコール中の待ちではレジスタの保存を行わない為、
163 レジスタの表示は行わない。レジスタの内容はCPUによって異なる。
164
1652)setコマンド
166set byte [<start address>]
167 <start address>の内容を1バイト表示し入力待ちとなる。16進数入力後
168 <RETURN>にてバイト値を入力すると<start address>に値を書込み後、
169 <start address>の内容を再表示し<start address>+1の内容の入力待ちとなる
170 .<RETURN>にてsetコマンドを終了しプロンプト表示に戻る。<start address>
171 を省略した場合、最後に書込んだ次のアドレスの書込みを行う。
172
173set half [<start address>]
174 <start address>の内容を2バイト表示し入力待ちとなる。16進数入力後
175 <RETURN>にてバイト値を入力すると<start address>に値を書込み後、
176 <start address>の内容を再表示し<start address>+2の内容の入力待ちとなる
177 .<RETURN>にてsetコマンドを終了しプロンプト表示に戻る。<start address>
178 を省略した場合、最後に書込んだ次のアドレスの書込みを行う。
179
180set ward [<start address>]
181 <start address>の内容を2バイト表示し入力待ちとなる。16進数入力後
182 <RETURN>にてバイト値を入力すると<start address>に値を書込み後、
183 <start address>の内容を再表示し<start address>+2の内容の入力待ちとなる
184 .<RETURN>にてsetコマンドを終了しプロンプト表示に戻る。<start address>
185 を省略した場合、最後に書込んだ次のアドレスの書込みを行う。
186
187set command [<mode>]
188 コマンドモードを設定する。モードは1(1コマンド)、2(2コマンド)モードで
189 デフォルトは2コマンドモード(例:displayとbyteの2つのコマンドで
190 コマンド設定を行う)である。1コマンドは2コマンドの先頭の1文字を組み合
191 わせた1つのコマンドでコマンド設定を行う。(例:display byteではdb)
192 <mode>を省略すると現在のコマンドモードの表示を行う。
193 2コマンドモードでも、コマンドの最初の1文字の入力で実行可能である。
194 (例:display byteでは d b)
195
196set serial [<portid>]
197 タスクモニタの入出力対応のシリアルのポート番号を<porid>で変更する
198 <portid>を省略すると現在のポート番号を表示する。
199
200set task [<task id>]
201 <task id>で指定したタスクにカレントタスクを変更する。
202 <task id>を省略するとモニタタスクをカレントタスクに設定する。
203
2043)taskコマンド
205task activate
206 カレントタスクにact_tsk(<カレントタスクID>)サービスコールを発行する。
207
208task terminate
209 カレントタスクにter_tsk(<カレントタスクID>)サービスコールを発行する。
210
211task suspend
212 カレントタスクにsus_tsk(<カレントタスクID>)サービスコールを発行する。
213
214task resume
215 カレントタスクにrsm_tsk(<カレントタスクID>)サービスコールを発行する。
216
217task priority [pir]
218 カレントタスクにchg_tsk(<カレントタスクID>, <pri>)サービスコールを
219 発行する。
220
2214)logコマンド
222log mode [<logmask> [<lowmask>]]
223 syslogの表示モードを変更する。<logmask>と<lowmask>を省略した場合
224 現在の<logmask>と<lowmask>を表示する。設定値のマスクの対応は
225 以下の通りである。
226 <マスク> <設定値>
227 LOG_EMERG 0 シャットダウンに値するエラー:lowmask default
228 LOG_ALERT 1
229 LOG_CRIT 2
230 LOG_ERROR 3 システムエラー
231 LOG_WARNING 4 警告メッセージ
232 LOG_NOTICE 5 :logmask default
233 LOG_INFO 6
234 LOG_DEBUG 7 デバッグ用メッセージ
235 logmask defaultとlowmask defaultは電源RTOS起動後のデフォルト値
236
237log task [<cycle time>]
238 <cycle time>ms周期に各タスクの前周期からのタスクの実行時間を表示する。
239 <cycle time>を省略した場合、前回のlog task表示からの各タスクの
240 実行時間を表示する。
241
242log port [<no> <logno> [<portaddress>]]
243 ポートモニタ機能の設定。<portaddress>を設定した場合<portaddress>が
244 アクセスされるたびに<logno>にてアクセスデータをsyslogにてログ表示
245 する。
246 <no> <logno> <portaddress>の設定にて<portaddress>を<no>にlogmaskを
247 <logno>にてポートモニタの設定を行う。但し、<logno>は1以上7までの値。
248 <no> <0>の設定にてポートモニタの解除を行う。
249 引数を省略すると、ポートモニタの登録状態の表示を行う。
250
2515)volumeコマンド
252TINETが有効であり、SUPPORT_VOLUMEコンパイルスイッチが有効の場合のみ使用可能な
253コマンドである。
254volume format <drive>
255 <drive>に対してフォーマットを行う。
256
257volume dir [<path>]
258 <path>のディレクトリを表示する。<path>を省略した場合、デフォルト
259 deriveのディレクトリを表示する。
260
261volume mkdir <path>
262 <path>で指定したディレクトリを作成する。
263
264volume rmdir <path>
265 <path>で指定したディレクトリを削除する。
266
267volume erase <path>
268 <path>で指定したファイルを削除する。
269
2706)pipeコマンド
271SUPPORT_PIPEコンパイルスイッチが有効で、拡張コマンドが用意されている場合のみ
272有効なコマンドであり、コマンド仕様は拡張されたユーザ設定コマンドの仕様に
273従う、セカンドコマンドがユーザ設定コマンドとなる。
274
2757)helpコマンド
276モニタコマンドのヘルプ情報を表示する。
277
2782.モニタの入出力に関して
279モニタのデータ取り込みは、(FILE*)mon_infileに対するデータ取り込みを行う
280モニタのデータ送信は、標準入出力の出力ファイル(stdout)に対して行う。
281
282
2833.標準入出力の対応
284
2853-1.解説
286標準入出力はnewlib版と簡易版を選択できます。
287newlib版は簡易版に比べ、H8のサイズで32KBほど大きくなります。
288状況に応じて、選択してください。
289newlib版はh8の環境のみ実行確認を行っています。他の環境では
290実行確認を行っていません。
291
292
2933-2.簡易版標準入出力
294monitorデレクトリィ中の以下のファイルを使用します
295 stdio.h  (newlib中のstdio.hに優先して参照する)
296 printf.c  (printf文)
297 sprintf.c (sprintf文)
298サポートしている標準入出力関数はstdio.hを参照してください
299また、printf関数やsprintf関数がlibc.aに優先してリンクされるように
300ライブラリィより前に、printf.oとsprintf.oを取り込むようにしてください。
301また、OAKS16用の開発環境TMで使用する場合はstdio.hを削除しMTOOLの
302stdio.hを使用するようにしてください。
303
3043-3.newlib版標準入出力
305monitorデレクトリィ中のstdio.h、stddev.c、printf.c、sprintf.cを参照しない
306ように、これらのファイルを削除してください。
307また、monitor/Makefile.config中からstddev.o、printf.o、sprintf.oをビルド時
308にリンクしないように削除してください。
309newlib中の標準入出力は、putcharやputcのような一文字出力関数は\n(改行)コードが
310ないと表示を行いません。また、printfやputsのような文字列出力関数は\nコードが
311付けられて出力されます。
312putcharやputcの対応を行うには、初期化としてバッファのない指定を行えば
313解決できます。この教材ではnewlibrc.cを改造し、タスクモニタの初期化時、
314setbuf(stdio, 0);関数にて、出力バッファなしの指定を行っています。
315タスクモニタを使用しない場合は、setbufの設定を自分で行ってください。
316printfやputsのような文字列の出力関数に関しては、newlib中のputs.cを
317修正することにより、これを回避することが出来ます。
318詳細は3.newlibの改造を参照してください。
319
320ライブラリィのビルド手順は以下の通りです。
321/home/roi/gnuにnewlibの凍結ファイルをコピーし
322gnu>tar zxvf newlib-1.11.0.tar.gz
323gnu>mkdir /usr/local/h8300-hms
324gnu>mkdir newlib-objdir
325gnu>cd newlib-objdir
326gnu>export TARGET_CFLAGS=-DREENTRANT_SYSCALLS_PROVIDED
327gnu>/home/roi/gnu/newlib-1.11.0/configure --target=h8300-hms --prefix=/usr/local/h8300-hms
328gnu>make
329gnu>make install
330
331アプリケーションのビルド時、標準入出力用の実装部として改造した
332systask/newlibrt.cをリンクする必要があります。
333
334
3353-4.newlibの改造(newlib-1.11.0/newlib/libc/stdio/)
336puts.cの修正部
337/*
338 * Write the given string to stdout, appending a newline.
339 */
340
341int
342_DEFUN (_puts_r, (ptr, s),
343 struct _reent *ptr _AND
344 _CONST char * s)
345{
346 size_t c = strlen (s);
347 struct __suio uio;
348 struct __siov iov[2];
349
350 iov[0].iov_base = s;
351 iov[0].iov_len = c;
352#if 0 /* TOPPERS.JSP */
353 iov[1].iov_base = "\n";
354#else /* TOPPERS.JSP */
355 iov[1].iov_base = "\0";
356#endif /* TOPPERS.JSP */
357 iov[1].iov_len = 1;
358 uio.uio_resid = c + 1;
359 uio.uio_iov = &iov[0];
360 uio.uio_iovcnt = 2;
361
362 _REENT_SMALL_CHECK_INIT(_stdout_r (ptr));
363 return (__sfvwrite (_stdout_r (ptr), &uio) ? EOF : '\n');
364}
365
366
367また、標準入出力用のローレベル関数はsystask/newlibrt.cに記載してあります。
368既存のnewlibrt.cはnewlib用のC言語ライブラリィとC++言語ライブラリィと
369初期化プログラムがいっしょに記述してありましたので以下の2つのソースに
370分けました。newlibの標準入出力を使用する場合は新しいnewlibrt.cを
371プログラムのビルド時にリンクするようにしてください。
372・新しいnewlibrt.c:C言語用のnewlibライブラリィのTOPPERSとのI/F部
373・cpplibrt.c:C++言語用の関数と初期化プログラム
374
Note: See TracBrowser for help on using the repository browser.