Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: где посмотреть сколько места занимает приложение под Nios
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Fynjisx
Доброго времени.
где в Eclipse можео увидеть размер кода и даных занимаемых написанной программой?
Заранее благодарю...
Konst_777
Цитата(Fynjisx @ Feb 29 2012, 17:12) *
...где в Eclipse можно увидеть размер кода и данных занимаемых написанной программой?...

После выполнения "Build Project" в окне "Console" будут строки типа:
Код
Info: (YourProgram.elf) 25 KBytes program size (code + initialized data).
Info:             6620 Bytes free for stack + heap.
barabek
Цитата(Fynjisx @ Feb 29 2012, 23:12) *
Доброго времени.
где в Eclipse можео увидеть размер кода и даных занимаемых написанной программой?
Заранее благодарю...


В файле xxx.objdump много информации. Этот файл получается на основе elf-файла либо автоматически после build, либо вручную через "command shell" выполнением команды nios2-elf-objdump. Смотрите подробности в "software developers handbook"
Alex77
Цитата(Fynjisx @ Feb 29 2012, 17:12) *
Доброго времени.
где в Eclipse можео увидеть размер кода и даных занимаемых написанной программой?
Заранее благодарю...


В окошке CONSOLE в Eclipse по окончанию компиляции.

Finished building target: test_rom.elf
' '
Invoking: MicroBlaze Print Size
mb-size test_rom.elf |tee "test_rom.elf.size"
text data bss dec hex filename
3710 456 2090 6256 1870 test_rom.elf
Finished building: test_rom.elf.size
juvf
Цитата(Konst_777 @ Feb 29 2012, 22:55) *
После выполнения "Build Project" в окне "Console" будут строки типа:
Код
Info: (YourProgram.elf) 25 KBytes program size (code + initialized data).
Info:             6620 Bytes free for stack + heap.

На uC/OS проект был 200-300 кБ. После перехода на FreeRTOS у меня после выполнения "Build Project" в окне "Console" такое
Код
Info: (handlerFree.elf) 8523 KBytes program size (code + initialized data).
Info:                   122548 KBytes free for stack + heap.

ВОСЕМЬ Мбайт!!! Сначала подумал - "ну и ОС! Прожорливая". Но потом залил флешпрограматором конфигурацию и прогу в epcs16. Всё работает. По даташиту epcs16 всего 2 Мбайта. Как могла туда уместиться программа в 8,5 Мбайт? Получается что этот вывод, после сборки - неправильный.
barabek
Цитата(juvf @ Mar 2 2012, 12:44) *
На uC/OS проект был 200-300 кБ. После перехода на FreeRTOS у меня после выполнения "Build Project" в окне "Console" такое
Код
Info: (handlerFree.elf) 8523 KBytes program size (code + initialized data).
Info:                   122548 KBytes free for stack + heap.

ВОСЕМЬ Мбайт!!! Сначала подумал - "ну и ОС! Прожорливая". Но потом залил флешпрограматором конфигурацию и прогу в epcs16. Всё работает. По даташиту epcs16 всего 2 Мбайта. Как могла туда уместиться программа в 8,5 Мбайт? Получается что этот вывод, после сборки - неправильный.

Это как раз тот случай, который нужно посмотреть в objdump-файле. У меня такая же ситуация была - по размерам код не должен был бы поместиться во флэш, но работало. И при прошивке programmer выдавал, что записал всего 94кБ, вместо 300кБ по отчету. Дело в том, что сюда же в 300кБ (или в 8М Ваших) входят неинициализируемые переменные. Например буферы. У меня один буфер был ~200кБ. В файле objdump все это расписано. Правда нужно не забывать, что объем и виды информации в objdump зависит от того, с какими ключами вызывается команда nios2-elf-objdump.
juvf
Цитата(barabek @ Mar 1 2012, 07:18) *
В файле xxx.objdump много информации. Этот файл получается на основе elf-файла либо автоматически после build, либо вручную через "command shell" выполнением команды nios2-elf-objdump. Смотрите подробности в "software developers handbook"
А как посмотреть этой командой? в "software developers handbook" нету про размер прошивки. А nios2-elf-objdump --help выдал много чего, но нет там ни одного ключа типа
Display program size.
barabek
Цитата(juvf @ Mar 2 2012, 14:13) *
Display program size.


По простому - выведете все хедеры. Ключ -x.


Код
nios2-elf-objdump -D -S -x <project>.elf > <project>.elf.objdump
-этот набор на все случаи жизни.







juvf
ключ -х вывел 100500 строчек "матрицы". хрен посмотришь в терминале. пришлось вывод в файл отправлять. см аттач


Цитата
набор на все случаи жизни
этот набор генерирует дамп <project>.elf.objdump файла <project>.elf >. Зачем мне дамп<project>.elf.objdump? И где размер программы?
barabek
Цитата(juvf @ Mar 2 2012, 15:04) *
ключ -х вывел 100500 строчек "матрицы". хрен посмотришь в терминале. пришлось вывод в файл отправлять. см аттач


этот набор генерирует дамп <project>.elf.objdump файла <project>.elf >. Зачем мне дамп<project>.elf.objdump? И где размер программы?

1. Да, в консоли не посмотришь.

2. Давайте разбираться. Смотрим раздел sections. Вся информация, интересующая Вас, здесь. Видно, где располагается каждая секция и какой она занимает размер. Расположение это - VMA и LMA, т.е. виртуальный и логический адрес начала секции. Без использования мощных ОСей они одинаковы. Размер (size) - тут вообще все понятно. Теперь что касается самих секций. Есть основные, пользовательские. И есть служебные. Про них я молчу, ничего не знаю. А про пользовательские можете почитать. Вкратце опишу. Секция .text - основная Ваша программа, т.е. код написанных Вами функций. Rodata - readOnlyData - константы. rwdata - read/write data - переменные. bss - это тоже секция данных, инициализируемая нулями. exceptions - из названия понятно, что в ней располагается код исключений (в том числе и прерываний). entry - код "входа", если он есть, например, бутлоадера (но у Вас 0). Где располагаются те или иные секции - управляете Вы настройками линкера. Судя по Вашему вложению - все они в области памяти с 08000000. И Ваша секция bss занимает аж 0x00810a5f(8 456 799)байт. Эту секцию во флэш хранить не нужно, т.к. при запуске программы там будут одни нули.


juvf
ну так и сколько в итоге моя моя прошивка отжрёт у EPCS? Складывать размеры всех секций?
.text + .rodata + .rwdata + ... + .debug_info + .debug_abbrev + ...

Не понятно. Нужно курить про каждую секцию, гуглить. Что складывать, а что нет. А возможно в прошивку что-то ляжет, чего в выводе -х нет. А потом появятся новые секции - опять гуглить. как-то всё сложно. ((



наверно гораздо проще оценить размер программы можно с помощью команды nios2-elf-size
barabek
Цитата(juvf @ Mar 2 2012, 16:27) *
ну так и сколько в итоге моя моя прошивка отжрёт у EPCS? Складывать размеры всех секций?
.text + .rodata + .rwdata + ... + .debug_info + .debug_abbrev + ...

Не понятно. Нужно курить про каждую секцию, гуглить. Что складывать, а что нет. А возможно в прошивку что-то ляжет, чегочч в выводе -х нет. А потом появятся новые секции - опять гуглить. как-то всё сложно. ((


Как и говорил, насчет служебных могу обмануть. Но, ЕМНИП, они во флэш не заливаются. Кто-нибудь может подскажет. Я же скажу один путь, как это можно выяснить sm.gif. Раз Вы пишете про EPCS, значить у Вас при заливке вызывается elf2flash, который создает файл xxx.flash. Формат этого файла известен. Отсюда определите непосредственно размер того, что пишется в EPCS
Fynjisx
Цитата(barabek @ Mar 2 2012, 08:55) *
Где располагаются те или иные секции - управляете Вы настройками линкера.

Подскажите где это место в котором я могу задавать расположение секций? Задавал кажись уже такой вопрос на форуме...
Есть настройки BSP-editor, в которых отображаются имена секций и регионы памяти. А как задать их место положение и размер, я так и не нашел
Цитата(barabek @ Mar 2 2012, 08:55) *
Судя по Вашему вложению - все они в области памяти с 08000000.

Откуда такой вывод?
barabek
Цитата(Fynjisx @ Mar 2 2012, 16:57) *
Подскажите где это место в котором я могу задавать расположение секций? Задавал кажись уже такой вопрос на форуме...
Есть настройки BSP-editor, в которых отображаются имена секций и регионы памяти. А как задать их место положение и размер, я так и не нашел


Во вкладке linker script. Там Вы выставляете, куда, в какую физическую память поместить конкретную секцию. Размер - зачем он Вам нужен? Что Вы под этим подразумеваете? Как можно знать, допустим, какой будет размер у секции .text до завершения компиляции? Теоретически, конечно, можно sm.gif, и то при выключенной оптимизации. И зачем этот размер задавать? Скомпилировался проект, появились данные о размерах всех секций. Дальше линкер их распихивает. В простейшем случае при одной физической памяти подряд друг за другом, а остатки под кучу. В некоторых ситуациях можно делать дополнительные секции. В общем, непонятен контекст вопроса.

Цитата
Откуда такой вывод?


Так в его файле все пользовательские секции идут одна за другой, начиная с адреса 0x08000000 секция exceptions.




Fynjisx
Цитата(barabek @ Mar 2 2012, 10:15) *
Размер - зачем он Вам нужен? Что Вы под этим подразумеваете? Как можно знать, допустим, какой будет размер у секции .text до завершения компиляции? И зачем этот размер задавать? Скомпилировался проект, появились данные о размерах всех секций.

я неправильно понял вот это:
Цитата(barabek @ Mar 2 2012, 10:15) *
...Где располагаются те или иные секции - управляете Вы настройками линкера...

здесь "Где" - у Вас имелось ввиду в какой памяти, а я под "Где" понял как "в каком месте памяти" т.е по каким адресам.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.