ゼミのお話/ロボット工学者養成所/一覧/シリアル通信によるデバイス制御/プログラム骨子の説明

2018-04-16 (月) 15:53:00 (840d)
  • 12行目
    • #define SERIAL_PORT "/dev/ttyAM1"
      • 今回使用するシリアルインターフェース
  • 21行目
    • fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY);
      • シリアルインターフェースを"fd"の名前で使えるようにする.
  • 28-32行目
    • struct termios oldtio, newtio
      • 非同期通信ポートを制御するための汎用ターミナルインタフェース(ここではシリアルポート)の設定を司る変数.詳しくは後ほど説明.
    • tcgetattr(fd, &oldtio);
      • シリアルインターフェース"fd"から,現在の設定を読み込みoldtioに保存
    • newtio = oldtio
      • 現在の設定をnewtioにコピー.以後,newtioの設定を変え,tcsetattr(fd,&newtio)などでシリアルインターフェース"fd"の設定変更を行う.最後にtcsetattr(fd, TCSANOW, &oldtio)にてシリアルインターフェース"fd"を初期の設定に戻す.大まかな流れは後ほど説明.
  • 38-39行目
    • cfsetispeed(&newtio, B115200);
      • newtioの中の入力に関する通信速度の設定
    • cfsetospeed(&newtio, B115200);
      • newtioの中の出力に関する通信速度の設定
  • 42行目
    • cfsetspeed(&newtio, B115200);
      • 36-38行目と同じことをしている.こちらは入出力を一度に設定している.
  • 45-46行目
    • tcflush(fd, TCIFLUSH);
      • シリアルインターフェースの送受信データをクリア

        tcsetattrの実行のために必要.

    • tcsetattr(fd, TCSANOW, &newtio);
      • newtioを用いてシリアルインターフェース"fd"を設定.
  • 51行目
    • write(fd, buf , sizeof(buf));
      • シリアルインターフェース"fd"にsize(buf)分のデータbufを送信
  • 54-55行目
    • tcsetattr(fd, TCSANOW, &oldtio);
      • シリアルインターフェース"fd"を初期の設定(oldtio)に戻す
    • close(fd);
      • シリアルインターフェースと名前"fd"の繋がりを開放.