Browse Source

Add D100 Watchdog Test (#19697)

vanilla_fb_2.0.x
Jason Smith 4 years ago
committed by GitHub
parent
commit
f5139f8bf4
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 82
      Marlin/src/gcode/gcode_d.cpp

82
Marlin/src/gcode/gcode_d.cpp

@ -25,8 +25,10 @@
#include "gcode.h" #include "gcode.h"
#include "../module/settings.h" #include "../module/settings.h"
#include "../module/temperature.h"
#include "../libs/hex_print.h" #include "../libs/hex_print.h"
#include "../HAL/shared/eeprom_if.h" #include "../HAL/shared/eeprom_if.h"
#include "../HAL/shared/Delay.h"
/** /**
* Dn: G-code for development and testing * Dn: G-code for development and testing
@ -84,40 +86,23 @@
} }
} break; } break;
case 3: { // D3 Read / Write EEPROM #if ENABLED(EEPROM_SETTINGS)
uint8_t *pointer = parser.hex_adr_val('A'); case 3: { // D3 Read / Write EEPROM
uint16_t len = parser.ushortval('C', 1); uint8_t *pointer = parser.hex_adr_val('A');
uintptr_t addr = (uintptr_t)pointer; uint16_t len = parser.ushortval('C', 1);
#ifndef MARLIN_EEPROM_SIZE uintptr_t addr = (uintptr_t)pointer;
#define MARLIN_EEPROM_SIZE size_t(E2END + 1) #ifndef MARLIN_EEPROM_SIZE
#endif #define MARLIN_EEPROM_SIZE size_t(E2END + 1)
NOMORE(addr, (size_t)(MARLIN_EEPROM_SIZE - 1));
NOMORE(len, MARLIN_EEPROM_SIZE - addr);
if (parser.seenval('X')) {
uint16_t val = parser.hex_val('X');
#if ENABLED(EEPROM_SETTINGS)
persistentStore.access_start();
while(len--) {
int pos = 0;
persistentStore.write_data(pos, (uint8_t *)&val, sizeof(val));
}
SERIAL_EOL();
persistentStore.access_finish();
#else
SERIAL_ECHOLN("NO EEPROM");
#endif #endif
} NOMORE(addr, (size_t)(MARLIN_EEPROM_SIZE - 1));
else { NOMORE(len, MARLIN_EEPROM_SIZE - addr);
while (len--) { if (parser.seenval('X')) {
// Read bytes from EEPROM uint16_t val = parser.hex_val('X');
#if ENABLED(EEPROM_SETTINGS) #if ENABLED(EEPROM_SETTINGS)
persistentStore.access_start(); persistentStore.access_start();
uint8_t val;
while(len--) { while(len--) {
int pos = 0; int pos = 0;
if (!persistentStore.read_data(pos, (uint8_t *)&val, sizeof(val))) { persistentStore.write_data(pos, (uint8_t *)&val, sizeof(val));
print_hex_byte(val);
}
} }
SERIAL_EOL(); SERIAL_EOL();
persistentStore.access_finish(); persistentStore.access_finish();
@ -125,9 +110,28 @@
SERIAL_ECHOLN("NO EEPROM"); SERIAL_ECHOLN("NO EEPROM");
#endif #endif
} }
SERIAL_EOL(); else {
} while (len--) {
} break; // Read bytes from EEPROM
#if ENABLED(EEPROM_SETTINGS)
persistentStore.access_start();
uint8_t val;
while(len--) {
int pos = 0;
if (!persistentStore.read_data(pos, (uint8_t *)&val, sizeof(val))) {
print_hex_byte(val);
}
}
SERIAL_EOL();
persistentStore.access_finish();
#else
SERIAL_ECHOLN("NO EEPROM");
#endif
}
SERIAL_EOL();
}
} break;
#endif
case 4: { // D4 Read / Write PIN case 4: { // D4 Read / Write PIN
// const uint8_t pin = parser.byteval('P'); // const uint8_t pin = parser.byteval('P');
@ -167,6 +171,20 @@
SERIAL_EOL(); SERIAL_EOL();
} }
} break; } break;
case 100: { // D100 Disable heaters and attempt a hard hang (Watchdog Test)
SERIAL_ECHOLN("Disabling heaters and attempting to trigger Watchdog");
SERIAL_ECHOLN("(USE_WATCHDOG " TERN(USE_WATCHDOG, "ENABLED", "DISABLED") ")");
thermalManager.disable_all_heaters();
delay(1000); // Allow time to print
DISABLE_ISRS();
// Use a low-level delay that does not rely on interrupts to function
// Do not spin forever, to avoid thermal risks if heaters are enabled and
// watchdog does not work.
DELAY_US(10000000);
ENABLE_ISRS();
SERIAL_ECHOLN("FAILURE: Watchdog did not trigger board reset.");
}
} }
} }

Loading…
Cancel
Save