ちょいちょい書いていますが、murasakiという名前のクラス・ライブラリを開発しています。目標としては、SDRで使うためにある程度のリアルタイム性を持たせ、RTOSと使用することを前提としています。
STM32マイコンには網羅的なHALが提供されています。このHALは網羅的で有る分、ポーリングにもDMAにも割り込みにも対応し、ほとんどのペリフェラルの大部分の機能をカバーしています。
一方で、これだけの規模のものをC言語で書いているため、全体的にとっちらかった印象があります。随所に「見通しを良くしたい」という意図がはっきり見えるにもかかわらず、STM32 HALを使う場合には常にマニュアルと首っ引きになり、ソースをひっくり返さなければなりません。
同様なことがFreeRTOSにも言えます。まぁ、FreeRTOSはどちらかというと設計のセンスの悪さの方が目立つかな。
murasakiは上記のような問題を覆い隠すように設計しています。HALやRTOSの見通しの悪さは網羅性と、何もかもがグローバルになってしまうC言語の特性から来ています。ですからRTOSで使えない機能を切り捨てて対照を絞り込み、データ構造やアルゴリズムをC++のクラスの中に閉じ込めてしまえばよいのです。そうすることで見通しが良く使いやすい形になります。
シリアルやデバッグのような基本機能は1ヶ月前くらいから動き出しています。元はNucleo F746で開発したライブラリですが、Nucleo F303やNucleo L152への移植実験をしながら全体にブラシがけをしているところです。
今月の頭には、
「そろそろオーディオコーデック対応を」
と考えていましたが、今はそれを先延ばしにして基本機能の確認と移植性の確保を重点に作業しています。移植性はコードがどれだけ洗練されているかの指標ですからね。