Предупреждение sc_start W571 указывает на сбой привязки сигнал / порт?

После привязки Сигнал / Порт при изменении сигнала в чувствительном списке запускается зарегистрированный метод 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();
}
}

0

Решение

Я исправил проблему. Короче говоря, это проблема моего кода ( удалять не в правильном месте; кроме того, есть утечки памяти)

Будьте очень осторожны при использовании типа указателя в качестве сигнала / порта.


когда sc_start оценивает наличие ожидающих действий, он фактически сравнивает m_cur_val и m_new_val.

В моём случае первое назначение присваивает eventSubject = new Event (…), скажи адрес 0x1234

тогда это выпущеноудалить событие;«

Теперь: m_cur_val указывает на «0x1234» со значением 0xfeeefeee (потому что оно выпущено)

Теперь доходит доeventSubject = new Event (…)msgstr «, память также выделена в» 0x1234 «.
поэтому m_new_val равен «0x1234».

так как m_cur_val == m_new_val, SystemC считает, что нет ожидающих действий, поэтому SC_MODULE не будет вызываться.


Как исправить:

добавить следующие две строки кода:

    eventSubject = NULL;
sc_start();
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]