Skip to content
Snippets Groups Projects
Commit e4c58006 authored by Le Van Truong's avatar Le Van Truong
Browse files

Fix multiCore problem in infinity loop

parent 1d5c6639
No related branches found
No related tags found
1 merge request!251Revert c7faf42b
...@@ -41,6 +41,7 @@ Ludovic Apvrille, Renaud Pacalet ...@@ -41,6 +41,7 @@ Ludovic Apvrille, Renaud Pacalet
#include <TMLTransaction.h> #include <TMLTransaction.h>
#include <TMLCommand.h> #include <TMLCommand.h>
#include <TMLTask.h> #include <TMLTask.h>
#include <CPU.h>
RRScheduler::RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice ,TMLTime iMinSliceSize): WorkloadSource(iPrio), _name(iName), _nextTransaction(0), _timeSlice(iTimeSlice), _minSliceSize(iMinSliceSize), _elapsedTime(0), _lastSource(0){ RRScheduler::RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice ,TMLTime iMinSliceSize): WorkloadSource(iPrio), _name(iName), _nextTransaction(0), _timeSlice(iTimeSlice), _minSliceSize(iMinSliceSize), _elapsedTime(0), _lastSource(0){
} }
...@@ -50,6 +51,7 @@ RRScheduler::RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTime ...@@ -50,6 +51,7 @@ RRScheduler::RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTime
TMLTime RRScheduler::schedule(TMLTime iEndSchedule){ TMLTime RRScheduler::schedule(TMLTime iEndSchedule){
TaskList::iterator i; TaskList::iterator i;
CPU* aCPU;
//std::cout << _name << ": Schedule called \n"; //std::cout << _name << ": Schedule called \n";
TMLTransaction *anOldTransaction=_nextTransaction, *aTempTrans; TMLTransaction *anOldTransaction=_nextTransaction, *aTempTrans;
TMLTime aLowestRunnableTimeFuture=-1,aRunnableTime, aLowestRunnableTimePast=-1; TMLTime aLowestRunnableTimeFuture=-1,aRunnableTime, aLowestRunnableTimePast=-1;
...@@ -60,11 +62,15 @@ TMLTime RRScheduler::schedule(TMLTime iEndSchedule){ ...@@ -60,11 +62,15 @@ TMLTime RRScheduler::schedule(TMLTime iEndSchedule){
//aScheduledSource=_lastSource; //aScheduledSource=_lastSource;
_lastSource->schedule(iEndSchedule); _lastSource->schedule(iEndSchedule);
if (_lastSource->getNextTransaction(iEndSchedule)!=0 && _lastSource->getNextTransaction(iEndSchedule)->getVirtualLength()!=0){ if (_lastSource->getNextTransaction(iEndSchedule)!=0 && _lastSource->getNextTransaction(iEndSchedule)->getVirtualLength()!=0){
//if (anOldTransaction==0 || _lastSource->getNextTransaction(iEndSchedule)==anOldTransaction || _timeSlice >=_elapsedTime + anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength() + _minSliceSize){ aCPU = _lastSource->getNextTransaction(iEndSchedule)->getCommand()->getTask()->getCPU();
if (anOldTransaction==0 || _lastSource->getNextTransaction(iEndSchedule)==anOldTransaction || _timeSlice >=_elapsedTime + anOldTransaction->getOperationLength() + _minSliceSize){ if (anOldTransaction==0 || _lastSource->getNextTransaction(iEndSchedule)==anOldTransaction || _timeSlice >=_elapsedTime + anOldTransaction->getOperationLength() + _minSliceSize){
//std::cout << "Select same task, remaining: " << _timeSlice - anOldTransaction->getOperationLength() << "\n"; //std::cout << "Select same task, remaining: " << _timeSlice - anOldTransaction->getOperationLength() << "\n";
aSourcePast=_lastSource; aSourcePast=_lastSource;
aSameTaskFound=true; if (aCPU->getAmoutOfCore()>1){
aSameTaskFound=false;
}else{
aSameTaskFound=true;
}
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment