В стеке хранятся только данные функции; его код остается во флэш-памяти. Вы не можете реально уменьшить использование SRAM, используя вместо этого EEPROM, потому что, как вы видели, EEPROM не адресуется таким же образом. Код для чтения и хранения EEPROM также должен использовать SRAM - возможно, столько же SRAM, сколько вы пытались сохранить! ЭСППЗУ также медленно записывается и имеет ограниченное время жизни (по количеству записей в каждый байт), что делает нецелесообразным использование для хранения вида временных данных, которые мы обычно помещаем в стек. Он лучше подходит для сохранения редко изменяемых данных, таких как уникальная конфигурация устройства для серийных устройств, или для регистрации нечастых ошибок для последующего анализа.
Отредактировано:
нет стека для этой функции, пока функция не была вызвана, так что да, то есть, когда туда попадают какие-либо данные функции. Что происходит после возврата функции, так это то, что ее стековый кадр (зарезервированная область SRAM) больше не зарезервирован. В конечном итоге он будет повторно использован другим вызовом функции. Вот диаграмма стека C в памяти. Когда кадр стека больше не используется, он просто освобождается, и его память становится доступной для повторного использования.