sc_start警告W571表示信号/端口绑定失败?

时间:2013-09-11 06:23:18

标签: c++ systemc

信号/端口绑定后,当信号发生变化时,敏感列表将导致SC_METHOD注册方法运行。

当我实现SystemC版本时,我遇到了警告W571。说实话,我认为这个警告是正确的,因为没有活动。但为什么没有我认为应该有的活动就是问题。

第二次调用sc_start()时会出现问题;

我怀疑信号/端口之间的绑定处理不好。

SC_MODULE ( MyClass )
{
    SC_CTOR(MyClass)
    {
        SC_METHOD(eventListener);
        dont_initialize();
        sensitive << m_event;
    }
    void eventListener()
    {
        Event* event = m_event.read();
        ...
        delete event;
    }
}

int sc_main (int argc, char* argv[]) 
{
    sc_signal<Event*>   eventSubject;
    MyClass  context("CONTEXT");
    context.m_event(eventSubject);   //bind signal to port, m_event is the port

    while(true)
    {
        getline(cin, in);
        ...
        eventSubject = new Event();
        sc_start();
    }
}

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。简而言之,这是我的代码问题(删除不在正确的位置;此外,还有内存泄漏)

将指针类型用作信号/端口时要非常小心。


当sc_start评估是否有活动待处理时,它实际上是在比较m_cur_val和m_new_val。

就我而言,第一次分配 eventSubject = new Event(...)时,请说地址 0x1234

然后由“删除事件;

发布

现在:m_cur_val指向“0x1234”,值为0xfeeefeee(因为它被释放)

现在来到“ eventSubject = new Event(...)”,内存也分配在“0x1234”。 所以m_new_val是“0x1234”。

因为m_cur_val == m_new_val,SystemC认为没有待处理的活动,所以不会调用SC_MODULE。


如何解决:

添加以下两行代码:

    eventSubject = NULL;
    sc_start();