В C / C ++ в контексте программирования микроконтроллеров, как я могу увидеть, сколько глобальных переменных памяти используют (не считая новые / выделенные malloc данные)?
Если вы используете gcc для связи вашего исполняемого файла / прошивки, вы можете добавить опцию -Map=memory.map
в командной строке.
В этом файле вы найдете что-то вроде этого, которое говорит вам, где находится RAM:
Memory Configuration
Name Origin Length Attributes
FLASH 0x00014000 0x0002c000 xr
RAM 0x20002000 0x00002000 xrw
*default* 0x00000000 0xffffffff
Обратите внимание на адрес ОЗУ (0x20002000
). Позже вы найдете адреса ваших глобальных переменных в оперативной памяти. Разница в адресах скажет вам их размер:
.bss 0x20002924 0x94 C:/Users/...../main.cpp.o
0x20002924 i2c
0x20002934 ex1
0x20002948 ex2
0x2000295c sensorI2C
0x20002978 sensorSPI0
0x2000299c sdCard
Первый столбец (.bss
) указывает на то, что мы находимся в сегмент данных где хранятся неинициализированные глобальные переменные. Второй столбец — это адрес (который по сравнению с тем, что мы видим выше, находится в оперативной памяти. Третий столбец (0x94
) показывает общий размер, используемый main.cpp
и последний столбец дает имя исходного файла & символы.
Замечания: Инициализированные глобальные переменные «Plain Old Data» (например, int a = 1;
отправится в .data
сегмент, так что смотрите там тоже! (Спасибо, Пол). Переменные, которые инициализируются с помощью конструкторов C ++, все еще входят в .bss
, В любом случае проверьте оба сегмента.