jaye Posted January 30, 2013 Report Posted January 30, 2013 Hello... Recently, I've been having problems with my cout stream when using SystemC. Usually, I just use another stream instead or write to the console using printf as a hotfix, but now SystemC started causing this problem itself, leaving me kind of helpless... I am using MS Visual Studio 2010. The following project compiles fine using SystemC 2.3.0, but as sc_clock is deprecated, it tries to print some warning about that in the console: #include <iostream> #include <systemc.h> using namespace std; int sc_main (int argc, char* argv[]) { sc_clock clk("Clock",1); return 0; } When running the resulting project, I'm getting an access violation with the following stack trace (sorry for the messages being German, I hope you can get the gist out of this): > TestProjectCpp.exe!std::operator<<<char,std::char_traits<char>,std::allocator<char> >(std::basic_ostream<char,std::char_traits<char> > & _Ostr, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _Str) Zeile 503 + 0xf Bytes C++ TestProjectCpp.exe!sc_core::sc_report_handler::default_handler(const sc_core::sc_report & rep, const unsigned int & actions) Zeile 119 + 0x5d Bytes C++ TestProjectCpp.exe!sc_core::sc_report_handler::report(sc_core::sc_severity severity_, const char * msg_type_, const char * msg_, const char * file_, int line_) Zeile 309 + 0x10 Bytes C++ TestProjectCpp.exe!sc_core::sc_clock::sc_clock(const char * name_, double period_, double duty_cycle_, double start_time_, bool posedge_first_) Zeile 187 + 0x1f Bytes C++ TestProjectCpp.exe!sc_main(int argc, char * * argv) Zeile 9 C++ TestProjectCpp.exe!sc_elab_and_sim(int argc, char * * argv) Zeile 81 + 0x20 Bytes C++ TestProjectCpp.exe!main(int argc, char * * argv) Zeile 34 + 0xd Bytes C++ TestProjectCpp.exe!__tmainCRTStartup() Zeile 555 + 0x19 Bytes C TestProjectCpp.exe!mainCRTStartup() Zeile 371 C kernel32.dll!75f433aa() [unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder fehlen, keine Symbole geladen für kernel32.dll] ntdll.dll!76f89ef2() ntdll.dll!76f89ec5() Basically, it's always reporting the line after instanciating sc_clock. The stack trace then points at sc_clock.cpp at SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_, "\n sc_clock(const char*, double, double, double, bool)\n" " is deprecated use a form that includes sc_time or\n" " sc_time_unit"); then to sc_report_handler.cpp at line 309 handler(rep, actions); and at line 119 if ( actions & SC_DISPLAY ) ::std::cout << ::std::endl << sc_report_compose_message(rep) << ::std::endl; The last line being reported is in "string", line 503, which just reads if (!_Ok) The debugger states that _Ok is set to true. I'm really lost here. Any help on how to fix this would be greatly appreciated. Quote
David Black Posted January 30, 2013 Report Posted January 30, 2013 First, sc_clock is NOT deprecated, but rather the constructor signature (syntax) you are using is. Change sc_clock clk("Clock",1); to sc_clock clk("Clock",1,SC_NS); or sc_clock clk("Clock",sc_time(1,SC_NS)); Quote
Philipp A Hartmann Posted January 30, 2013 Report Posted January 30, 2013 Problems in the C++ standard library usually indicate a problem in your environment configuration. Make sure that the compiler options (inclusing #defines) used within your SystemC project match the ones used during the compilation of the SystemC library itself. maehne 1 Quote
jaye Posted February 5, 2013 Author Report Posted February 5, 2013 I double-checked the project properties... They're pretty much the same. But as the non-deprecated compiler fixed it, I guess I'm more or less fine. Thanks for the help Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.