|
| 1 | +# GG for Arduino |
| 2 | + |
| 3 | +GG for Arduino はシリアルコンソールのライブラリです。コンソールを組み込むための補助的なツール(例えば printf()のような)を含みます。 |
| 4 | + |
| 5 | +## コンソール |
| 6 | + |
| 7 | +Arduinoでコマンドラインインターフェース(コンソールの基本機能)が実現できます。もちろん自分で作ったコマンドの追加もできます。 |
| 8 | + |
| 9 | +### 通信仕様 |
| 10 | + |
| 11 | +* Arduinoの標準シリアル(Serial) |
| 12 | +* 115200BPS / 8bitデータ長 / ノンパリティ |
| 13 | +* エコーバックはGGが出す(端末でキーを打てば打ったキーが表示されます) |
| 14 | +* CR(\r)またはLF(\n)でコマンド実行 |
| 15 | + |
| 16 | +### 定義済みコマンド |
| 17 | + |
| 18 | +* `help` コマンド一覧の表示 |
| 19 | +* `md` メモリダンプ |
| 20 | +* `ms` メモリセット |
| 21 | +* `mf` メモリフィル(ブロックセット) |
| 22 | +* `tp` TP(テストポイント)の状態番号の表示と変更 |
| 23 | + |
| 24 | +### コマンドの追加方法 |
| 25 | + |
| 26 | +自分で作ったコマンドを追加できます。コマンド実装部(サブルーチン)にはコマンドラインのパラメータが argc と argv で渡されます。C言語の参考書や解説に「コマンドライン引数」を使ったmain()プログラムの例があると思います。これと同じですので参考にしてください。 |
| 27 | +コマンド実装部(サブルーチン)ができたら登録します。 |
| 28 | +下記の例をご覧ください。 |
| 29 | + |
| 30 | +* [GG_console_cmd.ino](examples/GG_console_cmd/GG_console_cmd.ino). |
| 31 | + |
| 32 | +### コマンドラインインターフェースなしでコンソールを使う方法 |
| 33 | + |
| 34 | +コマンドラインインターフェース(コマンド受付機能)は使わないで、printf() のようなコンソールの出力機能だけ使うこともできます。 |
| 35 | +下記の例をご覧ください。 |
| 36 | + |
| 37 | +* [GG_printf.ino](examples/GG_printf/GG_printf.ino). |
| 38 | + |
| 39 | +### タイミング分析 |
| 40 | + |
| 41 | +TP(テストポイント)機能を使ってプログラムのタイミング分析ができます。 |
| 42 | +サブルーチンの処理時間を測定することができます。また割込み処理やRTOSのタスク処理の状況確認にも使えます。 |
| 43 | + |
| 44 | +まず、分析するプログラムポイントにステータス番号コントロール(GG_TP_ON / GG_TP_OFF)を埋め込みます。 次に、tpコマンドを使用して、TP1またはTP2に出力するステータス番号を選択します。 ステータス番号はいつでもtpコマンドで切り替えることができます。 |
| 45 | + |
| 46 | +状態番号はいくつでも配置できますが、物理的な出力先はTP1とTP2の2つだけです。 Arduinoのピン数が制限されていることと、出力チェックは出力先が増えるだけCPU負荷が増加することから、出力先が2つに限定されています。 |
| 47 | + |
| 48 | +以下の例では、TP1はArduinoの2番ピン、TP2はArduinoの3番ピンです。TP1(2番ピン)はオシロスコープの黄色のCH1に接続され、TP2(3番ピン)は紫色のCH2に接続されています。 tpコマンド(tp 10 30)でTP1を状態番号10に設定し、TP2を状態番号30に設定しています。 |
| 49 | + |
| 50 | +* [GG_tp.ino](examples/GG_tp/GG_tp.ino). |
| 51 | + |
| 52 | +,M:TP2(status number 30)") |
| 53 | + |
| 54 | +## 利用できる関数/変数/定義 |
| 55 | + |
| 56 | +ヒープ(malloc)は使いません。 |
| 57 | + |
| 58 | +|関数 / 変数|仕様| |
| 59 | +|--|---| |
| 60 | +|***GG_for_Arduino.h***|| |
| 61 | +|int gg_start(const char \*title)|GG for Arduino の開始| |
| 62 | +|int gg_tp1_no|TP1のArduinoピン番号. TP1を使うならgg_start()の前にセット| |
| 63 | +|int gg_tp2_no|TP2のArduinoピン番号. TP2を使うならgg_start()の前にセット| |
| 64 | +|long gg_con_baud|ボーレート. 115200から変更するならgg_start()の前にセット| |
| 65 | +|***gg_base.h***|| |
| 66 | +|GG_TP_ON(number)|TP状態番号をON| |
| 67 | +|GG_TP_OFF(number)|TP状態番号をOFF| |
| 68 | +|***gg_uty.h***|| |
| 69 | +|int gg_GetC(void)|1文字入力 (-1 = 入力なし)| |
| 70 | +|int gg_PutC(int c)|1文字出力| |
| 71 | +|int gg_PutS(const char \*s)|文字列出力| |
| 72 | +|int32_t gg_asc2int(char \*p)|文字列を整数に変換. '0x'で16進数と認識| |
| 73 | +|int16_t gg_mbuf_init(GGT_MBUF \*mbuf, void\* buf, int max)|ミニバッファツール. 初期化| |
| 74 | +|int16_t gg_mbuf_put(GGT_MBUF \*mbuf, int16_t d)|ミニバッファツール. 1バイト書込み| |
| 75 | +|int16_t gg_mbuf_get(GGT_MBUF \*mbuf)|ミニバッファツール. 1バイト読出し| |
| 76 | +|int16_t gg_mbuf_peek(GGT_MBUF \*mbuf, int16_t ix)|ミニバッファツール. のぞき見| |
| 77 | +|gg_time_t|GGでのみ有効な秒単位での総時間。 開始点(0)は2000年1月1日| |
| 78 | +|GGT_BCDTIME|日時の構造体(BCD)| |
| 79 | +|GGT_TIME|日時の構造体(整数)| |
| 80 | +|int gg_tim_bcd2dt(GGT_BCDTIME \*b, GGT_TIME \*t)|GGT_BCDTIMEからGGT_TIMEに変換| |
| 81 | +|int gg_tim_dt2bcd(GGT_TIME \*t, GGT_BCDTIME \*b)|GGT_TIMEからGGT_BCDTIMEに変換| |
| 82 | +|gg_time_t gg_tim_dt2tt(GGT_TIME \*t)|GGT_TIMEからgg_time_tに変換| |
| 83 | +|gg_time_t gg_tim_YYMMDD2tt(int YY, int MM, int DD)|年月日からgg_time_tに変換| |
| 84 | +|gg_time_t gg_tim_hhmmss2tt(int hh, int mm, int ss)|時分秒からgg_time_tに変換| |
| 85 | +|int gg_tim_tt2dt(gg_time_t x, GGT_TIME \*t)|gg_time_tからGGT_TIMEに変換| |
| 86 | +|int gg_tim_checkdt(GGT_TIME \*t)|日時のチェック| |
| 87 | +|int gg_tim_repairdt(GGT_TIME \*t)|日時が異常ならそれなりの値に修正| |
| 88 | +|int gg_tim_tt2week(gg_time_t x)|gg_time_tから曜日(0=日,1=月..6=土)に変換| |
| 89 | +|***gg_printf.h***|| |
| 90 | +|int gg_vxprintf(int (\*putc)(int), const char \*fmt, va_list vlst)|putc()で出力するvprintf()| |
| 91 | +|int gg_xprintf(int (\*putc)(int), const char \*fmt, ...)|putc()で出力するprintf()| |
| 92 | +|int gg_printf(const char \*fmt, ...)|標準出力のprintf().%eは非実装| |
| 93 | +|int gg_vsprintf(char \*buf, const char \*fmt, va_list vlst)|buf(メモリ)に出力するvsprintf()| |
| 94 | +|int gg_sprintf(char \*buf, const char \*fmt, ...)|buf(メモリ)に出力するsprintf()| |
| 95 | +|gg_printDATE(gg_time_t)|"YY/MM/DD"| |
| 96 | +|gg_printTIME(gg_time_t)|"hh:mm:ss"| |
| 97 | +|gg_printDT(gg_time_t)|"YY/MM/DD hh:mm:ss"| |
| 98 | +|gg_printDTs(gg_time_t)|"YY/MM/DD hh:mm:ss "| |
| 99 | +|***gg_console.h***|| |
| 100 | +|GG_CON_CMDADD(func, cmd, prm, help)|コンソールコマンド登録| |
| 101 | +|GG_CON_CMDMRK(title)|コマンド一覧での区切り行登録| |
| 102 | +|GG_CON|コンソール処理のワークエリア(内部で使用)| |
| 103 | +|int gg_con_MonInit(void)|コンソールの初期化| |
| 104 | +|char \*gg_con_prompt|プロンプト文字列. 初期値=">"| |
| 105 | +|int gg_con_MonRePrompt(void)|プロンプトの再表示| |
| 106 | +|int gg_con_MonPrompt(void)|プロンプトの表示 (内部で使用)| |
| 107 | +|int gg_con_Check(void)|gg_GetC()から1文字取得したらコンソールチェック処理| |
| 108 | +|int gg_con_MonCheck(int c)|コンソールチェック処理(c=-1のときは何もしない)| |
| 109 | +|int gg_con_MonExec(char \*buf)|コマンドライン1行の処理(注:argv分割のためbufの中は破壊される)| |
| 110 | +|int gg_con_MonBuf2Arg(char \*p, char \**argv, int argmax)|buf[]からargv解析(return = argc)(非リエントラント)| |
| 111 | +|int gg_con_MonExecArg(int argc, char \**argv)|argv[0]をコマンド名として登録コマンドを検索し、見つかればコマンド実装部を実行| |
| 112 | +|int gg_con_CmdInit(void)|コマンド登録リストの初期化| |
| 113 | +|int gg_con_CmdAdd(GGT_CMD \*def)|コマンド登録リストに追加| |
| 114 | +|int gg_con_CmdN(void)|コマンド登録数| |
| 115 | +|int gg_con_CmdHelp(char \*cmd)|cmdのヘルプ表示| |
| 116 | +|int gg_con_CmdHelpAll(void)|コマンド一覧の表示| |
| 117 | +|int gg_con_RegistCMD(void)|定義済みコマンドの登録(内部で使用)| |
0 commit comments