UMEHOSHI ITA TOP PAGE    COMPUTER SHIEN LAB

「umehoshiEdit」ツールの解説とソースダウンロード

ソースダウンロード位置へ
umehoshiEditツールの最初の設定やプログラミングの方法は、このページをご参照ください。
ここでは、それ以外の補足的な紹介を行います。

「umehoshiEdit」ツールの解説(使い方の補足)

以下は、msg3.cのソースファイルをビルドして成功した時のイメージを示したものです。
このツール自体がビルドをしているのではなく、ビルド用のコンパイラなどは、
 このページでインストールした環境(例えば[C:Microchip\xc32\v2.10]に存在する直下にある)のbin内を 参照して動作します。
この位置は、[change sdk tool path]のメニュー項目選択でコンパイラなどの位置を変更できます。
このコンパイラ位置やソースファイルのフォルダ位置情報などは、「umehoshiEdit.exe」の同じ位置に作られる「appconf.txt」に記憶されます。
この情報で、ツール再び開いた時、以前のいくつかの設定情報が継続して利用できます。
なお、各ソースファイルを入れるフォルダ内には、「common.h」と「mylinkerscript.ld」のリンカスクリプトファイルが必要です。
これらは、umehoshiEditW22.zipよりコピーしてお使いください。
リンカスクリプトファイルの内容などは、Microchip社が公開している DS50002186A_JP.pdf , DS50001686G_JP.pdfのドキュメントをご参照ください。

上記のように、下部の[message]タブ内の最後に[Build successful]や「ビルドを成功しました」などのメッセージが出れば、 中央の画面部の一つのソースファイルを対象にしたビルドが終わって、 そのファイル名に「.hex」を付加したファイルが生成できたことを意味します。
(複数のソースファイルを結合してビルドする操作は存在しません。)

以下に変数 n の直後にセミコロンがなく、エラーが生じた場合の例も示します。

エラー時は上記のように、エラーの行を指摘するメッセージと、ソースのエラー近辺の行を反転して位置を知らせます。
エラー時の場合は、対応の.hexファイルを更新しません。

なお、エラー箇所を探す場合やキーワドを探す場合、ソースファイル内の文字列検索の機能を使うと便利です。
メニュー操作でも可能ですが、ソースファイル内の文字列を選択状態にして「Ctrl」+「F」の操作を行うと、 選択状態の文字列をComboBoxに追加する記憶する機能が働きます。

上記は[Find:]に"for"の文字列が設定された例で、この状態で[Next]ボタンをクリックすると、"for"の文字列を後方に探して、 見つかった箇所を反転表示します。 [Previous]ボタンが前方検索で、右の[Replace]に文字列を入力した場合は「置き換え検索」もできます。
ComboBoxに追加された文字列は、再び使う場合は、選択だけで可能です。
   (これは、実行アドレスなどのComboBoxも同じように、使うと追加記憶されます。)

以下は、USBで続された[UMEHOSI ITA]に「msg3.c.hex」のファイル内容をを送信する操作例のイメージです。
この送信操作の前にUSBの接続処理をしておく必要があります。
それには、「communication」メニューの[Check COM]を選択して、その下の[List up COM]から 「デバイス マネージャー」表示で「ポート(COMとLPT)」内の接続に対応する通信ポートの「COMn」を指定します。
(この操作をしても、下記のような送信ができない場合はumehoshiEditツールを起動し直してください。
また、以前の接続を記憶する機能があり、USBのケーブル接続をしてからumehoshiEditツールを起動すると、自動的に以前の 「COMn」が使われて、メニューの設定操作なしで転送ができます。)
送信は「Hex Send」のメニュー項目を選択すればよいのですが、送信対象のファイルを編集画面に出さなくても、 そのビルド元であったソースファイルが(下記例では「msg3.c」)が編集画面になっていれば、 対応するヘキサファイル(下記例では「msg3.c.hex」)が存在すれば、それが送信対象となり[UMEHOSI ITA]へ送信されます。

[UMEHOSI ITA]への送信に対する応答データの受信文字列が、umehoshiEditツールの下部にある[Communiaction]タブ内に表示されます。
この[Communiaction]タブ内には、[UMEHOSI ITA]からの受信文字列を表示するようになっているのです。
また、[Communiaction]タブ内ではキー入力・編集操作できて、[Enter]キーを押すとその行の文字列を[UMEHOSI ITA]へ送信することができます。
つまり、「UME専用Hexコマンド」のページで示すコマンド文字列をキー操作で送信することが可能です。

実行文字列の送信は、[Execute]ボタン操作で、Execute AddressのComboBoxの16進表現のメモリ位置にある関数を直接に呼び出します。

上記では、0x800005000の関数を実行させる「UME専用Hexコマンド」として、"R00800050000061"の文字列を生成して送っています。


umehoshiEditツールからumehoshiアプリのTCPサーバに接続して、 「.umh」のumehoshiフォーマット文字列を送信することで、サーバで接続した[UMEHOSI ITA]を遠隔操作できます。
その場合は、あらかじめ「.umh」のファイルを作成しておきます。 「.umh」の作り方は、先頭行にボタン表示用文字列の1行があり、その後に、「UME専用Hexコマンド」の文字列を 列挙する表現です。
例えば、上記で示した実行用"R00800050000061"の文字列を、exceuteの表示ボタン用としてexceute.umhのファイル名で作る場合、 その内容は次のようになります。

EXECUTE
R00800050000061

『上記のように作ったumehoshiアプリ制御用ファイルを「.umhファイル」と呼ぶことにします。』

「.umh」のファイルをWifiを使ったTCPで送信して遠隔操作する方法です。

上記のイメージでのファイルをumehoshiアプリのTCPサーバに送信する場合は、 次のように「.umh」のファイルの右クリックで行います。
(可能なファイルは、拡張子が「.umh」のファイルだけです。)

これで、まだTCP接続していない場合は、次のようなダイアログが現れるので、 umehoshiアプリのTCPサーバとして実行させている時の IPアドレスとポート番号を指定します。







このダイアログはTCP接続していない場合に出現するものです。
接続済みの状態で、「.umh」のファイルの右クリック操作のファイル送信を行う場合は出現しません。
この通信時の[Communiaction]タブ内は、TCP接続したサーバから送られる受信文字列を表示します。

なお、上記イメージのメニューにあるように、[ADC to CSV]のチェックを入れると、ADCデータが記憶される.csvのファイルや 自身のMusicフォルダ内にumehoshiEdit.wavを作る検討用機能があります。
生成されるumehoshiEdit.wavは、検討用で8KHz,モノラル,16bit 10秒サンプリング専用で記録するオマケ機能です。




ソースファイル概要とダウンロード

下記の表内で上のソースが下の方のソースで利用される関係です。

このビルドに必要なソース群はumehoshiEditW22Src.zipのダウンロードで、入手できます。 (変遷)
Microsoft Visual Studio Community 2019を使う場合、 テンプレートで「Windows フォームアプリケーション(.NET FRamework C#)」を選択し、
「umehoshiEdit」のプロジェクト名で「.NET Framework 4.5」以上のターゲットフレームワークのプロジェクトを作ります。
一度終了して、プロジェクトフォルダ内の「umehoshiEdit」に、ダウンロードで解凍した「umehoshiEdit」フォルダを上書きします。
再びプロジェクトを開いた後で、ソリューションエクスプローラ内の追加から「既存の項目」を選択し、 解凍した「umehoshiEdit」内のファイル群を追加します。
なお、インターネットからダウウンロードしたUmehoshiEditForm.resxなどのファイルに Web のマークがあるため、ビルドで失敗します。
そのファイルは、右クリックでプロパティを出して、Web のマークを削除のチェックをしてから使ってください。

ファイル名説明
Config.cs アプリの終了時にConfKeyのキーの情報保存し、起動時に記憶した情報を復元する「Config」クラスを定義.
また、各種設定用の補佐関数がstaticで定義( comboBox の設定関連のstatic メソッド)
HexCom.cs USB CDC「Universal Serial Bus Communications Device Class」の通信関連のstaticメソッド群を定義
受信したデータを直接にUmehoshiEditFormを参照してUIへ反映させる処理を含むメソッドを定義している。
(バッファリングや「UMEHOSHI ITA」送受信文用字列操作、MySerialPort クラスの補助関数群)
USBシリアル受信で実行するイベントハンドラ「dataReceived(byte[] data)」の定義していおり、
それが、1行分の受信データがdataでMySerialPortクラスより呼び出される。
このdataReceivedでは、引数の「Communicationタブに表示すべき1行」をキューに入れる処理を行っている。
そして、キューが空でなければ SetRecDataWithQueTaskRun()を呼び出して、キューより取り出して、 Communicationタブに表示している。
MySerialPort.cs USB CDC「Universal Serial Bus Communications Device Class」の通信関連の管理クラス
CDCの初期化、接続管理、通信スレッドなど、HexComのstaticメンバを利用して動作する。
ReceiveData()メソッドが受信スレッドで、バイト受信の繰り返しで処理される。
1行分の受信データが蓄えられた時点でDataReceived(eventRecBuffer)の実行でHexCom.dataReceived(byte[] data)を呼び出している。 なお、ADC用の受信処理もここで定義される受信スレッド内で分岐して、UmePlotForm.setADC_data(code);を呼び出して 処理される。
UmePlotForm.Designer.cs
ADCの受信情報をグラフ化するFormの部品配置コード
UmePlotForm.cs 上記のADCの受信情報をグラフ化に関する処理コードがある
それを補佐する描画処理のDoubleBufferクラスを定義
ADCの受信状態では、 USBの受信スレッドから直接に1バイトごとUmePlotForm.setADC_data(int code)が呼び出される。
テキストモード時は、このメソッドの中で分岐して、テキスト用メソッドを呼び出す。
また、csvファイル生成用のcsv_file_outputメソッドも定義
TextBaseCtrl.cs テキストボックス管理クラス 操作対象のTextコントロールをコンストラクタで記憶して管理する
UmeHex.cs a.lst.txt から .hexファイルを生成するメソッド「create_lst_to_hex」を提供するクラス
このメソッドで、a.lst.txt から .hexファイルを生成している。
そこで、Regex(@"(.+)\s+(.+)\s+section\s+(.+):")の正規表現で、例えば
『Disassembly of section _0621e7d064091f6c: "』の行かを調べて
それに続く『9d020000: 27bdfff8 addiu sp,sp,-8』のような行を
Regex(@"([0-9a-f]{8}):\s+([0-9a-f]{8})\s+(.+)")の正規表現で抽出して、
これで、得られる[9d020000: 27bdfff8]のような部分から.hexを生成している。
BuildTool.cs ビルド環境の取得や、SDKの情報を取得をコンストラクタで行い、Do_build()メソッドで翻訳する。
結果は、コンストラクタで指定するテキストボックスへ出力
StreamRW TCPの送受信stream用引数でファイル操作を行うための補佐的なクラス
受信用バッファリングメソッドと、送信用staticメソッドを定義
UmeTcpClientForm.Designer.cs
TCPのサーバへの接続操作用の部品配置コード
UmeTcpClientForm.cs 上記のTCP通信関連の処理で、接続後に見えなくするが、受信スレッドを起動して、closeするまでオブジェクトとして存在する。
UmehoshiEditForm.Designer.cs このアプリケーションの部品配置コード
UmehoshiEditForm.cs このアプリケーションのForm用のプログラムで、全てがここで管理
Program.cs アプリケーションのメイン エントリ ポイントで、UmehoshiEditFormを生成