From bd447aefa0f9e39f4c607733715a848c48c7dd27 Mon Sep 17 00:00:00 2001 From: Daniel Knorreck <daniel.knorreck@telecom-paristech.fr> Date: Thu, 17 Sep 2009 14:54:13 +0000 Subject: [PATCH] bugfix: BusMaster segfault --- simulators/c++2/src_simulator/BusMaster.h | 3 ++- simulators/c++2/src_simulator/CPU.cpp | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/simulators/c++2/src_simulator/BusMaster.h b/simulators/c++2/src_simulator/BusMaster.h index ab1ed73a3e..8b677cdc99 100644 --- a/simulators/c++2/src_simulator/BusMaster.h +++ b/simulators/c++2/src_simulator/BusMaster.h @@ -72,7 +72,7 @@ public: void reset(){ _nextTransaction=0; _lastSimTime=-1; - _nextBus=0; + _nextBus=_busArray[0]; _contentionDelay=0; _noTransactions=0; } @@ -98,6 +98,7 @@ public: void addTransaction(){ //_addTransFlag++; + //std::cout << _name << ": add Trans\n"; //std::cout << _name << ": trans added on Bus: " << _nextBus->toString() << std::endl; _nextBus->addTransaction(); _nextTransaction=0; diff --git a/simulators/c++2/src_simulator/CPU.cpp b/simulators/c++2/src_simulator/CPU.cpp index b98df8c4b6..812db4eb7b 100644 --- a/simulators/c++2/src_simulator/CPU.cpp +++ b/simulators/c++2/src_simulator/CPU.cpp @@ -201,22 +201,32 @@ bool CPU::addTransaction(){ //Slave* aLastSlave=_nextTransaction->getChannel()->getNextSlave(_nextTransaction); BusMaster* aFollowingMaster =_nextTransaction->getChannel()->getNextMaster(_nextTransaction); if (aFollowingMaster==0){ + //std::cout << "1\n"; aFinish=true; BusMaster* aTempMaster =_nextTransaction->getChannel()->getFirstMaster(_nextTransaction); + //std::cout << "2\n"; Slave* aTempSlave= _nextTransaction->getChannel()->getNextSlave(_nextTransaction); + //std::cout << "3\n"; aTempMaster->addBusContention(_nextTransaction->getStartTime()-max(_endSchedule,_nextTransaction->getRunnableTime())); while (aTempMaster!=0){ + //std::cout << "3a\n"; aTempMaster->addTransaction(); + //std::cout << "3b\n"; aTempSlave->addTransaction(_nextTransaction); + //std::cout << "4\n"; aTempMaster =_nextTransaction->getChannel()->getNextMaster(_nextTransaction); + //std::cout << "5\n"; aTempSlave= _nextTransaction->getChannel()->getNextSlave(_nextTransaction); } + //std::cout << "6\n"; }else{ //std::cout << _name << " bus transaction next round" << std::endl; _masterNextTransaction=aFollowingMaster; + //std::cout << "7\n"; _masterNextTransaction->registerTransaction(_nextTransaction); aFinish=false; } + //std::cout << "8\n"; } if (aFinish){ #ifdef DEBUG_CPU -- GitLab