(toppers-users 534) Re: TOPPERS/JSP のコンフィグレータ

Takayuki WAKABAYASHI takayuki @ ertl.ics.tut.ac.jp
2002年 9月 9日 (月) 16:12:18 JST


豊橋技科大の若林です。

Tatsuhiko Matsukawa [mailto:KFC00725 @ nifty.ne.jp] さんは書きました:
 > Q1 : 現在、オブジェクトが無い場合でも(サイズ0の)
 >     配列が出力されるのがデフォルトとなっていま
 >     すが、こちらをデフォルトにしているのには
 >     何か理由があるのでしょうか。

オブジェクトは無くてもAPIはあります。そのため、それらのAPIが「未解決シン
ボルエラー」でコンパイルできなくなるのを避けるために、標準でオブジェクト
が無くても配列(正確にはシンボル)を作成するようになっています。普通はオブ
ジェクトが無ければAPIを呼び出すことも無いと思いますし呼び出さなければリ
ンクもされないので問題ないですが、逆に何かの意図があってそのようなコード
を書いたときに仕様書どおりの動きをしないのはまずいと考えています。

基本的に--nonzeroオプションはカーネル利用者のためのオプションではなく、
依存部設計者(コンパイラ依存部?)のための機能です。--nonzeroをしたときに
は、コンフィギュレータは「配列を作らない」のではなく、「配列を作る処理を
依存部に一任した」と解釈するのが正しいです。メモリ消費量を抑えるための機
能ではないことにご留意ください。

 > Q2 : -zを指定した場合でも、配列以外(例えばイベ
 >     ントフラグなら、#include "event_flag.h"/define
 >     TNUM_FLAGID 0/const tmax_flagid=...)の出力
 >     は抑制されずそのままのようですが、これには
 >     なにか理由があるのでしょうか。

上記と同じ理由です。オブジェクトは無くともAPIはありますので、これらを削
除するとAPIが意図した動作をしません。

 > Q3 : 生成されたkernel_cfg.cファイルからの#include
 >     で、"kernel_id.h"以外も#include <>でなく
 >     #include ""が用いられているのには
 >     なにか理由があるのでしょうか。

これは私のクセによるものです。自分で用意したヘッダをincludeするときは""
で囲うクセがあり、それがコンフィギュレータの出力コードに反映されていま
す。 仕様では、""を使うことで>を含むファイルがincludeできるとあります
が、それを意図したコードではありません (OSが許してくれないでしょう)。

--------
  わかばやし たかゆき (mailto:takayuki @ ertl.ics.tut.ac.jp)