aabmail 0 1 апреля, 2014 Опубликовано 1 апреля, 2014 · Жалоба В таких случаях неплохо создать и посмотреть MAP-файл. http://electronix.ru/forum/index.php?s=&am...t&p=1244345 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pepelats 0 1 апреля, 2014 Опубликовано 1 апреля, 2014 · Жалоба В таких случаях неплохо создать и посмотреть MAP-файл. http://electronix.ru/forum/index.php?s=&am...t&p=1244345 Да, спасибо! Действительно помогло. Обнаружил где затесался malloc, который съел кучу памяти и еще по мелочам. Еще добавил ключи которые советовали, убрал все xil_printf. В итоге вместо 160 кбайт получилось 48 кбайт. Интересно, можно еще как то сократить? test.map.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 1 апреля, 2014 Опубликовано 1 апреля, 2014 · Жалоба чет 48 КБайт много, точно столько? на hello world? много.... можно выкинуть текст исходников от дебага, если это ваши ключики еще не сделали... и так далее... меньше должно быть у меня первые проекты в 16 кБайтовый брам влазили Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 1 апреля, 2014 Опубликовано 1 апреля, 2014 · Жалоба Да там похоже драйвера от периферии подцепились. Или нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 1 апреля, 2014 Опубликовано 1 апреля, 2014 · Жалоба думаю тут где то нолик лишний, или в линкере чего-то начудили и какие то спец секции сделали.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aabmail 0 1 апреля, 2014 Опубликовано 1 апреля, 2014 · Жалоба В итоге вместо 160 кбайт получилось 48 кбайт. Интересно, можно еще как то сократить? Интересно, какой сегмент больше всех занимает. Можно через XMD посмотреть, или через плагин для totalcmd. Хотя в .MAP видно, что по крайней мере в elf включено fifo. Значит делаются вызовы из соответствующих библиотек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pepelats 0 1 апреля, 2014 Опубликовано 1 апреля, 2014 (изменено) · Жалоба чет 48 КБайт много, точно столько? на hello world? много.... Сорри, что не предупредил. То что я выложил уже не Hello World, т.к. подумал, что даже если его и уменьшу, реально мало мне о чем скажет, поэтому взял свой реальный проект. В проекте используется AXI Memory Mapped FIFO на примем и передачу. Работаю с ней по прерыванию. Данные получаю с Aurora, отправляю тоже через нее. Суть программы в получении пакета, его разбора и отправке пакета ответа. Больше кода там пока как раз в работе с FIFO, т.к. обмен происходит через AXI Lite по описанному в примере от Xilinx алгоритму. можно выкинуть текст исходников от дебага, если это ваши ключики еще не сделали... и так далее... меньше должно быть у меня первые проекты в 16 кБайтовый брам влазили Если имеется в виду версия Debug и Release, то сейчас у меня 48 кбайт в Release варианте. Если что то еще можно дебажное сократить, было бы здорово. Вообще как думаете, реально подобный софт вместить в 4 кбайта или самый край 8 кбайт? С учетом что сейчас у меня не все реализовано в программе. Необходимо будет добавить алгоритмы работы по SPI, для конфигурирования периферии данными полученными "сверху". Интересно, какой сегмент больше всех занимает. Можно через XMD посмотреть, или через плагин для totalcmd. Хотя в .MAP видно, что по крайней мере в elf включено fifo. Значит делаются вызовы из соответствующих библиотек. Вот что при сборке выводится: Invoking: MicroBlaze Print Size mb-size dummy_hi_unit.elf |tee "dummy_hi_unit.elf.size" text data bss dec hex filename 8532 336 3404 12272 2ff0 dummy_hi_unit.elf Finished building: dummy_hi_unit.elf.size Тут как раз возникает еще вопрос. Получается, что в сумме секции дают 12272. Это вообще откуда? Почему реально там файл 48869 ? P.S. Да вызовы из библиотек делаются. Как раз по работе с FIFO больше всего. Еще вот смог получить инфу: readelf --sections ./dummy_hi_unit.elf Имеется 27 заголовков раздела, начиная со смещения 0xa9bc: Заголовки разделов: [Нм] Имя Тип Адрес Смещ Разм ES Флг Сс Инф Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .vectors.reset PROGBITS 00000000 000094 000008 00 AX 0 0 4 [ 2] .vectors.sw_excep PROGBITS 00000008 00009c 000008 00 AX 0 0 4 [ 3] .vectors.interrup PROGBITS 00000010 0000a4 000008 00 AX 0 0 4 [ 4] .vectors.hw_excep PROGBITS 00000020 0000b4 000008 00 AX 0 0 4 [ 5] .text PROGBITS a8000000 0000bc 001cac 00 WAX 0 0 4 [ 6] .init PROGBITS a8001cac 001d68 000034 00 AX 0 0 4 [ 7] .fini PROGBITS a8001ce0 001d9c 00001c 00 AX 0 0 4 [ 8] .ctors PROGBITS a8001cfc 001db8 000008 00 WA 0 0 4 [ 9] .dtors PROGBITS a8001d04 001dc0 000008 00 WA 0 0 4 [10] .rodata PROGBITS a8001d0c 001dc8 000438 00 A 0 0 4 [11] .sdata2 NOBITS a8002144 002200 000004 00 WA 0 0 1 [12] .data PROGBITS a8002148 002200 000140 00 WA 0 0 4 [13] .bss NOBITS a8002288 002340 000544 00 WA 0 0 4 [14] .heap NOBITS a80027cc 002340 000404 00 WA 0 0 1 [15] .stack NOBITS a8002bd0 002340 000400 00 WA 0 0 1 [16] .debug_line PROGBITS 00000000 002340 001e9f 00 0 0 1 [17] .debug_info PROGBITS 00000000 0041df 0028b0 00 0 0 1 [18] .debug_abbrev PROGBITS 00000000 006a8f 000fba 00 0 0 1 [19] .debug_aranges PROGBITS 00000000 007a50 0002f8 00 0 0 8 [20] .debug_frame PROGBITS 00000000 007d48 000520 00 0 0 4 [21] .debug_loc PROGBITS 00000000 008268 001728 00 0 0 1 [22] .debug_ranges PROGBITS 00000000 009990 000348 00 0 0 1 [23] .debug_str PROGBITS 00000000 009cd8 000bcb 01 MS 0 0 1 [24] .shstrtab STRTAB 00000000 00a8a3 000117 00 0 0 1 [25] .symtab SYMTAB 00000000 00adf4 000990 10 26 42 4 [26] .strtab STRTAB 00000000 00b784 000761 00 0 0 1 Обозначения флагов: W (запись), A (назнач), X (исполняемый), M (слияние), S (строки), I (инфо), L (порядок ссылок), G (группа), T (TLS), E (исключён), x (неизв.) O (треб. доп. обработка ОС) o (специфич. для ОС), p (специф. для процессора) интересно что за секции .debug_* и можно ли их как то порезать. Изменено 1 апреля, 2014 пользователем pepelats Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 2 апреля, 2014 Опубликовано 2 апреля, 2014 · Жалоба погодите погодите! у вас размер программки 12 КБ, а откуда вы берете цифру 48? Если в измеряете выходной файл что в ПЛИС заливается, то 1 он в АСКИ формате а не бинарь, то есть все данные побиты на пакеты, снабжены контрольной суммой, заголовком и адресами. Каждый байт представлен двумя и кроме прошивки содержит еще сам проц, конфигурацию железа. Секции дебуг наверное относятся к обслуге дебуг модуля проца, который не рекомендуют выкидывать даже в финальных проектах... Секция текст - обычно в нее кладут исходники программы, чтобы во время отладки лазить по тексту и видеть откуда что. Я не помню точно, но вроде у эклипса тоже есть галочка включать текст программы или нет в бинарь. ----- нашел 2 флажка в настройках проекта omit all symbol information debug level: min, normal, max, none вот их еще можно покрутить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pepelats 0 2 апреля, 2014 Опубликовано 2 апреля, 2014 · Жалоба погодите погодите! у вас размер программки 12 КБ, а откуда вы берете цифру 48? Если в измеряете выходной файл что в ПЛИС заливается, то 1 он в АСКИ формате а не бинарь, то есть все данные побиты на пакеты, снабжены контрольной суммой, заголовком и адресами. Каждый байт представлен двумя и кроме прошивки содержит еще сам проц, конфигурацию железа. вот вывод в консоль списка файлов. Файл dummy_hi_unit.elf это сам бинарник как я понимаю. По крайней мере в Linux так. Размер как видно показывает 48869. /Release> ls -l итого 224 -rwxr-xr-x 1 enovikov users 48869 апр 2 08:55 dummy_hi_unit.elf -rw-r--r-- 1 enovikov users 247 апр 2 08:55 dummy_hi_unit.elf.elfcheck -rw-r--r-- 1 enovikov users 107 апр 2 08:55 dummy_hi_unit.elf.size нашел 2 флажка в настройках проекта Че то не нашел, это в какой вкладке? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 2 апреля, 2014 Опубликовано 2 апреля, 2014 · Жалоба на проект правой кнопкой C/C++ Build settings MicroBlaze gcc compiler -> debuger ->... Microblaze gss linker -> general ->... ну так elf то это не только программа... там же куча служебки, да еще сам проц вроде там... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pepelats 0 2 апреля, 2014 Опубликовано 2 апреля, 2014 · Жалоба ну так elf то это не только программа... там же куча служебки, да еще сам проц вроде там... Но в любом случае все это пришлось бы размещать в BRAM если бы понадобилось отказаться от DDR ? У меня как раз загвоздка в этом. Microblaze gss linker -> general ->... Вот тут кстати помогло. Поставил галочку omit all symbol information и размер файла уменьшился до ~9 кбайт. Надо будет проверить заведется с ним или нет. Спасибо! :a14: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 2 апреля, 2014 Опубликовано 2 апреля, 2014 · Жалоба Но в любом случае все это пришлось бы размещать в BRAM если бы понадобилось отказаться от DDR ? У меня как раз загвоздка в этом. не надо путать теплое с мягким%). в брам ложится только (код + данные + текст), куча служебки отрежется при программировании, а сам проц ляжет во внутря плис. Вы если по размеру кода за брамы вылетите, вам про это линкер скажет при сборке, это как раз тот размер что 12 КБ был, когда он больше станет, начнутся проблемы, за ним надо следить, а не на общий размер смотреть. Проект в БРАМ приятен еще тем что не надо писать загрузчик, который нужен при запуске из DDR. Поставил галочку omit all symbol information и размер файла уменьшился до ~9 кбайт только отлаживать такой проект невозможно, все имена переменных, функций и прочее выкинуты.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pepelats 0 2 апреля, 2014 Опубликовано 2 апреля, 2014 · Жалоба в брам ложится только (код + данные + текст), куча служебки отрежется при программировании, а сам проц ляжет во внутря плис. Это точно? Насколько я себе представлял, что проц находится в bitstream, а в ELF файле находится полностью моя софт программа пускай даже с мусором. Но что значит там находится и проц? Помимо FPGAшной реализации есть еще и софтовая часть? Вы если по размеру кода за брамы вылетите, вам про это линкер скажет при сборке, это как раз тот размер что 12 КБ был, когда он больше станет, начнутся проблемы, за ним надо следить, а не на общий размер смотреть. OK, если это так, то очень хорошо. :) Проект в БРАМ приятен еще тем что не надо писать загрузчик, который нужен при запуске из DDR. Кстати как раз вопрос. Подскажите, где можно почитать как надо зашить ELF файл во FLASH (желательно Platform Flash), чтобы он по старту питания загрузился в BRAM и начал исполнение? Я находил и делал только с BPI flash, которой нужен SREC загрузчик и много танцев с бубном. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 2 апреля, 2014 Опубликовано 2 апреля, 2014 · Жалоба Это точно? Насколько я себе представлял, что проц находится в bitstream, а в ELF нет это не точно, но я смотрю на размер ELF файла и размер кода у себя, и понимаю что там далеко не только программа... может самого проца там и нет, но куча говна точно имеется, может исходники в текстовом виде для дебага... не знаю, не копал. Но что смотреть надо на ту цифру что у вас была 12 КБайт, это точно, как она переваливает за размер БРАМ, так вам сразу радостно бежит линкер это рассказать. Кстати как раз вопрос. Подскажите, где можно почитать как надо зашить ELF файл во FLASH (желательно Platform Flash), чтобы он по старту питания загрузился в BRAM и начал исполнение? Я находил и делал только с BPI flash, которой нужен SREC загрузчик и много танцев с бубном. Эта плис умеет конфигурить свои внутренние BRAM во время конфигурации, так что если ваша программа влезла в БРАМ, то вы просто прошиваете плис как обычно, а во время загрузки она скачает прошивку, законфигурица как проц, и модули памяти подключенные к процу будут уже иметь прошивку. Чтобы так залить программу ничего делать не надо, прямо в SDK жмете xilinx tool -> config FPGA -> выбирает не bootloop а ваш проект, и прошиваете. Там как то не сложно можно разобраться как сделать это навсегда, а не временно. У меня нет под рукой проекта что влезает в БРАМ чтобы это сделать и написать точнее. А вот если проект в БРАН не влазит, то вот тогда бубен.... Если коротко то надо написать загрузчик, который будет из конфигурационной флеши ПЛИС из места после прошивки брать данные, и пихать их в себя и ДДР. По этому поводу есть апликейшен ноты надо читать на ксалинксе. Вроде как даже есть какой-то стандартный пример. Мой проект с микроблайзом закрылся до этой стадии, мы поставили внешний проц по ряду причин, так что разобраться во всех нюансах я не успел. Так что дальше сами:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aabmail 0 2 апреля, 2014 Опубликовано 2 апреля, 2014 · Жалоба Кстати как раз вопрос. Подскажите, где можно почитать как надо зашить ELF файл во FLASH (желательно Platform Flash), чтобы он по старту питания загрузился в BRAM и начал исполнение? Я находил и делал только с BPI flash, которой нужен SREC загрузчик и много танцев с бубном. ELF во flash можно зашить через iMPACT. А SREC-bootloader можно автосгенерировать в SDK. Он работает (я проверял), только не забудьте оттуда убрать вывод в консоль, иначе программа будет загружаться несколько часов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться