SystemC: SC_THREAD не запускается

Моя простая программа "HelloWorld" не работает. Программы печатают обычное уведомление об авторских правах SystemC, но не строку «Hello World»).

Если я напишу аналогичную программу, используя SC_METHOD (удалив wait вызовы), я смогу увидеть напечатанное сообщение.

Что вызывает это?

    #include <iostream>
    #include "systemc.h"

    SC_MODULE(stim)
    {
        sc_in<bool> Clk;

        void StimGen()
        {
            cout << "Hello World!\n";
            wait();
            cout << "Hello again, world!\n";
            wait();
        }
        SC_CTOR(stim)
        {
            SC_THREAD(StimGen);
            sensitive << Clk.pos();
        }
    };


    int sc_main(int argc, char* argv[])
    {
        sc_clock TestClk("clk", 10,SC_NS);

        stim Stim1("Stimulus");
        Stim1.Clk(TestClk);

        sc_start();  // run forever

        return 0;

    }

person Dario Socci    schedule 15.03.2015    source источник
comment
Спасибо за ответ, но похоже я решил проблему. Возникла проблема с установкой. Переустановка с использованием параметра --enable-pthreads при настройке установки решила проблему.   -  person Dario Socci    schedule 19.03.2015


Ответы (3)


Во время установки библиотек SystemC скомпилируйте их с параметром --enable-pthreads. Это решит вашу проблему.

person CrazyGeek    schedule 31.07.2015

Ваш код отлично работает для меня, используя SystemC 2.3.1 (от Accellera) и Clang 6.0 в OS X: я вижу оба приветственных отпечатка, исходящих от процесса потока.

$ ./main
        SystemC 2.3.1-Accellera --- Nov 29 2014 15:29:06
        Copyright (c) 1996-2014 by all Contributors,
        ALL RIGHTS RESERVED
Hello World!
Hello again, world!

Я не уверен, почему вы видите другое поведение. Может быть, это какое-то поведение буферизации ввода-вывода в вашей хост-ОС? Вы можете попробовать изменить строку sc_start() на sc_start(20, SC_NS) для запуска в течение ограниченного периода времени.

person DarrylLawson    schedule 17.03.2015

Ваш код у меня тоже работает. Может быть, попробовать сбросить буфер вывода stdout? Используйте endl вместо '\n' или cout << flush

person Hsu Hau    schedule 13.05.2015