1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
void mesureTempsDebug(WIND_TCB *oldTcbPtr, WIND_TCB *newTcbPtr)
{
REG_SET regSet; /*Task registers*/
TASK_DESC taskDesc; /*information structure */
tracePostMortem *TaskInfoTemp = NULL;
UInt32 tickDeb, tickFin, i;
taskLock();
tickSet(0);
tickDeb = tickGet();
for(i = 0; i < 50000; i++)
{
/*Critical section: temporay storage pointer to optimize the speed.*/
TaskInfoTemp = &TaskInfoBuf[indexBuf];
TaskInfoTemp->taskId = taskNameToId(oldTcbPtr->name);
if (taskRegsGet (TaskInfoBuf[indexBuf].taskId, ®Set) != ERROR){
TaskInfoTemp->registers = regSet;
TaskInfoTemp->TaskSP = (int)GetSP();
TaskInfoTemp->TaskFP = (int)GetFP();
TaskInfoTemp->TaskPrevFP = (UInt32)FP_FROM_STACK(regSet.spReg);
}
TaskInfoTemp->stackBase = (UInt32) oldTcbPtr->pStackBase;
TaskInfoTemp->stackLimit = (UInt32) oldTcbPtr->pStackLimit;
TaskInfoTemp->stackEnd = (UInt32) oldTcbPtr->pStackEnd;
if (taskInfoGet (TaskInfoTemp->taskId, &taskDesc ) != ERROR){
TaskInfoTemp->stackSize = taskDesc.td_stackSize;
TaskInfoTemp->stackCurrent = taskDesc.td_stackCurrent;
TaskInfoTemp->stackHigh = taskDesc.td_stackHigh;
}
}
tickFin = tickGet();
printf("Solution1: tickDeb = %d, tickFin = %d\n\n",tickDeb,tickFin);
tickSet(0);
tickDeb = tickGet();
for(i = 0; i < 50000; i++)
{
TaskInfoBuf[indexBuf].taskId = taskNameToId(oldTcbPtr->name);
if (taskRegsGet (TaskInfoBuf[indexBuf].taskId, ®Set) != ERROR){
TaskInfoBuf[indexBuf].registers = regSet;
TaskInfoBuf[indexBuf].TaskSP = (int)GetSP();
TaskInfoBuf[indexBuf].TaskFP = (int)GetFP();
TaskInfoBuf[indexBuf].TaskPrevFP = (UInt32)FP_FROM_STACK(regSet.spReg);
}
TaskInfoBuf[indexBuf].stackBase = (UInt32) oldTcbPtr->pStackBase;
TaskInfoBuf[indexBuf].stackLimit = (UInt32) oldTcbPtr->pStackLimit;
TaskInfoBuf[indexBuf].stackEnd = (UInt32) oldTcbPtr->pStackEnd;
if (taskInfoGet (TaskInfoBuf[indexBuf].taskId, &taskDesc ) != ERROR){
TaskInfoBuf[indexBuf].stackSize = taskDesc.td_stackSize;
TaskInfoBuf[indexBuf].stackCurrent = taskDesc.td_stackCurrent;
TaskInfoBuf[indexBuf].stackHigh = taskDesc.td_stackHigh;
}
}
tickFin = tickGet();
printf("Solution2: tickDeb = %d, tickFin = %d\n\n",tickDeb,tickFin);
taskUnlock();
} |
Partager