2015-04-08 8 views
2

Я ищу способ увидеть использование ОЗУ моего приложения, запущенного на at32uc3b0512.Использование ОЗУ AT32UC3B0512

arv32-size.exe foo.elf говорит мне:

text data  bss  dec  hex filename 
263498 11780 86524 361802 5854a foo.elf 

Согласно 'Google', использование оперативной памяти .data + .bss. Но .data + .bss уже (11780 + 86524)/1024 = 96kb, что означает, что моя RAM заполнена (at32uc3b0512 -> 96kb SRAM). Но приложение работает по своему желанию. Я ошибаюсь???

+2

Файл .map, сгенерированный компоновщиком во время сборки, должен указывать размер каждого раздела. И это может быть способ дважды проверить, что говорит вам файл arv32-size.exe. – kkrambo

+0

Попробуйте 'avr32-size -A', выход имеет тенденцию быть более разумным. См. Более старое обсуждение в http://stackoverflow.com/questions/16791311/how-to-interpret-avr32-size-output. –

+0

Если я попробую avr32-size.exe -A, .data имеет тот же размер, но .bss - всего 21664 ... Таким образом, все швы все в порядке. Но почему avr32-size.exe отображает разные значения в разных режимах? – sharkscream

ответ

2

Чип, который вы используете, имеет 96 КБ ОЗУ и это также сумма ваших разделов .bss и .data. Это не означает, что вся ваша оперативная память израсходована, а просто показывает, как распределяется ОЗУ.

0

Программа на MCU обычно находится в FLASH

  • это не так, если у вас есть какой-то ОС Настоящая программа
  • и загрузить в память на время работы где-то, как SD-карты
  • не все устройства MCU может сделать это
  • Я подозреваю, что это не ваш случай
  • программы Вспышка 512 КБайта большая (я предполагаю, что из числа ваших ИС)

СДЗУПВ используется для C двигателя/OS, стек и куча

  • ваш чип имеет 96 МБайт
  • С двигателем что-то вроде обработки
  • динамического распределения ОС, куча, стек, подпрограммой звонки
  • и включая RTL, используемые при компиляции
  • и грубой манекены Подпрограммы прерывания для неиспользуемых прерываний ...

При компиляции программы для ELF/HEX, что когда-либо

  • компилятор/линкер говорит вам только
  • как большой программный код и данные (находится в программе FLASH памяти)
  • как большие статические переменные, которые имеют
  • остальное неизвестно до самого выполнения

Так что, если вам нужно знать, как большой кусок памяти вы берете

  • , то вам нужно извлечь его из выполнения
  • некоторых РТЛ вызов, чтобы получить состояние памяти
  • или путем оценки его самостоятельно на основе знаний из
  • , что делает ваша программа
  • сколько динамической памяти используется
  • кучи/стек громя/использование уровня
  • рекурсии, и т.д. ...
  • Или вы можете попробовать все больше и больше выделять память, пока не упретесь из памяти
  • и подсчитать, насколько большой кусок, который вы выделили в целом
  • затем выпустить его из грубой
  • использованной памяти является то ~ 96KB - altogether_allocated_memory
  • (+/-) гранулярность ...