Compare commits

..

2 Commits

Author SHA1 Message Date
566cfc8811 Merge pull request 'fix: IWDG reset during gyro recal — refresh at i=0 not i=39 (P0 #42)' (#172) from sl-firmware/gyro-recal-button into main 2026-03-02 10:34:20 -05:00
cf0a5a3583 fix: IWDG reset during gyro recal — refresh at i=0 not i=39 (P0 #42)
i%40==39 fired the first IWDG refresh only after 40ms of calibration.
Combined with ~10ms of main loop overhead before entering calibrate(),
total elapsed since last refresh could exceed the 50ms IWDG window.

Change to i%40==0: first refresh fires at i=0 (<1ms after entry),
subsequent refreshes every 40ms — safely within the 50ms window.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 22:04:27 -05:00

View File

@ -68,8 +68,10 @@ void mpu6000_calibrate(void) {
sum_gy += raw.gy;
sum_gz += raw.gz;
HAL_Delay(1);
/* Refresh IWDG every 40ms — safe during re-cal with watchdog running */
if (i % 40 == 39) safety_refresh();
/* Refresh IWDG every 40ms, starting immediately (i=0) — the gap between
* safety_refresh() at the top of the main loop and entry here can be
* ~10ms, so we must refresh on i=0 to avoid the 50ms IWDG window. */
if (i % 40 == 0) safety_refresh();
}
s_bias_gx = (float)sum_gx / GYRO_CAL_SAMPLES;