accurate bench test (#2441)
* accurate bench test * allow shorter pulses
This commit is contained in:
parent
112aa4f57f
commit
208088847b
|
@ -65,11 +65,22 @@ bool isRunningBenchTest(void) {
|
|||
return isRunningBench;
|
||||
}
|
||||
|
||||
static scheduling_s benchSchedStart;
|
||||
static scheduling_s benchSchedEnd;
|
||||
|
||||
void benchOn(OutputPin* output) {
|
||||
output->setValue(true);
|
||||
}
|
||||
|
||||
void benchOff(OutputPin* output) {
|
||||
output->setValue(false);
|
||||
}
|
||||
|
||||
static void runBench(brain_pin_e brainPin, OutputPin *output, float delayMs, float onTimeMs, float offTimeMs,
|
||||
int count) {
|
||||
int delayUs = MS2US(maxF(1, delayMs));
|
||||
int onTimeUs = MS2US(maxF(1, onTimeMs));
|
||||
int offTimeUs = MS2US(maxF(1, offTimeMs));
|
||||
int delayUs = MS2US(maxF(0.1, delayMs));
|
||||
int onTimeUs = MS2US(maxF(0.1, onTimeMs));
|
||||
int offTimeUs = MS2US(maxF(0.1, offTimeMs));
|
||||
|
||||
scheduleMsg(logger, "Running bench: ON_TIME=%.2f us OFF_TIME=%.2f us Counter=%d", onTimeUs, offTimeUs, count);
|
||||
scheduleMsg(logger, "output on %s", hwPortname(brainPin));
|
||||
|
@ -77,12 +88,21 @@ static void runBench(brain_pin_e brainPin, OutputPin *output, float delayMs, flo
|
|||
chThdSleepMicroseconds(delayUs);
|
||||
|
||||
isRunningBench = true;
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
output->setValue(true);
|
||||
chThdSleepMicroseconds(onTimeUs);
|
||||
output->setValue(false);
|
||||
chThdSleepMicroseconds(offTimeUs);
|
||||
efitick_t nowNt = getTimeNowNt();
|
||||
// start in a short time so the scheduler can precisely schedule the start event
|
||||
efitick_t startTime = nowNt + US2NT(50);
|
||||
efitick_t endTime = startTime + US2NT(onTimeUs);
|
||||
|
||||
// Schedule both events
|
||||
engine->executor.scheduleByTimestampNt(&benchSchedStart, startTime, {benchOn, output});
|
||||
engine->executor.scheduleByTimestampNt(&benchSchedEnd, endTime, {benchOff, output});
|
||||
|
||||
// Wait one full cycle time for the event + delay to happen
|
||||
chThdSleepMicroseconds(onTimeUs + offTimeUs);
|
||||
}
|
||||
|
||||
scheduleMsg(logger, "Done!");
|
||||
isRunningBench = false;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue