Merge pull request #49 from alexrj/master
Fix overflow on very long moves
This commit is contained in:
commit
331653b519
1 changed files with 5 additions and 1 deletions
|
|
@ -1010,7 +1010,11 @@ void linear_move(unsigned long axis_steps_remaining[]) // make linear move with
|
||||||
}
|
}
|
||||||
for(int i = 0; i < NUM_AXIS; i++)
|
for(int i = 0; i < NUM_AXIS; i++)
|
||||||
if(axis_steps_remaining[i] >0) {
|
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) {
|
if(i == primary_axis) {
|
||||||
max_interval = new_axis_max_intervals[i];
|
max_interval = new_axis_max_intervals[i];
|
||||||
min_speed_steps_per_second = 100000000 / max_interval;
|
min_speed_steps_per_second = 100000000 / max_interval;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue