реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Где посмотреть распределение RAM в проекте?, RAM заканчивается, хотя по расчетам - не должно.
Atridies
сообщение Jul 3 2013, 14:00
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 445
Регистрация: 7-02-05
Из: Зеленоград
Пользователь №: 2 468



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

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

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

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

Как и где посмотреть - куда испольвалась ОЗУ ?
Заранее спасибо.
Go to the top of the page
 
+Quote Post
ut1wpr
сообщение Jul 3 2013, 18:23
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 98
Регистрация: 20-06-05
Пользователь №: 6 150



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

Сообщение отредактировал IgorKossak - Jul 3 2013, 18:44
Причина редактирования: избыточное цитирование
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 3 2013, 18:51
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Собирая проект тулчейном GCC я обнаружил сильное поедание оперативной памяти массивом impure_data array.
Обнаружить это удалось сначала утилитой size, потом тщательным изучением map файла.
Может и у Вас что-нибудь аналогичное?
Не могу поверить, что у IAR нельзя в map файле найти нужную информацию. Может Вы не все "галочки" в настройках проставили?
И ещё конфигурацию посмотрите, сколько у Вас ОЗУ выделено.
Когда идеи закончатся - map файл в студию (вложением архива).
Go to the top of the page
 
+Quote Post
Atridies
сообщение Jul 4 2013, 16:03
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 445
Регистрация: 7-02-05
Из: Зеленоград
Пользователь №: 2 468



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

Линковщику всё указано верно:
Код
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-ами и пр.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 4 2013, 18:50
Сообщение #5


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Atridies @ Jul 4 2013, 19:03) *
Правильно ли я понимаю, что cstack - это стек (т.е. туда пишутся регистры, при вызове функций, текущий адрес при вызовах функций и пр. - т.е. это стек микроконтроллера ? А heap - это та область, где хранятся локальные переменные, где выделяется память malloc-ами и пр.

Локальные переменные тоже хранятся в стеке, а heap нужен только для динамического распределения памяти malloc-ами и функциями, вызывающими malloc-и. Попробуйте обойтись без heap или уменьшите его до пары десятков байт.
А вот что касается пропусков, то либо Вы что-то не так поняли, либо там задействовано какое-то жуткое выравнивание, точно сказать не могу. Надо map файл смотреть или его обработку в excel.
Go to the top of the page
 
+Quote Post
Atridies
сообщение Jul 14 2013, 07:20
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 445
Регистрация: 7-02-05
Из: Зеленоград
Пользователь №: 2 468



Цитата(IgorKossak @ Jul 4 2013, 22:50) *
Локальные переменные тоже хранятся в стеке, а heap нужен только для динамического распределения памяти malloc-ами и функциями, вызывающими malloc-и. Попробуйте обойтись без heap или уменьшите его до пары десятков байт.
А вот что касается пропусков, то либо Вы что-то не так поняли, либо там задействовано какое-то жуткое выравнивание, точно сказать не могу. Надо map файл смотреть или его обработку в excel.


Спасибо за помощь - я выяснил в чем дело: в map-файле не отображаются переменные, обозначенные как static. Почему правда - неясно, ну и фиг с ним.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 19:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01396 секунд с 7
ELECTRONIX ©2004-2016