さて、今回はHOS(Hyper Operating System)の移植のお話。
HOSはμITRON準拠のリアルタイムカーネルOSで、すべてCで記述されており、アーキテクチャ依存の部分だけを切り離してCやアセンブラで記述できるようになっています。H8等のマイコン用にはすでにアーキテクチャ依存部が存在しますが、avr32のは無かったので、自分で書きました。
タスクのスイッチングの所は全く問題ありませんでしたが、問題は割り込みです。
AVR32では、割り込みが計64グループ×32要因の2048通りもあります。そして、標準ランタイム(libc.a)にある割り込み処理ルーチン(interrupt.o)では、この全ての割り込みについてテーブルを用意しようとします。テーブル1要素が8バイトで、2048×8=16kB。すなわちAT32UC3B0256ならば、内蔵SRAM(32kB)の半分を割り込みテーブルに取られます(笑)。んなアホな。
なお、実際に実装されている割り込みは38要因なので、非常に無駄が多いことになります。
解決策を考え中…。
コメントする