From dc79314b8faac111b7831177021ae9c1ddf0ed8f Mon Sep 17 00:00:00 2001 From: "D.R.racer" Date: Thu, 13 Apr 2023 08:22:34 +0200 Subject: [PATCH] Another ~50B down --- src/modules/idler.cpp | 4 ++-- src/modules/selector.cpp | 9 +++++++-- src/modules/selector.h | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/modules/idler.cpp b/src/modules/idler.cpp index 64c67fa..9dcb78d 100644 --- a/src/modules/idler.cpp +++ b/src/modules/idler.cpp @@ -21,7 +21,7 @@ void Idler::PrepareMoveToPlannedSlot() { void Idler::PlanHomingMoveForward() { mm::motion.SetPosition(mm::Idler, mm::unitToSteps(config::IdlerOffsetFromHome)); - axisStart = mm::axisUnitToTruncatedUnit(mm::motion.CurPosition()); + axisStart = mm::axisUnitToTruncatedUnit(mm::unitToAxisUnit(config::IdlerOffsetFromHome)); mm::motion.PlanMove(mm::unitToAxisUnit(config::idlerLimits.lenght * 2), mm::unitToAxisUnit(mg::globals.IdlerHomingFeedrate_deg_s())); dbg_logic_P(PSTR("Plan Homing Idler Forward")); @@ -30,7 +30,7 @@ void Idler::PlanHomingMoveForward() { void Idler::PlanHomingMoveBack() { // we expect that we are at the front end of the axis, set the expected axis' position mm::motion.SetPosition(mm::Idler, mm::unitToSteps(config::idlerLimits.lenght)); - axisStart = mm::axisUnitToTruncatedUnit(mm::motion.CurPosition()); + axisStart = mm::axisUnitToTruncatedUnit(mm::unitToAxisUnit(config::idlerLimits.lenght)); mm::motion.PlanMove(mm::unitToAxisUnit(-config::idlerLimits.lenght * 2), mm::unitToAxisUnit(mg::globals.IdlerHomingFeedrate_deg_s())); dbg_logic_P(PSTR("Plan Homing Idler Back")); diff --git a/src/modules/selector.cpp b/src/modules/selector.cpp index 2e1ebad..731cbe6 100644 --- a/src/modules/selector.cpp +++ b/src/modules/selector.cpp @@ -27,7 +27,7 @@ void Selector::PlanHomingMoveForward() { void Selector::PlanHomingMoveBack() { // we expect that we are at the front end of the axis, set the expected axis' position mm::motion.SetPosition(mm::Selector, 0); - axisStart = mm::axisUnitToTruncatedUnit(mm::motion.CurPosition()); + axisStart = 0; mm::motion.PlanMove(mm::unitToAxisUnit(config::selectorLimits.lenght * 2), mm::unitToAxisUnit(mg::globals.SelectorHomingFeedrate_mm_s())); dbg_logic_P(PSTR("Plan Homing Selector Back")); @@ -35,7 +35,7 @@ void Selector::PlanHomingMoveBack() { bool Selector::FinishHomingAndPlanMoveToParkPos() { // check the axis' length - if (AxisDistance(mm::axisUnitToTruncatedUnit(mm::motion.CurPosition())) < (config::selectorLimits.lenght.v - 3)) { //@@TODO is 3mm ok? + if (AxisDistance(CurrentPosition_mm()) < (config::selectorLimits.lenght.v - 3)) { //@@TODO is 3mm ok? return false; // we couldn't home correctly, we cannot set the Selector's position } @@ -54,6 +54,11 @@ void Selector::FinishMove() { mm::motion.Disable(mm::Selector); // turn off selector motor's power every time } +// for some reason, the same principle doesn't save code size in the Idler +int32_t __attribute__((noinline)) Selector::CurrentPosition_mm() const { + return mm::axisUnitToTruncatedUnit(mm::motion.CurPosition()); +} + Selector::OperationResult Selector::MoveToSlot(uint8_t slot) { if (state == Moving) { dbg_logic_P(PSTR("Moving --> Selector refused")); diff --git a/src/modules/selector.h b/src/modules/selector.h index 0fd247c..2ba8cf5 100644 --- a/src/modules/selector.h +++ b/src/modules/selector.h @@ -49,6 +49,7 @@ protected: virtual void FinishMove() override; private: + int32_t CurrentPosition_mm() const; }; /// The one and only instance of Selector in the FW