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.

[参考译文] CODECOMPOSER:C2000 CPP 器件支持

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1042804/codecomposer-c2000-cpp-device-support

器件型号:CODECOMPOSER
主题中讨论的其他器件:C2000WARE

器件:F29379D
CCS:版本:10.2.0.00009
编译器:TI v21.6.0.LTS

所有、

有人能向我介绍一些有关如何将提供的 C2000器件支持与 CPP 配合使用的文档吗?

C2000ware 上的当前版本提供了 pragma 和指针转换错误。

通过 Google 和这些论坛搜索类似问题会导致链接已过期。

感谢您提供任何信息!  谢谢。

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

    尊敬的 William:

    请告诉我、这是否正确理解了这种情况-您有一个项目、其中包含您自己的.cpp 源文件、其中包括 C2000Ware 中上述器件的.h 文件、并且您正在运行到编译器错误中。

    请 您能否发布特定错误消息。  

    谢谢、
    Ashwini

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

    80/20规则! 我明白了。 我的项目是我要转换的 C 和 C++的混合项。

    "-CPP_DEFAULT"参数似乎会破坏 C2000Ware 的功能。

    链接器错误是 C 和 C++文件的伪影、包括具有外部函数原型的头文件。  编译器是否改编了函数名称(CPP)基本上存在竞态条件(C)。

    通常、我通过从 H 文件中删除 extern 函数原型并将其放在需要它们的 CPP 文件的顶部来修复此问题。  这是一个混乱的问题、但在转换结束之前是一个临时修复。

    是否有任何相关文档? 或者专门转换为 C++?

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

    尊敬的 William:

    感谢后续行动。 我将与团队核实并告知您。

    谢谢、
    Ashwini

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="88556" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1042804/codecomposer-c2000-cpp-device-support/3857910 #3857910"]编译器是否改编了函数名称(CPP)基本上存在竞争条件。

    导入 CCS 10.4后、示例 C2000Ware (3.04.00.00)-> English -> Devices -> F2837XD -> F28379D -> Examples -> Driverlib -> CPU1 -> LED_ex1_blinky

    在最初将示例源文件 LED_ex1_blinky.c (C)重命名 为 led_ex1_blinky.cpp (C++)后、出现链接器错误、这将是由于名称改编:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Building target: "led_ex1_blinky.out"
    Invoking: C2000 Linker
    "/home/mr_halfword/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/bin/cl2000" -v28 -ml -mt --cla_support=cla1 --float_support=fpu32 --tmu_support=tmu0 --vcu_support=vcu2 -Ooff --define=CPU1 --diag_suppress=10063 --diag_warning=225 --diag_wrap=off --display_error_number --abi=eabi -z -m"led_ex1_blinky.map" --stack_size=0x100 --warn_sections -i"/home/mr_halfword/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/lib" -i"/home/mr_halfword/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/include" --reread_libs --diag_wrap=off --display_error_number --xml_link_info="led_ex1_blinky_linkInfo.xml" --entry_point=code_start --rom_model -o "led_ex1_blinky.out" "./led_ex1_blinky.obj" "./device/F2837xD_CodeStartBranch.obj" "./device/device.obj" "../2837xD_RAM_lnk_cpu1.cmd" "/home/mr_halfword/ti/C2000Ware_3_04_00_00_Software/driverlib/f2837xd/driverlib/ccs/Debug/driverlib.lib" -llibc.a
    <Linking>
    undefined first referenced
    symbol in file
    --------- ----------------
    Device_init() ./led_ex1_blinky.obj
    Device_initGPIO() ./led_ex1_blinky.obj
    error #10234-D: unresolved symbols remain
    error #10010: errors encountered during linking; "led_ex1_blinky.out" not built
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    在采用 led_ex1_blinky.cpp 封装的 C2000Ware 中、extern "C"块中包含:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    //
    // Included Files
    //
    extern "C" {
    #include "driverlib.h"
    #include "device.h"
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    更改后、示例成功链接。

    [引用 userid="88556" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1042804/codecomposer-c2000-cpp-device-support/3857910 #3857910"]通常、我通过从 H 文件中删除 extern 函数原型并将其放在需要它们的 CPP 文件的顶部来解决此问题。  这是一个混乱的问题、但在转换结束之前是一个临时修复。

    将任何 C2000Ware 包含在 C++源文件中的 extern "C"块中、这可能是一种更简单的解决方法。

    不确定是否有任何计划使 C2000Ware 包含文件使用 #ifdef _cplusplus extern "C" 来简化从 C++调用 C2000Ware 函数。 请参阅 将#ifdef _cplusplus extern "C"添加到所有.h、以启用从 C++进行调用 、了解来自不同工程的一些背景信息。

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

    切斯特、

    感谢您一如既往的高质量响应。

    即使使用 extern "C"包装程序(我应该已经说明我确实这么做了)、我也得到了链接器错误。  我在链接器设置中启用了一个选项、以不对控制台错误转储中的函数调用进行去混合、这样我就可以看到它是对中断的函数的 C (正常)还是 CPP (已改编)引用。

    我在调试语义模式中、因此在这里可能出了问题、但我认为问题是这样的:

    我有一个 CPP 文件从另一个 CPP 文件调用函数、但 extern 定义位于 H 文件中、该文件包含在一组文件中、一些 C 和一些 CPP 中。 将其从该文件中删除、以便仅在 CPP 文件中列出、从而修复了它。  就像我说的那样、这是一件混乱的事情。

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

    你(们)好

    Chester 和 William、

    感谢上述详细答复。 该团队报告说、C2000Ware 未经过 C++测试。 我会 将这些 观察结果通知 C2000Ware 团队。

    William、

    您目前是否已解除封锁或仍面临问题?

    谢谢、
    Ashwini

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

    是的、它目前可以正常工作。