DDA: Move axis calculations into loops, part 5.
Clean up code to reduce duplication by consolidating code into loops for per-axis actions. Part 5 is move ACCELERATION_TEMPORAL's step delay calculations into loops. Not tested, binary size change unknown.
This commit is contained in:
parent
8d729d499d
commit
74808610c7
81
dda.c
81
dda.c
|
|
@ -375,33 +375,21 @@ void dda_create(DDA *dda, TARGET *target) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#elif defined ACCELERATION_TEMPORAL
|
#elif defined ACCELERATION_TEMPORAL
|
||||||
// TODO: limit speed of individual axes to MAXIMUM_FEEDRATE
|
|
||||||
// TODO: calculate acceleration/deceleration for each axis
|
// TODO: calculate acceleration/deceleration for each axis
|
||||||
dda->step_interval[X] = dda->step_interval[Y] = \
|
for (i = X; i < AXIS_COUNT; i++) {
|
||||||
dda->step_interval[Z] = dda->step_interval[E] = 0xFFFFFFFF;
|
dda->step_interval[i] = 0xFFFFFFFF;
|
||||||
if (dda->delta[X])
|
if (dda->delta[i])
|
||||||
dda->step_interval[X] = move_duration / dda->delta[X];
|
dda->step_interval[i] = move_duration / dda->delta[i];
|
||||||
if (dda->delta[Y])
|
}
|
||||||
dda->step_interval[Y] = move_duration / dda->delta[Y];
|
|
||||||
if (dda->delta[Z])
|
|
||||||
dda->step_interval[Z] = move_duration / dda->delta[Z];
|
|
||||||
if (dda->delta[E])
|
|
||||||
dda->step_interval[E] = move_duration / dda->delta[E];
|
|
||||||
|
|
||||||
dda->axis_to_step = 'x';
|
dda->c = 0xFFFFFFFF;
|
||||||
dda->c = dda->step_interval[X];
|
dda->axis_to_step = X; // Safety value
|
||||||
if (dda->step_interval[Y] < dda->c) {
|
for (i = X; i < AXIS_COUNT; i++) {
|
||||||
dda->axis_to_step = 'y';
|
if (dda->step_interval[i] < dda->c) {
|
||||||
dda->c = dda->step_interval[Y];
|
dda->axis_to_step = i;
|
||||||
}
|
dda->c = dda->step_interval[i];
|
||||||
if (dda->step_interval[Z] < dda->c) {
|
}
|
||||||
dda->axis_to_step = 'z';
|
}
|
||||||
dda->c = dda->step_interval[Z];
|
|
||||||
}
|
|
||||||
if (dda->step_interval[E] < dda->c) {
|
|
||||||
dda->axis_to_step = 'e';
|
|
||||||
dda->c = dda->step_interval[E];
|
|
||||||
}
|
|
||||||
|
|
||||||
dda->c <<= 8;
|
dda->c <<= 8;
|
||||||
#else
|
#else
|
||||||
|
|
@ -505,7 +493,7 @@ void dda_step(DDA *dda) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else // ACCELERATION_TEMPORAL
|
#else // ACCELERATION_TEMPORAL
|
||||||
if (dda->axis_to_step == 'x') {
|
if (dda->axis_to_step == X) {
|
||||||
x_step();
|
x_step();
|
||||||
move_state.steps[X]--;
|
move_state.steps[X]--;
|
||||||
move_state.time[X] += dda->step_interval[X];
|
move_state.time[X] += dda->step_interval[X];
|
||||||
|
|
@ -523,7 +511,7 @@ void dda_step(DDA *dda) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else // ACCELERATION_TEMPORAL
|
#else // ACCELERATION_TEMPORAL
|
||||||
if (dda->axis_to_step == 'y') {
|
if (dda->axis_to_step == Y) {
|
||||||
y_step();
|
y_step();
|
||||||
move_state.steps[Y]--;
|
move_state.steps[Y]--;
|
||||||
move_state.time[Y] += dda->step_interval[Y];
|
move_state.time[Y] += dda->step_interval[Y];
|
||||||
|
|
@ -541,7 +529,7 @@ void dda_step(DDA *dda) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else // ACCELERATION_TEMPORAL
|
#else // ACCELERATION_TEMPORAL
|
||||||
if (dda->axis_to_step == 'z') {
|
if (dda->axis_to_step == Z) {
|
||||||
z_step();
|
z_step();
|
||||||
move_state.steps[Z]--;
|
move_state.steps[Z]--;
|
||||||
move_state.time[Z] += dda->step_interval[Z];
|
move_state.time[Z] += dda->step_interval[Z];
|
||||||
|
|
@ -559,7 +547,7 @@ void dda_step(DDA *dda) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else // ACCELERATION_TEMPORAL
|
#else // ACCELERATION_TEMPORAL
|
||||||
if (dda->axis_to_step == 'e') {
|
if (dda->axis_to_step == E) {
|
||||||
e_step();
|
e_step();
|
||||||
move_state.steps[E]--;
|
move_state.steps[E]--;
|
||||||
move_state.time[E] += dda->step_interval[E];
|
move_state.time[E] += dda->step_interval[E];
|
||||||
|
|
@ -620,32 +608,15 @@ void dda_step(DDA *dda) {
|
||||||
uint32_t c_candidate;
|
uint32_t c_candidate;
|
||||||
|
|
||||||
dda->c = 0xFFFFFFFF;
|
dda->c = 0xFFFFFFFF;
|
||||||
if (move_state.steps[X]) {
|
for (i = X; i < AXIS_COUNT; i++) {
|
||||||
c_candidate = move_state.time[X] + dda->step_interval[X] - move_state.all_time;
|
if (move_state.steps[i]) {
|
||||||
dda->axis_to_step = 'x';
|
c_candidate = move_state.time[i] + dda->step_interval[i] - move_state.all_time;
|
||||||
dda->c = c_candidate;
|
if (c_candidate < dda->c) {
|
||||||
}
|
dda->axis_to_step = i;
|
||||||
if (move_state.steps[Y]) {
|
dda->c = c_candidate;
|
||||||
c_candidate = move_state.time[Y] + dda->step_interval[Y] - move_state.all_time;
|
}
|
||||||
if (c_candidate < dda->c) {
|
}
|
||||||
dda->axis_to_step = 'y';
|
}
|
||||||
dda->c = c_candidate;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (move_state.steps[Z]) {
|
|
||||||
c_candidate = move_state.time[Z] + dda->step_interval[Z] - move_state.all_time;
|
|
||||||
if (c_candidate < dda->c) {
|
|
||||||
dda->axis_to_step = 'z';
|
|
||||||
dda->c = c_candidate;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (move_state.steps[E]) {
|
|
||||||
c_candidate = move_state.time[E] + dda->step_interval[E] - move_state.all_time;
|
|
||||||
if (c_candidate < dda->c) {
|
|
||||||
dda->axis_to_step = 'e';
|
|
||||||
dda->c = c_candidate;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dda->c <<= 8;
|
dda->c <<= 8;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue