Root cause: Python Reticulum trims random_blobs per destination entry (MAX_RANDOM_BLOBS=64 in-memory, PERSIST_RANDOM_BLOBS=32 on disk). The C++ firmware had these constants defined but NEVER enforced them, causing unbounded growth. With 21 paths x 60+ blobs x ~90 bytes each, the destination table alone consumed ~57KB of the ESP32 324KB heap. Fixes: - Trim random_blobs after insert (matching Python behavior) - Trim random_blobs on deserialization from flash - Trim random_blobs to PERSIST_RANDOM_BLOBS on serialization - Enforce _path_table_maxpersist when writing path table (was declared but never used - write_path_table saved everything) - Reduce MCU constants: MAX_RANDOM_BLOBS 64->16, PERSIST_RANDOM_BLOBS 32->8 - Reduce path_table_maxsize 128->24, maxpersist 32->12 - Add memory diagnostic after path table load - Trim loaded paths to maxsize on startup via cull_path_table() Results: destination_table 21KB->5.8KB, free heap 63K(22%)->156K(49%)
82 KiB
Executable File
82 KiB
Executable File