Moje tiskárna Prusa MINI má hnuté osy a fyzicky jsem se to pokusil opravit už několikrát, nakonec jsem problém vyřešil alternativním fw, který umožňuje zadat tzv skew correction. Tiskárna funguje, jenže nyní je k dispozici nová verze fw od Průši, která tiskárnu velmi zrychlí (input shaping) a v této verzi žádný alternativní fw neexistuje.
Stáhl jsem si tedy soubori pro vlastní build fw a upravil konfiguraci v souboru, který už má tuto finkci zakomentovanou (teoreticky má stačit pouze odkomentovat a zadat hodnoty jak moc jsou osy hnuté). Dostávám ale tuto chybu:
Kód: Vybrat vše
[62/65] Building CXX object lib/CMakeFiles/Marlin.dir/Marlin/Marlin/src/module/prusa/homing_utils.cpp.obj
FAILED: lib/CMakeFiles/Marlin.dir/Marlin/Marlin/src/module/prusa/homing_utils.cpp.obj
C:\firmvare_mini\Prusa-Firmware-Buddy\.dependencies\gcc-arm-none-eabi-10.3.1\bin\arm-none-eabi-g++.exe -DARDUINO=187 -DBOARD=BOARD_BUDDY -DBOARD_VERSION_MAJOR=1 -DBOARD_VERSION_MINOR=0 -DBOARD_VERSION_PATCH=0 -DCFG_TUSB_MCU=OPT_MCU_STM32F4 -DHAS_MARLIN=1 -DHAVE_HWSERIAL2 -DMARLIN_DISABLE_INFINITE_LOOP -DMOTHERBOARD=1823 -DPRINTER_CODE=12 -DPRINTER_MODEL=\"MINI\" -DPRINTER_SUBVERSION=0 -DPRINTER_TYPE=2 -DPRINTER_VERSION=1 -DPROCESS_CUSTOM_GCODE -DSTM32F4 -DSTM32F407xx -DSTM32F4xx -DSTM32GENERIC -DUSBCON -DUSBD_USE_CDC -DUSE_HAL_DRIVER -D_EXTUI -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Marlin/Marlin/src -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Marlin/Marlin/src/gcode/lcd -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Marlin/Marlin -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Marlin -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Arduino_Core_Buddy/variants/BUDDY_F407VET6_2209 -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Arduino_Core_Buddy/cores/arduino/stm32 -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Arduino_Core_Buddy/cores/arduino -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Middlewares/Third_Party/FreeRTOS/Source/include -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Drivers/CMSIS/Include -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Drivers/CMSIS/Device/ST/STM32F4xx/Include -IC:/firmvare_mini/Prusa-Firmware-Buddy/include/freertos -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Segger -IC:/firmvare_mini/Prusa-Firmware-Buddy/include/segger -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/segger -IC:/firmvare_mini/Prusa-Firmware-Buddy/include/stm32f4_hal -IC:/firmvare_mini/Prusa-Firmware-Buddy/include/device/stm32f4 -IC:/firmvare_mini/Prusa-Firmware-Buddy/include -IC:/firmvare_mini/Prusa-Firmware-Buddy/include/usb_host -IC:/firmvare_mini/Prusa-Firmware-Buddy/include/usb_device -IC:/firmvare_mini/Prusa-Firmware-Buddy/include/marlin -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/hw -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/common -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/persistent_stores -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/persistent_stores/store_instances -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/guiconfig -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/lang -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/common/utils -IC:/firmvare_mini/Prusa-Firmware-Buddy/build/mini_release_noboot/include -IC:/firmvare_mini/Prusa-Firmware-Buddy/include/buddy -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/common/fanctl/local/. -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/common/fanctl/. -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/marlin_stubs/MINI/. -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Drivers/STM32F4xx_HAL_Driver/Inc -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/logging -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Middlewares/ST/STM32_USB_Host_Library/Core/Inc -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Inc -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/tinyusb/src -IC:/firmvare_mini/Prusa-Firmware-Buddy/include/tinyusb -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/TMCStepper/src -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/gui -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/marlin_stubs/include -IC:/firmvare_mini/Prusa-Firmware-Buddy/src/common/selftest -IC:/firmvare_mini/Prusa-Firmware-Buddy/build/mini_release_noboot/lib/error_codes -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/Prusa-Error-Codes/12_MINI -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/cpp-std-extensions/include -IC:/firmvare_mini/Prusa-Firmware-Buddy/lib/cpp-std-extensions/include/stdx --specs=nosys.specs --specs=nano.specs -O3 -DNDEBUG -Wall -Wsign-compare -ffile-prefix-map=C:/firmvare_mini/Prusa-Firmware-Buddy=. -Wno-register -Wno-volatile -fno-rtti -DconfigUSE_NEWLIB_REENTRANT=1 -g -Os -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -fno-exceptions -fno-unwind-tables -std=gnu++2a -MD -MT lib/CMakeFiles/Marlin.dir/Marlin/Marlin/src/module/prusa/homing_utils.cpp.obj -MF lib\CMakeFiles\Marlin.dir\Marlin\Marlin\src\module\prusa\homing_utils.cpp.obj.d -o lib/CMakeFiles/Marlin.dir/Marlin/Marlin/src/module/prusa/homing_utils.cpp.obj -c C:/firmvare_mini/Prusa-Firmware-Buddy/lib/Marlin/Marlin/src/module/prusa/homing_utils.cpp
C:/firmvare_mini/Prusa-Firmware-Buddy/lib/Marlin/Marlin/src/module/prusa/homing_utils.cpp: In function 'bool disable_modifiers_if(bool, bool)':
C:/firmvare_mini/Prusa-Firmware-Buddy/lib/Marlin/Marlin/src/module/prusa/homing_utils.cpp:59:8: error: 'unskew' was not declared in this scope
59 | unskew(current_position);
| ^~~~~~
C:/firmvare_mini/Prusa-Firmware-Buddy/lib/Marlin/Marlin/src/module/prusa/homing_utils.cpp: In function 'void enable_modifiers_if(bool, bool)':
C:/firmvare_mini/Prusa-Firmware-Buddy/lib/Marlin/Marlin/src/module/prusa/homing_utils.cpp:72:5: error: 'skew' was not declared in this scope
72 | skew(current_position);
| ^~~~
ninja: build stopped: subcommand failed.
Můj soubor s konfigurací vypadá takto:
Kód: Vybrat vše
#if ENABLED(SKEW_CORRECTION)
// Input all length measurements here:
#define XY_DIAG_AC 282.8427124746
#define XY_DIAG_BD 282.8427124746
#define XY_SIDE_AD 200
// Or, set the default skew factors directly here
// to override the above measurements:
#define XY_SKEW_FACTOR 0.0
#define SKEW_CORRECTION_FOR_Z
#if ENABLED(SKEW_CORRECTION_FOR_Z)
#define XZ_DIAG_AC 282.8427124746
#define XZ_DIAG_BD 282.8427124746
#define YZ_DIAG_AC 282.8427124746
#define YZ_DIAG_BD 282.8427124746
#define YZ_SIDE_AD 200
#define XZ_SKEW_FACTOR 0.0
#define YZ_SKEW_FACTOR 0.0
#endif
// Enable this option for M852 to set skew at runtime
#define SKEW_CORRECTION_GCODE
#endif
a soubor home_utils.cpp, na který je v chybě odkazováno takto:
Kód: Vybrat vše
#include "homing_utils.hpp"
#include "../../feature/bedlevel/bedlevel.h"
#include "../../feature/prusa/crash_recovery.hpp"
#include "../../module/endstops.h"
#include "../stepper.h"
#include <config_store/store_instance.hpp>
#if HAS_WORKSPACE_OFFSET
static workspace_xyz_t disable_workspace(bool do_x, bool do_y, bool do_z) {
bool changed = false;
workspace_xyz_t res;
LOOP_XYZ(axis) {
if (!((do_x && axis == X_AXIS) || (do_y && axis == Y_AXIS) || (do_z && axis == Z_AXIS))) {
res.position_shift.pos[axis] = NAN;
res.home_offset.pos[axis] = NAN;
continue;
}
current_position.pos[axis] = LOGICAL_TO_NATIVE(current_position.pos[axis], axis);
res.position_shift.pos[axis] = position_shift.pos[axis];
position_shift.pos[axis] = 0;
res.home_offset.pos[axis] = home_offset.pos[axis];
set_home_offset(AxisEnum(axis), 0); //< updates workspace
changed = true;
}
if (changed) {
sync_plan_position();
}
return res;
}
#endif // HAS_WORKSPACE_OFFSET
bool disable_modifiers_if(bool condition, bool do_z) {
if (!condition) {
return false;
}
bool leveling_was_active = false;
#if HAS_LEVELING
#if ENABLED(RESTORE_LEVELING_AFTER_G28)
leveling_was_active = planner.leveling_active;
#else
if (!do_z) {
leveling_was_active = planner.leveling_active;
}
#endif
set_bed_leveling_enabled(false);
#endif
// Already done by set_bed_leveling_enabled(false)
#if ENABLED(SKEW_CORRECTION)
unskew(current_position);
#endif
sync_plan_position();
return leveling_was_active;
}
void enable_modifiers_if(bool condition, bool restore_leveling) {
if (!condition) {
return;
}
#if ENABLED(SKEW_CORRECTION)
skew(current_position);
#endif
#if HAS_LEVELING
if (restore_leveling) {
set_bed_leveling_enabled(true);
}
#endif
sync_plan_position();
}
Motion_Parameters reset_acceleration_if(bool condition) {
Motion_Parameters mp;
mp.save();
if (!condition) {
return mp;
}
mp.reset();
#if ENABLED(IMPROVE_HOMING_RELIABILITY)
planner.settings.max_acceleration_mm_per_s2[X_AXIS] = XY_HOMING_ACCELERATION;
planner.settings.max_acceleration_mm_per_s2[Y_AXIS] = XY_HOMING_ACCELERATION;
#if HAS_CLASSIC_JERK
planner.max_jerk.set(XY_HOMING_JERK, XY_HOMING_JERK);
#endif
#endif
planner.refresh_acceleration_rates();
remember_feedrate_scaling_off();
return mp;
}
void restore_acceleration_if(bool condition, Motion_Parameters &mp) {
if (!condition) {
return;
}
restore_feedrate_and_scaling();
mp.load();
planner.refresh_acceleration_rates();
}
el_current_xyz_t reset_current_if(bool condition) {
el_current_xyz_t curr = { stepperX.rms_current(), stepperY.rms_current(), stepperZ.rms_current() };
if (!condition) {
return curr;
}
stepperX.rms_current(get_default_rms_current_ma_x());
stepperY.rms_current(get_default_rms_current_ma_y());
stepperZ.rms_current(get_default_rms_current_ma_z());
return curr;
}
void restore_current_if(bool condition, el_current_xyz_t current) {
if (!condition) {
return;
}
stepperX.rms_current(current.x);
stepperY.rms_current(current.y);
stepperZ.rms_current(current.z);
}
void homing_reset(bool no_modifiers, bool default_acceleration, bool default_current) {
#if HAS_WORKSPACE_OFFSET
disable_workspace(true, true, true);
#endif
disable_modifiers_if(no_modifiers, false);
reset_acceleration_if(default_acceleration);
endstops.enable(true); //< Enable endstops for homing moves
reset_current_if(default_current);
}
Nevěděl by někdo náhodou v čem může být chyba? Omlouvám se, jestli je to něco jasného, dělám to poprvé.
Předem děkuji.