The problem drug out across Friday and the entire weekend.
Throughout it all, the central question remained: What was causing the infinitely recursive interrupts ?
As of right now, that is now resolved. I counted six contributing factors that were in some way associated with the errant behavior. I was able to narrow that list down to three.
Fixing two of those three stopped the immediate error in question.
The third factor has now shown itself to be a problem of its own right; and here's the thing that really hits home about the difficulty of avoiding chameleon questions: In order to get to the root of the first problem (infinitely recursive ints) you would have had to recognize...
- That the disappearing received UART bytes were a separate and distinct contributing factor which had to be allowed to continue to malfunction in order to resolve the infinitely recursive interrupts.
- That the error send routine was hung in an infinite loop (which you couldn't see because of the recursive ints)
- That the error routine which was going into its own infinite loop was being called bogusly
- That that bogus error call was the result of the first problem of recursive ints
- That the UART was wrongly configured for sending in the first place (RTS/CTS thing)
- That while this was also an infinite loop, it was not causing the first problem
- That the infinitely recursive ints had to be corrected before you could ever truly see the infinite wait loop on the wrongly configured UART hardware bits
That's beyond the thinking capacity of most individuals I know; including myself in this instance.
Incidentally, this matter was mostly resolved on the vendor's website forums thanks to some amazingly helpful experts with brains far and beyond my own; and so, I ask...
Is this the kind of stuff that is just plain off limits for Stack Overflow in the first place ? If not, how do you avoid being a chameleon when a suggested fix produces another bug, then another and another ? (In this particular case, six times over)
Lesson Learned: Debug your own code, not others'.