読者です 読者をやめる 読者になる 読者になる

不確定特異点

広く深く、ところどころ超深く

軽量 RTOS の開発 (1)

軽量 RTOS の開発メモを記録していきます。

以前考えたように、メモリ割り当てアルゴリズムは K&R malloc でも事足りそうなので、組み込んでみました。ちょっと違うのが、K&R ではヒープ領域が足りなくなったら sbrk で拡張してますが、軽量 RTOS では sbrk に頼らずにあらかじめ静的に確保したヒープ領域から割り当てる点であり、もしヒープ領域が足りなくなったら何もせずに即エラーを返します。あとはちょっとコードを整理してみたり。

malloc に関してはこのスライドがとても参考になりました。glibc って最適化の工夫がすごい。

www.slideshare.net

malloc, free が動いたので、タスクのスタック領域を動的に確保することが出来るようになりました。つまり、複数のコンテキストが同居できるようになったわけで、ようやく本物のプリエンプティブマルチタスクができる!はず。

とりあえず現状は、

  • 初期タスクが優先度高タスクを生成
    • スケジューリング(優先度高タスク)
  • 優先度高タスクが優先度低タスクを生成
    • スケジューリング(優先度高タスク)
  • 優先度高タスクが終了
    • スケジューリング(優先度低タスク)
  • 優先度低タスクが終了
    • スケジューリング(初期タスク)
  • 初期タスクが終了

と次々にタスクを作りながら切り替えていくだけのサンプルが動くようになってます。

github.com

次は割り込みに対応すべく、Cortex-M コアの SysTick タイマと NVIC を調べてみます。