for_developers:timing_measurement
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
for_developers:timing_measurement [2016/08/15 14:01] – gehrig | for_developers:timing_measurement [2016/10/24 07:55] – [Implementation] graf | ||
---|---|---|---|
Line 2: | Line 2: | ||
===== How the timer works ===== | ===== How the timer works ===== | ||
- | The timer function is included in the Executer object. It measures | + | The timer function is included in the Executer object. It registers |
+ | * run time: counter.tock() - counter.tick() | ||
+ | * period: counter.tick()[t=n] - counter.tick()[t=n-1] | ||
+ | * jitter: |actual period - set period| | ||
+ | Of these three measurements the minimal value, maximal value, mean value and the variance | ||
+ | |||
+ | Implementation in // | ||
+ | <code cpp> | ||
+ | ... | ||
+ | loop { | ||
+ | counter.tick(); | ||
+ | //code under test (list.run();) | ||
+ | counter.tock(); | ||
+ | } | ||
+ | ... | ||
+ | </ | ||
===== Influence of the measurement on the real time performance of the system ===== | ===== Influence of the measurement on the real time performance of the system ===== | ||
Line 9: | Line 24: | ||
===== Accuracy of the measurement ===== | ===== Accuracy of the measurement ===== | ||
- | This measurement provides only statistical data over 1000 (or 100) cycles at a time and not for each iteration. To measure jitter for each iteration use the //signalProbeBlock//. | + | This measurement provides only statistical data over 1000 (or 100) cycles at a time and not for each iteration. To measure jitter for each iteration use the [[: |
It is possible to measure a 15% CPU load and over 300us run time per 1ms period. This indicates, that the run time measurement is not accurate. | It is possible to measure a 15% CPU load and over 300us run time per 1ms period. This indicates, that the run time measurement is not accurate. | ||
===== Implementation ===== | ===== Implementation ===== | ||
- | To integrate the measurement, | + | To integrate the measurement, |
<code cpp> | <code cpp> | ||
using namespace eeros:: | using namespace eeros:: | ||
Line 20: | Line 35: | ||
- | eeros:: | + | eeros:: |
- | td.monitors.push_back([& | + | per.monitors.push_back([& |
static int ticks = 0; // mseconds | static int ticks = 0; // mseconds | ||
Line 29: | Line 44: | ||
// timing measurement (tictoc) | // timing measurement (tictoc) | ||
- | eeros::PeriodicCounter counter = c; | + | PeriodicCounter counter = c; |
c.reset(); | c.reset(); | ||
std::cout << "CS: period max: " << setw(7) | std::cout << "CS: period max: " << setw(7) | ||
Line 36: | Line 51: | ||
}); | }); | ||
- | eeros:: | + | eeros:: |
</ | </ | ||