From 8a45883230919a3dd132d3c23d899241258b96b4 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 1 Jul 2015 17:00:14 +0200 Subject: [PATCH] save RAM content overridden by bootloader magic and restore it in case of aborted reboot use RAMEND-1 as suggested by @yyyc514 in PR #2474 of course it's not a real solution but we cannot force everyone to update the bootloader using an external programmer --- hardware/arduino/avr/cores/arduino/CDC.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hardware/arduino/avr/cores/arduino/CDC.cpp b/hardware/arduino/avr/cores/arduino/CDC.cpp index 22f3591d8c7..d694a2d2ca8 100644 --- a/hardware/arduino/avr/cores/arduino/CDC.cpp +++ b/hardware/arduino/avr/cores/arduino/CDC.cpp @@ -95,6 +95,7 @@ bool CDC_Setup(USBSetup& setup) // We check DTR state to determine if host port is open (bit 0 of lineState). if (1200 == _usbLineInfo.dwDTERate && (_usbLineInfo.lineState & 0x01) == 0) { + *(uint16_t *)(RAMEND-1) = *(uint16_t *)0x0800; *(uint16_t *)0x0800 = 0x7777; wdt_enable(WDTO_120MS); } @@ -107,7 +108,7 @@ bool CDC_Setup(USBSetup& setup) wdt_disable(); wdt_reset(); - *(uint16_t *)0x0800 = 0x0; + *(uint16_t *)0x0800 = *(uint16_t *)(RAMEND-1); } } return true;