I have an Arduino project (data logger intended to sample 100 samples per second for months) with firmware that is too long to post. It mostly works as supposed to, but I have a confusing issue I can't figure out: rarely, the indicator LEDs (driven by digital pins) stop working. By rarely, I mean if I run 20 devices for two weeks, maybe one will develop the issue, so it's very hard to test empirically but it's frequent enough that it matters. I know it's not a hardware problem because they start again after a reset. The device apparently continues working fine apart from the LED issue when this happens.
I have three hypotheses:
- There's a logic problem in my firmware code. I'm skeptical because the relevant block of code is pretty simple.
- A memory overflow or some similar problem causes the program to fail at this one particular task but not others. I'm a little skeptical because the device reports free stack in the metadata every second and it's always over 40 bytes; I may be misunderstanding memory use though.
- Somehow, the digital pin (4) driving the LED gets flipped from OUTPUT to INPUT. There's definitely no
pinMode(4, INPUT)
command anywhere in my code though, so if this is happening it's not my code doing it.
Let's suppose it isn't #1. Considering #2: is it likely that a weird memory issue is causing a very specific failure while not affecting core functions of the device?
Considering #3, is there anyway the register setting a pin to INPUT or OUTPUT could be flipped unexpectedly? It sounds crazy to me but I want to rule it out.
The platform is similar to the Arduino Pro (3.3V, 8 MHz, ATMEGA328p) and I'm running the current IDE version (1.8.13). Thanks for any help.
loop()
) it will return something completely different than when you call it in deeper scope, where local variables, return addresses, etc. are also stored in ram. If you don't use dynamic memory allocation, it will always give the same result, but that probably is not the "high-water-mark" of ram usage. – Sim Son Feb 19 at 18:26