1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-25 09:16:07 +03:00

Fixed moving averages

This commit is contained in:
Martin Budden 2016-11-26 17:45:02 +00:00
parent 4fe68ce093
commit a3742ff8b9
2 changed files with 7 additions and 6 deletions

View file

@ -121,15 +121,16 @@ void taskSystem(uint32_t currentTime)
}
#ifndef SKIP_TASK_STATISTICS
#define MOVING_SUM_COUNT 32
uint32_t checkFuncMaxExecutionTime;
uint32_t checkFuncTotalExecutionTime;
uint32_t checkFuncAverageExecutionTime;
uint32_t checkFuncMovingSumExecutionTime;
void getCheckFuncInfo(cfCheckFuncInfo_t *checkFuncInfo)
{
checkFuncInfo->maxExecutionTime = checkFuncMaxExecutionTime;
checkFuncInfo->totalExecutionTime = checkFuncTotalExecutionTime;
checkFuncInfo->averageExecutionTime = checkFuncAverageExecutionTime;
checkFuncInfo->averageExecutionTime = checkFuncMovingSumExecutionTime / MOVING_SUM_COUNT;
}
void getTaskInfo(cfTaskId_e taskId, cfTaskInfo_t * taskInfo)
@ -141,7 +142,7 @@ void getTaskInfo(cfTaskId_e taskId, cfTaskInfo_t * taskInfo)
taskInfo->staticPriority = cfTasks[taskId].staticPriority;
taskInfo->maxExecutionTime = cfTasks[taskId].maxExecutionTime;
taskInfo->totalExecutionTime = cfTasks[taskId].totalExecutionTime;
taskInfo->averageExecutionTime = cfTasks[taskId].averageExecutionTime;
taskInfo->averageExecutionTime = cfTasks[taskId].movingSumExecutionTime / MOVING_SUM_COUNT;
taskInfo->latestDeltaTime = cfTasks[taskId].taskLatestDeltaTime;
}
#endif
@ -223,7 +224,7 @@ void scheduler(void)
DEBUG_SET(DEBUG_SCHEDULER, 3, checkFuncExecutionTime);
#endif
#ifndef SKIP_TASK_STATISTICS
checkFuncAverageExecutionTime = (checkFuncAverageExecutionTime * 31 + checkFuncExecutionTime) / 32;
checkFuncMovingSumExecutionTime += checkFuncExecutionTime - checkFuncMovingSumExecutionTime / MOVING_SUM_COUNT;
checkFuncTotalExecutionTime += checkFuncExecutionTime; // time consumed by scheduler + task
checkFuncMaxExecutionTime = MAX(checkFuncMaxExecutionTime, checkFuncExecutionTime);
#endif
@ -273,7 +274,7 @@ void scheduler(void)
#ifndef SKIP_TASK_STATISTICS
const uint32_t taskExecutionTime = micros() - currentTimeBeforeTaskCall;
selectedTask->averageExecutionTime = ((uint32_t)selectedTask->averageExecutionTime * 31 + taskExecutionTime) / 32;
selectedTask->movingSumExecutionTime += taskExecutionTime - selectedTask->movingSumExecutionTime / MOVING_SUM_COUNT;
selectedTask->totalExecutionTime += taskExecutionTime; // time consumed by scheduler + task
selectedTask->maxExecutionTime = MAX(selectedTask->maxExecutionTime, taskExecutionTime);
#endif

View file

@ -122,7 +122,7 @@ typedef struct {
#ifndef SKIP_TASK_STATISTICS
/* Statistics */
uint32_t averageExecutionTime; // Moving average over 32 samples
uint32_t movingSumExecutionTime; // moving sum over 32 samples
uint32_t maxExecutionTime;
uint32_t totalExecutionTime; // total time consumed by task since boot
#endif