optimisation: there is only one extruder when planning a line
Change in memory: Flash: -50 bytes SRAM: -3 bytes
This commit is contained in:
parent
534c2e2664
commit
8c79bab503
|
|
@ -276,7 +276,6 @@ your extruder heater takes 2 minutes to hit the target on heating.
|
|||
#define DISABLE_Y 0
|
||||
#define DISABLE_Z 0
|
||||
#define DISABLE_E 0// For all extruders
|
||||
#define DISABLE_INACTIVE_EXTRUDER 1 //disable only inactive extruders and keep active extruder enabled
|
||||
|
||||
|
||||
// ENDSTOP SETTINGS:
|
||||
|
|
|
|||
|
|
@ -1975,7 +1975,7 @@ static void run_z_probe() {
|
|||
|
||||
// move down until you find the bed
|
||||
float zPosition = -10;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60, active_extruder);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60);
|
||||
st_synchronize();
|
||||
|
||||
// we have to let the planner know where we are right now as it is not where we said to go.
|
||||
|
|
@ -1984,13 +1984,13 @@ static void run_z_probe() {
|
|||
|
||||
// move up the retract distance
|
||||
zPosition += home_retract_mm(Z_AXIS);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60, active_extruder);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60);
|
||||
st_synchronize();
|
||||
|
||||
// move back down slowly to find bed
|
||||
feedrate = homing_feedrate[Z_AXIS]/4;
|
||||
zPosition -= home_retract_mm(Z_AXIS) * 2;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60, active_extruder);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60);
|
||||
st_synchronize();
|
||||
|
||||
current_position[Z_AXIS] = st_get_position_mm(Z_AXIS);
|
||||
|
|
@ -3615,11 +3615,11 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float
|
|||
}
|
||||
|
||||
// Move XY back
|
||||
plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_XYFEED, active_extruder);
|
||||
plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_XYFEED);
|
||||
st_synchronize();
|
||||
|
||||
// Move Z back
|
||||
plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], lastpos[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_ZFEED, active_extruder);
|
||||
plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], lastpos[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_ZFEED);
|
||||
st_synchronize();
|
||||
|
||||
// Set E position to original
|
||||
|
|
@ -5678,7 +5678,7 @@ void process_commands()
|
|||
world2machine_revert_to_uncorrected();
|
||||
// Move the print head close to the bed.
|
||||
current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS],current_position[Z_AXIS] , current_position[E_AXIS], homing_feedrate[Z_AXIS]/40, active_extruder);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS],current_position[Z_AXIS] , current_position[E_AXIS], homing_feedrate[Z_AXIS]/40);
|
||||
st_synchronize();
|
||||
// Home in the XY plane.
|
||||
set_destination_to_current();
|
||||
|
|
@ -5694,7 +5694,7 @@ void process_commands()
|
|||
clean_up_after_endstop_move(l_feedmultiply);
|
||||
// Print head up.
|
||||
current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS],current_position[Z_AXIS] , current_position[E_AXIS], homing_feedrate[Z_AXIS]/40, active_extruder);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS],current_position[Z_AXIS] , current_position[E_AXIS], homing_feedrate[Z_AXIS]/40);
|
||||
st_synchronize();
|
||||
lcd_update_enable(true);
|
||||
break;
|
||||
|
|
@ -5799,8 +5799,7 @@ void process_commands()
|
|||
plan_bed_level_matrix.set_to_identity();
|
||||
plan_buffer_line( X_current, Y_current, Z_start_location,
|
||||
ext_position,
|
||||
homing_feedrate[Z_AXIS]/60,
|
||||
active_extruder);
|
||||
homing_feedrate[Z_AXIS]/60);
|
||||
st_synchronize();
|
||||
|
||||
//
|
||||
|
|
@ -5813,8 +5812,7 @@ void process_commands()
|
|||
|
||||
plan_buffer_line( X_probe_location, Y_probe_location, Z_start_location,
|
||||
ext_position,
|
||||
homing_feedrate[X_AXIS]/60,
|
||||
active_extruder);
|
||||
homing_feedrate[X_AXIS]/60);
|
||||
st_synchronize();
|
||||
|
||||
current_position[X_AXIS] = X_current = st_get_position_mm(X_AXIS);
|
||||
|
|
@ -5835,8 +5833,7 @@ void process_commands()
|
|||
|
||||
plan_buffer_line( X_probe_location, Y_probe_location, Z_start_location,
|
||||
ext_position,
|
||||
homing_feedrate[X_AXIS]/60,
|
||||
active_extruder);
|
||||
homing_feedrate[X_AXIS]/60);
|
||||
st_synchronize();
|
||||
current_position[Z_AXIS] = Z_current = st_get_position_mm(Z_AXIS);
|
||||
|
||||
|
|
@ -5935,7 +5932,7 @@ void process_commands()
|
|||
SERIAL_PROTOCOLPGM("\n");
|
||||
|
||||
plan_buffer_line( X_probe_location, Y_probe_location, Z_start_location,
|
||||
current_position[E_AXIS], homing_feedrate[Z_AXIS]/60, active_extruder);
|
||||
current_position[E_AXIS], homing_feedrate[Z_AXIS]/60);
|
||||
st_synchronize();
|
||||
|
||||
}
|
||||
|
|
@ -9179,7 +9176,7 @@ uint16_t restore_interrupted_gcode() {
|
|||
}
|
||||
|
||||
#ifdef MESH_BED_LEVELING
|
||||
void mesh_plan_buffer_line(const float &x, const float &y, const float &z, const float &e, const float &feed_rate, const uint8_t extruder, uint16_t start_segment_idx = 0) {
|
||||
void mesh_plan_buffer_line(const float &x, const float &y, const float &z, const float &e, const float &feed_rate, uint16_t start_segment_idx = 0) {
|
||||
float dx = x - current_position[X_AXIS];
|
||||
float dy = y - current_position[Y_AXIS];
|
||||
uint16_t n_segments = 0;
|
||||
|
|
@ -9202,13 +9199,13 @@ void mesh_plan_buffer_line(const float &x, const float &y, const float &z, const
|
|||
current_position[Y_AXIS] + t * dy,
|
||||
current_position[Z_AXIS] + t * dz,
|
||||
current_position[E_AXIS] + t * de,
|
||||
feed_rate, extruder, current_position, i);
|
||||
feed_rate, current_position, i);
|
||||
if (planner_aborted)
|
||||
return;
|
||||
}
|
||||
}
|
||||
// The rest of the path.
|
||||
plan_buffer_line(x, y, z, e, feed_rate, extruder, current_position);
|
||||
plan_buffer_line(x, y, z, e, feed_rate, current_position);
|
||||
}
|
||||
#endif // MESH_BED_LEVELING
|
||||
|
||||
|
|
@ -9223,7 +9220,7 @@ void prepare_move(uint16_t start_segment_idx)
|
|||
}
|
||||
else {
|
||||
#ifdef MESH_BED_LEVELING
|
||||
mesh_plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate*feedmultiply*(1./(60.f*100.f)), active_extruder, start_segment_idx);
|
||||
mesh_plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate*feedmultiply*(1./(60.f*100.f)), start_segment_idx);
|
||||
#else
|
||||
plan_buffer_line_destinationXYZE(feedrate*feedmultiply*(1./(60.f*100.f)));
|
||||
#endif
|
||||
|
|
@ -9235,7 +9232,7 @@ void prepare_move(uint16_t start_segment_idx)
|
|||
void prepare_arc_move(bool isclockwise, uint16_t start_segment_idx) {
|
||||
float r = hypot(offset[X_AXIS], offset[Y_AXIS]); // Compute arc radius for mc_arc
|
||||
// Trace the arc
|
||||
mc_arc(current_position, destination, offset, feedrate * feedmultiply / 60 / 100.0, r, isclockwise, active_extruder, start_segment_idx);
|
||||
mc_arc(current_position, destination, offset, feedrate * feedmultiply / 60 / 100.0, r, isclockwise, start_segment_idx);
|
||||
// As far as the parser is concerned, the position is now == target. In reality the
|
||||
// motion control system might still be processing the action and the real tool position
|
||||
// in any intermediate location.
|
||||
|
|
@ -9403,7 +9400,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument s
|
|||
float oldedes=destination[E_AXIS];
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS],
|
||||
destination[E_AXIS]+EXTRUDER_RUNOUT_EXTRUDE*EXTRUDER_RUNOUT_ESTEPS/cs.axis_steps_per_unit[E_AXIS],
|
||||
EXTRUDER_RUNOUT_SPEED/60.*EXTRUDER_RUNOUT_ESTEPS/cs.axis_steps_per_unit[E_AXIS], active_extruder);
|
||||
EXTRUDER_RUNOUT_SPEED/60.*EXTRUDER_RUNOUT_ESTEPS/cs.axis_steps_per_unit[E_AXIS]);
|
||||
current_position[E_AXIS]=oldepos;
|
||||
destination[E_AXIS]=oldedes;
|
||||
plan_set_e_position(oldepos);
|
||||
|
|
@ -10275,7 +10272,7 @@ static void temp_compensation_apply() {
|
|||
z_shift_mm = temp_comp_interpolation(target_temperature_bed) / cs.axis_steps_per_unit[Z_AXIS];
|
||||
}
|
||||
printf_P(_N("\nZ shift applied:%.3f\n"), z_shift_mm);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] - z_shift_mm, current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] - z_shift_mm, current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40);
|
||||
st_synchronize();
|
||||
plan_set_z_position(current_position[Z_AXIS]);
|
||||
}
|
||||
|
|
@ -11208,11 +11205,11 @@ void restore_print_from_ram_and_continue(float e_move)
|
|||
}
|
||||
|
||||
//first move print head in XY to the saved position:
|
||||
plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], current_position[Z_AXIS], saved_pos[E_AXIS] - e_move, homing_feedrate[Z_AXIS]/13, active_extruder);
|
||||
plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], current_position[Z_AXIS], saved_pos[E_AXIS] - e_move, homing_feedrate[Z_AXIS]/13);
|
||||
//then move Z
|
||||
plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], saved_pos[Z_AXIS], saved_pos[E_AXIS] - e_move, homing_feedrate[Z_AXIS]/13, active_extruder);
|
||||
plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], saved_pos[Z_AXIS], saved_pos[E_AXIS] - e_move, homing_feedrate[Z_AXIS]/13);
|
||||
//and finaly unretract (35mm/s)
|
||||
plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], saved_pos[Z_AXIS], saved_pos[E_AXIS], FILAMENTCHANGE_RFEED, active_extruder);
|
||||
plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], saved_pos[Z_AXIS], saved_pos[E_AXIS], FILAMENTCHANGE_RFEED);
|
||||
st_synchronize();
|
||||
|
||||
#ifdef FANCHECK
|
||||
|
|
|
|||
|
|
@ -912,13 +912,13 @@ void world2machine_update_current()
|
|||
|
||||
static inline void go_xyz(float x, float y, float z, float fr)
|
||||
{
|
||||
plan_buffer_line(x, y, z, current_position[E_AXIS], fr, active_extruder);
|
||||
plan_buffer_line(x, y, z, current_position[E_AXIS], fr);
|
||||
st_synchronize();
|
||||
}
|
||||
|
||||
static inline void go_xy(float x, float y, float fr)
|
||||
{
|
||||
plan_buffer_line(x, y, current_position[Z_AXIS], current_position[E_AXIS], fr, active_extruder);
|
||||
plan_buffer_line(x, y, current_position[Z_AXIS], current_position[E_AXIS], fr);
|
||||
st_synchronize();
|
||||
}
|
||||
|
||||
|
|
@ -3029,7 +3029,7 @@ bool scan_bed_induction_points(int8_t verbosity_level)
|
|||
// To replace loading of the babystep correction.
|
||||
static void shift_z(float delta)
|
||||
{
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] - delta, current_position[E_AXIS], homing_feedrate[Z_AXIS]/40, active_extruder);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] - delta, current_position[E_AXIS], homing_feedrate[Z_AXIS]/40);
|
||||
st_synchronize();
|
||||
plan_set_z_position(current_position[Z_AXIS]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
// The arc is approximated by generating a huge number of tiny, linear segments. The length of each
|
||||
// segment is configured in settings.mm_per_arc_segment.
|
||||
void mc_arc(const float* position, float* target, const float* offset, float feed_rate, float radius, bool isclockwise, uint8_t extruder, uint16_t start_segment_idx)
|
||||
void mc_arc(const float* position, float* target, const float* offset, float feed_rate, float radius, bool isclockwise, uint16_t start_segment_idx)
|
||||
{
|
||||
float start_position[4];
|
||||
memcpy(start_position, position, sizeof(start_position));
|
||||
|
|
@ -153,7 +153,7 @@ void mc_arc(const float* position, float* target, const float* offset, float fee
|
|||
clamp_to_software_endstops(start_position);
|
||||
// Insert the segment into the buffer
|
||||
if (i >= start_segment_idx)
|
||||
plan_buffer_line(start_position[X_AXIS], start_position[Y_AXIS], start_position[Z_AXIS], start_position[E_AXIS], feed_rate, extruder, position, i);
|
||||
plan_buffer_line(start_position[X_AXIS], start_position[Y_AXIS], start_position[Z_AXIS], start_position[E_AXIS], feed_rate, position, i);
|
||||
// Handle the situation where the planner is aborted hard.
|
||||
if (planner_aborted)
|
||||
return;
|
||||
|
|
@ -162,5 +162,5 @@ void mc_arc(const float* position, float* target, const float* offset, float fee
|
|||
// Clamp to the target position.
|
||||
clamp_to_software_endstops(target);
|
||||
// Ensure last segment arrives at target location.
|
||||
plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feed_rate, extruder, position, 0);
|
||||
plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feed_rate, position, 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,6 @@
|
|||
// offset == offset from current xyz, axis_XXX defines circle plane in tool space, axis_linear is
|
||||
// the direction of helical travel, radius == circle radius, isclockwise boolean. Used
|
||||
// for vector transformation direction.
|
||||
void mc_arc(const float *position, float *target, const float *offset, float feed_rate, float radius, bool isclockwise, uint8_t extruder, uint16_t start_segment_idx);
|
||||
void mc_arc(const float *position, float *target, const float *offset, float feed_rate, float radius, bool isclockwise, uint16_t start_segment_idx);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -106,8 +106,6 @@ float autotemp_factor=0.1;
|
|||
bool autotemp_enabled=false;
|
||||
#endif
|
||||
|
||||
unsigned char g_uc_extruder_last_move[3] = {0,0,0};
|
||||
|
||||
//===========================================================================
|
||||
//=================semi-private variables, used in inline functions =====
|
||||
//===========================================================================
|
||||
|
|
@ -686,11 +684,11 @@ void planner_abort_hard()
|
|||
}
|
||||
|
||||
void plan_buffer_line_curposXYZE(float feed_rate) {
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feed_rate, active_extruder );
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feed_rate);
|
||||
}
|
||||
|
||||
void plan_buffer_line_destinationXYZE(float feed_rate) {
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feed_rate, active_extruder);
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feed_rate);
|
||||
}
|
||||
|
||||
void plan_set_position_curposXYZE(){
|
||||
|
|
@ -701,7 +699,7 @@ float junction_deviation = 0.1;
|
|||
// Add a new linear movement to the buffer. steps_x, _y and _z is the absolute position in
|
||||
// mm. Microseconds specify how many microseconds the move should take to perform. To aid acceleration
|
||||
// calculation the caller must also provide the physical length of the line in millimeters.
|
||||
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder, const float* gcode_start_position, uint16_t segment_idx)
|
||||
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const float* gcode_start_position, uint16_t segment_idx)
|
||||
{
|
||||
// CRITICAL_SECTION_START; //prevent stack overflow in ISR
|
||||
// printf_P(PSTR("plan_buffer_line(%f, %f, %f, %f, %f, %u, [%f,%f,%f,%f], %u)\n"), x, y, z, e, feed_rate, extruder, gcode_start_position[0], gcode_start_position[1], gcode_start_position[2], gcode_start_position[3], segment_idx);
|
||||
|
|
@ -924,47 +922,10 @@ block->steps_y.wide = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-p
|
|||
#endif
|
||||
if(block->steps_z.wide != 0) enable_z();
|
||||
|
||||
// Enable extruder(s)
|
||||
// Enable extruder
|
||||
if(block->steps_e.wide != 0)
|
||||
{
|
||||
if (DISABLE_INACTIVE_EXTRUDER) //enable only selected extruder
|
||||
{
|
||||
|
||||
if(g_uc_extruder_last_move[0] > 0) g_uc_extruder_last_move[0]--;
|
||||
if(g_uc_extruder_last_move[1] > 0) g_uc_extruder_last_move[1]--;
|
||||
if(g_uc_extruder_last_move[2] > 0) g_uc_extruder_last_move[2]--;
|
||||
|
||||
switch(extruder)
|
||||
{
|
||||
case 0:
|
||||
enable_e0();
|
||||
g_uc_extruder_last_move[0] = BLOCK_BUFFER_SIZE*2;
|
||||
|
||||
if(g_uc_extruder_last_move[1] == 0) {disable_e1();}
|
||||
if(g_uc_extruder_last_move[2] == 0) {disable_e2();}
|
||||
break;
|
||||
case 1:
|
||||
enable_e1();
|
||||
g_uc_extruder_last_move[1] = BLOCK_BUFFER_SIZE*2;
|
||||
|
||||
if(g_uc_extruder_last_move[0] == 0) {disable_e0();}
|
||||
if(g_uc_extruder_last_move[2] == 0) {disable_e2();}
|
||||
break;
|
||||
case 2:
|
||||
enable_e2();
|
||||
g_uc_extruder_last_move[2] = BLOCK_BUFFER_SIZE*2;
|
||||
|
||||
if(g_uc_extruder_last_move[0] == 0) {disable_e0();}
|
||||
if(g_uc_extruder_last_move[1] == 0) {disable_e1();}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else //enable all
|
||||
{
|
||||
enable_e0();
|
||||
enable_e1();
|
||||
enable_e2();
|
||||
}
|
||||
enable_e0();
|
||||
}
|
||||
|
||||
if (block->steps_e.wide == 0)
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ void plan_init();
|
|||
// millimaters. Feed rate specifies the speed of the motion.
|
||||
|
||||
#ifdef ENABLE_AUTO_BED_LEVELING
|
||||
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const uint8_t &extruder);
|
||||
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate);
|
||||
|
||||
// Get the position applying the bed level matrix if enabled
|
||||
vector_3 plan_get_position();
|
||||
|
|
@ -159,7 +159,7 @@ void plan_buffer_line_destinationXYZE(float feed_rate);
|
|||
|
||||
void plan_set_position_curposXYZE();
|
||||
|
||||
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder, const float* gcode_start_position = NULL, uint16_t segment_idx = 0);
|
||||
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const float* gcode_start_position = NULL, uint16_t segment_idx = 0);
|
||||
//void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder);
|
||||
#endif // ENABLE_AUTO_BED_LEVELING
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue