diff --git a/simulators/c++2/Makefile b/simulators/c++2/Makefile index a1f09d922e5f9bb06c40a874a104541bfa0098f2..56d35f37e7434dc211489e869d797f9f224c0f71 100755 --- a/simulators/c++2/Makefile +++ b/simulators/c++2/Makefile @@ -12,7 +12,7 @@ LTHREAD = -pthread DEBUG = -g PROFILE = -pg -OTHER = -Wall +OTHER = -Werror -Wall -Wextra -pedantic -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-parentheses-equality -Wno-self-assign-field -Wno-c++11-long-long -Wno-long-long SOLARIS_SPECIFIC = -lsocket -lnsl TRY = -Wno-deprecated #make = $(OPT) $(OTHER) $(TRY) diff --git a/simulators/c++2/src_simulator/HashAlgo.h b/simulators/c++2/src_simulator/HashAlgo.h index 886c4c9ee6975b76b9326842e4e9be4e5e2ff22e..5ca8d34b793d936630c5651eced86cde6a81c1ed 100644 --- a/simulators/c++2/src_simulator/HashAlgo.h +++ b/simulators/c++2/src_simulator/HashAlgo.h @@ -63,7 +63,7 @@ Ludovic Apvrille, Renaud Pacalet c -= b; c ^= rot(b, 4); b += a; \ } -#define ifinal(a,b,c) \ +#define ihfinal(a,b,c) \ { \ b += rot(a,14); b ^= a;\ a += rot(c,4); a ^= c;\ @@ -73,7 +73,7 @@ Ludovic Apvrille, Renaud Pacalet c += rot(b,14); c ^= b;\ } -#define final(a,b,c) \ +#define hfinal(a,b,c) \ { \ c ^= b; c -= rot(b,14); \ a ^= c; a -= rot(c,11); \ @@ -121,7 +121,7 @@ public: /*void removeValue(HashValueType iVal){ if(_finalized){ - ifinal(_a, _b, _c); + ihfinal(_a, _b, _c); _finalized=false; } switch(_state){ @@ -137,7 +137,7 @@ public: _result = _c; if(_state!=0){ HashValueType aA = _a, aB=_b; - final(aA, aB, _result); + hfinal(aA, aB, _result); _finalized=true; } } diff --git a/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp b/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp index 062011494f4ec348adf242b4bce7b07c45749a3c..8c535b698637e89c64d9a8a38198032dce0a95fa 100644 --- a/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp +++ b/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp @@ -77,4 +77,4 @@ void PropRelConstraint::notifyEnable(unsigned int iSigState){ //} void PropRelConstraint::reset(){ -} \ No newline at end of file +} diff --git a/simulators/c++2/src_simulator/app/Parameter.h b/simulators/c++2/src_simulator/app/Parameter.h index d6f99a625a74e3ec206dcc23699fb52118b2501c..f96df82e5d0dd95089d4a2e491bb78625fe255ab 100644 --- a/simulators/c++2/src_simulator/app/Parameter.h +++ b/simulators/c++2/src_simulator/app/Parameter.h @@ -71,15 +71,14 @@ public: SizedParameter(){ } - SizedParameter(const T& ip1 ...){ + SizedParameter(const T ip1 ...){ //#if size>0 if (size!=0){ - T arg=ip1; va_list args; // argument list va_start(args, ip1); // initialize args - for (unsigned int i=0;i<size;i++){ - _p[i]=arg; - arg=va_arg(args, T); + _p[0]=ip1; + for (unsigned int i=1;i<size;i++){ + _p[i]=va_arg(args, T); } } //#endif @@ -143,12 +142,11 @@ public: } /* template <typename T, int size> void SizedParameter<T,size>::setP(T ip1 ...){ - T arg=ip1; va_list args; // argument list va_start(args, ip1); // initialize args - for (unsigned int i=0;i<size;i++){ - _p[i]=arg; - arg=va_arg(args, T); + _p[0]=ip1; + for (unsigned int i=1;i<size;i++){ + _p[i]=va_arg(args, T); } }*/ diff --git a/simulators/c++2/src_simulator/app/TMLActionCommand.cpp b/simulators/c++2/src_simulator/app/TMLActionCommand.cpp index e1742d0cf4f22fa4cebace63ce45ba5a5d6f1dd1..169fd8371e716116b04b0177cd9149a9d5e2169b 100644 --- a/simulators/c++2/src_simulator/app/TMLActionCommand.cpp +++ b/simulators/c++2/src_simulator/app/TMLActionCommand.cpp @@ -81,4 +81,4 @@ std::string TMLActionCommand::toString(TMLLength aLength, TMLLength aProgress) c std::ostringstream outp; outp << "Action in " << TMLCommand::toString(aLength, aProgress); return outp.str(); -} \ No newline at end of file +} diff --git a/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp b/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp index 58880e49ca2125d006e03cdbf299f66a1ac4a9cb..3ebf2f69e148052cc9ffb96b75dce3929ec2b209 100644 --- a/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp +++ b/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp @@ -43,7 +43,7 @@ Ludovic Apvrille, Renaud Pacalet #include <TMLTransaction.h> #include <SimComponents.h> //#include <CommandListener.h> -TMLDelayCommand::TMLDelayCommand(ID iID, TMLTask* iTask,TMLLength iStatLength, ActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint, bool isActiveDelay):TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint),_actionFunc(iActionFunc){ +TMLDelayCommand::TMLDelayCommand(ID iID, TMLTask* iTask,TMLLength iStatLength, DelayActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint, bool isActiveDelay):TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint),_actionFunc(iActionFunc){ if (!isActiveDelay){ _isActiveDelay = false; }else { diff --git a/simulators/c++2/src_simulator/app/TMLDelayCommand.h b/simulators/c++2/src_simulator/app/TMLDelayCommand.h index 7e1d4b838df1c9063eddd04005e3c676d67dd331..a564fec926a428f1966fc3ea7a8cbb925bf70680 100644 --- a/simulators/c++2/src_simulator/app/TMLDelayCommand.h +++ b/simulators/c++2/src_simulator/app/TMLDelayCommand.h @@ -59,7 +59,7 @@ public: bool _isActiveDelay; virtual bool getActiveDelay() {return _isActiveDelay;} virtual bool isDelayTransaction(){return true;} - TMLDelayCommand(ID iID, TMLTask* iTask, TMLLength iStatLength, ActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint, bool isActiveDelay); + TMLDelayCommand(ID iID, TMLTask* iTask, TMLLength iStatLength, DelayActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint, bool isActiveDelay); ///TMLDelayCommand virtual ~TMLDelayCommand(){} void execute(); @@ -71,7 +71,7 @@ public: inline std::string getCommandStr() const {return "DL";} protected: ///Member function pointer to the action function - ActionFuncPointer _actionFunc; + DelayActionFuncPointer _actionFunc; TMLCommand* prepareNextTransaction(); }; diff --git a/simulators/c++2/src_simulator/app/TMLEventBChannel.h b/simulators/c++2/src_simulator/app/TMLEventBChannel.h index d86ee4a937602b08429dfabf1f571893cae82308..d41f9f063d75e5e51813fac633a48be0e874303d 100644 --- a/simulators/c++2/src_simulator/app/TMLEventBChannel.h +++ b/simulators/c++2/src_simulator/app/TMLEventBChannel.h @@ -93,7 +93,7 @@ public: void write(TMLTransaction* iTrans){ #ifdef LOSS_ENABLED - if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && myrand(0,99) < this->_lossRate){ + if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && (unsigned int)myrand(0,99) < this->_lossRate){ this->_nbOfLosses++; }else{ #endif @@ -232,11 +232,10 @@ public: } TMLLength removeSamples(TMLLength iNbOfSamples) { - TMLLength aNbToRemove; + TMLLength aNbToRemove = 0; if (iNbOfSamples==0) { this->_content=0; this->_paramQueue.clear(); - aNbToRemove=0; } else if (this->_content > 0) { aNbToRemove=1; this->_content-=aNbToRemove; diff --git a/simulators/c++2/src_simulator/app/TMLEventFBChannel.h b/simulators/c++2/src_simulator/app/TMLEventFBChannel.h index b932ba556e696acc15bc97c78a93fc32822bf020..d9e3671c091d4f652a7aaedf9441c06c3c62dbee 100644 --- a/simulators/c++2/src_simulator/app/TMLEventFBChannel.h +++ b/simulators/c++2/src_simulator/app/TMLEventFBChannel.h @@ -161,11 +161,10 @@ public: } TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam){ - TMLLength aNbToInsert; + TMLLength aNbToInsert = 0; if (iNbOfSamples==0){ this->_content=0; this->_paramQueue.clear(); - aNbToInsert=0; }else if(_length-this->_content>0) { aNbToInsert=1; this->_content+=aNbToInsert; @@ -177,11 +176,10 @@ public: } TMLLength removeSamples(TMLLength iNbOfSamples) { - TMLLength aNbToRemove; + TMLLength aNbToRemove = 0; if (iNbOfSamples==0) { this->_content=0; this->_paramQueue.clear(); - aNbToRemove=0; } else if (this->_content>0) { aNbToRemove=1; this->_content-=aNbToRemove; diff --git a/simulators/c++2/src_simulator/app/TMLEventFChannel.h b/simulators/c++2/src_simulator/app/TMLEventFChannel.h index 7b300b79e941e0339311e1781a5b880f7fbfe842..72a6245bac1405fe71e0622aa35d443ef597f29a 100644 --- a/simulators/c++2/src_simulator/app/TMLEventFChannel.h +++ b/simulators/c++2/src_simulator/app/TMLEventFChannel.h @@ -86,7 +86,7 @@ public: void write(TMLTransaction* iTrans){ if (this->_content<_length){ #ifdef LOSS_ENABLED - if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && myrand(0,99) < this->_lossRate){ + if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && (unsigned int)myrand(0,99) < this->_lossRate){ this->_nbOfLosses++; }else{ #endif @@ -155,11 +155,10 @@ public: } TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam){ - TMLLength aNbToInsert; + TMLLength aNbToInsert = 0; if (iNbOfSamples==0){ this->_content=0; this->_paramQueue.clear(); - aNbToInsert=0; } else if (_length-this->_content>0) { aNbToInsert=1; this->_content+=aNbToInsert; @@ -170,11 +169,10 @@ public: } TMLLength removeSamples(TMLLength iNbOfSamples) { - TMLLength aNbToRemove; + TMLLength aNbToRemove = 0; if (iNbOfSamples==0) { this->_content=0; this->_paramQueue.clear(); - aNbToRemove=0; } else if (this->_content>0) { aNbToRemove=1; this->_content-=aNbToRemove; diff --git a/simulators/c++2/src_simulator/app/TMLExeciCommand.h b/simulators/c++2/src_simulator/app/TMLExeciCommand.h index 577ebed0037cd82f1e66a66718491db4b7d0f550..2cb13ca9c15e1c795544a7e96f4f759b1ef853fb 100644 --- a/simulators/c++2/src_simulator/app/TMLExeciCommand.h +++ b/simulators/c++2/src_simulator/app/TMLExeciCommand.h @@ -68,7 +68,7 @@ public: std::string toShortString() const; std::string toShortString(TMLLength aLength, TMLLength aProgress) const; inline std::string getCommandStr() const {return "exe";} - inline unsigned int getExecType() override {return _execType;} + inline unsigned int getExecType() {return _execType;} protected: TMLCommand* prepareNextTransaction(); ///Pointer to the function returning the length of the command diff --git a/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h b/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h index 8ee0cc815a15cdcfb2eb87a060e88521ac1a6844..9b468a6829af85903d1bf9d7f7651b6281aa8812 100644 --- a/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h +++ b/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h @@ -63,6 +63,8 @@ public: virtual ~TMLNotifiedCommand(){} void execute(); inline TMLChannel* getChannel() const {return dynamic_cast<TMLChannel*>(_channel);} + inline unsigned int getNbOfChannels() const {return 1;} + inline TMLChannel* getChannel(unsigned int iIndex) const {return getChannel();} std::string toString() const; std::string toString(TMLLength aLength, TMLLength aProgress) const; std::string toShortString() const; diff --git a/simulators/c++2/src_simulator/app/TMLTask.cpp b/simulators/c++2/src_simulator/app/TMLTask.cpp index aa68d606802432e61a6d644913b4634e6c22dfc3..55513329a2c131843c366ed71d9d3828f0bf9ef1 100644 --- a/simulators/c++2/src_simulator/app/TMLTask.cpp +++ b/simulators/c++2/src_simulator/app/TMLTask.cpp @@ -157,6 +157,7 @@ void TMLTask::getNextSignalChange(bool iInit, SignalChangeData* oSigData){ new (oSigData) SignalChangeData(RUNNING, aCurrTrans->getStartTimeOperation(), this); break; } + // fall through case END_TRANS: if (aCurrTrans->getRunnableTime() == _previousTransEndTime){ //outp << VCD_PREFIX << vcdValConvert(RUNNABLE) << "ta" << _ID; @@ -574,7 +575,7 @@ void TMLTask::schedule2HTML(std::ofstream& myfile) const { isBlankTooBig = true; changeCssClass = true; } - if ( aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()) ){ + if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()){ listScale.push_back(aBlanks+1); tempString << tempBlanks+1; if (beg + 1 > listScaleTime.back()) { diff --git a/simulators/c++2/src_simulator/arch/Bus.cpp b/simulators/c++2/src_simulator/arch/Bus.cpp index 0a05936bae6b7cc89a58d4d6b03eb160e70e9430..7293f9ffd39a09d6761608a73551b6d709ecf203 100644 --- a/simulators/c++2/src_simulator/arch/Bus.cpp +++ b/simulators/c++2/src_simulator/arch/Bus.cpp @@ -348,6 +348,7 @@ void Bus::getNextSignalChange(bool iInit, SignalChangeData* oSigData){ //return 0; return; } + // fall through case END_IDLE_BUS: std::cout<<"BUS END_IDLE_BUS"<<std::endl; if (aCurrTrans->getCommand()->getTask()==aCurrTrans->getChannel()->getBlockedReadTask()){ diff --git a/simulators/c++2/src_simulator/arch/CPU.cpp b/simulators/c++2/src_simulator/arch/CPU.cpp index 9523ba63128745070cb249614668372e4a1057dd..3808fd7c6113870b2ee85d5a2e868fd9a8c34aee 100644 --- a/simulators/c++2/src_simulator/arch/CPU.cpp +++ b/simulators/c++2/src_simulator/arch/CPU.cpp @@ -194,7 +194,7 @@ std::cout << std::endl << "---- CPU HTML ----- " << std::endl; TransactionList _transactListClone; std::string taskList = iTracetaskList.c_str(); maxScale = 0; - for (int z = 0; z < _transactList.size(); z++) + for (unsigned int z = 0; z < _transactList.size(); z++) { std::string taskName = _transactList[z]->getCommand()->getTask()->toString(); std::size_t pos = taskList.find(taskName); /*pos1 = position of "bin" if we working with open model*/ @@ -267,7 +267,7 @@ std::cout << std::endl << "---- CPU HTML ----- " << std::endl; - if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())) + if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()) { listScale.push_back(aBlanks + 1); std::cout << "ListScale: " << (aBlanks + 1) << std::endl; @@ -518,7 +518,7 @@ void CPU::HW2HTML(std::ofstream &myfile) const isBlankTooBig = true; changeCssClass = true; } - if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())) + if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()) { listScale.push_back(aBlanks + 1); tempString << tempBlanks + 1; @@ -699,7 +699,7 @@ void CPU::schedule2HTML(std::ofstream &myfile) const isBlankTooBig = true; changeCssClass = true; } - if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())) + if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()) { listScale.push_back(aBlanks + 1); tempString << tempBlanks + 1; diff --git a/simulators/c++2/src_simulator/arch/FPGA.cpp b/simulators/c++2/src_simulator/arch/FPGA.cpp index 7458dd390289ae2039eeaf9047503e3453ab109a..e43da25d6acd38bc3db4e9674ae2eb0bbbcd1676 100644 --- a/simulators/c++2/src_simulator/arch/FPGA.cpp +++ b/simulators/c++2/src_simulator/arch/FPGA.cpp @@ -475,6 +475,8 @@ void FPGA::getNextSignalChange(bool iInit, SignalChangeData *oSigData) aCurrTrans->setTransVcdOutPutState(END_TASK_TRANS); new (oSigData) SignalChangeData(END_TASK_TRANS, aCurrTrans->getStartTime(), this); + break; + case END_PENALTY_TRANS: break; } } @@ -765,7 +767,7 @@ std::map<TMLTask *, std::string> FPGA::HWTIMELINE2HTML(std::ostringstream &myfil TransactionList _transactListClone; std::string taskList = iTracetaskList.c_str(); maxScale = 0; - for (int z = 0; z < _transactList.size(); z++) + for (unsigned int z = 0; z < _transactList.size(); z++) { std::string taskName = _transactList[z]->getCommand()->getTask()->toString(); std::size_t pos = taskList.find(taskName); /*pos1 = position of "bin" if we working with open model*/ @@ -857,7 +859,7 @@ std::map<TMLTask *, std::string> FPGA::HWTIMELINE2HTML(std::ostringstream &myfil { tempReconfigIdle << " "; } - if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())) + if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()) { listScale.push_back(aBlanks + 1); tempString << tempBlanks + 1; @@ -1072,7 +1074,7 @@ void FPGA::HW2HTML(std::ofstream &myfile) isBlankTooBig = true; changeCssClass = true; } - if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())) + if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()) { listScale.push_back(aBlanks + 1); tempString << tempBlanks + 1; @@ -1236,7 +1238,7 @@ void FPGA::schedule2HTML(std::ofstream &myfile) changeCssClass = true; } - if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())) + if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()) { listScale.push_back(aBlanks + 1); tempString << tempBlanks + 1; @@ -1272,7 +1274,7 @@ void FPGA::schedule2HTML(std::ofstream &myfile) unsigned int aLength = aCurrTrans->getOperationLength(); // Issue #4 - TMLTask *task = aCurrTrans->getCommand()->getTask(); + // TMLTask *task = aCurrTrans->getCommand()->getTask(); // std::cout<<"what is this task?"<<task->toString()<<std::endl; const std::string cellClass = determineHTMLCellClass(nextCellClassIndex); if (!(!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())) diff --git a/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp b/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp index 118e6de0b73a36a961aef3d062cb959272209cc8..fbe97a71b32dbc17806dc7ce77f28153799a1758 100644 --- a/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp +++ b/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp @@ -611,7 +611,7 @@ std::cout << std::endl << "---- Multicore HTML ----- " << std::endl; isBlankTooBig = true; changeCssClass = true; } - if ( aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()) ){ + if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()){ listScale.push_back(aBlanks+1); std::cout << "ListScale: " << (aBlanks+1) << '\n'; diff --git a/simulators/c++2/src_simulator/arch/OrderScheduler.cpp b/simulators/c++2/src_simulator/arch/OrderScheduler.cpp index c2e3a67f8993f01305b59ec190dac48032f320d2..e5148f1d4e9dd98e0b7109e4351c22d6dd5ac6df 100644 --- a/simulators/c++2/src_simulator/arch/OrderScheduler.cpp +++ b/simulators/c++2/src_simulator/arch/OrderScheduler.cpp @@ -51,7 +51,7 @@ TMLTime OrderScheduler::schedule(TMLTime iEndSchedule){ TaskList::iterator i; //std::cout << _name << ": Schedule called \n"; - TMLTransaction *anOldTransaction = _nextTransaction, *aTempTrans; + TMLTransaction *aTempTrans; TMLTime aLowestRunnableTimeFuture=-1, aRunnableTime, aLowestRunnableTimePast=-1; WorkloadSource *aSourcePast=0, *aSourceFuture=0; //std::cout << _name << ": Second if\n"; diff --git a/simulators/c++2/src_simulator/arch/ReconfigScheduler.cpp b/simulators/c++2/src_simulator/arch/ReconfigScheduler.cpp index 95c2d6af7cc4b62c30a2078c46d1e16f3296d41e..85ffe77eeb8d458265594257133dd9584f1d9dbb 100644 --- a/simulators/c++2/src_simulator/arch/ReconfigScheduler.cpp +++ b/simulators/c++2/src_simulator/arch/ReconfigScheduler.cpp @@ -49,9 +49,9 @@ ReconfigScheduler::ReconfigScheduler(const std::string& iName, Priority iPrio, W TMLTime ReconfigScheduler::schedule(TMLTime iEndSchedule){ std::cout<<"reconfig scheduler"<<std::endl; TaskList::iterator i; - TMLTransaction *aMarkerPast=0, *aMarkerFuture=0,*aTempTrans; + TMLTransaction *aMarkerPast=0, *aTempTrans; TMLTask* aTempTask; - TMLTime aTransTimeFuture=-1,aRunnableTime,aLowestRunnableTimePast=-1;; + TMLTime aRunnableTime,aLowestRunnableTimePast=-1;; WorkloadSource *aSourcePast=0, *aSourceFuture=0; //NEW std::vector<std::string> getTaskOrder; std::string _tempTaskOrder, taskOrderCopy; @@ -80,7 +80,7 @@ TMLTime ReconfigScheduler::schedule(TMLTime iEndSchedule){ std::cout<<"taskName "<<taskName.substr(indexTask+1,taskNameLength)<<std::endl; #endif // set priority to task base on order of user - for(int z = 0; z < getTaskOrder.size(); z++){ + for(unsigned int z = 0; z < getTaskOrder.size(); z++){ std::string::size_type position=getTaskOrder[z].find(taskName.substr(indexTask+1,taskNameLength)); if(position!=_tempTaskOrder.npos){ (*i)->setPriority(z); diff --git a/simulators/c++2/src_simulator/arch/SchedulableDevice.cpp b/simulators/c++2/src_simulator/arch/SchedulableDevice.cpp index 7c306e487d81a8927021eb06182b81b5194f82e6..240425701f7c5f4ff1186aeba38132324e693546 100644 --- a/simulators/c++2/src_simulator/arch/SchedulableDevice.cpp +++ b/simulators/c++2/src_simulator/arch/SchedulableDevice.cpp @@ -339,7 +339,7 @@ std::map<TMLTask *, std::string> SchedulableDevice::HWTIMELINE2HTML(std::ostring TransactionList _transactListClone; std::string taskList = iTracetaskList.c_str(); maxScale = 0; - for (int z = 0; z < _transactList.size(); z++) + for (unsigned int z = 0; z < _transactList.size(); z++) { std::string taskName = _transactList[z]->getCommand()->getTask()->toString(); std::size_t pos = taskList.find(taskName); /*pos1 = position of "bin" if we working with open model*/ @@ -400,7 +400,7 @@ std::map<TMLTask *, std::string> SchedulableDevice::HWTIMELINE2HTML(std::ostring isBlankTooBig = true; changeCssClass = true; } - if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())) + if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()) { // std::cout << "Case blank #1: assign transaction " << aCurrTrans->toShortString() << std::endl; listScale.push_back(aBlanks + 1); @@ -647,7 +647,7 @@ void SchedulableDevice::HW2HTML(std::ofstream &myfile) const isBlankTooBig = true; changeCssClass = true; } - if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())) + if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()) { listScale.push_back(aBlanks + 1); tempString << tempBlanks + 1; @@ -834,7 +834,7 @@ void SchedulableDevice::schedule2HTML(std::ofstream &myfile) const isBlankTooBig = true; changeCssClass = true; } - if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())) + if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()) { listScale.push_back(aBlanks + 1); diff --git a/simulators/c++2/src_simulator/definitions.h b/simulators/c++2/src_simulator/definitions.h index 46726be2dc50151cb0ad78173c57ea3211e5ab69..2cf89988ce176ca67ec4a4841ac8e1e8e46c2c61 100644 --- a/simulators/c++2/src_simulator/definitions.h +++ b/simulators/c++2/src_simulator/definitions.h @@ -72,6 +72,7 @@ Ludovic Apvrille, Renaud Pacalet #include <sys/resource.h> #include <unistd.h> #include "penalties.h" +#include <assert.h> #define WRITE_STREAM(s,v) s.write((char*) &v,sizeof(v)); @@ -275,7 +276,7 @@ using std::max; #define SCHED_HTML_TITLE_HW "<h1> Summary HW </h1>" #define SCHED_HTML_TITLE_TASK "<h1> Summary tasks </h1>" #define SCHED_HTML_TITLE_DEVICE "<h1> Device scheduling </h1>" -#define SCHED_HTML_BOARD "<table width=\"170px\" style=\"float: left\">\n \<tr><td style=\"max-width: unset;\">" +#define SCHED_HTML_BOARD "<table width=\"170px\" style=\"float: left\">\n <tr><td style=\"max-width: unset;\">" #define SCHED_HTML_BOARD2 "<table style=\"float: left\">" #define SCHED_HTML_JS_LINK1 "<script src=\"https://code.jquery.com/jquery-3.4.1.min.js\">" @@ -684,7 +685,9 @@ typedef std::deque<Parameter* > ParamQueue; ///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand) typedef unsigned int (TMLTask::*CondFuncPointer) (); ///Type of member function pointer used to indicate a function encapsulating an action (for TMLActionCommand) -typedef int (TMLTask::*ActionFuncPointer) (); +typedef void (TMLTask::*ActionFuncPointer) (); +///Type of member function pointer used to indicate a function encapsulating a delay action (for TMLDelayCommand) +typedef TMLTime (TMLTask::*DelayActionFuncPointer) (); ///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand) typedef TMLTime (TMLTask::*LengthFuncPointer) (); ///Type of pointer to indicate a function encapsulating a TEPE condition @@ -775,15 +778,15 @@ inline T StringToNum(const std::string& iStr){ */ template<typename T> T* array(unsigned int noArgs, T arg1 ...){ - T arg=arg1; + assert(noArgs > 0); T* newArray; unsigned int i; va_list args; // argument list va_start(args, arg1); // initialize args newArray=new T[noArgs]; - for (i=0;i<noArgs;i++){ - newArray[i]=arg; - arg=va_arg(args, T); + newArray[0] = arg1; + for (i=1;i<noArgs;i++){ + newArray[i]=va_arg(args, T); } va_end(args); // clean up args return newArray; @@ -841,7 +844,7 @@ namespace std{ return p1->_time > p2->_time; } }; -}; +} ///Priority queue for SignalChangeData objects, keeps track of the temporal ordering of signal changes (for VCD output) typedef std::priority_queue<SignalChangeData*, std::vector<SignalChangeData*>, std::greater<SignalChangeData*> > SignalChangeQueue; diff --git a/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp b/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp index 918ea3ae24d40646e444046f6ddff62d550b71d1..a469357ea430ca4da1cec3f99f92d39a4e750ac4 100644 --- a/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp +++ b/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp @@ -159,7 +159,7 @@ CondBreakpoint::CondBreakpoint(SimComponents* iSimComp, std::string iCond, TMLTa std::cout << "Error " << dlerror() << " occurred when opening shared library.\n"; return; } - _condFunc = (BreakCondFunc) dlsym( _dlHandle, "condFunc"); + _condFunc = (BreakCondFunc)(intptr_t) dlsym( _dlHandle, "condFunc"); if (dlerror() != NULL) { std::cout << "Error when getting function handle\n"; return; diff --git a/simulators/c++2/src_simulator/sim/ServerHelp.cpp b/simulators/c++2/src_simulator/sim/ServerHelp.cpp index bc95e02cd81672d9af2346bc2c399a9cda3a05ef..c71ea9537a2056f32b6fe5c77d5a7be4d3decbf5 100644 --- a/simulators/c++2/src_simulator/sim/ServerHelp.cpp +++ b/simulators/c++2/src_simulator/sim/ServerHelp.cpp @@ -95,12 +95,10 @@ void ServerHelp::parseHtml(std::string filePath) { std::string searchEnd = "</tr>"; std::string delimiter = "</td>"; // std::string breakLine = "<br />"; - unsigned int curLine = 0; std::istringstream data(filePath.c_str()); while(std::getline(data, line)) { - curLine++; if (line.find(searchStart1, 0) != std::string::npos || line.find(searchStart2, 0) != std::string::npos) { check = true; continue; @@ -200,4 +198,4 @@ std::vector<std::string> ServerHelp::splitData (std::string s, std::string delim token = trim(token.substr(pos + 2)); res.push_back(token); return res; -} \ No newline at end of file +} diff --git a/simulators/c++2/src_simulator/sim/ServerHelp.h b/simulators/c++2/src_simulator/sim/ServerHelp.h index 42bc3e450b4b622296fd7fda8b4cf15c1b85f976..297d87519071c4a5397bc00b25a2f5c837621e36 100644 --- a/simulators/c++2/src_simulator/sim/ServerHelp.h +++ b/simulators/c++2/src_simulator/sim/ServerHelp.h @@ -86,4 +86,4 @@ public: std::map <std::string, std::string> aliasMapWithName; std::string helpServerContent; -}; \ No newline at end of file +}; diff --git a/simulators/c++2/src_simulator/sim/ServerLocal.cpp b/simulators/c++2/src_simulator/sim/ServerLocal.cpp index b1bf9a6de0f30a9f971a3c0024a33897da6263b2..4243f491504d69a894ebb304047b0dbbcd51286b 100644 --- a/simulators/c++2/src_simulator/sim/ServerLocal.cpp +++ b/simulators/c++2/src_simulator/sim/ServerLocal.cpp @@ -49,7 +49,7 @@ int ServerLocal::run(){ char aCmd[BUFFER_SIZE]; int aNumberOfBytes; if (aCmdFileH.is_open()){ - std::cout << "Reading command file " << aCmdFileH << std::endl; + std::cout << "Reading command file " << _cmdFile << std::endl; while(!(_syncInfo->_terminate || aCmdFileH.eof())) { aCmdFileH.getline(aCmd,BUFFER_SIZE-1); aNumberOfBytes=strlen(aCmd); diff --git a/simulators/c++2/src_simulator/sim/Simulator.cpp b/simulators/c++2/src_simulator/sim/Simulator.cpp index 90ab98b8d7559fe6232a747f7a67e5d98e9beb5b..83a6d722c721888ca13de3c8aab82e37b888b008 100644 --- a/simulators/c++2/src_simulator/sim/Simulator.cpp +++ b/simulators/c++2/src_simulator/sim/Simulator.cpp @@ -1124,6 +1124,8 @@ bool Simulator::simulate(TMLTransaction *&oLastTrans) { // bool isHanging = false; // long countMaxTrans = 0; + oLastTrans = NULL; + #ifdef DEBUG_KERNEL std::cout << "kernel:simulate: first schedule" << std::endl; #endif @@ -1487,9 +1489,9 @@ std::string to_string(const T &n) return stm.str(); } -int countLineNumber(std::string &filename) +unsigned int countLineNumber(std::string &filename) { - int number_of_lines = 0; + unsigned int number_of_lines = 0; std::string line; std::ifstream myfile(filename.c_str()); @@ -1563,10 +1565,10 @@ ServerIF *Simulator::run(int iLen, char **iArgs) aArgString = getArgs("-signals", "signals.txt", iLen, iArgs); if (!aArgString.empty()) { - int lineNumber = countLineNumber(aArgString); + unsigned int lineNumber = countLineNumber(aArgString); std::vector<std::string> parameters = readFromFile(aArgString); std::string aNewCmd; - int previousTransTime = 0; + unsigned int previousTransTime = 0; if ((parameters.size() != (lineNumber * 4))) { std::cout << "Error: Wrong format, each line should contains 4 parameters.\n"; @@ -1575,7 +1577,7 @@ ServerIF *Simulator::run(int iLen, char **iArgs) { if (lineNumber != 0) { - for (int i = 0; i < lineNumber; i++) + for (unsigned int i = 0; i < lineNumber; i++) { std::string channelName = _simComp->getChannelList(parameters[i * 4 + 1]); TMLChannel *t = _simComp->getChannelByName(channelName); @@ -2473,6 +2475,7 @@ void Simulator::decodeCommand(std::string iCmd, std::ostream &iXmlOutStream) case 3: // XML aGlobMsg << TAG_MSGo << "Schedule output in XML format" << TAG_MSGc << std::endl; schedule2XML(anEntityMsg, aStrParam); + break; case 4: { // Timeline diagram aGlobMsg << TAG_MSGo << "Schedule output in timeline format" << TAG_MSGc << std::endl; @@ -2540,7 +2543,13 @@ void Simulator::decodeCommand(std::string iCmd, std::ostream &iXmlOutStream) aInpStream >> aParam1; std::cout << "printhtis" << std::endl; - std::cout << TAG_MSGo << oLastTrans->toString() << aStrParam << TAG_MSGc << std::endl; + std::string oLastTransString; + if (oLastTrans == NULL) { + oLastTransString = "<null>"; + } else { + oLastTransString = oLastTrans->toString(); + } + std::cout << TAG_MSGo << oLastTransString << aStrParam << TAG_MSGc << std::endl; switch (aParam1) { case 0: @@ -2737,6 +2746,7 @@ void Simulator::decodeCommand(std::string iCmd, std::ostream &iXmlOutStream) std::cout << "Calculate latencies between " << aParam1 << " and " << aParam2 << std::endl; addLatencyIds(aParam1, aParam2); std::cout << "latencies " << &anEntityMsg << std::endl; + break; case 25: // Get list of all transactions belogn to a task aInpStream >> aStrParam; std::cout << "Get list of all transactions belong to " << aStrParam << std::endl; diff --git a/simulators/c++av/src_simulator/definitions.h b/simulators/c++av/src_simulator/definitions.h index f3f9279a51a615feb1e070fb0c19b30a082c5d02..09519370a80c1df423fadb43f0db605e47493f0d 100644 --- a/simulators/c++av/src_simulator/definitions.h +++ b/simulators/c++av/src_simulator/definitions.h @@ -64,6 +64,7 @@ Ludovic Apvrille, Renaud Pacalet #include <netinet/in.h> #include <pthread.h> #include <dlfcn.h> +#include <assert.h> #define xx__VARS(a1, a2, a3, a4, a5, a6, a7, a8, ...) (void*)&(a1), sizeof(a1), (void*)&(a2), sizeof(a2), (void*)&(a3), sizeof(a3), (void*)&(a4), sizeof(a4), (void*)&(a5), sizeof(a5), (void*)&(a6), sizeof(a6), (void*)&(a7), sizeof(a7), (void*)&(a8), sizeof(a8) #define xx__SIZE(a1, a2, a3, a4, a5, a6, a7, a8, ...) sizeof(a1)+sizeof(a2)+sizeof(a3)+sizeof(a4)+sizeof(a5)+sizeof(a6)+sizeof(a7)+sizeof(a8) @@ -138,15 +139,14 @@ public: */ template<typename T> T* array(unsigned int noArgs, T arg1 ...){ - T arg=arg1; + assert(noArgs > 0); T* newArray; unsigned int i; va_list args; // argument list va_start(args, arg1); // initialize args newArray=new T[noArgs]; - for (i=0;i<noArgs;i++){ - newArray[i]=arg; - arg=va_arg(args, T); + for (i=1;i<noArgs;i++){ + newArray[i]=va_arg(args, T); } va_end(args); // clean up args return newArray; diff --git a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java index 0c0d7a9d1b59e4a147a248d72b7a8d834d95dbc5..1069857f6a7ae791f7be1131314336351d045ed2 100644 --- a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java +++ b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java @@ -587,10 +587,10 @@ public class MappedSystemCTask { idString = String.valueOf(currElem.getID()); } hcode += "TMLDelayCommand " + cmdName + SCCR; - initCommand += "," + cmdName + "(" + idString + ",this,1,(ActionFuncPointer)&" + reference + "::" + cmdName + + initCommand += "," + cmdName + "(" + idString + ",this,1,(DelayActionFuncPointer)&" + reference + "::" + cmdName + "_func," + " " + getFormattedLiveVarStr(currElem) + ", " + delay.getActiveDelay() + ")" + CR; - //initCommand += "," + cmdName + "(" + idString + ",this,"+ delayLen +",(ActionFuncPointer)&" + reference + "::" + cmdName + + //initCommand += "," + cmdName + "(" + idString + ",this,"+ delayLen +",(DelayActionFuncPointer)&" + reference + "::" + cmdName + // "_func," + // " " + getFormattedLiveVarStr(currElem) + ", " + delay.getActiveDelay() + ")" + CR; nextCommand = cmdName + ".setNextCommand(array(1,(TMLCommand*)" + makeCommands(currElem.getNextElement(0), false, retElement, null) + "));\n"; @@ -845,6 +845,7 @@ public class MappedSystemCTask { noOfGuards++; } } + code += "assert(false)" + SCCR + "abort()" + SCCR; } else { int indElseGuard = choice.getElseGuard(), newIndElseGuard = -1; @@ -1131,7 +1132,10 @@ public class MappedSystemCTask { //code += "ParamType arg2__req" + SCCR; //code += "ParamType arg3__req" + SCCR; code += "ParamType rnd__0" + SCCR; - code += "TMLChannel* _channels[" + (channels.size() + events.size() + (task.isRequested() ? 1 : 0)) + "]" + SCCR; + int num = channels.size() + events.size() + (task.isRequested() ? 1 : 0); + if (num > 0) { + code += "TMLChannel* _channels[" + num + "]" + SCCR; + } return code; } diff --git a/src/main/java/tmltranslator/tomappingsystemc2/Penalties.java b/src/main/java/tmltranslator/tomappingsystemc2/Penalties.java index c9f8ad5da934e02aead7e9f83bd23376f93b0398..4ebac721f047df85551fa1b6f4834b54599e8207 100644 --- a/src/main/java/tmltranslator/tomappingsystemc2/Penalties.java +++ b/src/main/java/tmltranslator/tomappingsystemc2/Penalties.java @@ -106,9 +106,9 @@ public class Penalties { data = FILE_HEADER + "\n"; if (mustHandlePenalties) { - data += ACTIVATED; + data += ACTIVATED + "\n"; } else { - data += NOT_ACTIVATED; + data += NOT_ACTIVATED + "\n"; } try {