情報の送信処理関数(serial_send_byte)でシリアルに情報を流すわけですが、流しても可能かの判断を送信可能関数(serial_is_send_enable)で実施します。

SCIの送信バッファが1文字しか格納できない単純な構成であるため、前の文字の出力が完了するまでは、次の文字を与えられては困るため。

実はここに無駄があり、ビジーループで待ち合わせている間に別の処理はできずCPUが空回りしている状態。マルチスレッドならその間にほかの処理を進めることができるためCPUを無駄使いしていることになる。

①シリアル送信の割込みハンドラと、シリアル送信スレッドを作成。
②シリアル送信スレッドは送信要求を受けたら、送信バッファに送信する文字列を書き込み、先頭の一文字を送信。送信後には、割込み待ち状態に入る。
③1文字の送信が完了すると、シリアル送信割込みが発生。割込みハンドラでは送信バッファを参照し未送信の文字列が残っているならば次の1文字を送信する。
④送信が完了すると再度送信割り込みが入る。この手順が繰り返される。



スレッドと割込みのコラボは実際に動作させてみて行くことにする。