У меня есть кодовая база, которая отлично работает с 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. Только когда я добавил второй набор зависимостей объект / источник, у меня начались проблемы.
Кто-нибудь видел проблему с компиляцией, подобную этой, и есть какие-либо сведения о том, с чего начать отладку? Спасибо!
Вы предоставили снимки экрана с файлами в формате 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) должен быть тем, который будет использоваться с вашим инструментом программирования.
Похоже, проблема возникла из-за неправильных флагов. Я знаю ранее, что упомянул, что было бы справедливо предположить, что флаги были правильными. Я больше не думаю, что это было правдой. После изменения флагов (и обновления некоторых аппаратных файлов для распознавания жестких дисков с плавающей точкой), похоже, все работает. Спасибо всем, кто помог мне.