mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-20 23:58:43 -04:00
5e76e7aa7b
we have now shown that interrupts being enabled during flash operations can cause the infamous "68ms" bug, or watchdog when using a 32 bit timer on boards using flash for storage The issue is quite repeatable with a load of a very large waypoint file (over 500 waypoints) using "wp ftpload" in MAVProxy. This puts a huge load on flash storage. Our current working theory is that while doing flash writes for storage on dual-bank we block access to only one bank, so if another thread uses a timeout function with a short timeout while the flash write is happening and chVTDoTickI calls code which crosses the flash bank boundary then it can cause chVTDoTickI to violate the assumption that no more than CH_CFG_ST_DELTA ticks pass while it is calculating the value to set in the system timer. In that case we get a delay of a full timer wrap, which is 68ms on boards with 16 bit timer and 70 minutes on boards with 32 bit timer |
||
---|---|---|
.. | ||
board.c | ||
board.h | ||
bouncebuffer.c | ||
bouncebuffer.h | ||
chconf.h | ||
chibios_board.mk | ||
chibios_common.mk | ||
common_extf.ld | ||
common.ld | ||
crashdump.c | ||
cstdio | ||
ffconf.h | ||
flash.c | ||
flash.h | ||
halconf.h | ||
hrt.c | ||
hrt.h | ||
malloc.c | ||
mcuconf.h | ||
ppm.h | ||
spi_hook.h | ||
stdio.h | ||
stm32_util.c | ||
stm32_util.h | ||
stm32f1_mcuconf.h | ||
stm32f3_mcuconf.h | ||
stm32f47_mcuconf.h | ||
stm32g4_mcuconf.h | ||
stm32h7_mcuconf.h | ||
stm32l4_mcuconf.h | ||
stubs.c | ||
usbcfg_common.c | ||
usbcfg_dualcdc.c | ||
usbcfg.c | ||
usbcfg.h | ||
watchdog.c | ||
watchdog.h |