SystemC 初始化步驟

2021-08-21 22:50:07 字數 1971 閱讀 4203

環境:vc toolkit 2003 + systemc 2.0.1

為了找出systemc定義了哪些全域性變數/靜態變數,我在crt\src\crt0dat.c的

void _initterm(_pvfv * pfbegin, _pvfv * pfend)

函式中設下斷點,at line 598:

if ( *pfbegin != null )

(**pfbegin)(); // 此處中斷

然後單步跟蹤程式,就得到了systemc的大致初始化順序:(c++標準不保證各轉譯單元(translation unit)之間全域性變數的初始化順序,因此這裡列出的可看作某種典型情況)

據我觀察,systemc定義了15處全域性/靜態變數,其中7處形如:

static int forty_two = initialize();

散見於communication\sc_communication_ids.cpp、datatypes\bit\sc_bit_ids.cpp、datatypes\fx\sc_fx_ids.cpp、datatypes\int\sc_int_ids.cpp、kernel\sc_kernel_ids.cpp、utils\sc_report.cpp、utils\sc_utils_ids.cpp。

其餘8個初始化點分別是:

1. kernel\sc_time.cpp, l355

const sc_time sc_zero_time;

2. communication\sc_inte***ce.cpp, l78

sc_event sc_inte***ce::m_never_notified;

// 此處會轉而呼叫 kernel\sc_simcontext.cpp,l835:

// sc_get_curr_simcontext()

// 從而初始化全域性的 sc_simcontext 物件,大事件!

3. kernel\sc_module.cpp,l136

const sc_bind_proxy sc_bind_proxy_nil;

4. kernel\sc_cor_fiber.cpp,l49

static sc_cor_fiber main_cor;

// 此處與平台相關,如果是unix like平台,那麼「coroutine class implemented

with

// quickthreads.」;若是win32平台,那麼「coroutine implementation with fibers.」

// 不過程式中的注釋似乎寫錯了 :)

5. utils\sc_report_handler.cpp,l205

static handler_gc_name gc;

6. kernel\sc_lambda.cpp,l59

sc_lambda

sc_lambda::dummy_lambda;

7. datatypes\bit\sc_logic.cpp,l154,初始化4個邏輯值常數

const sc_logic sc_logic_0( log_0 );

const sc_logic sc_logic_1( log_1 );

const sc_logic sc_logic_z( log_z );

const sc_logic sc_logic_x( log_x );

const sc_logic sc_logic_0( log_0 );

const sc_logic sc_logic_1( log_1 );

const sc_logic sc_logic_z( log_z );

const sc_logic sc_logic_x( log_x );

8. datatypes\fx\scfx_rep.cpp,l57

static scfx_pow10 pow10_fx;

以後,我將繼續分析這些初始化到底做了些什麼工作,重頭戲當然是 sc_simcontext

物件的初始化。

SystemC 初始化步驟

環境 vc toolkit 2003 systemc 2.0.1 為了找出systemc定義了哪些全域性變數 靜態變數,我在crt src crt0dat.c的 void initterm pvfv pfbegin,pvfv pfend 函式中設下斷點,at line 598 if pfbegin ...

lu 初始化設定步驟

yum webmin 編輯 etc fstab wget tar zxvf zijidelu install.tar.gz 2.修改 mysql版本 修改lun install config.sh裡面的版本號 在zijidelu install目錄下,優先權最高 不要使用rpm快速安裝。cd zij...

hyperf 專案初始化步驟

1 git clone 專案 2 檢視php是否安裝swool擴充套件 未安裝 安裝 注意 如果php是在mamp中的 mamp的php.ini 和 php.ini都要更新 在對應的php.ini中 新增 extension swoole.so swoole.use shortname off 5 ...