Что делают шестнадцатеричные записи Intel типа 03 или 05 в программе iHex?
Тип записи 03: Адрес начального сегмента Для процессоров 80x86 указывает начальное содержимое регистров CS:IP. Поле адреса — 0000, количество байтов — 04, первые два байта — значение CS, последние два — значение IP.
Тип записи 05: Начальный линейный адрес Поле адреса — 0000 (не используется), количество байтов — 04. Четыре байта данных представляют собой 32-битное значение, загруженное в регистр EIP ЦП 80386 и выше.
Имеют ли они смысл для программы ARM?
Всякий раз, когда я генерирую .hex для программирования встроенного ARM, окончание выглядит примерно так:
:10851400B4040020BC040020BC040020C4040020D7
:10852400C4040020CC040020CC040020D404002087
:10853400D4040020DC040020DC040020E404002037
:10854400E4040020EC040020EC040020F4040020E7
:10855400F4040020FC040020FC040020FFFFFFFFC3
:048564000000020011
:0400000508002910B6
:00000001FF
Я отредактировал приложение для программирования, чтобы игнорировать эту запись, и только сегодня коллега сообщил, что его компилятор создал запись типа 03 в предпоследней строке, что помешало программировать MPU.
Почему objcopy создает эти записи? Могу ли я запретить ему это делать?
Соответствующие строки Makefile:
FORMAT = ihex
OBJCOPY = arm-elf-objcopy
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) $< $@