プログラミング関係†
構造体struct termios†
- struct termiosはシリアルポートを含む汎用ターミナルインタフェースの設定を扱う構造体であり,定義は以下のようになっている.
- struct termios {
- tcflag_t c_iflag; /* 入力フラグ */
- tcflag_t c_oflag; /* 出力フラグ */
- tcflag_t c_cflag; /* 制御フラグ */
- tcflag_t c_lflag; /* ローカルフラグ */
- cc_t c_cc[NCCS]; /* 特殊制御文字の設定 */
- };
- 入力フラグ
- 端末(この場合armadillo)への入力に関する設定である.特に文字入力の仕方(入力の8ビット目を落とす,パリティ検査を行うなど)を制御する.
- 出力フラグ
- 端末(この場合armadillo)からの出力に関する設定である.特に出力処理の実行の仕方(改行をCR/LFに変更するなど)を制御する.
- 制御フラグ
- 端末(この場合armadillo)のハードウェアに関する設定である.RS-232のシリアルライン(モデムの状態信号の無視,文字ごとのストップビット数など)に影響する.
- ローカルフラグ
- 端末(この場合armadillo)のその他の設定である.ドライバとユーザのインターフェース(エコーのオン/オフ,削除した文字の表示方法,端末生成シグナルの有無,バックグラウンドからの出力を止めるジョブ制御シグナルなど)に影響する.
- tcgetattrにてプログラム開始時の初期設定を読み込む
- new = old などとして初期設定と同じ新しい設定変数を作成し,以後新しい設定変数を使う
- cfsetspeedなど必要に応じて必要な箇所のみの変更を行う
- 通信処理
- プログラム終了時に初期設定に戻す
入力データの取り扱い†
- シリアルデバイスにおいてデータの入力はread関数によって行われる.この時,read関数が受け取るデータの単位と受け取る時の処理に幾通りかの方法がある.受け取るデータの単位に関する方法として,カノニカル入力処理と非カノニカル入力処理がある.また受け取る時の処理方法として,同期処理と非同期処理がある.
| カノニカル入力処理 | 非カノニカル同期処理 |
同期処理 | カノニカル・同期 | 非カノニカル・同期 |
非同期処理 | カノニカル・非同期 | 非カノニカル・非同期 |
- カノニカル入力処理(デフォルト)
- 非カノニカル入力処理
- read関数を呼び出す際に読み込むデータの大きさを指定する方法である.特に,プログラムが決まった文字数のキャラクタを読み込む時や,接続したデバイスが大量の文字を送ってくる場合に使用する.
#include(): Limit exceeded:
ゼミのお話/ロボット工学者養成所/一覧/シリアル通信/同期・非同期処理