(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)
  豊橋技術科学大学 情報工学系 組込みリアルタイムシステム研究室