rfajardo Posted December 10, 2012 Report Share Posted December 10, 2012 Hello everyone, I have successfuly compiled SystemC-2.3.0 under VS2012. Compilation: For a system description and compilation, I had to enable static linking the following way, aside from configuring the include and library directories and the library name. Properties->configuration properties->C/C++->Code Generation Runtime Library set to Multi-threaded Debug (\MTd) After that, I was able to compile the simulation project. Execution: During execution, Windows throws an exception for the DCAST of line 359 on sc_thread_process.cpp. This is executed by the call to SC_THREAD(run) in the "CPU" constructor. The related code can be found enclosed. Console output: Error: (E549) uncaught exception: Access violation - no RTTI data! In file: c:\users\raul\documents\visual studio 2012\projects\systemc-2.3.0\src\sysc\kernel\sc_except.cpp:98 Visual Studio output: First-chance exception at 0x0135EF3F in coprocessor_func.exe: 0xC0000005: Access violation reading location 0x00000005. First-chance exception at 0x74D54B32 in coprocessor_func.exe: Microsoft C++ exception: std::__non_rtti_object at memory location 0x007EF570. First-chance exception at 0x74D54B32 in coprocessor_func.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000. First-chance exception at 0x74D54B32 in coprocessor_func.exe: Microsoft C++ exception: sc_core::sc_report at memory location 0x007EE304. The program '[4260] coprocessor_func.exe' has exited with code 1 (0x1). Could this be related to the issue that dynamic cast should not be called from within a constructor because the object is not yet fully built? References: Under item 6: http://en.cppreferen...ge/dynamic_cast This is an example that I am using without issues under Linux. Any ideas of what can be going wrong? Thanks in advance, Raul Fajardo Code: #include <systemc.h> #include <iostream> using namespace std; class CoProcessor { sc_time m_process_time; public: CoProcessor() { m_process_time = sc_time(20, SC_US); } unsigned int sum(unsigned int a, unsigned int { unsigned int tmp = a + b; wait(m_process_time); return tmp; } }; class CPU : public sc_module { CoProcessor co_cpu; public: SC_HAS_PROCESS(CPU); //enables the definition of SC_THREAD or SC_METHOD (SC_METHOD has sensitivity and never ends) CPU(sc_module_name nm) : sc_module(nm) { SC_THREAD(run); //registers the function to the simulation kernel, enables wait() } void run() { unsigned int a, b, c; b = 10; c = 5; a = co_cpu.sum(b, c); cout << "Computation result of " << b << " + " << c << ": " << a << endl; cout << "Algorithm was run in " << sc_time_stamp() << endl; } }; int sc_main(int argc, char * argv[]) { CPU processor("main_processor"); sc_start(500, SC_US); //simulate for 500 microseconds return 0; } Quote Link to comment Share on other sites More sharing options...
Philipp A Hartmann Posted December 10, 2012 Report Share Posted December 10, 2012 Make sure you have the RTTI-information enabled in your VC++ project and that the /vmg switch is added to your compiler settings. See INSTALL file in the SystemC package: 6. From the C/C++ tab, select the Language properties and set 'Enable Run-Time Type Info' to Yes 7. From the C/C++ tab, select the Command Line properties and add /vmg to the 'Additional Options:' box. http://msdn.microsof...y/we6hfdy0.aspx http://msdn.microsof...y/yad46a6z.aspx Greetings from Oldenburg, Philipp Quote Link to comment Share on other sites More sharing options...
rfajardo Posted December 11, 2012 Author Report Share Posted December 11, 2012 Thank you Philipp. It worked! /GR is VS2012 default, as I could detect. Greetings from Aschaffenburg, Raul Quote Link to comment Share on other sites More sharing options...
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.