Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "AP_Loop.h"
00020
00021 namespace apo
00022 {
00023
00024 Loop::Loop(float frequency, void (*fptr)(void *), void * data) :
00025 _fptr(fptr),
00026 _data(data),
00027 _period(1.0e6/frequency),
00028 _timeStamp(micros()),
00029 _subLoops(),
00030 _load(0),
00031 _dt(0)
00032 {
00033 }
00034
00035 void Loop::update()
00036 {
00037
00038 if (micros() - _timeStamp < _period) return;
00039
00040
00041 uint32_t timeStamp0 = _timeStamp;
00042 _timeStamp = micros();
00043 _dt = (_timeStamp - timeStamp0)/1.0e6;
00044
00045
00046 for (int i=0; i<_subLoops.getSize(); i++) _subLoops[i]->update();
00047
00048
00049 if (_fptr) _fptr(_data);
00050
00051
00052 _load = 0.9*_load + 10*(float(micros()-_timeStamp)/(_timeStamp-timeStamp0));
00053 }
00054
00055 }
00056
00057