itersolve: Fix possible infinite loop in itersolve_gen_steps()

If the kinematic position calculation function had an error in it (if
it produces sudden position changes) then it could lead to an infinite
loop in itersolve_gen_steps().

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2019-11-04 11:30:19 -05:00
parent 5eb5841eaf
commit 9945cc0f46
1 changed files with 3 additions and 1 deletions

View File

@ -174,8 +174,10 @@ itersolve_gen_steps(struct stepper_kinematics *sk, struct move *m)
if (fabs(dist) < half_step + .000000001) if (fabs(dist) < half_step + .000000001)
// Only change direction if going past midway point // Only change direction if going past midway point
goto seek_new_high_range; goto seek_new_high_range;
if (last.time >= low.time && high.time > last.time) { if (last.time >= low.time) {
// Must seek new low range to avoid re-finding previous time // Must seek new low range to avoid re-finding previous time
if (high.time < last.time + .000000001)
goto seek_new_high_range;
high.time = (last.time + high.time) * .5; high.time = (last.time + high.time) * .5;
high.position = calc_position(sk, m, high.time); high.position = calc_position(sk, m, high.time);
continue; continue;