 // Interrupt service routine for PB I/O port transition changes.
 ISR(PCINT0_vect)
 {
+    // Basic profiling info
+    OTV0P2BASE::MemoryChecks::recordPC();
+
     const uint8_t pins = PINB;
     const uint8_t changes = pins ^ prevStatePB;
     prevStatePB = pins;
+
     // RFM23B nIRQ falling edge is of interest.
     // Handler routine not required/expected to 'clear' this interrupt.
     if((changes & RFM23B_INT_MASK) && !(pins & RFM23B_INT_MASK))

inline void stackCheck()
{
    const int16_t minsp = OTV0P2BASE::MemoryChecks::getMinSPSpaceBelowStackToEnd();
#if 0 //&& defined(DEBUG)
    const uint8_t location = OTV0P2BASE::MemoryChecks::getLocation();
    OTV0P2BASE::serialPrintAndFlush(F("minsp: "));
    OTV0P2BASE::serialPrintAndFlush(minsp);
    OTV0P2BASE::serialPrintAndFlush(F(" loc:"));
    OTV0P2BASE::serialPrintAndFlush(location);
    OTV0P2BASE::serialPrintlnAndFlush();
    OTV0P2BASE::MemoryChecks::forceResetIfStackOverflow();
    OTV0P2BASE::MemoryChecks::resetMinSP();

                const uint8_t resetCount = eeprom_read_byte((uint8_t *)V0P2BASE_EE_START_RESET_COUNT);
                Serial.print(resetCount);
                Serial.println();
#if 1
                // Show stack headroom.
                OTV0P2BASE::serialPrintAndFlush(F("SH ")); OTV0P2BASE::serialPrintAndFlush(OTV0P2BASE::MemoryChecks::getMinSPSpaceBelowStackToEnd()); OTV0P2BASE::serialPrintlnAndFlush();
                OTV0P2BASE::serialPrintAndFlush(F("oldSP: "));
                OTV0P2BASE::serialPrintAndFlush(oldSP);
                OTV0P2BASE::serialPrintAndFlush(F(" oldLoc: "));
                OTV0P2BASE::serialPrintAndFlush(oldLoc);
                OTV0P2BASE::serialPrintAndFlush(F(" oldPC: "));
                OTV0P2BASE::serialPrintAndFlush(oldPC, HEX);
                OTV0P2BASE::serialPrintlnAndFlush();
#endif
                // Default light-weight print and TX of stats.
                bareStatsTX();
                break; // Note that status is by default printed after processing input line.
