(toppers-users 265) Re: イベントフラグの初期値
Takayuki WAKABAYASHI
takayuki @ ertl.ics.tut.ac.jp
2001年 8月 23日 (木) 00:46:26 JST
アドバンスドデータコントロールズ 森田様
豊橋技術科学大学の若林です。
Hiroshi Morita <morita @ adac.co.jp>さんは書きました:
> このように初期値が0になってしまうのですが
> 16進数や2進数などでの指定は可能なのでしょうか?
現在 配布しているコンフィギュレータは、10進数以外を認識しません。
#正確には、引数の最初が[0-9]で始まっている場合、[0-9]以外の文字から
#先は読み飛ばしてしまいます。ですので、0xと書いた場合、xから先が
#読み飛ばされて、0として評価されます。
そこで、16/8/2進数を受け入れるように修正しました。
simpleparser.c:117 の直後に次のコードを挿入してください。
#case '0': と case '1': の間
---8<---
{
int work = 0;
ch = in->get();
switch(ch)
{
case 'x': //16進数
do{
ch = in->get();
if(ch >= '0' && ch <='9')
work = work * 16 + ch - '0';
else if(ch >= 'A' && ch <= 'F')
work = work * 16 + ch - 'A' + 10;
else if(ch >= 'a' && ch <= 'f')
work = work * 16 + ch - 'a' + 10;
else
break;
}while(true);
in->putback(ch);
break;
case 'b': //2進数
do{
ch = in->get();
work <<= 1;
if(ch == '1')
work |= 1;
else if(ch != '0')
break;
}while(true);
work >>= 1;
in->putback(ch);
break;
default: //8進数 または 予想外の文字
do{
if(ch >= '0' && ch <='7')
work = work * 8 + ch - '0';
else
break;
ch = in->get();
}while(true);
in->putback(ch);
break;
}
param.Set(offset++,new Valient(work));
break;
}
---8<---
フォーマットは、正規表現で書くと次のようになります。
16進数 : 0x[0-9A-Fa-f]+
8進数 : 0[0-7]+
2進数 : 0b[01]+
#フォーマットに従わない文字が出現した場合、その先は読み飛ばします。
また値はkernel_cfg.cの各オブジェクトの初期化テーブルに
10進数の形で格納されます。
以上 よろしくお願いします。
//-------------------------------------------------
//Takayuki WAKABAYASHI (わかばやし たかゆき)
// mailto: takayuki @ ertl.ics.tut.ac.jp
//-------------------------------------------------
//豊橋技術科学大学 工学研究科 情報工学専攻
// 組込みリアルタイムシステム研究室
// Embedded and realtime system laboratory
// Dept. of information and computer science
// Toyohashi univ. of technology