Skip to content

Fix heap fragmentation causing periodic crashes#1

Open
fmck3516 wants to merge 2 commits into
mainfrom
fix/string-heap-fragmentation
Open

Fix heap fragmentation causing periodic crashes#1
fmck3516 wants to merge 2 commits into
mainfrom
fix/string-heap-fragmentation

Conversation

@fmck3516

Copy link
Copy Markdown
Owner

Replace Arduino String objects in displayCall/formatTime with fixed char buffers to prevent heap fragmentation from 10 allocations/second. Also fix PIN_LAST_ACTIVE type (long long → unsigned long + bool flag) to eliminate signed/unsigned mixing in millis() arithmetic.

fmck3516 and others added 2 commits May 13, 2026 19:14
Replace Arduino String objects in displayCall/formatTime with fixed char
buffers to prevent heap fragmentation from 10 allocations/second. Also
fix PIN_LAST_ACTIVE type (long long → unsigned long + bool flag) to
eliminate signed/unsigned mixing in millis() arithmetic.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace unsigned long PIN_LAST_ACTIVE with uint64_t, backed by a new
uptimeMs() function that detects each 49.7-day millis() rollover and
accumulates an epoch counter. This produces a monotonically increasing
64-bit timestamp that makes debounce arithmetic correct indefinitely
without requiring periodic reboots.

The previous unsigned long approach handled single rollovers correctly
but produced a false-active window every ~49.7 days when elapsed time
coincided with an exact multiple of the 32-bit period. uptimeMs() is
called at least once per 100ms loop iteration, so rollover detection
is guaranteed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant