OpenTUT

単純で無責任なUART

りn

単純で無責任なUART


UARTとは

  • Universal Asynchronous Receiver/Transmitter の略
  • 非同期シリアル通信の一種
    • 調歩同期式(同期とついているが非同期)
    • 信号に同期用ビットを付加して送る
  • 1バイトごとに送受信できるのでとても単純
  • ヘッダなどもなく目でデコードするのも容易い
    • (慣れれば)

UART信号

  • Idle時Hi
  • Start BitでLowに下げて送信開始を相手側に通知
  • 8ビットデータ送信
  • Stop BitでまたHiに上げて送信終了を通知


UART送受信

  • マイコン等を用いて送信する場合、決まったレジスタに1バイトずつデータをコピーすると外にデータが流れていくようになってることが多い
  • 受信も同様で、データが来ると決まったレジスタに1バイトずつデータが入っているので、それを適宜取り出す
    • これが厄介

送信は簡単(無責任)、受信は大変

  • UARTはマイコン間通信などにもよく使われる
  • 単純な低レイヤプログラムの場合、1つの無限ループの中でひたすら処理をしていく場合がほとんど
  • 相手が勝手に送りつけてくる場合、受信側はそのタイミングを知る術を持たない
  • CPUによる割り込みを用いて通知する方法もあるが、これだけでは複数バイトにわたってデータを受信するのが難しい
    • 受信タイムアウトを実現したくても無限ループが一つしかない(シングルタスク)なのでブロッキングするしかなくなる
    • ロボット制御などをしている場合、通信周期に制御周期を律速しないといけなくなる

RTOSを使ってマルチタスクを実現しよう

  • 簡単に言えば、メインルーチン用タスクと受信用タスクの2つが並行して実行されるようになればいい
  • 割り込みによる通知を使って省リソースな受信を実現していく
  • 次回やるかも