sc_trace
SystemCを使ったハードウェア設計を勉強中。
tb.hに誤植があるが、全然問題ないレベル。
そして、sc_traceではまる。
void sc_trace(sc_trace_file *tf, const rgb8_t o, const sc_string& n) {
sc_trace(tf, o.r, n + "_r");
sc_trace(tf, o.g, n + "_g");
sc_trace(tf, o.b, n + "_b");
}
この記述で下のエラー
cd /home/natu/study/dw_systemc/
make -k
g++ -g -I/usr/local/systemc/include/ -c main.cpp
In file included from main.cpp:2:
class.h:64: error: expected `,' or `...' before '&' token
class.h:64: error: ISO C++ forbids declaration of `sc_string' with no type
class.h: In function `void sc_trace(sc_core::sc_trace_file*, const rgb8_t&, int)':
class.h:65: error: `n' undeclared (first use this function)
class.h:65: error: (Each undeclared identifier is reported only once for each function it appears in.)
*** Error code 1 (continuing)
g++ -g -I/usr/local/systemc/include/ -c rgb2yuv.cpp
格闘すること数時間。
要するにsc_traceは、ファイルポインタ、オブジェクトのリファレンス、文字列(の
リファレンス)がわたってくれよさげ。
void sc_trace(sc_trace_file *tf, const rgb8_t o, const std::string& n) {
sc_trace(tf, o.r, n + "_r");
sc_trace(tf, o.g, n + "_g");
sc_trace(tf, o.b, n + "_b");
}
sc_stringとstd::stringで相互変換してくれるのだろうか。(ソースを追った感じでは
sc_stringは、std::stringを継承しているわけではなく、1から書かれていた。)
そして、FreeBSDとCygwinで動きが違う。というかcygwinはassertで落ちる。orz
ちなみに環境はこんな感じ。
FreeBSD、gcc 3.4.4
SystemC 2.1.v1 --- Aug 30 2006 11:49:29
Cygwin gcc 3.4.4
SystemC 2.1_oct_12_04.beta --- Jul 28 2005 09:25:55
The comments to this entry are closed.
Comments
2.1 の release note に以下のような記述があります。
sc_string と sc_pvector を廃止。
C++ 標準ライブラリの string と vector を使用。
以下の 2 つの define のどちらかを使えば、ユーザ定義できる。
SC_USE_STD_STRING - sc_string を std::string と定義
SC_USE_SC_STRING_OLD - sc_string を sc_string_old と定義
おっと飛行機に遅れそう。
Posted by: noboshemon | 2006.11.22 07:11 AM
noboshemonさん、情報ありがとうございます。
自分が作ったファイルだけ、-DSC_USE_SC_STRING_OLDでコンパイルして
やってみても上手く行きません。(エラーが増えます)
調べたところ、sc_string.hにこんな記述を見つけました。
#ifdef SC_USE_SC_STRING_OLD
typedef sc_dt::sc_string_old sc_string;
#endif
#ifdef SC_USE_STD_STRING
typedef ::std::string sc_string;
#endif
ソースのこのレベルで書かれているという事は、systemcのkernelを
作る段階でSC_USE_SC_STRING_OLDを定義していないと駄目そうですね。
勉強になりました。ありがとうございました。
Posted by: なつたん | 2006.11.24 08:42 AM
ううむ...2.1 以降のライブラリのソースコードには、
明示的に sc_string を使ったところは無さそうですがねえ...
なんでやろ...最早誰もテストしとらんのやろーなー。
Posted by: noboshemon | 2006.11.24 05:52 PM
noboshemonさん、こんにちは。
すいません。逆です。
-DSC_USE_SC_STRING_OLDではなく、-DSC_USE_STD_STRINGでコンパイルですね。
これでOKでした。
Posted by: なつたん | 2006.11.24 08:18 PM
状況がよくわかってませんけど、
どちらでも行けそうな実装の気がするんすけどねえ...
まあ、もうどうせ使わないんでええか...
Posted by: noboshemon | 2006.11.24 10:46 PM