From fb249214f08e14d3f2edc398bebfcf4361d83d3b Mon Sep 17 00:00:00 2001 From: Yiannis Mandravellos Date: Tue, 2 Jun 2015 14:44:55 +0300 Subject: [PATCH] dda.c: fix overflow for large steps/meter values. The trick is to use doubles earlier. As these calculations are optimised out anyways, binary size and performance is kept. Verified to have an identical outcome on a few common steps/mm and acceleration cases. --- dda.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dda.c b/dda.c index a7c5412..d1128b8 100644 --- a/dda.c +++ b/dda.c @@ -74,10 +74,10 @@ static const axes_uint32_t PROGMEM maximum_feedrate_P = { /// \brief Initialization constant for the ramping algorithm. Timer cycles for /// first step interval. static const axes_uint32_t PROGMEM c0_P = { - (uint32_t)((double)F_CPU / SQRT((double)(STEPS_PER_M_X * ACCELERATION / 2000.))), - (uint32_t)((double)F_CPU / SQRT((double)(STEPS_PER_M_Y * ACCELERATION / 2000.))), - (uint32_t)((double)F_CPU / SQRT((double)(STEPS_PER_M_Z * ACCELERATION / 2000.))), - (uint32_t)((double)F_CPU / SQRT((double)(STEPS_PER_M_E * ACCELERATION / 2000.))) + (uint32_t)((double)F_CPU / SQRT((double)STEPS_PER_M_X * ACCELERATION / 2000.)), + (uint32_t)((double)F_CPU / SQRT((double)STEPS_PER_M_Y * ACCELERATION / 2000.)), + (uint32_t)((double)F_CPU / SQRT((double)STEPS_PER_M_Z * ACCELERATION / 2000.)), + (uint32_t)((double)F_CPU / SQRT((double)STEPS_PER_M_E * ACCELERATION / 2000.)) }; /*! Set the direction of the 'n' axis