Не удается прошить устройство ARM — & quot; Файл Intel Hex не начинается с ‘:’ & quot;

У меня есть кодовая база, которая отлично работает с arm-none-eabi-gcc. Я хотел сохранить большинство моих исходных файлов на C при добавлении C ++. У меня были некоторые проблемы с компиляцией, но в конце концов, казалось, что он успешно скомпилирован для моего устройства (Atmel ATSAMG55).

Однако, когда я иду, чтобы прошить устройство в студии Atmel, я получаю ошибку

The Intel Hex file does not start with ':'

Обратите внимание, я просто программирую это с помощью программиста / отладчика Atmel ICE и студии Atmel. Я компилирую через arm-none-eabi-gcc и arm-none-eabi-g ++ и специальный файл make.

Я открыл шестнадцатеричное средство просмотра моего вывода .hex, чтобы найти в основном 0x00000000, но немного «реальных» данных в начале и конце. Изображения ниже.

Верх шестнадцатеричного файла

Нижняя часть шестнадцатеричного файла

Ясно, что если бы процесс компиляции происходил правильно, он не был бы в основном 0x00000000. Тем не менее, без каких-либо ошибок компилятора я немного застрял на том, с чего начать. Ниже приведена выдержка из «ядра» моего файла make.

all: $(TARGET)# Create binary from object files and external libraries
$(TARGET): $(OBJECTS_C) $(OBJECTS_CXX) $(S_SRCS)
@mkdir -p $(dir $@)
$(CXX) $(CXXFLAGS) $(C_INC) -T$(LDFILE) $(LFLAGS) -o $@
$(TOOLCHAIN)-objcopy -O binary $@ $(basename $@).binout/$(PLATFORM_MCU)/obj/%.o: %.cpp
@mkdir -p $(dir $@)
$(CXX) $(CXXFLAGS) $(C_INC) -o $@ -c $<

-include $(DEP_CXX)

out/$(PLATFORM_MCU)/obj/%.o: %.c
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) $(C_INC) -o $@ -c $<

-include $(DEP_C)

.PRECIOUS: $(PRECIOUS).PHONY: all cleanclean:
rm -rf $(CLEAN)

Большая часть того, что выше, это определение переменных и установка флагов. Я относительно уверен в этом, поскольку это работало нормально с чистым C. Только когда я добавил второй набор зависимостей объект / источник, у меня начались проблемы.

Кто-нибудь видел проблему с компиляцией, подобную этой, и есть какие-либо сведения о том, с чего начать отладку? Спасибо!

0

Решение

  • Из полученного сообщения об ошибке ваш инструмент программирования ожидает файл в формате Intel Hex.
  • Файл, который вы предоставляете в шестнадцатеричном дампе, не может быть файлом в формате Intel Hex, так как этот формат использует кодировку ASCII.
  • Вы предоставили снимки экрана с файлами в формате ELF:
    первые байты:

    00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 | .ELF ………… |

  • Ваш make-файл, кажется, производит двоичный файл, в то время как вам нужен
    файл в формате Intel Hex:

$ (TOOLCHAIN) -objcopy -O бинарный $ @ $ (базовое имя $ @). Bin

Поэтому вам, вероятно, нужно добавить следующую строку сразу после приведенной выше:

$ (TOOLCHAIN) -objcopy -O ihex $ @ $ (базовое имя $ @). Ihex

Полученный файл (.ihex) должен быть тем, который будет использоваться с вашим инструментом программирования.

0

Другие решения

Похоже, проблема возникла из-за неправильных флагов. Я знаю ранее, что упомянул, что было бы справедливо предположить, что флаги были правильными. Я больше не думаю, что это было правдой. После изменения флагов (и обновления некоторых аппаратных файлов для распознавания жестких дисков с плавающей точкой), похоже, все работает. Спасибо всем, кто помог мне.

0

По вопросам рекламы [email protected]