VaTiKaNeTs
Участник-
Постов
17 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о VaTiKaNeTs
-
Звание
Участник
Посетители профиля
Блок последних пользователей отключён и не показывается другим пользователям.
-
Очень полезная информация для загрузчика. Я не спорю что hex неплохой формат, но мне нужен ELF файл, т.к. загрузчик хочет принимать ELF файл. И пожалуйста, не надо больше писать, а чем .bin хуже или .hex, они не хуже, они просто не подходят используемому загрузчику. все эти разговоры не по теме.
-
https://ru.wikipedia.org/wiki/Executable_and_Linkable_Format Зачем переносить, если он создается автоматически для elf файла
-
Спасибо за совет, попробую, но использование сторонних тулз последняя мера, изначально хотел разобраться где в CubeIDe можно настроить, то что он линкует и как
-
Нужен elf, потому что в нем есть заголовок. Про конвертор сказал некорректно, есть упаковщик, который должен упаковать elf файл.
-
сейчас в elf такой состав подряд: 0) заголовок 1) куча ненужных нулей 2) bin файл (от .isr_vector до .data) 3) куча ненужных нолей 4) .ARM.attributes 5) .comment 6) .debug_frame От ненужных нулей надо избавиться
-
вот суть этой темы как раз в том, что бы разобраться, как убрать все лишнее из elf файла?
-
Мне нужно затем запаковать файл, с помощью конвертора и загрузить его с помощью самописного загрузчика. Запаковать требуется именно elf файл
-
VaTiKaNeTs подписался на Как убрать пустые области в elf файле
-
Как убрать пустые области в elf файле
VaTiKaNeTs опубликовал тема в GNU/OpenSource средства разработки
В elf файле огромные области, занятые нулями, как убрать их, что бы сократить размер прошивки. Bin файл этой же программы весит 25кБ примерно к сравнению. Вот скрипт вызова линковщика в CubeIDE: -mcpu=cortex-m4 -T"/home/developer/projects/STM32F401CCU6/STM32F401CCUX_FLASH.ld" --specs=nosys.specs -Wl,-Map="${BuildArtifactFileBaseName}.map" -Wl,--gc-sections -static --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wl,--start-group -lc -lm -Wl,--end-group Command line pattern: ${COMMAND} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS} stm32f401ccu6.elf STM32F401CCUX_FLASH.ld -
Некорректно выразился, мне нужен размер моей прошивки, которая содержится в hex файле
-
может быть вы правы, но я пока не хочу сдвигать всю прошивку на 8 байт, и править стартовый адрес в линкере
-
Положу по адресу в конец флешки рядом с размером прошивки, а затем сама stm залезет в конец флешки, возьмет размер оттуда, посчитает по нему crc, и сравнит его с тем, что хранится в конце флешки
-
Написал такой код для awk BEGIN{ FS="" #каждый новый символ это новое поле данных } { if ($8 == 0 && $9 == 0) # 00 - запись содержит данные двоичного файла { # прибавляем поле длины к общему размеру size += (($2 * 10) + $3) } } END{ print "size of data in HEX file: "size" Byte" } Вырезал несколько строк из hex файла, и протестировал на них, что бы проверить правильность. Выдает размер 60 байт, получается правильно считает размер :203FA0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 :203FC0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 :203FE0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 @dimka76, если мой способ не выгорит, попробую ваш
-
@esaulenka, спасибо за предостережение, а можете поделиться, кодом, которым вы считали размер hex файла, потому что я так и не смог
-
@esaulenka, спасибо за развернутый ответ, srec мне не понравился, нечитаемая документация, с горем пополам рассчитал CRC. Я прислушался к одному из ответов и начал использовать awk. Смог посчитать размер, написав простенький код, завтра приложу, как это сделал. Сейчас хочу и расчет CRC прописать в этом же скрипте. Пока для проблемой является, как записать полученный размер и crc в определенный адрес в hex файле. Прошивка заканчивается по адрес 0x23xxx, а записать crc и размер надо в конец флешки, 0xFFFF8 и 0xFFFFC соответственно, что бы потом stm могла залезть по этому адресу и вычитать оттуда размер, посчитать crc и сравнить его с тем результатом, что лежит во флешке
-
Разбираюсь с awk, мощная штука, спасибо за совет, но пока не очень понятно, как определить размер hex файла. Моя первая мысль была т.к. awk ходит по строкам, посчитать их количество и получить размер прошивки, но не получилось, т.к. данные хранятся не в ровном столбике. testfile: { i++ } END{ print i } console: awk -f testfile /projectName.hex Есть советы как это можно сделать, так что бы работало?