cfgコマンドの --external-id オプション

先日コメント欄で教えていただいたcfgコマンドの --external-id オプションを試してみました。
このオプションは、静的コンフィギュレータが生成するオブジェクトのIDを定数ではなく変数として生成するものです。
なぜこのような物が必要かということを最初に説明しておきます。
たとえば、i2cペリフェラルの操作関数をライブラリ化することを考えます。この場合、当然ですが、割り込みハンドラもライブラリ化の対象になります。こうしてライブラリ化した割り込みハンドラとペリフェラル操作関数はセマフォを使ってやりとりを行います。ところが、TOPPERS/ASPではデフォルトでこのセマフォのIDが定数になっており、コンフィギュレータによって自動生成されます。ということは、いったんライブラリ化するときと、アプリケーションを作る際に、同じセマフォの名前に異なるIDが振られてしまいます。これではIDの衝突がおきますからまともに動くことなど期待できません。
--external-id オプションは、セマフォやタスクのIDを変数化します。これらはkernel_cfg.cで初期化されますので、最終的にアプリケーションをリンクする際に決まるIDがライブラリの中でも利用可能になります。これはナイスな仕組みです。
この方式にはもう一つおまけがあります。LPCXpresso IDEのリンカは使っていない変数や関数をきちんと削除してくれます。従って、「I2C2を使わないのにI2C関連のリソースが残る、最悪、セマフォが無いとエラーが出る」といった問題に煩わされずにすみます。
残念ながら、TOPPERS/ASPの現在のコンフィギュレータはセマフォ FOO に対して変数 FOO_idと定数マクロFOOを同時に作るため、うっかりライブラリ中でFOOを使うと、あとで原因不明のトラブルに悩まされることになります。改善できないか TOPPERSのUser MLで打診中です。