Reduce calls to __divsf3 when calculating feedrate
For non-time critical code it is more effcient to call a function rather inlining each division operation. Change in memory: Flash: -122 bytes SRAM: 0 bytes
This commit is contained in:
parent
65750b9a4c
commit
b9fecab239
|
|
@ -287,6 +287,11 @@ void prepare_move(uint16_t start_segment_idx = 0);
|
||||||
void prepare_arc_move(bool isclockwise, uint16_t start_segment_idx = 0);
|
void prepare_arc_move(bool isclockwise, uint16_t start_segment_idx = 0);
|
||||||
uint16_t restore_interrupted_gcode();
|
uint16_t restore_interrupted_gcode();
|
||||||
|
|
||||||
|
///@brief Helper function to reduce code size, cheaper to call function than to inline division
|
||||||
|
///@param feedrate_mm_min feedrate with unit mm per minute
|
||||||
|
///@returns feedrate with unit mm per second
|
||||||
|
float __attribute__((noinline)) get_feedrate_mm_s(const float feedrate_mm_min);
|
||||||
|
|
||||||
#ifdef TMC2130
|
#ifdef TMC2130
|
||||||
void homeaxis(uint8_t axis, uint8_t cnt = 1, uint8_t* pstep = 0);
|
void homeaxis(uint8_t axis, uint8_t cnt = 1, uint8_t* pstep = 0);
|
||||||
#else
|
#else
|
||||||
|
|
|
||||||
|
|
@ -2217,6 +2217,10 @@ static void check_Z_crash(void)
|
||||||
}
|
}
|
||||||
#endif //TMC2130
|
#endif //TMC2130
|
||||||
|
|
||||||
|
float __attribute__((noinline)) get_feedrate_mm_s(const float feedrate_mm_min) {
|
||||||
|
return feedrate_mm_min / 60.f;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef TMC2130
|
#ifdef TMC2130
|
||||||
void homeaxis(uint8_t axis, uint8_t cnt, uint8_t* pstep)
|
void homeaxis(uint8_t axis, uint8_t cnt, uint8_t* pstep)
|
||||||
#else
|
#else
|
||||||
|
|
@ -2230,6 +2234,7 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
||||||
{
|
{
|
||||||
int axis_home_dir = home_dir(axis);
|
int axis_home_dir = home_dir(axis);
|
||||||
feedrate = homing_feedrate[axis];
|
feedrate = homing_feedrate[axis];
|
||||||
|
float feedrate_mm_s = get_feedrate_mm_s(feedrate);
|
||||||
|
|
||||||
#ifdef TMC2130
|
#ifdef TMC2130
|
||||||
tmc2130_home_enter(X_AXIS_MASK << axis);
|
tmc2130_home_enter(X_AXIS_MASK << axis);
|
||||||
|
|
@ -2244,7 +2249,7 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
||||||
set_destination_to_current();
|
set_destination_to_current();
|
||||||
// destination[axis] = 11.f;
|
// destination[axis] = 11.f;
|
||||||
destination[axis] = -3.f * axis_home_dir;
|
destination[axis] = -3.f * axis_home_dir;
|
||||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
// Move away from the possible collision with opposite endstop with the collision detection disabled.
|
// Move away from the possible collision with opposite endstop with the collision detection disabled.
|
||||||
endstops_hit_on_purpose();
|
endstops_hit_on_purpose();
|
||||||
|
|
@ -2252,12 +2257,12 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
||||||
current_position[axis] = 0;
|
current_position[axis] = 0;
|
||||||
plan_set_position_curposXYZE();
|
plan_set_position_curposXYZE();
|
||||||
destination[axis] = 1. * axis_home_dir;
|
destination[axis] = 1. * axis_home_dir;
|
||||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
// Now continue to move up to the left end stop with the collision detection enabled.
|
// Now continue to move up to the left end stop with the collision detection enabled.
|
||||||
enable_endstops(true);
|
enable_endstops(true);
|
||||||
destination[axis] = 1.1 * axis_home_dir * max_length(axis);
|
destination[axis] = 1.1 * axis_home_dir * max_length(axis);
|
||||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
for (uint8_t i = 0; i < cnt; i++)
|
for (uint8_t i = 0; i < cnt; i++)
|
||||||
{
|
{
|
||||||
|
|
@ -2267,7 +2272,7 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
||||||
current_position[axis] = 0;
|
current_position[axis] = 0;
|
||||||
plan_set_position_curposXYZE();
|
plan_set_position_curposXYZE();
|
||||||
destination[axis] = -10.f * axis_home_dir;
|
destination[axis] = -10.f * axis_home_dir;
|
||||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
endstops_hit_on_purpose();
|
endstops_hit_on_purpose();
|
||||||
// Now move left up to the collision, this time with a repeatable velocity.
|
// Now move left up to the collision, this time with a repeatable velocity.
|
||||||
|
|
@ -2277,8 +2282,9 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
||||||
feedrate = homing_feedrate[axis];
|
feedrate = homing_feedrate[axis];
|
||||||
#else //TMC2130
|
#else //TMC2130
|
||||||
feedrate = homing_feedrate[axis] / 2;
|
feedrate = homing_feedrate[axis] / 2;
|
||||||
|
feedrate_mm_s = get_feedrate_mm_s(feedrate);
|
||||||
#endif //TMC2130
|
#endif //TMC2130
|
||||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
#ifdef TMC2130
|
#ifdef TMC2130
|
||||||
uint16_t mscnt = tmc2130_rd_MSCNT(axis);
|
uint16_t mscnt = tmc2130_rd_MSCNT(axis);
|
||||||
|
|
@ -2315,7 +2321,7 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
||||||
plan_set_position_curposXYZE();
|
plan_set_position_curposXYZE();
|
||||||
current_position[axis] += dist;
|
current_position[axis] += dist;
|
||||||
destination[axis] = current_position[axis];
|
destination[axis] = current_position[axis];
|
||||||
plan_buffer_line_destinationXYZE(0.5f*feedrate/60);
|
plan_buffer_line_destinationXYZE(0.5f*feedrate_mm_s);
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
|
|
||||||
feedrate = 0.0;
|
feedrate = 0.0;
|
||||||
|
|
@ -2330,7 +2336,8 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
||||||
plan_set_position_curposXYZE();
|
plan_set_position_curposXYZE();
|
||||||
destination[axis] = 1.5 * max_length(axis) * axis_home_dir;
|
destination[axis] = 1.5 * max_length(axis) * axis_home_dir;
|
||||||
feedrate = homing_feedrate[axis];
|
feedrate = homing_feedrate[axis];
|
||||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
float feedrate_mm_s = get_feedrate_mm_s(feedrate);
|
||||||
|
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
#ifdef TMC2130
|
#ifdef TMC2130
|
||||||
check_Z_crash();
|
check_Z_crash();
|
||||||
|
|
@ -2338,11 +2345,12 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
||||||
current_position[axis] = 0;
|
current_position[axis] = 0;
|
||||||
plan_set_position_curposXYZE();
|
plan_set_position_curposXYZE();
|
||||||
destination[axis] = -home_retract_mm(axis) * axis_home_dir;
|
destination[axis] = -home_retract_mm(axis) * axis_home_dir;
|
||||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
destination[axis] = 2*home_retract_mm(axis) * axis_home_dir;
|
destination[axis] = 2*home_retract_mm(axis) * axis_home_dir;
|
||||||
feedrate = homing_feedrate[axis]/2 ;
|
feedrate = homing_feedrate[axis] / 2;
|
||||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
feedrate_mm_s = get_feedrate_mm_s(feedrate);
|
||||||
|
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
#ifdef TMC2130
|
#ifdef TMC2130
|
||||||
check_Z_crash();
|
check_Z_crash();
|
||||||
|
|
@ -6888,7 +6896,7 @@ Sigma_Exit:
|
||||||
}
|
}
|
||||||
if(code_seen('F'))
|
if(code_seen('F'))
|
||||||
{
|
{
|
||||||
cs.retract_feedrate = code_value()/60 ;
|
cs.retract_feedrate = get_feedrate_mm_s(code_value());
|
||||||
}
|
}
|
||||||
if(code_seen('Z'))
|
if(code_seen('Z'))
|
||||||
{
|
{
|
||||||
|
|
@ -6914,7 +6922,7 @@ Sigma_Exit:
|
||||||
}
|
}
|
||||||
if(code_seen('F'))
|
if(code_seen('F'))
|
||||||
{
|
{
|
||||||
cs.retract_recover_feedrate = code_value()/60 ;
|
cs.retract_recover_feedrate = get_feedrate_mm_s(code_value());
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2420,7 +2420,7 @@ static void _lcd_move(const char *name, uint8_t axis, int min, int max)
|
||||||
if (max_software_endstops && current_position[axis] > max) current_position[axis] = max;
|
if (max_software_endstops && current_position[axis] > max) current_position[axis] = max;
|
||||||
lcd_encoder = 0;
|
lcd_encoder = 0;
|
||||||
world2machine_clamp(current_position[X_AXIS], current_position[Y_AXIS]);
|
world2machine_clamp(current_position[X_AXIS], current_position[Y_AXIS]);
|
||||||
plan_buffer_line_curposXYZE(manual_feedrate[axis] / 60);
|
plan_buffer_line_curposXYZE(get_feedrate_mm_s(manual_feedrate[axis]));
|
||||||
lcd_draw_update = 1;
|
lcd_draw_update = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue