カーネルのライブラリ化に必要な作業

TOPPERS/ASPのドキュメントを読むと、カーネルのライブラリ化が可能であるかのように書かれています。
しかしながら、これには注意が必要です。TOPPERS/ASPのコンフィギュレータが行うカーネルのライブラリ化は、特定のアプリケーションに依存します。つまり、コンフィギュレーションを行い、ツールやアプリケーションで使うパラメタを生成したあとに行うことが前提なのです。プロジェクトが配布しているソースは、複数のアプリケーションで使うライブラリ化を想定していません。
今日、この点について探ってみました。今のところ、以下のような点を修正すればライブラリ化は可能ではないかと思えます。

  1. syssvc/serial.c が参照しているセマフォIDを、変数参照に変更する。
  2. 同時に、spinib_tableへのセマフォID代入を、初期化子ではなくserial_initialize()で行う。
  3. offset.hを事前に生成しておく。

1,2は、セマフォIDの値に依存しないコードにするためです。これらのセマフォはシリアル通信で使用しますが、値が決まるのはコンフィギュレータを走らせた後です。そのため、コンフィギュレータの機能を使って、セマフォの値を変数として生成させるようにし、serial.cでは実行時にその値を拾うようにします。
3のoffset.hは、タスクスイッチであるdispatch()に、TCBの大きさを知らせるためのモノです。dispatch()はアセンブリ関数ですが、TCBにはC言語による関数もアクセスします。両者の間で変数アクセスに齟齬が起きないよう自動的に調整するためのうまい仕掛けですが、offset.hを生成するのはコンフィギュレータです。アーキテクチャとツールを変更しなければ、offset.hは作りっぱなしで良いでしょう。かつてTOPPERS/JSP for Blackfin のVisualDSP版を作ったときには作りっぱなしでいました。
上記の点を変更をすれば何とかなりそうです。