目次

RTOS(リアルタイムOS)

OpenOCDは設定を追加すると全部のスレッドを終えるようになる.RTOSを使っているファームをデバッグするときにはぜひ使いたい設定.

Amazon FeeRTOS

スレッドセーフなプログラムを書こうな

割り込み動作中の関数呼び出し

RTOSの関数はタスク内部と割込みハンドラ内部で呼び出す関数が別に用意されている。これは優先度の都合上そのほうがいい。 関数名FromISRと接尾修飾されている関数飲みが割り込みハンドラ内部から呼べる関数.
CMSIS-RTOSはこのあたりはラッパしてあるようで、関数内部で割込みハンドラの状態(IPSR)を見てどちらの関数を呼び出すかを判断している。

Semaphore

セマフォ.RTOSにて排他制御のために必須.
0,1の値のみ取るセマフォをバイナリセマフォ,2以上の値を取るものを計数セマフォという.

バイナリセマフォはタスクを同期するのに使ったりする.
バイナリセマフォを使った同期処理

Mutex

ミューテックス
調べたところバイナリセマフォと役割はほぼ同じもの.同期処理や資源のやり取りの際に使う.
バイナリセマフォとミューテックスの違いは?
バイナリセマフォ → その資源の開放はプログラムのどの場所(という表現がいいのかは微妙だけど)でもやろうと思えばできる.たとえそれが確保したスレッドでなくても.
ミューテックス → 確保(lockとかTake)したスレッドが所有権を持つ.そのスレッドでしか開放(UnlockとかGive)できない.
このことからもわかるように,ミューテックス制御関数は他の場所から呼べない.割り込みサービスルーチン(ISR)の中では呼べない.
また,ミューテックスには優先度継承メカニズムが含まれている.
ミューテックスは再帰的に確保することが可能. FreeRTOSの場合設定すれば再帰的なミューテックスを利用できる.再帰的確保したら同じ回数だけ開放する必要あり.
セマフォとミューテックスの違い

優先度継承メカニズム

現在セマフォを確保ししているタスクよりも高い優先度のタスクからセマフォの確保要求がきた場合,現在セマフォを確保してるスレッドの優先度を一時的に引き上げ,優先して処理を行わせてなるべく早くセマフォを開放するように動くしくみ.

Tack Controll Block(TCB)

タスクコントロールブロック
RTOSの各タスクの情報を保持しておくためのデータたち,名前のとおり各タスクごとにそれぞれ存在する.

ChibiOS

VESCで使われている

ChibiOS Homepage

Zephyr

Zephyrproject

Nuttx

Nuttx

参考文献

Arduino上で走るOSの作り方
タスクコントロールブロック(TCB)
イベントフラグ、セマフォ
スレッドセーフとは