Как узнать, сколько глобальных переменных в ОЗУ используют?

В C / C ++ в контексте программирования микроконтроллеров, как я могу увидеть, сколько глобальных переменных памяти используют (не считая новые / выделенные malloc данные)?

4

Решение

Если вы используете 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, В любом случае проверьте оба сегмента.

3

Другие решения


По вопросам рекламы [email protected]