sc_main 実行引数を取得(sc_argc, sc_argv)
C/C++の mainと同じですが、以下のように実行時の引数を取得することができます。
int sc_main (int argc, char* argv[]) { printf("argc = %d\n", argc); for (int i = 0; i < argc; i++) { printf("argv[%d] = %s\n", i, argv[i]); } return 0; }
実行すると
$> ./main hoge test sample SystemC 2.3.0-ASI --- Jul 13 2012 06:33:43 Copyright (c) 1996-2012 by all Contributors, ALL RIGHTS RESERVED argc = 4 argv[0] = /home/kocha/systemc/sc_arg/.libs/lt-main argv[1] = hoge argv[2] = test argv[3] = sample
という感じに実行されます。
更に、SystemCでは以下の関数が用意されており、
これらの関数を使うと下の階層でも引数を使うことができます。
int sc_argc(); const char * const * sc_argv();
- サンプルコード
#include <systemc.h> SC_MODULE (hogehoge) { sc_in<bool> clock; const char* const* _argv; void process() { _argv = sc_argv(); while (true) { wait(); printf("Instance:%s sc_argc = %d\n", name(), sc_argc()); for (int i = 0; i < sc_argc(); i++) { printf("Instance:%s sc_argv[%d] = %s\n", name(), i, _argv[i]); } } } SC_CTOR(hogehoge) { SC_CTHREAD(process,clock.pos()); } }; SC_MODULE (hoge) { sc_in<bool> clock; const char* const* _argv; hogehoge mhogehoge; void process() { _argv = sc_argv(); while (true) { wait(); printf("Instance:%s sc_argc = %d\n", name(), sc_argc()); for (int i = 0; i < sc_argc(); i++) { printf("Instance:%s sc_argv[%d] = %s\n", name(), i, _argv[i]); } } } SC_CTOR(hoge) : mhogehoge("mhogehoge") { SC_CTHREAD(process,clock.pos()); mhogehoge.clock(clock); } }; int sc_main (int argc, char* argv[]) { sc_clock clock ("clock",1,SC_NS); printf("argc = %d\n", argc); for (int i = 0; i < argc; i++) { printf("argv[%d] = %s\n", i, argv[i]); } hoge sample("sample"); sample.clock(clock); sc_start(2, SC_NS); return 0; }
- 実行結果
$> ./main hoge test sample SystemC 2.3.0-ASI --- Jul 13 2012 06:33:43 Copyright (c) 1996-2012 by all Contributors, ALL RIGHTS RESERVED argc = 4 argv[0] = /home/kocha/systemc/sc_arg/.libs/lt-main argv[1] = hoge argv[2] = test argv[3] = sample Instance:sample.mhogehoge sc_argc = 4 Instance:sample.mhogehoge sc_argv[0] = /home/kocha/systemc/sc_arg/.libs/lt-main Instance:sample.mhogehoge sc_argv[1] = hoge Instance:sample.mhogehoge sc_argv[2] = test Instance:sample.mhogehoge sc_argv[3] = sample Instance:sample sc_argc = 4 Instance:sample sc_argv[0] = /home/kocha/systemc/sc_arg/.libs/lt-main Instance:sample sc_argv[1] = hoge Instance:sample sc_argv[2] = test Instance:sample sc_argv[3] = sample