use progmem instead of sram for mesh_index_to_x/ypos array;
fix maximum mesh_index_ array size at 16 (15+1);
This commit is contained in:
51
Marlin/ubl.h
51
Marlin/ubl.h
@ -119,12 +119,31 @@
|
||||
|
||||
static ubl_state state, pre_initialized;
|
||||
|
||||
static float z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y],
|
||||
mesh_index_to_xpos[GRID_MAX_POINTS_X + 1], // +1 safety margin for now, until determinism prevails
|
||||
mesh_index_to_ypos[GRID_MAX_POINTS_Y + 1];
|
||||
static float z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y];
|
||||
|
||||
static bool g26_debug_flag,
|
||||
has_control_of_lcd_panel;
|
||||
// 15 is the maximum nubmer of grid points supported + 1 safety margin for now,
|
||||
// until determinism prevails
|
||||
constexpr static float mesh_index_to_xpos[16] PROGMEM = { UBL_MESH_MIN_X+0*(MESH_X_DIST),
|
||||
UBL_MESH_MIN_X+1*(MESH_X_DIST), UBL_MESH_MIN_X+2*(MESH_X_DIST),
|
||||
UBL_MESH_MIN_X+3*(MESH_X_DIST), UBL_MESH_MIN_X+4*(MESH_X_DIST),
|
||||
UBL_MESH_MIN_X+5*(MESH_X_DIST), UBL_MESH_MIN_X+6*(MESH_X_DIST),
|
||||
UBL_MESH_MIN_X+7*(MESH_X_DIST), UBL_MESH_MIN_X+8*(MESH_X_DIST),
|
||||
UBL_MESH_MIN_X+9*(MESH_X_DIST), UBL_MESH_MIN_X+10*(MESH_X_DIST),
|
||||
UBL_MESH_MIN_X+11*(MESH_X_DIST), UBL_MESH_MIN_X+12*(MESH_X_DIST),
|
||||
UBL_MESH_MIN_X+13*(MESH_X_DIST), UBL_MESH_MIN_X+14*(MESH_X_DIST),
|
||||
UBL_MESH_MIN_X+15*(MESH_X_DIST) };
|
||||
|
||||
constexpr static float mesh_index_to_ypos[16] PROGMEM = { UBL_MESH_MIN_Y+0*(MESH_Y_DIST),
|
||||
UBL_MESH_MIN_Y+1*(MESH_Y_DIST), UBL_MESH_MIN_Y+2*(MESH_Y_DIST),
|
||||
UBL_MESH_MIN_Y+3*(MESH_Y_DIST), UBL_MESH_MIN_Y+4*(MESH_Y_DIST),
|
||||
UBL_MESH_MIN_Y+5*(MESH_Y_DIST), UBL_MESH_MIN_Y+6*(MESH_Y_DIST),
|
||||
UBL_MESH_MIN_Y+7*(MESH_Y_DIST), UBL_MESH_MIN_Y+8*(MESH_Y_DIST),
|
||||
UBL_MESH_MIN_Y+9*(MESH_Y_DIST), UBL_MESH_MIN_Y+10*(MESH_Y_DIST),
|
||||
UBL_MESH_MIN_Y+11*(MESH_Y_DIST), UBL_MESH_MIN_Y+12*(MESH_Y_DIST),
|
||||
UBL_MESH_MIN_Y+13*(MESH_Y_DIST), UBL_MESH_MIN_Y+14*(MESH_Y_DIST),
|
||||
UBL_MESH_MIN_Y+15*(MESH_Y_DIST) };
|
||||
|
||||
static bool g26_debug_flag, has_control_of_lcd_panel;
|
||||
|
||||
static int8_t eeprom_start;
|
||||
|
||||
@ -204,7 +223,7 @@
|
||||
return NAN;
|
||||
}
|
||||
|
||||
const float xratio = (RAW_X_POSITION(lx0) - mesh_index_to_xpos[x1_i]) * (1.0 / (MESH_X_DIST)),
|
||||
const float xratio = (RAW_X_POSITION(lx0) - pgm_read_float(&mesh_index_to_xpos[x1_i])) * (1.0 / (MESH_X_DIST)),
|
||||
z1 = z_values[x1_i][yi];
|
||||
|
||||
return z1 + xratio * (z_values[x1_i + 1][yi] - z1);
|
||||
@ -223,7 +242,7 @@
|
||||
return NAN;
|
||||
}
|
||||
|
||||
const float yratio = (RAW_Y_POSITION(ly0) - mesh_index_to_ypos[y1_i]) * (1.0 / (MESH_Y_DIST)),
|
||||
const float yratio = (RAW_Y_POSITION(ly0) - pgm_read_float(&mesh_index_to_ypos[y1_i])) * (1.0 / (MESH_Y_DIST)),
|
||||
z1 = z_values[xi][y1_i];
|
||||
|
||||
return z1 + yratio * (z_values[xi][y1_i + 1] - z1);
|
||||
@ -254,14 +273,16 @@
|
||||
}
|
||||
|
||||
const float z1 = calc_z0(RAW_X_POSITION(lx0),
|
||||
mesh_index_to_xpos[cx], z_values[cx][cy],
|
||||
mesh_index_to_xpos[cx + 1], z_values[cx + 1][cy]),
|
||||
z2 = calc_z0(RAW_X_POSITION(lx0),
|
||||
mesh_index_to_xpos[cx], z_values[cx][cy + 1],
|
||||
mesh_index_to_xpos[cx + 1], z_values[cx + 1][cy + 1]);
|
||||
float z0 = calc_z0(RAW_Y_POSITION(ly0),
|
||||
mesh_index_to_ypos[cy], z1,
|
||||
mesh_index_to_ypos[cy + 1], z2);
|
||||
pgm_read_float(&mesh_index_to_xpos[cx]), z_values[cx][cy],
|
||||
pgm_read_float(&mesh_index_to_xpos[cx + 1]), z_values[cx + 1][cy]);
|
||||
|
||||
const float z2 = calc_z0(RAW_X_POSITION(lx0),
|
||||
pgm_read_float(&mesh_index_to_xpos[cx]), z_values[cx][cy + 1],
|
||||
pgm_read_float(&mesh_index_to_xpos[cx + 1]), z_values[cx + 1][cy + 1]);
|
||||
|
||||
float z0 = calc_z0(RAW_Y_POSITION(ly0),
|
||||
pgm_read_float(&mesh_index_to_ypos[cy]), z1,
|
||||
pgm_read_float(&mesh_index_to_ypos[cy + 1]), z2);
|
||||
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (DEBUGGING(MESH_ADJUST)) {
|
||||
|
Reference in New Issue
Block a user