Я пишу прошивку для микроконтроллера Atmel XMEGA в c, и я думаю, что я заполнил 4 КБ SRAM. Насколько я знаю, у меня есть только статические/глобальные данные и локальные переменные стека (I не использовать malloc в моем коде).Как я узнаю, когда моя память заполнена?
Я использую локальную переменную для буферизации некоторых пиксельных данных. Если я увеличиваю буфер до 51 байта, на моем дисплее появятся странные результаты - буфер из 6 байтов работает нормально. Вот почему я думаю, что мой баран заполнен, и стек переписывает что-то.
Создание бесплатной памяти не моя проблема, потому что я могу просто переместить некоторые статические данные во флеш-память и загрузить ее только тогда, когда это необходимо. Меня беспокоит тот факт, что я никогда не мог обнаружить, что память заполнена.
Возможно ли каким-либо образом вырезать (например, путем перепродажи микроконтроллера), когда память заполнена, вместо того чтобы позволить ей перезаписать некоторые другие данные?
Насколько я знаю, локальные переменные живут в стеке. Но размер стека неизвестен во время компиляции, или я ошибаюсь? – Martin
@Martin: Размер стека может быть известен во время компиляции, если вы не используете локальные переменные рекурсии и переменные размера (буква допускается только с некоторыми C-компиляторами). – Curd