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

 
 
> Используемый объем SRAM
Haamu
сообщение Jul 7 2014, 06:41
Сообщение #1


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

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



В среде Atmel Studio во время компиляции в окне Output появляются такие строки:
Код
Program Memory Usage : 27224 bytes   2,6 % Full
Data Memory Usage : 17592 bytes   10,7  Full

Судя по цифрам, можно сделать вывод, что первая - это место, занимаемое программой во флеше контроллера, а вторая - это объем используемой SRAM.
Больше интересует вторая строка. На сколько это точные показания и как они определяются?

Второй вопрос. Программа для STM32, написанная в CoIDE (CooCox). Есть ли там возможность увидеть информацию об объеме используемой SRAM?

И третий вопрос. Всё та же CoIDE.
Код
Program Size:
      text       data        bss        dec        hex    filename
    198168       5028      42564     245760      3c000    Xxxxxxxx.elf

Помогите понять, что значат эти цыфры? Я так понимаю, что "dec" - это размер занятого флеша, а "hex" - то же самое, только в шестнадцатиричном формате. Могу предположить, что "text" - это количество команд в программе. Поправьте, в чем не прав и поясните, что есть "data" и "bss"?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Porty
сообщение Jul 7 2014, 07:54
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 246
Регистрация: 28-05-08
Из: г. Ижевск
Пользователь №: 37 893



Цитата(Haamu @ Jul 7 2014, 10:41) *
Код
Program Size:
      text       data        bss        dec        hex    filename
    198168       5028      42564     245760      3c000    Xxxxxxxx.elf


text - размер сегмента с кодом, векторами прерываний и константами только на чтение (rodata, text, isr_vector)
data - размер сегмента с инициализированными переменными, НО инициализированными НЕ нулём.
bss - размер сегмента с не инициализированными переменными или инициализированными нулём.
стек включается либо в bss либо идёт отдельно в оставшейся памяти, надо смотреть скрипты линковки (*.ld). В Вашей среде раньше включался в bss.

А так же есть служебные метки (на границе секций) для компилятора и линковщика, а так же выравнивание секций по границе в 2-4 байта. В сумме это не более пары десятков байт.

Итог:
Занимаемое флеш = text + data + 10..50 байт
Занимаемое ОЗУ = data + bss + 10..50 байт
Go to the top of the page
 
+Quote Post
Haamu
сообщение Jul 7 2014, 09:02
Сообщение #3


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

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Контроллер у меня STM32F407VG. Вот описание выделенной памяти в том самом скрипте линковки:
Код
MEMORY
{
    rom (rx)  : ORIGIN = 0x08000000, LENGTH = 0x00100000
    ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000
    ram1 (rwx) : ORIGIN = 0x10000000, LENGTH = 0x00010000
}

_eram = 0x20000000 + 0x00020000;

STACK_SIZE = DEFINED(STACK_SIZE) ? STACK_SIZE : 0x2000;   /* 8Kb */
HEAP_SIZE  = DEFINED(HEAP_SIZE)  ? HEAP_SIZE  : 0x8000; /*  32Kb */

Правильно ли я понимаю, что в этом случае под сегменты data + bss остается 0x00020000 - (0x2000 + 0x8000) = 0x16000 или 90112 байт памяти?

И еще один момент, учитывают значения data и bss память, выделяемую функциями calloc или malloc?

Сообщение отредактировал Haamu - Jul 7 2014, 09:08
Go to the top of the page
 
+Quote Post
Porty
сообщение Jul 7 2014, 10:14
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 246
Регистрация: 28-05-08
Из: г. Ижевск
Пользователь №: 37 893



Цитата(Haamu @ Jul 7 2014, 13:02) *
Правильно ли я понимаю, что в этом случае под сегменты data + bss остается 0x00020000 - (0x2000 + 0x8000) = 0x16000 или 90112 байт памяти?

да

Цитата(Haamu @ Jul 7 2014, 13:02) *
И еще один момент, учитывают значения data и bss память, выделяемую функциями calloc или malloc?

нет, не учитывают, т.к. определяются во время работы программы а не во время компилирования.
Дин память выделяется из кучи, которая 32кб, у тебя же всё там написано:
Код
...
STACK_SIZE = DEFINED(STACK_SIZE) ? STACK_SIZE : 0x2000;   /* 8Kb */
HEAP_SIZE  = DEFINED(HEAP_SIZE)  ? HEAP_SIZE  : 0x8000; /*  32Kb */
Go to the top of the page
 
+Quote Post
Haamu
сообщение Jul 7 2014, 12:26
Сообщение #5


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

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Если bss - размер сегмента с не инициализированными переменными или инициализированными нулём, то поидее если я не меняю ничего в программе, должен оставаться постоянным. Так?
Я меняю размер кучи в скрипте линковки, и вижу странную зависимость - при увеличении размера кучи увеличивается значение bss после компиляции проекта. Что здесь не так?
Go to the top of the page
 
+Quote Post



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

 


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


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