您好!
我正在尝试使用、建立一个 TMS570开发板、并且我遇到了 TI-arm-clang 编译器/汇编器/连接器的字节序问题。 我将在命令行上编译一个简单的 hello world 程序。 我将使用以下选项进行构建(省略了路径等内容):
编译器:tiarmclang.exe -c -o startup-o -mcpu=cortex-R4 -mfloat-abi=hard -mfp=vfpv3-d16 -std=c+14 -fno-rtti -fno-exceptions -O0 -Wall -werror -g startup.cpp
汇编器: tiarmclang.exe -c -o entry.o -mcpu=cortex-R4 -mfloat-abi=hard -mfpu=vfpv3-d16 -Xassembler --fatal-warnings entry.s
链接器: tiarmclang.exe -v -mcpu=cortex-r4 -mffloat-abi=hard -mfp=vfpv3-d16 -xlinker --output_file=test.tms570LS1227.ti.out -xlinker --map_file=test.tms570LS1227.ti.map startup.o entry.o test.tms570LS1227.ti.cmd
Hexer: tiarmhex.exe --outfile test.tms570LS1227.ti.hex --intel --romwidth=32 --memwidth=32 test.tms570LS1227.ti.out
当我尝试使用.hex 文件通过 CCS 刷写开发板时、可以加载、运行和调试程序(尽管没有调试符号)。 当我尝试使用.out 文件通过 CCS 刷写 DEV 板时、收到一个错误、提示.out 文件的字节序和目标的字节序不匹配(请参阅下文)。
当我转储.out 文件的文件头时、 对象 dumper 会将.out 读取为一个小端字节序文件。
当我尝试将 -mbig-endian 标志添加到编译器、汇编器和链接器时、CCS 能够正确刷写、但程序会立即崩溃。 检查调试器中的代码会发现指令已全部进行了端字节序交换。 在下图中、0x00处的指令应该是一个到入口点指令的分支、而不是一段数据。
此时、我不确定我的构建设置是否有问题、或者编译器是否错误地向.out 文件添加了小端字节序标志。