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.

[参考译文] TMS570LS1227:使用 ti-arm-clang 进行编译时出现问题

Guru**** 657500 points
Other Parts Discussed in Thread: TMS570LS1227
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1254425/tms570ls1227-issues-compiling-with-ti-arm-clang

器件型号:TMS570LS1227

您好!

我正在尝试使用、建立一个 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 文件添加了小端字节序标志。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    忘记添加我使用的是 TI-Arm-Clang 3.1.0版。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    TMS570LS1227是一个大端字节序器件、

    因此、只需尝试执行以下操作:

    在 CCS 中、右键点击工程并打开工程属性

    2.现在在"CCS General"中,确保突出显示的

    如果这些设置正确、则应以大端字节序格式生成.out。

    --

    谢谢。此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jagadish、您好!

    感谢您的回复!  很遗憾、我认为您的解决方案不会起作用。  您的示例 似乎使用旧版 TI-ARM 编译器。  当我切换到 TI-ARM-CLANG 编译器时、一切开始崩溃。  当我尝试复制您通过 TI-arm-clang 编译器执行的操作时、构建失败。  我看了 CCS 是如何调用编译器的、在我看来、缺少一些参数 请参阅屏幕截图并附带 zip 文件、以了解有关我如何尝试复制建议的解决方案的更多详细信息。

     e2e.ti.com/.../5125.test.zip

    我的理解是、CCS 中的编译设置只是传递给编译器和链接器(我认为 CCS 实际上并不会构建 任何东西、gmake 在幕后进行操作、CCS 会解析编译器和链接器输出)。  为了简化问题并消除 CCS 作为可能的原因、我将尝试仅使用编译器、汇编器和链接器在命令行上进行构建。  我将仅使用 CCS 进行刷写和调试。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当我切换到 TI-arm-clang 编译器时,事情就开始崩溃了。

    CCS 11.1中的信息对于使用 TI Clang 编译器的 TMS570LC4357项目、不再支持正确的 be32器件字节序是否 有帮助?

    解决方法是 在链接器选项中添加"-wl,--be32"。

    在调查 TMS570LC4357:使用 也是 BE32器件的 TI Arm Clang 编译器时发现。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Chester、

    这似乎是可行的!  我的错误是假设 clang 会将-mbig_endian 选项传递给链接器。  我在链接行中添加了-xlinker --be32,解决了问题。  感谢您的帮助!