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

 
 
> Как узнать размер кода в HEX-файле, вроде должнен быть эезешник какой то...
Kuzmi4
сообщение Apr 21 2008, 08:38
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



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

Собсно вопрос - в результате компиляции получаю HEX-файл. Его размер реально больше, чем то что потом положится во флеш и будет исполняться.
Хотелось бы, используя какой нить экзешник(ну или вообсче что нибудь help.gif ), узнать реальный размер кода ( типа как в AVRStudio писало в конце компиляции -> исходный код - стоколько-то байт..)..
Может у кого в закромах есть такая программка ?
Буду признателен
beer.gif
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 16)
LamerMan
сообщение Apr 21 2008, 08:47
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 44
Регистрация: 9-03-08
Пользователь №: 35 755



avr-size, она так в линуксе называется. Есть вроде винавр какой-то smile.gif там тоже наверное есть

Сообщение отредактировал LamerMan - Apr 21 2008, 08:48
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 21 2008, 08:57
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 LamerMan - у меня NIOSII - crying.gif
Глобальная идея - хочу посмотреть если хватит места, то сделать загрузчик не РОМ а РАМ и натыкать туда переменных чтоб расширить его кругозор....
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 21 2008, 09:09
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Поскольку каждый байт в HEX-файле кодируется 3-мя символами ASCII (2 цифры+пробел), то грубо можно оценить, разделив размер на 3.
При этом не учитывается служебная информация в hex-файле.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 21 2008, 09:13
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 MrYuran - прога ориентировочно занимает байт 200 с хвостиком, хекс занимает 1608 - итого 536 - при размере памяти 512 байт wacko.gif
Не то...
smile3046.gif
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 21 2008, 09:36
Сообщение #6


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Скачайте с Phyton.ru их программатор (оболочку). Загрузите в него Ваш HEX-файл и смотрите расположение и т.д. Можно написать скрипт (на языке программатора), который будет расчитывать объем бинарного образа.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 21 2008, 09:40
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 mdmitry - формат знаю - как раз неохота садится и ваять самому этот размеромерятель - точно должен был уже кто-то сотворить такое...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 21 2008, 09:58
Сообщение #8


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Ну да, я с TI-Text попутал...
Ну тогда так.
Открываем HEX.
:10110000B240805A20013F40F6473E4000023D4039
Это одна строка.
Красный - адрес, зелёный - данные.
Итого 43 байта идут на кодирование 16 байт прошивки.
43/16=2,6875
То есть коэфф. деления 2,6875
Может, размер файла неправильно определяется?

Да, забыл, ещё 2 байта на перевод строки

Кстати, в соседней теме советуют - hex2bin и bin2hex.
По моим понятиям, hex2bin как раз даст бинарный образ программы.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 21 2008, 10:07
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



В обсчем решил проблему(хотя не совсем это и проблема)...

Может кому будет полезно -
НЕХ -
:040000000001703a51
:0400010002c06034a5
:040002005ac52414a3
:040003000019883a1e

Асм- листинг
//
wrctl status, zero
0: 0001703a wrctl status,zero
//
movhi led_addr, %hi(BOOT_LED)
4: 02c06034 movhi r11,384
//
ori led_addr, led_addr, %lo(BOOT_LED)
8: 5ac52414 ori r11,r11,5264
//
mov led_value,r0
c: 0019883a mov r12,zero

В ниосе инструкция кодируется 32 битами - из вышеприведённых данных видно что
в НЕХ-е мы имеем 3 строчки по 32 бита - то есть 3*4*байт - итого 12 байт.

Далее смотрим на последнюю строчку в НЕХ-е -
у меня тут
:04004e008000683a8c

Тоесть (4е+1)*4 <- количество занимаемых байт.
(
Цифра 316 подтверждается так же листингом -
// последняя осмысленна инструкция
jmp return_address
138: 8000683a jmp r16

то есть 138+4 - размер кода -> 13С == 316
)


В итоге получилось 316 байт - жирненький я хвостик дописал biggrin.gif

пЫсЫ.
Касательно hex2bin - не нашёл в ниосовском ЕДС..
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Apr 21 2008, 11:11
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



Цитата(Kuzmi4 @ Apr 21 2008, 13:07) *
Касательно hex2bin - не нашёл в ниосовском ЕДС..

У Атмела надо искать.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 21 2008, 11:22
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Andy Great - пробовал - пишет:

Error - Could not open hex file
Status: HEX to BIN conversion was not successful.

Так что я думаю приведённый мной метод всё же работает лучше - в смысле работает smile.gif
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Apr 21 2008, 13:06
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



Значит, надо искать конвертор поновее, с поддержкой новых форматов хекса. Это все имеет смысл в надежде, что адреса в хексе последовательные, а то были крики при конвертировании в бин для AT91SAM smile.gif
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 21 2008, 13:25
Сообщение #13


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Kuzmi4 @ Apr 21 2008, 14:22) *
Error - Could not open hex file
Status: HEX to BIN conversion was not successful.

Видимо, проблема в том что форматы хексов у всех разные.
по части количества байт в строке.
Если применить мой метод для вашего хекса, то получим:
:040000000001703a51 - итого 21 байт (вместе с переносом строки) для записи 4-х байт.
Делим 21/4=5,25
Делим размер файла 1608 на 5,25 - получаем 306,28
Почти попал


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 21 2008, 14:05
Сообщение #14


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



HEX формат имеет модификации для размера до 64к и более 64к (Extended HEX). Во втором случае задается базовый адрес и далее смещение в нем (в пределах 64к). Разные программы по разному формируют HEX файл: строго 16 байт на строку текста или вариация размера бинарного образа в сторке текста файла, а есть еще незаполненные дырки в ПЗУ, которые не отражены в HEX файле. Считается, что эти дырки заполняются правильным символом при стирании памяти (обычно 0xFF) ИМХО: поправочные множители не дадут точного попадания в размер бинарного образа.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
uriy
сообщение Apr 21 2008, 16:16
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



В hex файле может быть разное количество байт в строке. чем больше байт в строке тем меньше отношение объема hex/bin. Вот пример от VisualDSP
:20003A00E41AF9F900E02B1E55F500E04126E7E900001D0137021B01F500EB01F500E30000 итого 79 символов со \n\r из них 32 байта данных. Получаем примерный коэффициент 2,47. Если вам нужно знать точный объем, почему бы в опциях компилятора не выбрать в качестве выходного файла формат bin, а не hex?
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 22 2008, 06:23
Сообщение #16


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Kuzmi4 @ Apr 21 2008, 11:57) *
2 LamerMan - у меня NIOSII - crying.gif
Ну тогда там должен бы найтись не avr-size.exe, а просто size.exe или там nios-elf-size.exe
Насколько я знаю, оно ведь тоже на gcc базируется.
Кстати,и avr-size не .hex берёт для "работы", а тот .elf, из которого потом все нужные hex-ы генерируются.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Максим Зиновьев
сообщение Apr 22 2008, 07:08
Сообщение #17


Техногипнолог
*****

Группа: Свой
Сообщений: 1 132
Регистрация: 6-03-05
Из: Saratov
Пользователь №: 3 126



Самое простое - конвертнуть хекс в бин оболочкой какого-нибудь программатора.

Или вот, попробуйте Прикрепленный файл  bin2hex.rar ( 13.18 килобайт ) Кол-во скачиваний: 226
Go to the top of the page
 
+Quote Post

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

 


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


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