c++ - 无法刷写 ARM 设备 - “英特尔 Hex 文件不以 ':' 开头”
问题描述
我有一个与 arm-none-eabi-gcc 配合良好的代码库。我想在添加 C++ 时将大部分源文件保留在 C 中。我在编译时遇到了一些问题,但最终似乎为我的设备(Atmel ATSAMG55)成功编译。
但是,当我在 Atmel Studio 中刷机时,出现错误
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 $@).bin
out/$(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 clean
clean:
rm -rf $(CLEAN)
上面的大部分内容是变量定义和设置标志。我对此比较有信心,因为这在纯 C 中运行良好。只有当我添加第二组对象/源依赖项时,我才开始遇到问题。
有没有人看到过这样的编译问题并对从哪里开始调试有任何意见?谢谢!
解决方案
看起来问题源于不正确的标志。我知道我之前提到过假设标志是正确的可能是公平的。我不再认为那是真的。在更改标志(并更新一些硬件特定文件以识别硬浮动 abi)之后,它似乎正在工作。感谢所有帮助过我的人。
推荐阅读
- android - Retrofit+Gson+RxJava 解析失败时抛出错误
- unity3d - 跟随教程时发现代码已过时 - Unity 中的 ARCore 简介
- r - 是否可以将 ggplot 图例与 plotly 图例结合起来,使它们等效?
- java - 即使场景的大小发生变化,如何将节点设置为场景坐标 [0, 0] [JavaFX]
- flask - Heroku、Flask 和散景
- php - 如何使用分隔符显示我的 sqlite 查询
- python - 类型列表中的 typing.Tuple
- ios - 使用 scaleEffect 时如何获取点击位置
- c - STM32 - 指针和求和
- mysql - 在 Laravel7 中从 Mysql 表中删除重复记录