(toppers-users 384) RE: v1.3 の cfg は?
mandrake
mandrake @ imail.plala.or.jp
2002年 5月 11日 (土) 23:46:40 JST
豊橋技術科学大学の若林です。
Shiny Forest [mailto:shiny @ sb.dcns.ne.jp] さんは書きました:
> CRE_CYC(CYCHDR1, { TA_HLNG, 0, cyclic_handler, (2000/10), 0 });
> というように、カッコ付きで割り算表現すると、
> cfgを通した結果のkernel_cfg.cで対応した個所が
> ・・・・・, (2000 10),・・・・
> と変換されてしまい、当然その後にコンパイルエラーとなってしまいます。
> 割り算の記号(/)がなくなっている!
こちらでも同様の問題を確認しました。
> ちなみに、
> CRE_CYC(CYCHDR1, { TA_HLNG, 0, cyclic_handler, 2000/10, 0 });
> ^^^^^^^
> というように、カッコを取り去ると、正常にcfgを通ります。
確認しました。また、","と"2000"の間にあるスペースを取り除くことで
同じ問題が発生することも確認しました。
#私もパラメータ区切りの","の後に空白を入れるクセがあるので
#この問題に気付きませんでした
この問題は、コメントを切り出すルーチンの処理のうち
"/*"で始まるコメントに対応するために"/"を取り込むのですが、
"*"が"/"に続かなかった場合に"/"を削除してしまうのが原因です。
コンフィギュレータが新しくする際に#lineや#pragmaを解釈するように
改造したときに撒いたバグです。
原因 空白文字処理のルーチンが"/"を読み飛ばす
発生条件 除算演算子("/")を空白文字でないトークンの直後に置く
発生頻度 常に
対象 カーネルコンフィギュレータ ver 9.0以降
#TOPPERS/JSP release 1.3以降
修正箇所 Parser::getWhitespace (parser.cpp:204)
修正前> default:
> putBack(ch);
この行> return false;
修正後> default:
> putBack(ch);
この行> return getOperator(token, '/');
なお、TOPPERS/JSP release 1.2のコンフィギュレータ(ver 7.x)および
TOPPERS/IIMPのコンフィギュレータ(ver 8.x)では発生しません。
---8<---
あともう一点あります。
固定長メモリプールを作成すると、括弧がひとつ余分に出力されます。
そのため、kernel_cfg.cのコンパイルに失敗します。
原因 テンプレート文字列内の該当箇所に括弧がひとつ多かった
条件 固定長メモリプールを作成する
頻度 常に
対象 カーネルコンフィギュレータ ver 9.0以降
#TOPPERS/JSP release 1.3以降
修正 cfg/jsp/jsp_parser.cpp:469
修正前 > (VP)(((VB *)__fixedsize
修正後 > (VP)((VB *)__fixedsize
#修正箇所は一部分のみを示したもの
---8<---
中野さん、ご指摘ありがとうございました。
--------
わかばやし たかゆき (mailto:takayuki @ ertl.ics.tut.ac.jp)
豊橋技術科学大学 情報工学系 組込みリアルタイムシステム研究室