This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我正在尝试使用、建立一个 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 文件添加了小端字节序标志。
Jagadish、您好!
感谢您的回复! 很遗憾、我认为您的解决方案不会起作用。 您的示例 似乎使用旧版 TI-ARM 编译器。 当我切换到 TI-ARM-CLANG 编译器时、一切开始崩溃。 当我尝试复制您通过 TI-arm-clang 编译器执行的操作时、构建失败。 我看了 CCS 是如何调用编译器的、在我看来、缺少一些参数 请参阅屏幕截图并附带 zip 文件、以了解有关我如何尝试复制建议的解决方案的更多详细信息。
我的理解是、CCS 中的编译设置只是传递给编译器和链接器(我认为 CCS 实际上并不会构建 任何东西、gmake 在幕后进行操作、CCS 会解析编译器和链接器输出)。 为了简化问题并消除 CCS 作为可能的原因、我将尝试仅使用编译器、汇编器和链接器在命令行上进行构建。 我将仅使用 CCS 进行刷写和调试。
当我切换到 TI-arm-clang 编译器时,事情就开始崩溃了。
CCS 11.1中的信息对于使用 TI Clang 编译器的 TMS570LC4357项目、不再支持正确的 be32器件字节序是否 有帮助?
解决方法是 在链接器选项中添加"-wl,--be32"。
在调查 TMS570LC4357:使用 也是 BE32器件的 TI Arm Clang 编译器时发现。