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);
|
||||
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
|
||||
void homeaxis(uint8_t axis, uint8_t cnt = 1, uint8_t* pstep = 0);
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -2217,6 +2217,10 @@ static void check_Z_crash(void)
|
|||
}
|
||||
#endif //TMC2130
|
||||
|
||||
float __attribute__((noinline)) get_feedrate_mm_s(const float feedrate_mm_min) {
|
||||
return feedrate_mm_min / 60.f;
|
||||
}
|
||||
|
||||
#ifdef TMC2130
|
||||
void homeaxis(uint8_t axis, uint8_t cnt, uint8_t* pstep)
|
||||
#else
|
||||
|
|
@ -2230,6 +2234,7 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
|||
{
|
||||
int axis_home_dir = home_dir(axis);
|
||||
feedrate = homing_feedrate[axis];
|
||||
float feedrate_mm_s = get_feedrate_mm_s(feedrate);
|
||||
|
||||
#ifdef TMC2130
|
||||
tmc2130_home_enter(X_AXIS_MASK << axis);
|
||||
|
|
@ -2244,7 +2249,7 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
|||
set_destination_to_current();
|
||||
// destination[axis] = 11.f;
|
||||
destination[axis] = -3.f * axis_home_dir;
|
||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
||||
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||
st_synchronize();
|
||||
// Move away from the possible collision with opposite endstop with the collision detection disabled.
|
||||
endstops_hit_on_purpose();
|
||||
|
|
@ -2252,12 +2257,12 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
|||
current_position[axis] = 0;
|
||||
plan_set_position_curposXYZE();
|
||||
destination[axis] = 1. * axis_home_dir;
|
||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
||||
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||
st_synchronize();
|
||||
// Now continue to move up to the left end stop with the collision detection enabled.
|
||||
enable_endstops(true);
|
||||
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();
|
||||
for (uint8_t i = 0; i < cnt; i++)
|
||||
{
|
||||
|
|
@ -2267,7 +2272,7 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
|||
current_position[axis] = 0;
|
||||
plan_set_position_curposXYZE();
|
||||
destination[axis] = -10.f * axis_home_dir;
|
||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
||||
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||
st_synchronize();
|
||||
endstops_hit_on_purpose();
|
||||
// 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];
|
||||
#else //TMC2130
|
||||
feedrate = homing_feedrate[axis] / 2;
|
||||
feedrate_mm_s = get_feedrate_mm_s(feedrate);
|
||||
#endif //TMC2130
|
||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
||||
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||
st_synchronize();
|
||||
#ifdef TMC2130
|
||||
uint16_t mscnt = tmc2130_rd_MSCNT(axis);
|
||||
|
|
@ -2315,7 +2321,7 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
|||
plan_set_position_curposXYZE();
|
||||
current_position[axis] += dist;
|
||||
destination[axis] = current_position[axis];
|
||||
plan_buffer_line_destinationXYZE(0.5f*feedrate/60);
|
||||
plan_buffer_line_destinationXYZE(0.5f*feedrate_mm_s);
|
||||
st_synchronize();
|
||||
|
||||
feedrate = 0.0;
|
||||
|
|
@ -2330,7 +2336,8 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
|||
plan_set_position_curposXYZE();
|
||||
destination[axis] = 1.5 * max_length(axis) * axis_home_dir;
|
||||
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();
|
||||
#ifdef TMC2130
|
||||
check_Z_crash();
|
||||
|
|
@ -2338,11 +2345,12 @@ void homeaxis(uint8_t axis, uint8_t cnt)
|
|||
current_position[axis] = 0;
|
||||
plan_set_position_curposXYZE();
|
||||
destination[axis] = -home_retract_mm(axis) * axis_home_dir;
|
||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
||||
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||
st_synchronize();
|
||||
destination[axis] = 2*home_retract_mm(axis) * axis_home_dir;
|
||||
feedrate = homing_feedrate[axis]/2 ;
|
||||
plan_buffer_line_destinationXYZE(feedrate/60);
|
||||
feedrate = homing_feedrate[axis] / 2;
|
||||
feedrate_mm_s = get_feedrate_mm_s(feedrate);
|
||||
plan_buffer_line_destinationXYZE(feedrate_mm_s);
|
||||
st_synchronize();
|
||||
#ifdef TMC2130
|
||||
check_Z_crash();
|
||||
|
|
@ -6888,7 +6896,7 @@ Sigma_Exit:
|
|||
}
|
||||
if(code_seen('F'))
|
||||
{
|
||||
cs.retract_feedrate = code_value()/60 ;
|
||||
cs.retract_feedrate = get_feedrate_mm_s(code_value());
|
||||
}
|
||||
if(code_seen('Z'))
|
||||
{
|
||||
|
|
@ -6914,7 +6922,7 @@ Sigma_Exit:
|
|||
}
|
||||
if(code_seen('F'))
|
||||
{
|
||||
cs.retract_recover_feedrate = code_value()/60 ;
|
||||
cs.retract_recover_feedrate = get_feedrate_mm_s(code_value());
|
||||
}
|
||||
}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;
|
||||
lcd_encoder = 0;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue