#navi(Fdau) #contents -[[TOPPERS本家:http://www.toppers.jp/index.html]] -[[ITRON TCP/IPの仕様書:http://www.ertl.jp/ITRON/SPEC/tcpip-j.html]] * Field Data Aquision Unit Development [#ua82c4bf] *おしらせ [#m868a663] -TOPPERSカーネルをアップデート1.4.1 -TINETをアップデート1.2.1 *TODO [#a81a7bff] -fdml_sampling_taskとfdml_logging_taskは、fdml_rtc_taskに統合したので削除。 *TOPPERSアプリケーションの作り方 [#e8487f24] -%%TOPPERSディレクトリ直下でconfigureする方法%% -%%nservを参考にする方法%% --%%本体はtinet/netapp/dbg_cons.c%% -Interface誌2003年9月〜連載があった。 -[[ToppersDevel]]参照 *FDAUアプリケーション [#zd8e8b9e] **ファイル一覧 [#fb11e093] |~ファイル名|~内容| |adc.h |adc.cのヘッダ| |adc.c |ADC制御関数| |eeprom.h |eeprom.cのヘッダ| |eeprom.c |EEPROM制御関数| |fdau.cfg |fdau.cのコンフィギュレーション| |fdau.h |fdau.cのヘッダ| |fdau.c |FDAU全体の制御| |fdau_cons.cfg |fdau_cons.cのコンフィギュレーション| |fdau_cons.h |fdau_cons.cのヘッダ| |fdau_cons.c |コマンドインタプリタ| |fdml.cfg | fdml.cのコンフィギュレーション| |fdml.h |fdml.cのヘッダ| |fdml.c |FDML変換、送信タスク| |route_cfg.c|ルーティング処理| |rtc.h|rtc.cのヘッダ| |rtc.c|RTC制御関数| **定数一覧 [#u0828a37] |~定数名|~値|~内容| |FDAU_PRIHIGH|9|FDAU優先度高| |FDAU_PRIMID|10|FDAU優先度中| |FDAU_PRILOW|11|FDAU優先度低| |FDAU_STACKSIZE|1024|FDAUスタックサイズ| |FDAU_AVG_N|3|平均回数| |RAM_VER|0x218000|リングバッファバージョン| |RAM_DSIZE|0x218001|要素のサイズ| |RAM_TOP|0x218002|リングバッファTOPポインタ| |RAM_BOTTOM|0x218004|リングバッファBOTTOMポインタ| |RAM_START|0x218010|リングバッファの先頭| |RAM_END|0x21fffff|リングバッファの最後| |FDML_PRIMID|5|FDML優先度中| |RTC_ADRS|0x600000|RTCのベースアドレス| **グローバル変数 [#d360ab7a] |~変数名|~ファイル名|~内容| |fdau_flag_init |fdau_cons.c |設定モード判定用フラグ。3秒以内にキー入力するとTRUEになる。| |fdau_flag_event |fdau_cons.c |イベント検出時TRUEになる| |fdau_flag_retry |fdau_cons.c |リトライ時TRUEになる| **タスク分割 [#e4e754d2] |~タスク名|~優先度|~ファイル|~起動条件|~内容| |fdau_rtc_task|10|fdau.c|常時ループ|RTCを読んで、各タスクを起動する| |fdau_sampling_task|11|fdau.c|fdau_rtc_task|サンプリングタスク(移動平均SAMPLING_AVR_N回)| |fdau_logging_task|11|fdau.c|fdau_rtc_task|ログタスク(固定RAM領域のリングバッファ)| |fdau_send_task|11|fdau.c|fdau_rtc_task|FDML送信タスク| |fdml_client_task|5|fdml.c|fdau_sampling_task, fdau_send_task|FDMLクライアントタスク| |fdml_send_task|5|fdml.c|データキュー|FDAML変換、HTML化、TCPコネクト、TCP送信| |fdml_recv_task|5|fdml.c|fdml_client_task|HTTPレスポンス処理| |fdau_cons_task|9|fdau.c|シリアル入力|FDAUタスク(メイン&コンソール)| ***fdau_rtc_task [#c29e91b7] -RTCを読んで、各タスクを起動する -サンプリング周期になったらfdau_sampling_taskをwup_taskする。 -ロギング周期になったらfdau_logging_taskをwup_taskする。 -送信周期になったらfdau_send_taskをwup_taskする。 ***fdau_sampling_task [#y1f4b300] -サンプリングタスク(移動平均SAMPLING_AVR_N回) -もし、送信イベント状態になっていたら、fdml_client_taskをwup_taskする。 ***fdau_logging_task [#h211c160] -ログタスク(固定RAM領域のリングバッファ) -最終サンプリングデータをRAMリングバッファに格納する ***fdau_send_task [#nc16dad7] -FDML送信タスク -fdml_client_taskをwup_task ***fdml_client_task [#l0b13aff] -FDMLクライアントタスク -RAMリングバッファの内容をFDML化する -fdml_recv_taskをwup_task -fdml_send_taskをwup_task ***fdml_send_task [#hefb6352] -FDAML変換、HTML化、TCPコネクト、TCP送信 ***fdml_recv_task [#qda57bbc] -HTTPレスポンス処理 ***fdau_cons_task [#t8241212] -FDAUタスク(メイン&コンソール) **タスク間通信と同期 [#bc00bb7f] |~ID|~内容|~取得|~開放| |SEM_RAM|リングバッファのセマフォ|アクセス前|アクセス後| **汎用関数 [#u3e3e251] |>|LEFT:~A/D変換器制御(adc.h, adc.c)| |ER adc_init(void);|A/D変換器初期化| |ER adc_get(UB ch, UH *dat);|A/D変換値を取得| |>|LEFT:~EEPROM関数 (eeprom.h, eeprom.c)| |ER eeprom_init(void);|EEPROM I/Fの初期化| |ER eeprom_gets(UINT adr, UB *dat, UINT len);|文字列取得| |ER eeprom_puts(UINT adr, UB *dat, UINT len);|文字列書込み| |>|LEFT:~RTC制御 (rtc.h, rtc.c)| |ER rtc_init(void);|RTC I/F初期化| |ER rtc_set(struct tm *p_tm);|RTCに時刻を設定| |ER rtc_get(strust tm *p_tm);|RTCから時刻を取得| |>|LEFT:~tinet/netapp| |UB *skip_blanks (UB *line);| | |int cons_getline (UB *line, int size);| | |char *get_int (int *val, UB *line);| | |char *get_xuint (unsigned int *val, UB *line);| | |void cons_putchar (ID portid, char ch);| | |int cons_putnumber(ID portid, ULONGEST val, int radix, const char *radchar, int width, BOOL minus, char padchar);| | |void cons_printf (ID portid, const char *fmt, ...);| | |int put_macaddr (ID portid, char *mac, int width);| | |int put_ipv4addr (ID portid, ULONGEST *addr, int width);| | -RTC関数の引数はstruct tm型とした。p_tm->mdayは1月が0なので注意。 **EEPROMマップ [#ba56511d] |~定数 |~アドレス|~容量|~内容 |~デフォルト定数|~デフォルト値| |>|>|>|>|>|LEFT:~システム定数 3bytes| |ROM_VER |0x0000 |1 |バージョンチェック|ROM_VER_DATA |0x10 | |ROM_ADC_N |0x0001 |1 |ADCチャンネル数 |FDAU_ADC_MAX |8 | |ROM_IO_N |0x0002 |1 |I/Oチャンネル数 |FDAU_IO_MAX |8 | |>|>|>|>|>|LEFT:~HTTPヘッダ定数 70bytes | |ROM_HT_SCRIPT |0x0004 |32 |HTTPスクリプト |FDAU_DEF_HT_SCRIPT |"/cgi-bin/log/pl" | |ROM_HT_VER |0x00-- |0 |HTTPバージョン |FDAU_DEF_HT_VER |"HTTP/1.0" | |ROM_HT_BOUNDARY |0x00-- |0 |HTTPバウンダリ |FDAU_DEF_HT_BOUNDARY |"7d126a16201ea" | |ROM_HT_HOST |0x0024 |4 |ホストIPアドレス |FDAU_DEF_HT_HOST |"192.168.1.101" | |ROM_HT_PORT |0x0028 |2 |ホストポート |FDAU_DEF_HT_PORT |8080 | |ROM_HT_PRIORITY |0x002a |8 |HTTP優先度 |FDAU_DEF_HT_PRIORITY |"high" | |ROM_HT_AUTH_EXT |0x0032 |8 |HTTP認証モード |FDAU_DEF_HT_AUTH_EXT |"basic" | |ROM_HT_AUTH |0x003a |16 |HTTP認証 |FDAU_DEF_HT_AUTH |"DTU" | |>|>|>|>|>|LEFT:~FDMLヘッダ定数 24bytes| |ROM_FD_SYSTEMID |0x0050 |8 |システムID |FDAU_DEF_FD_SYSTEMID |"DTU" | |ROM_FD_GROUP |0x0058 |8 |グループID |FDAU_DEF_FD_GROUP |"10561" | |ROM_FD_VER |0x0060 |8 |FDMLバージョン |FDAU_DEF_FD_VER |"1.0.2" | |>|>|>|>|>|LEFT:~ADCチャンネル定義(FDAU_ADC_MAX個必要) 39bytes x 8 = 312bytes| |ROM_ADC_NAME* |0x0068 |8 |チャンネル名称 |FDAU_DEF_ADC_NAME |V* | |ROM_ADC_TYPE* |0x00-- |1 |データの型 |FDAU_DEF_ADC_ATTR |2 (double) | |ROM_ADC_UNIT* |0x00-- |8 |単位 |FDAU_DEF_ADC_UNIT |V | |ROM_ADC_MAX* |0x00-- |4 |データの最大値 |FDAU_DEF_ADC_MAX |5.0 | |ROM_ADC_MIN* |0x00-- |4 |データの最小値 |FDAU_DEF_ADC_MIN |0.0 | |ROM_ADC_A2* |0x00-- |0 |データ関数のa2 |FDAU_DEF_ADC_A2 |0.0 | |ROM_ADC_A1* |0x00-- |4 |データ関数のa1 |FDAU_DEF_ADC_A1 |0.0000762939453125| |ROM_ADC_A0* |0x00-- |2 |データ関数のa0 |FDAU_DEF_ADC_A0 |0 | |ROM_ADC_EV* |0x00-- |0 |イベント定義 |FDAU_DEF_ADC_ATTR |0 | |ROM_ADC_HIGH* |0x00-- |4 |イベントの上限値 |FDAU_DEF_ADC_HIGH |3.0 | |ROM_ADC_LOW* |0x00-- |4 |イベントの下限値 |FDAU_DEF_ADC_LOW |2.0 | |>|>|>|>|>|LEFT:~IOチャンネル定義(FDAU_IO_MAX個必要) 9bytes x 8 = 72bytes | |ROM_IO_NAME* |0x01a0 |8 |チャンネルの名称 |FDAU_DEF_IO_NAME |IN* | |ROM_IO_TYPE* |0x0--- |1 |データの型 |FDAU_DEF_IO_ATTR |0 (continue | |ROM_IO_INV* |0x0--- |0 |論理反転 |FDAU_DEF_IO_ATTR |0 | |ROM_IO_EV* |0x0--- |0 |イベント定義 |FDAU_DEF_IO_ATTR |0 | |>|>|>|>|>|LEFT:~時間定義 12bytes | |ROM_ITV_SAMPLE |0x0--- |0 |サンプリング間隔 |FDAU_DEF_ITV_SAMPLE |1 | |ROM_ITV_LOG |0x01e8 |4 |ログ間隔 |FDAU_DEF_ITV_LOG |10 | |ROM_ITV_SEND |0x01ec |4 |送信間隔 |FDAU_DEF_ITV_SEND |60 | |ROM_ITV_RETRY |0x01f0 |4 |リトライ間隔 |FDAU_DEF_ITV_RETRY |180 | |>|>|>|>|>|LEFT:~ネットワーク定義 12bytes | |ROM_NET_IP |0x01f4 |4 |IPアドレス |FDAU_DEF_IP |"192.168.1.102" | |ROM_NET_MASK |0x01f8 |4 |ネットマスク |FDAU_DEF_MASK |"255.255.255.0" | |ROM_NET_GW |0x01fc |4 |ゲートウェイ |FDAU_DEF_GW |"192.168.1.1 | -HTTPバージョンとHTTPバウンダリは固定する -IPアドレス類はバイナリで格納 -データ関数はa1 * (x + a0)とする。 -データの型はインデックス化し、さらに、論理反転フラグ、イベントフラグとビットORする -サンプリング間隔は1秒固定 ***ADCとGPIOのattributeの設定 [#i5509f2d] -ビット構成 |~Bit7 |~Bit6 |~Bit5 |~Bit4 |~Bit3 |~Bit2 |~Bit1 |~Bit0 | |反転 |>|>|データ型 |>|>|>|イベントフラグ | -反転ビット |>|LEFT:~反転 | |Bit7 | 内容 | |0 |GPIOが5Vのとき、FDMLで1を生成 | |1 |GPIOが5Vのとき、FDMLで0を生成 | -データ型 |>|>|>|LEFT:~データ型| |Bit6|Bit5|Bit4|内容| |0|0|0|boolean| |0|0|1|int| |0|1|0|double| |0|1|1|string| -イベントフラグ |>|>|>|>|LEFT:~イベントフラグ| |Bit3|Bit2|Bit1|Bot0|内容| |0|0|0|0|イベントなし| |0|0|0|1|[GPIO](反転変換後)立上り、[ADC]設定範囲内に入った| |0|0|1|0|[GPIO](反転変換後)立下り、[ADC]設定範囲外を出た| |0|0|1|1|[GPIO](反転変換後)立上り、立下り、[ADC]設定範囲内に入った、出た| **FDCレスポンスコード [#y3863d1b] |~記号 |~コード |~意味 |~FDAUの動作 | |HTTP_OK |200 |正常終了 |ログをクリア | |HTTP_BADREQ |400 |リクエストエラー |送信リトライ | |HTTP_UNAUTH |401 |認証エラー |送信リトライ | |HTTP_NOTFND |404 |未検出エラー |送信リトライ | |HTTP_SVERR |500 |内部エラー |送信リトライ | |HTTP_UNAVA |503 |利用不可 |送信リトライ | **主要コマンド [#aa2aa3ea] -電源投入後3秒以内にキーインすると、fdau_rtc_taskとfdml_send_taskをwaiting状態にする。 |~コマンド|~機能| |ps |タスクの状態を表示| |suspend |タスクをwaiting状態にする| |release |タスクをdomant状態にする| |logadd |ログに追加| |logdump |ログを表示| |logclear |ログをクリア| |ifconfig |LANCの設定| |route |ルータの設定| |ping |ping| |adcget |ADCから生データを得る| |rtcset |RTCをセットする| |rtcget |RTCから時刻を得る| |eedump |EEPROMの内容を表示| |eewrite |EEPROMに書込み| |set |動作パラメータの設定| |printenv |動作パラメータの表示| *TOPPERSのポーティング [#t40cb311] -doc/config.txtを参照 -システム名fdau10として、config/h8/fdau10を作成 --akih8_3069fからコピー --config/h8/fdau10/release.ld ---RAM領域をCS1に変更 ---RAM容量を128Kバイトに変更 --config/h8/fdau10/sys_support.S ---CS1をSRAM領域に変更 ---LANC割込みハンドラをIRQ0に変更 --config/h8/fdau10/tinet_sys_config.h ---LANCのベースアドレスを0x400000に変更 ---LANCの割り込みをIRQ0に変更 --config/h8/fdau10/Makefile.config ---ROM上で実行させるなら、DBGENVを全てコメントアウト -H8 to LANC I/Fの変更 --tinet/netdev/if_ed/if_edreg.h -Makefile内のDBGENV:=は全てコメントアウト -sample1.cでの動作確認 JSP Kernel Release 1.4 (patchlevel = 0) for FDAU10 (Oct 12 2004, 12:14:16) Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory Toyohashi Univ. of Technology, JAPAN System logging task is started on port 2. Sample program starts (exinf = 0). task1 is running (001). | task1 is running (002). | task1 is running (003). | task1 is running (004). | task1 is running (005). | task1 is running (006). | キーには反応なし・・・~ フロー制御しなければOK。TOPPERSはフロー制御していない様子。 -nservで動作確認 JSP Kernel Release 1.4 (patchlevel = 0) for FDAU10 (Oct 12 2004, 12:17:26) Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory Toyohashi Univ. of Technology, JAPAN System logging task is started on port 2. [CONSOLE:7] started. [WWW:08,05] started. [WWW:09,06] started. [UDP ECHO SRV (NBLK):10,2] started. [UDP ECHO CLI:11,1] started. [UDP DISCARD CLI:12,3] started. [TCP ECHO CLI SND:13,1] started. [TCP ECHO CLI (NBLK) RCV:14,1] started. [TCP DISCARD CLI:15,2] started. [TCP DISCARD SRV:16,4] started. [TCP ECHO SRV (NBLK) RCV:17,3] started. [TCP ECHO SRV (NBLK) SND:18,3] started. [ETHER INPUT: 6] started on MAC Addr: 00:02:cb:01:74:db. [ETHER OUTPUT:5] started. TINET Release 1.2 for JSP Kernel Release 1.4 (Oct 12 2004, 08:10:07) Copyright (C) 2001-2004 by Dep. of Computer Science and Engineering Tomakomai National College of Technology, JAPAN [NET/TIMER:2] started. [TCP OUTPUT:3] started. [UDP OUTPUT:4] started. MACアドレスは読めてるけど、キー入力に応答なし~ フロー制御しなければOK。TOPPERSはフロー制御していない様子。 --ECHOコネクト ---ネットワーク内ECHOコネクト 18:14:28.926653 arp who-has 192.168.100.135 tell 192.168.100.45 18:14:28.926914 arp reply 192.168.100.135 is-at 0:40:26:14:1c:b8 18:16:46.703450 192.168.100.45.1025 > 192.168.100.135.7: S 35031342:35031342(0) win 2048 <mss 1460> 18:16:46.703813 192.168.100.135.7 > 192.168.100.45.1025: S 3066581622:3066581622(0) ack 35031343 win 57344 <mss 1460> 18:16:46.722062 192.168.100.45.1025 > 192.168.100.135.7: . ack 1 win 2048 18:16:46.749656 192.168.100.45.1025 > 192.168.100.135.7: . 1:1461(1460) ack 1 win 2048 18:16:46.750950 192.168.100.135.7 > 192.168.100.45.1025: P 1:1461(1460) ack 1461 win 58400 (DF) 18:16:46.753061 192.168.100.45.1025 > 192.168.100.135.7: P 1461:2049(588) ack 1 win 2048 18:16:46.765182 192.168.100.45.1025 > 192.168.100.135.7: . ack 1461 win 2048 ---ネットワーク内ECHOクローズ 18:17:27.544073 192.168.100.135.7 > 192.168.100.45.1025: P 75709:76001(292) ack 76001 win 58400 (DF) 18:17:27.624243 192.168.100.45.1025 > 192.168.100.135.7: . ack 76001 win 2048 18:17:28.706730 192.168.100.45.1025 > 192.168.100.135.7: F 76001:76001(0) ack 76001 win 2048 18:17:28.707073 192.168.100.135.7 > 192.168.100.45.1025: . ack 76002 win 58400 (DF) 18:17:28.709513 192.168.100.135.7 > 192.168.100.45.1025: F 76001:76001(0) ack 76002 win 58400 (DF) 18:17:28.713655 192.168.100.45.1025 > 192.168.100.135.7: . ack 76002 win 2048 ---ルータ越しのECHOコネクト 17:13:54.033025 arp who-has 192.168.100.2 tell 192.168.100.44 17:13:54.033177 arp reply 192.168.100.2 is-at 0:90:cc:1:5:9c 17:13:54.045612 192.168.100.44.1025 > 219.96.212.110.7: S 115231945:115231945(0) win 2048 <mss 1460> 17:13:54.046750 219.96.212.110.7 > 192.168.100.44.1025: S 1554721676:1554721676(0) ack 115231946 win 65535 <mss 1460> 17:13:54.053437 192.168.100.44.1025 > 219.96.212.110.7: . ack 1 win 2048 17:13:54.080221 192.168.100.44.1025 > 219.96.212.110.7: . 1:1461(1460) ack 1 win 2048 17:13:54.082845 192.168.100.44.1025 > 219.96.212.110.7: P 1461:2049(588) ack 1 win 2048 17:13:54.085576 219.96.212.110.7 > 192.168.100.44.1025: P 1:1461(1460) ack 1461 win 65535 (DF) 17:13:54.098008 192.168.100.44.1025 > 219.96.212.110.7: . ack 1461 win 2048 ---ルータ越しのECHOクローズ 17:14:34.816392 219.96.212.110.7 > 192.168.100.44.1025: P 75709:76001(292) ack 76001 win 65535 (DF) 17:14:34.902897 192.168.100.44.1025 > 219.96.212.110.7: . ack 76001 win 2048 17:14:35.583496 192.168.100.44.1025 > 219.96.212.110.7: F 76001:76001(0) ack 76001 win 2048 17:14:35.583921 219.96.212.110.7 > 192.168.100.44.1025: . ack 76002 win 65535 (DF) 17:14:35.606636 219.96.212.110.7 > 192.168.100.44.1025: F 76001:76001(0) ack 76002 win 65535 (DF) 17:14:35.610263 192.168.100.44.1025 > 219.96.212.110.7: . ack 76002 win 2048 -ポーティング --&ref(fdau10_041012.tgz);をconfig/h8で展開。fdau10を作る。 --&ref(if_ed_041012.tgz);をtinet/netdevで展開。if_edを変更する。