diff --git a/Marlin/src/HAL/AVR/HAL.h b/Marlin/src/HAL/AVR/HAL.h index 7185142175..1491867721 100644 --- a/Marlin/src/HAL/AVR/HAL.h +++ b/Marlin/src/HAL/AVR/HAL.h @@ -19,6 +19,10 @@ */ #pragma once +/** + * HAL for Arduino AVR + */ + #include "../shared/Marduino.h" #include "../shared/HAL_SPI.h" #include "fastio.h" diff --git a/Marlin/src/core/serial_hook.h b/Marlin/src/core/serial_hook.h index 3972279452..65c553c702 100644 --- a/Marlin/src/core/serial_hook.h +++ b/Marlin/src/core/serial_hook.h @@ -43,7 +43,9 @@ public: } constexpr SerialMask(const uint8_t mask) : mask(mask) {} - constexpr SerialMask(const SerialMask & other) : mask(other.mask) {} // Can't use = default here since not all framework support this + constexpr SerialMask(const SerialMask &rs) : mask(rs.mask) {} // Can't use = default here since not all frameworks support this + + SerialMask& operator=(const SerialMask &rs) { mask = rs.mask; return *this; } static constexpr uint8_t All = 0xFF; }; diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h index 1e80f8059c..dace435fd1 100644 --- a/Marlin/src/core/types.h +++ b/Marlin/src/core/types.h @@ -91,9 +91,9 @@ struct Flags { void set(const int n) { b |= (bits_t)_BV(n); } void clear(const int n) { b &= ~(bits_t)_BV(n); } bool test(const int n) const { return TEST(b, n); } - bool operator[](const int n) { return test(n); } - const bool operator[](const int n) const { return test(n); } - const int size() const { return sizeof(b); } + bool operator[](const int n) { return test(n); } + bool operator[](const int n) const { return test(n); } + int size() const { return sizeof(b); } }; // Specialization for a single bool flag @@ -105,9 +105,9 @@ struct Flags<1> { void set(const int) { b = true; } void clear(const int) { b = false; } bool test(const int) const { return b; } - bool operator[](const int) { return b; } - const bool operator[](const int) const { return b; } - const int size() const { return sizeof(b); } + bool operator[](const int) { return b; } + bool operator[](const int) const { return b; } + int size() const { return sizeof(b); } }; typedef Flags<8> flags_8_t; @@ -124,9 +124,9 @@ typedef struct AxisFlags { void set(const int n, const bool onoff) { flags.set(n, onoff); } void clear(const int n) { flags.clear(n); } bool test(const int n) const { return flags.test(n); } - bool operator[](const int n) { return flags[n]; } - const bool operator[](const int n) const { return flags[n]; } - const int size() const { return sizeof(flags); } + bool operator[](const int n) { return flags[n]; } + bool operator[](const int n) const { return flags[n]; } + int size() const { return sizeof(flags); } } axis_flags_t; // diff --git a/Marlin/src/gcode/config/M200-M205.cpp b/Marlin/src/gcode/config/M200-M205.cpp index 8b50437eef..82a110e06b 100644 --- a/Marlin/src/gcode/config/M200-M205.cpp +++ b/Marlin/src/gcode/config/M200-M205.cpp @@ -135,8 +135,8 @@ void GcodeSuite::M201() { LOOP_LOGICAL_AXES(i) { if (parser.seenval(AXIS_CHAR(i))) { - const uint8_t a = TERN(HAS_EXTRUDERS, (i == E_AXIS ? uint8_t(E_AXIS_N(target_extruder)) : i), i); - planner.set_max_acceleration(a, parser.value_axis_units((AxisEnum)a)); + const AxisEnum a = TERN(HAS_EXTRUDERS, (i == E_AXIS ? E_AXIS_N(target_extruder) : (AxisEnum)i), (AxisEnum)i); + planner.set_max_acceleration(a, parser.value_axis_units(a)); } } } @@ -184,8 +184,8 @@ void GcodeSuite::M203() { LOOP_LOGICAL_AXES(i) if (parser.seenval(AXIS_CHAR(i))) { - const uint8_t a = TERN(HAS_EXTRUDERS, (i == E_AXIS ? uint8_t(E_AXIS_N(target_extruder)) : i), i); - planner.set_max_feedrate(a, parser.value_axis_units((AxisEnum)a)); + const AxisEnum a = TERN(HAS_EXTRUDERS, (i == E_AXIS ? E_AXIS_N(target_extruder) : (AxisEnum)i), (AxisEnum)i); + planner.set_max_feedrate(a, parser.value_axis_units(a)); } } diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index 7792acd491..143f240c2d 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -656,7 +656,7 @@ namespace ExtUI { } void setAxisMaxFeedrate_mm_s(const feedRate_t value, const axis_t axis) { - planner.set_max_feedrate(axis, value); + planner.set_max_feedrate((AxisEnum)axis, value); } void setAxisMaxFeedrate_mm_s(const feedRate_t value, const extruder_t extruder) { @@ -674,7 +674,7 @@ namespace ExtUI { } void setAxisMaxAcceleration_mm_s2(const_float_t value, const axis_t axis) { - planner.set_max_acceleration(axis, value); + planner.set_max_acceleration((AxisEnum)axis, value); } void setAxisMaxAcceleration_mm_s2(const_float_t value, const extruder_t extruder) { diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index a64f426fba..18298654f5 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -1399,7 +1399,7 @@ void prepare_line_to_destination() { bool homing_needed_error(linear_axis_bits_t axis_bits/*=linear_bits*/) { if ((axis_bits = axes_should_home(axis_bits))) { PGM_P home_first = GET_TEXT(MSG_HOME_FIRST); - char msg[strlen_P(home_first)+1]; + char msg[30]; sprintf_P(msg, home_first, NUM_AXIS_LIST( TEST(axis_bits, X_AXIS) ? STR_A : "", diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 33c8913639..6aa363890e 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -3292,7 +3292,7 @@ void Planner::refresh_positioning() { } // Apply limits to a variable and give a warning if the value was out of range -inline void limit_and_warn(float &val, const uint8_t axis, PGM_P const setting_name, const xyze_float_t &max_limit) { +inline void limit_and_warn(float &val, const AxisEnum axis, PGM_P const setting_name, const xyze_float_t &max_limit) { const uint8_t lim_axis = TERN_(HAS_EXTRUDERS, axis > E_AXIS ? E_AXIS :) axis; const float before = val; LIMIT(val, 0.1, max_limit[lim_axis]); @@ -3311,7 +3311,7 @@ inline void limit_and_warn(float &val, const uint8_t axis, PGM_P const setting_n * * This hard limit is applied as a block is being added to the planner queue. */ -void Planner::set_max_acceleration(const uint8_t axis, float inMaxAccelMMS2) { +void Planner::set_max_acceleration(const AxisEnum axis, float inMaxAccelMMS2) { #if ENABLED(LIMITED_MAX_ACCEL_EDITING) #ifdef MAX_ACCEL_EDIT_VALUES constexpr xyze_float_t max_accel_edit = MAX_ACCEL_EDIT_VALUES; @@ -3334,7 +3334,7 @@ void Planner::set_max_acceleration(const uint8_t axis, float inMaxAccelMMS2) { * * This hard limit is applied as a block is being added to the planner queue. */ -void Planner::set_max_feedrate(const uint8_t axis, float inMaxFeedrateMMS) { +void Planner::set_max_feedrate(const AxisEnum axis, float inMaxFeedrateMMS) { #if ENABLED(LIMITED_MAX_FR_EDITING) #ifdef MAX_FEEDRATE_EDIT_VALUES constexpr xyze_float_t max_fr_edit = MAX_FEEDRATE_EDIT_VALUES; diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index a5c3bf51a4..bef381b5c7 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -501,10 +501,10 @@ class Planner { static void refresh_positioning(); // For an axis set the Maximum Acceleration in mm/s^2 - static void set_max_acceleration(const uint8_t axis, float inMaxAccelMMS2); + static void set_max_acceleration(const AxisEnum axis, float inMaxAccelMMS2); // For an axis set the Maximum Feedrate in mm/s - static void set_max_feedrate(const uint8_t axis, float inMaxFeedrateMMS); + static void set_max_feedrate(const AxisEnum axis, float inMaxFeedrateMMS); // For an axis set the Maximum Jerk (instant change) in mm/s #if HAS_CLASSIC_JERK diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index f65de00f61..531c52c09d 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -751,7 +751,7 @@ volatile bool Temperature::raw_temps_ready = false; // Report heater states every 2 seconds if (ELAPSED(ms, next_temp_ms)) { #if HAS_TEMP_SENSOR - print_heater_states(ischamber ? active_extruder : (isbed ? active_extruder : heater_id)); + print_heater_states(heater_id < 0 ? active_extruder : (int8_t)heater_id); SERIAL_EOL(); #endif next_temp_ms = ms + 2000UL; @@ -2817,6 +2817,9 @@ void Temperature::init() { #if HAS_THERMAL_PROTECTION + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wimplicit-fallthrough" + Temperature::tr_state_machine_t Temperature::tr_state_machine[NR_HEATER_RUNAWAY]; // = { { TRInactive, 0 } }; /** @@ -2946,6 +2949,8 @@ void Temperature::init() { } } + #pragma GCC diagnostic pop + #endif // HAS_THERMAL_PROTECTION void Temperature::disable_all_heaters() { @@ -3669,6 +3674,9 @@ void Temperature::isr() { switch (adc_sensor_state) { + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wimplicit-fallthrough" + case SensorsReady: { // All sensors have been read. Stay in this state for a few // ISRs to save on calls to temp update/checking code below. @@ -3686,6 +3694,8 @@ void Temperature::isr() { } } + #pragma GCC diagnostic pop + case StartSampling: // Start of sampling loops. Do updates/checks. if (++temp_count >= OVERSAMPLENR) { // 10 * 16 * 1/(16000000/64/256) = 164ms. temp_count = 0; @@ -3917,7 +3927,7 @@ void Temperature::isr() { delay(2); } - void Temperature::print_heater_states(const uint8_t target_extruder + void Temperature::print_heater_states(const int8_t target_extruder OPTARG(HAS_TEMP_REDUNDANT, const bool include_r/*=false*/) ) { #if HAS_TEMP_HOTEND diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 9dc41129b2..da9d4a071b 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -995,7 +995,7 @@ class Temperature { #endif // HEATER_IDLE_HANDLER #if HAS_TEMP_SENSOR - static void print_heater_states(const uint8_t target_extruder + static void print_heater_states(const int8_t target_extruder OPTARG(HAS_TEMP_REDUNDANT, const bool include_r=false) ); #if ENABLED(AUTO_REPORT_TEMPERATURES)