mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2024-11-23 20:18:52 +00:00
Add D100 Watchdog Test (#19697)
This commit is contained in:
parent
c0920bbf6a
commit
f5139f8bf4
@ -25,8 +25,10 @@
|
||||
|
||||
#include "gcode.h"
|
||||
#include "../module/settings.h"
|
||||
#include "../module/temperature.h"
|
||||
#include "../libs/hex_print.h"
|
||||
#include "../HAL/shared/eeprom_if.h"
|
||||
#include "../HAL/shared/Delay.h"
|
||||
|
||||
/**
|
||||
* Dn: G-code for development and testing
|
||||
@ -84,40 +86,23 @@
|
||||
}
|
||||
} break;
|
||||
|
||||
case 3: { // D3 Read / Write EEPROM
|
||||
uint8_t *pointer = parser.hex_adr_val('A');
|
||||
uint16_t len = parser.ushortval('C', 1);
|
||||
uintptr_t addr = (uintptr_t)pointer;
|
||||
#ifndef MARLIN_EEPROM_SIZE
|
||||
#define MARLIN_EEPROM_SIZE size_t(E2END + 1)
|
||||
#endif
|
||||
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");
|
||||
#if ENABLED(EEPROM_SETTINGS)
|
||||
case 3: { // D3 Read / Write EEPROM
|
||||
uint8_t *pointer = parser.hex_adr_val('A');
|
||||
uint16_t len = parser.ushortval('C', 1);
|
||||
uintptr_t addr = (uintptr_t)pointer;
|
||||
#ifndef MARLIN_EEPROM_SIZE
|
||||
#define MARLIN_EEPROM_SIZE size_t(E2END + 1)
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
while (len--) {
|
||||
// Read bytes from EEPROM
|
||||
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();
|
||||
uint8_t val;
|
||||
while(len--) {
|
||||
int pos = 0;
|
||||
if (!persistentStore.read_data(pos, (uint8_t *)&val, sizeof(val))) {
|
||||
print_hex_byte(val);
|
||||
}
|
||||
persistentStore.write_data(pos, (uint8_t *)&val, sizeof(val));
|
||||
}
|
||||
SERIAL_EOL();
|
||||
persistentStore.access_finish();
|
||||
@ -125,9 +110,28 @@
|
||||
SERIAL_ECHOLN("NO EEPROM");
|
||||
#endif
|
||||
}
|
||||
SERIAL_EOL();
|
||||
}
|
||||
} break;
|
||||
else {
|
||||
while (len--) {
|
||||
// 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
|
||||
// const uint8_t pin = parser.byteval('P');
|
||||
@ -167,6 +171,20 @@
|
||||
SERIAL_EOL();
|
||||
}
|
||||
} 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…
Reference in New Issue
Block a user