Arduino: U8G2 и TMRpcm вместе используют слишком много оперативной памяти - PullRequest
0 голосов
/ 09 мая 2020

Заголовок проблема. Мой скетч Arduino, который должен работать на Uno или Nano, использует библиотеку TMRpcm для воспроизведения звука с SD-карты, а также библиотеку U8G2 для отображения материала на монохромном OLED-экране 128x64 chrome. С этим все в порядке, обе вещи работают по отдельности, никаких проблем с оборудованием. Но когда я использую обе библиотеки вместе, IDE сообщает, что это примерно 1/2 КБ ОЗУ. Обе указанные платы имеют 2К. Хотя память fla sh также примерно наполовину заполнена, это не будет проблемой, поскольку мой код не будет расти намного больше.

Я уже переключил TMRpcm на SdFat, что позволило сэкономить много памяти. обычная обычная SD (цифры выше для SdFat). Я удалил режим длинного имени файла, который должен сэкономить место, я отключил все, что мне не нужно в TMRpcm, я уменьшил размер его буфера до 64 байтов. Я использую 128-байтовый режим буфера страниц для дисплея, который является самым маленьким буферным режимом, который поддерживает библиотека.

Я обнаружил, что если я не использую какие-либо глобальные переменные и никогда не выделяю SdFat, display и TMRpcm объект в то же время проблема с памятью решена. Однако это не оптимально, и я ожидаю, что возникнут проблемы со стабильностью, потому что свободное пространство теперь все еще меньше 1/2 КБ.

Я мог бы, конечно, вложить деньги в проблему и использовать Arduino Due с его 32 КБ ОЗУ, встроенный DA C и аудио библиотека, но я хочу избежать этого. По большей части, Due полностью лишает того, чего я хочу достичь. Никаких сложных вычислений, никаких требований к высокоскоростной связи (единственными коммуникациями являются I² C для дисплея и SPI для SD-карты).

Есть ли у вас какие-либо предложения, как уменьшить требования к памяти? Есть ли альтернативное программное обеспечение, которое я мог бы использовать для своего оборудования? Можно ли настроить любую из двух основных библиотек на использование меньшего объема памяти? (Я прочитал исходный код TMRpcm и ничего не понимаю. Обычно я не особо разбираюсь в программистах аппаратных / микроконтроллеров.)

При необходимости я могу поделиться своим кодом, хотя он очень basi c на этом этапе.

Заранее спасибо.

ОБНОВЛЕНИЕ: Оказывается, что µ C, кажется, треснет sh, когда я загружаю программу с низким RAM "предупреждение, такое как взлом, который я описал выше. Так что это вообще не решение.

...