sc_main 実行引数を取得(sc_argc, sc_argv)

SystemC Advent Calendar2012 の 6日目の記事です。
今回は SysmteC実行時の引数についてのお話です。


C/C++の mainと同じですが、以下のように実行時の引数を取得することができます。

 1|#include <systemc.h>
 2|
 3|int sc_main (int argc, char* argv[]) {
 4|
 5|  printf("argc = %d\n", argc);
 6|  for (int i = 0; i < argc; i++) {
 7|    printf("argv[%d] = %s\n", i, argv[i]);
 8|  }
 9|
10|  // sc_start(2, SC_NS);
11|
12|  return 0;
13|}

実行すると

$> ./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();
  • サンプルコード
  •  1|#include <systemc.h>
     2|
     3|SC_MODULE (hogehoge) {
     4|  sc_in<bool> clock;
     5|
     6|  const charconst* _argv;
     7|
     8|  void process() {
     9|    _argv = sc_argv();
    10|    while (true) {
    11|      wait();
    12|
    13|      printf("Instance:%s sc_argc = %d\n", name(), sc_argc());
    14|      for (int i = 0; i < sc_argc(); i++) {
    15|        printf("Instance:%s sc_argv[%d] = %s\n", name(), i, _argv[i]);
    16|      }
    17|    }
    18|  }
    19|
    20|  SC_CTOR(hogehoge) {
    21|    SC_CTHREAD(process,clock.pos());
    22|  }
    23|}; 
    24|
    25|SC_MODULE (hoge) {
    26|  sc_in<bool> clock;
    27|
    28|  const charconst* _argv;
    29|  hogehoge mhogehoge;
    30|
    31|  void process() {
    32|    _argv = sc_argv();
    33|    while (true) {
    34|      wait();
    35|
    36|      printf("Instance:%s sc_argc = %d\n", name(), sc_argc());
    37|      for (int i = 0; i < sc_argc(); i++) {
    38|        printf("Instance:%s sc_argv[%d] = %s\n", name(), i, _argv[i]);
    39|      }
    40|    }
    41|  }
    42|
    43|  SC_CTOR(hoge)
    44|    : mhogehoge("mhogehoge")
    45|  {
    46|    SC_CTHREAD(process,clock.pos());
    47|    mhogehoge.clock(clock);
    48|  }
    49|}; 
    50|
    51|int sc_main (int argc, char* argv[]) {
    52|  sc_clock clock ("clock",1,SC_NS);
    53|
    54|  printf("argc = %d\n", argc);
    55|  for (int i = 0; i < argc; i++) {
    56|    printf("argv[%d] = %s\n", i, argv[i]);
    57|  }
    58|
    59|  hoge sample("sample");
    60|  sample.clock(clock);
    61|
    62|  sc_start(2SC_NS);
    63|
    64|  return 0;
    65|}
  • 実行結果
  • $> ./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
    

このように階層を超えて取得することが可能です。

関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数