diff --git a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu.h b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu.h index dd0e5e2c..4af3e3b6 100644 --- a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu.h +++ b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu.h @@ -97,6 +97,8 @@ struct dfudata { unsigned int total_bytes; }; +/* RAM address for this magic value above */ +extern struct dfudata _g_dfu; extern struct dfudata *g_dfu; void set_usb_serial_str(const uint8_t *serial_usbstr); diff --git a/firmware/libboard/common/source/board_cstartup_gnu.c b/firmware/libboard/common/source/board_cstartup_gnu.c index bc89b1b8..3d92d2fb 100644 --- a/firmware/libboard/common/source/board_cstartup_gnu.c +++ b/firmware/libboard/common/source/board_cstartup_gnu.c @@ -154,6 +154,9 @@ void ResetException( void ) #if defined(BOARD_USB_DFU) && defined(APPLICATION_dfu) + /* we are before the text segment has been relocated, so g_dfu is + * not initialized yet */ + g_dfu = &_g_dfu; if (g_dfu->magic != USB_DFU_MAGIC) { BootIntoApp(); /* Infinite loop */