 // Previous state of port D pins to help detect changes.
 static volatile uint8_t prevStatePD;
 // Interrupt service routine for PD I/O port transition changes (including RX).
+// (DE20170810) Just does a store on an atomic_t. Low ram cost.
 ISR(PCINT2_vect)
 {
     const uint8_t pins = PIND;
     const uint8_t changes = pins ^ prevStatePD;
     prevStatePD = pins;
-
+    
     // If an interrupt arrived from the serial RX then wake up the CLI.
     // Use a nominally rising edge to avoid spurious trigger when other interrupts are handled.
     // The will ensure that it is possible to wake the CLI subsystem with an extra CR or LF.

static constexpr uint8_t STATS_MSG_START_OFFSET = (RFM22_PREAMBLE_BYTES + RFM22_SYNC_MIN_BYTES);
static constexpr uint8_t STATS_MSG_MAX_LEN = (64 - STATS_MSG_START_OFFSET);
// Managed JSON stats.
static OTV0P2BASE::SimpleStatsRotation<12> ss1; // Configured for maximum different stats.
// Do bare stats transmission.
// Output should be filtered for items appropriate
// to current channel security and sensitivity level.

    OTV0P2BASE::serialPrintAndFlush(F("\rResets: "));
    OTV0P2BASE::serialPrintAndFlush(oldResetCount);
    OTV0P2BASE::serialPrintlnAndFlush();
    oldSP = OTV0P2BASE::MemoryChecks::getMinSPSpaceBelowStackToEnd();
    oldLoc = OTV0P2BASE::MemoryChecks::getLocation();
    oldPC = OTV0P2BASE::MemoryChecks::getPC();  // not isr safe
    OTV0P2BASE::serialPrintAndFlush(F("oldSP: "));
    OTV0P2BASE::serialPrintAndFlush(oldSP);
    OTV0P2BASE::serialPrintAndFlush(F(" oldLoc: "));
    OTV0P2BASE::serialPrintAndFlush(oldLoc);
    OTV0P2BASE::serialPrintAndFlush(F(" oldPC: "));
    OTV0P2BASE::serialPrintAndFlush(oldPC, HEX);
    OTV0P2BASE::serialPrintlnAndFlush();
    OTV0P2BASE::MemoryChecks::resetMinSP();
#endif

    // Have 32678Hz clock at least running before going any further.
