From 8c13d978e4b0632c4c10953d9c6fa71d7dd45edf Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Tue, 12 Jul 2011 12:41:45 +0200 Subject: Bugfix: bad math for long distance moves. --- Sprinter/Sprinter.pde | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'Sprinter/Sprinter.pde') diff --git a/Sprinter/Sprinter.pde b/Sprinter/Sprinter.pde index 1aa91f7..b31a629 100644 --- a/Sprinter/Sprinter.pde +++ b/Sprinter/Sprinter.pde @@ -1010,7 +1010,11 @@ void linear_move(unsigned long axis_steps_remaining[]) // make linear move with } for(int i = 0; i < NUM_AXIS; i++) if(axis_steps_remaining[i] >0) { - new_axis_max_intervals[i] = slowest_start_axis_max_interval * axis_steps_remaining[slowest_start_axis] / axis_steps_remaining[i]; + // multiplying slowest_start_axis_max_interval by axis_steps_remaining[slowest_start_axis] + // could lead to overflows when we have long distance moves (say, 390625*390625 > sizeof(unsigned long)) + float steps_remaining_ratio = axis_steps_remaining[slowest_start_axis] / axis_steps_remaining[i]; + new_axis_max_intervals[i] = slowest_start_axis_max_interval * steps_remaining_ratio; + if(i == primary_axis) { max_interval = new_axis_max_intervals[i]; min_speed_steps_per_second = 100000000 / max_interval; -- cgit v1.2.1