SystemC 初始化步骤

SystemC全局/静态变量初始化顺序分析
本文在VC toolkit 2003 + SystemC 2.0.1环境下,通过在crt\\src\\crt0dat.c的函数中设断点、单步跟踪程序,分析出SystemC的大致初始化顺序。指出SystemC定义了15处全局/静态变量,还列出了具体位置和初始化点,后续将分析初始化工作。

环境: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_interface.cpp, L78

sc_event sc_interface::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 implementedwith
// 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 对象的初始化。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值