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.

[参考译文] TMS570LS3137:CLion集成

Guru**** 2568565 points
Other Parts Discussed in Thread: UNIFLASH, TMS570LS3137, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1097336/tms570ls3137-clion-integration

部件号:TMS570LS3137
主题中讨论的其他部分:UNIFLASH,, HALCOGEN

您好,

我正在尝试将TMS570LS3137开发与CLion集成,因为使用任何基于Eclipse的IDE都会让我抓狂。 我已经成功地基于CCS生成的Makefile,应用程序版本和链接创建了CMakeLists.txt (这就是CLion所说的),但是它不工作-使用Uniflash刷新生成的.out文件后没有任何反应,此外,在关闭电源后重启后,红色错误LED指示灯亮起(在HDK上)。 使用CCS构建的相同应用程序按预期工作。 我正在附上我的样例项目,它可以通过CLion和CCS打开。 如果有任何帮助,我将不胜感激,我已经在这一问题上挣扎了两天。

e2e.ti.com/.../led_2D00_blinky.zip

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

    您好,Bartosz,

    CLion是否使用与CCS11相同的ARM编译器和编译/链接器设置?

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

    QJ Wang,您好!

    是的,CLion指向相同的TI CGT ARM编译器,但是我必须创建自定义编译器(请检查附加的custom_compiler.YAML文件)。 生成的Makefile标志如下所示:

    -mv7R4 --code_state=32 --float_support=VFPv3D16 -g --diag_warning=225 --diag_wrap=off --display_error_number --enum_type=packed --abi=eabi -z -m"led-blinky.map" --heap_size=0x800 --stack_size=0x800 -i"/Applications/ti/ccs1110/ccs/tools/compiler/ti-cgt-arm_20.2.5.LTS/lib" -i"/Applications/ti/ccs1110/ccs/tools/compiler/ti-cgt-arm_20.2.5.LTS/include" --reread_libs --diag_wrap=off --display_error_number --warn_sections --xml_link_info="led-blinky_linkInfo.xml" --rom_model --be32 -o "led-blinky.out" $(ORDERED_OBJS)

    CLion使用CMake,因此编译器和链接器阶段之间的分隔要稍微分开,但我认为我准确地复制了它们:

    add_compile_options(-mv7R4 --code_state=32 --float_support=VFPv3D16 -g --diag_warning=225 --diag_wrap=off --display_error_number --enum_type=packed --abi=eabi)
    include_directories(include user)
    include_directories(${TOOLCHAIN_PATH}/include)
    include_directories(${TOOLCHAIN_PATH}/lib)
    add_link_options(--stack_size=0x800 --heap_size=0x800 -i${TOOLCHAIN_PATH}/lib -i${TOOLCHAIN_PATH}/include --reread_libs --diag_wrap=off --display_error_number --warn_sections --xml_link_info=led-blinky_linkInfo.xml --rom_model --be32 ${CMAKE_SOURCE_DIR}/source/sys_link.cmd -l${TOOLCHAIN_PATH}/lib/rtsv7R4_T_be_v3D16_eabi.lib)

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

    我谨附上CLion和CCS汇编的产出,以供记录在案。

    e2e.ti.com/.../clion_5F00_verbose_5F00_output.txte2e.ti.com/.../ccs_5F00_verbose_5F00_output.txt

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

    看起来就像用 CLion + ARM编译器编译项目一样。  

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

    我不明白你的观点。 我的步骤:

    1.基于HALCoGen生成的文件在CCS中创建项目

    2.在sys_main.c中增加了简单的LED闪烁

    3.使用CCS进行构建和闪存-一切正常

    4.基于CCS生成的Makefile创建CMakeLists.txt

    5.将项目导入CLion

    6.使用CLion构建和刷新-应用程序不工作

    7.返回CCS,删除了CLion创建的工件,清理了项目

    8.使用CCS进行构建和闪存-一切正常

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

    我误解了。 您是否比较了CCS和CLion生成的地图文件? 您可以生成十六进制文件并比较两个十六进制文件。

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

    这是一个好主意,我之前没有想过。 生成的十六进制文件略有不同,但生成的地图文件对我来说完全不同,主要区别以及应用程序不工作的原因是指向不同位置的入口点! 您是否知道为什么会发生这种情况? 我正在封闭记录的diff文件(diff中的第一个文件是来自CCS的输出).e2e.ti.com/.../hex.diffe2e.ti.com/.../map.diff

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是3137是指向406.7538万指向不同406.7538万不同位置的入口点! 您是否知道为什么会发生这种情况?[/QUOT]

    我不知道为什么相同的编译/链接设置会在地图文件中生成不同的内存映射。  

    您是否可以在 Clion IDE或CCS IDE中加载CLion IDE生成的输出文件并打开反汇编窗口,然后进入c_int00()函数以查找代码执行被卡住的位置?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    3137 /4067538#4067538"]这406.7538万这是406.7538万是个好主意,我之前没有想过。 生成的十六进制文件略有不同,但生成的地图文件对我来说完全不同,主要区别以及应用程序不工作的原因是入口点指向不同的位置!

     _c_int00入口点的绝对地址不同,其本身不应导致程序无法运行。 sys_intvecs.asm源文件应将 _c_int00入口点的地址放入重置向量:

    ;-------------------------------------------------------------------------------
    ; interrupt vectors
    
    resetEntry
            b   _c_int00
    

    [报价用户id="51.632万]000066f0  000066f00.0066万 000066f0  000008000.0066万 00000800  000000000.0008万 00000000  rw-0万 rw-.stack[/quot]0万.stack[/quot]

    我认为CLion版本中的映射文件条目看起来可疑 -链接程序已将读/写的.stack部分放在闪存中,该部分为只读。 当正在运行的程序尝试写入.stack部分时,它将无法写入。

    查看链接器命令行,CLion Build缺少CCS Build中存在的以下参数:

    -mv7R4 --code_state=32 --float_support=VFPv3D16 -g

    这也许是为什么CLion版本创建的可执行文件不起作用的原因。

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

    @王庆杰

    在两个IDE中进行调试会导致程序在0x0或0x4处卡住。

    @Chester Gillon

    根据ARM TI编译器和链接器用户指南,您提到的标志仅指定用于编译器。 链接器标志是在"-z"标志后提供的标志。 请注意,CLion单独运行编译器和链接器阶段(使用armcl的--compile_only和--run_linker标志)。 我尝试将这些标志添加到链接器阶段,但它以“xxx flag not recognized”警告结束,这是可疑的。

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

    您好,Bartosz,

    您是否对ECC进行编程?

    CCS有一个选项可在加载代码至闪存时生成ECC。

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

    如果Clion在加载代码时不支持"Auto ECC Generation"(自动ECC生成),则可以使用链接器cmd为代码生成ECC。

    请参阅此应用说明:

    https://software-dl.ti.com/hercules/hercules_docs/latest/hercules/How_to_Guides/HowToGuides.html

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

    以下是我使用TMS570LS31x器件的链接器cmd文件生成ECC的示例:

    e2e.ti.com/.../8037.sys_5F00_link.cmd

    要启用ECC生成,请将以下标志添加到您的链接命令:

     --ecc=开

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

    我花了一些时间挖掘和重新配置我的CMakeList。 该问题与链接阶段中无效的参数顺序有关,链接程序库应位于链接对象之后,而不是位于链接对象之前。 更改顺序后一切正常。 此问题与ECC生成无关,因为我使用DSLite进行刷新,并启用了自动ECC生成选项。

    这是一个工作项目: https://github.com/hippiefm/tms570ls3137-clion-led-blinky

    我现在在使用OpenOCD进行调试时遇到一些问题,但这是另一个主题。

    非常感谢你们的帮助,非常感谢!

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

    很好地知道您已使项目正常工作。 谢谢