Перейти к содержанию
    

Где посмотреть распределение RAM в проекте?

Здравствуйте!

 

Пишу проект на STM32F100 и тут начала вылазить ошибка о нехватке ОЗУ. Большие объемы памяти занимают буферы периферии: uart-ов и spi. Но их сумма, плюс cstack, heap - занимает не более 4 кБайт. У меня же - 8 кБайт ОЗУ забито под завязку.

 

Знаю, что IAR может генерировать map-файл, но в нем тоже не все есть. Т.е. на IAR-е для msp430 у меня был map-файл, в котором указывалось все на свете. А на IAR-для ARM - при всех включенных галочках - в map-файле нет некоторых переменных (хотя я их использую и компилятор не должен был их выбросить).

 

Более того, сумма всех переменных, расположенных в ОЗУ (если считать по map-файлу) - едва дотягивает до 5 кБайт (с учетом cstack и heap).

 

Как и где посмотреть - куда испольвалась ОЗУ ?

Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если уже начались сообщения, наверное, самое время подумать о смене камня. Или усечении функционала. Если ни то ни другое не будет заказчиком воспринято с энтузиазмом - пора подумать об увольнении. :)

Изменено пользователем IgorKossak
избыточное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Собирая проект тулчейном GCC я обнаружил сильное поедание оперативной памяти массивом impure_data array.

Обнаружить это удалось сначала утилитой size, потом тщательным изучением map файла.

Может и у Вас что-нибудь аналогичное?

Не могу поверить, что у IAR нельзя в map файле найти нужную информацию. Может Вы не все "галочки" в настройках проставили?

И ещё конфигурацию посмотрите, сколько у Вас ОЗУ выделено.

Когда идеи закончатся - map файл в студию (вложением архива).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может и у меня что-то подобное. Но я не использую динамическое распределение памяти.

 

Линковщику всё указано верно:

define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__   = 0x20001FFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x400;
define symbol __ICFEDIT_size_heap__   = 0x400;
/**** End of ICF editor section. ###ICF###*/

 

Посмотрел еще раз map-файл. Там действительно всё есть, просто сортировано по имени переменных - что ОЧЕНЬ неудобно в данном случае.

Загнал эту часть в excel и увидел пропуски по 100 и больше байт.

 

И ещё. На cstack и heap - линковщик отвел по 1 Кбайту. Для моей программы - очевидно много. Хочу подрезать.

Правильно ли я понимаю, что cstack - это стек (т.е. туда пишутся регистры, при вызове функций, текущий адрес при вызовах функций и пр. - т.е. это стек микроконтроллера ? А heap - это та область, где хранятся локальные переменные, где выделяется память malloc-ами и пр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно ли я понимаю, что cstack - это стек (т.е. туда пишутся регистры, при вызове функций, текущий адрес при вызовах функций и пр. - т.е. это стек микроконтроллера ? А heap - это та область, где хранятся локальные переменные, где выделяется память malloc-ами и пр.

Локальные переменные тоже хранятся в стеке, а heap нужен только для динамического распределения памяти malloc-ами и функциями, вызывающими malloc-и. Попробуйте обойтись без heap или уменьшите его до пары десятков байт.

А вот что касается пропусков, то либо Вы что-то не так поняли, либо там задействовано какое-то жуткое выравнивание, точно сказать не могу. Надо map файл смотреть или его обработку в excel.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Локальные переменные тоже хранятся в стеке, а heap нужен только для динамического распределения памяти malloc-ами и функциями, вызывающими malloc-и. Попробуйте обойтись без heap или уменьшите его до пары десятков байт.

А вот что касается пропусков, то либо Вы что-то не так поняли, либо там задействовано какое-то жуткое выравнивание, точно сказать не могу. Надо map файл смотреть или его обработку в excel.

 

Спасибо за помощь - я выяснил в чем дело: в map-файле не отображаются переменные, обозначенные как static. Почему правда - неясно, ну и фиг с ним.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...