RTOSによるダブル・バッファ処理

TOPPERS/JSPを使ったアプリのコードサイズをリンカーによって小さく押さえることができるため、これまで単なるアイデアであったことを試して見たくなりました。例えば、ダブル・バッファ処理がその一つです。この処理は割り込みハンドラとDMAとアプリケーションの連携が複雑すぎるためにフレームワークを使うなどしていました。しかし、RTOSを使えるのなら、

  • 入力DMA割り込みハンドラ
  • 入力DMAバッファ管理タスク
  • 信号処理タスク
  • 出力DMAバッファ管理タスク
  • 出力DMA割り込みハンドラ

を一直線に並べて、それぞれのタスクがデータキューを使ってバッファのやり取りを行うようなプログラムをきわめて見通しよく書くことができます。
例えば入力DMAバッファ管理タスクはダブル・バッファ管理のみを行い、受信データの入ったバッファをデータキューで信号処理タスクに送ります。信号処理タスクはデータキューから取り出したバッファのデータを処理して出力バッファ管理タスクに送ります。信号処理タスクはダブル・バッファ管理を気にする必要はなく、しかもDMA転送と信号処理は並行して行われます。