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.

[参考译文] CCS/TMS320F28335:CCS 中存在 C++代码错误

Guru**** 2589280 points
Other Parts Discussed in Thread: C2000WARE, CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/747014/ccs-tms320f28335-c-code-error-in-ccs

器件型号:TMS320F28335
Thread 中讨论的其他器件:C2000WAREcontrolSUITE

工具/软件:Code Composer Studio

大家好!

希望这对您很好。

我有一个基于"C"语言的有效 TI-RTOS 项目、其中有多个源代码和头文件。 现在、我必须将其转换为基于对象定向编程的代码。

 我尝试在代码中创建一个模块类。 为此、我添加了一个扩展名为.cpp 的新源代码文件及其扩展名为.HPP 的头文件。 问题是当我在.cpp 文件中创建一个类时、它运行良好、我也可以创建其对象、但当我尝试在.HPP 文件中创建类时、它会给出以下错误:  

#20标识符"class"未定义 SoC.hpp  
66期望得到一个";" SoC.hpp  
gmake:***[BMSmain.obj]错误1
gmake:目标"全部"不会由于错误而重新生成。

当我创建这样的类时:

#include "DSP2833x_Device.h"

#ifndef SOC_HPP_
#define SOC_HPP_

CLASS SoC{
专用:
双精度型 DT;
无符号长整型差动;

公共:
Soo();
~soc ();
void estateSoC (Battery_Data **数据);
};

#endif // SOC_HPP_*/

我还使用了包装函数从 C 代码调用此类中定义的任何函数。  

我使用的工具包括:

  • CCS 8.1.0
  • 编译器:TI v18.1.0.LTS
  • C2000Ware 1.0.5.00
  • TI-RTOS 2.16.1.14
  • xDAIS 7.21.1.07  
  • SYS/BIOS 6.73.1.01
  • XDCtools 3.50.8.24_core

第二个问题是、当我在.cpp 文件中定义任何 RTOS 任务或时钟函数时、它会给出以下错误:

  • #10010 null:链接期间遇到错误;未构建"MBMS_0v1_021118_CPP_F28335.out"
  • #10234-D null:未解析的符号仍保留
  • Gmake:***[MBMS_0v1_021118_CPP_F28335.OUT]错误1.
  • gmake:目标"全部"不会由于错误而重新生成。
  • 未解析的符号_Clk_Fxn、首先在 C:\Users\Assad\workspace_v8\MBMS_0v1_021118_CPP\MBMS_F28335\configPkg\package\ccfg\app_F28335_p28fp.o28FP 中引用
  • 未解析的符号_EEPROMwriteTask_regivaled、首先在 C:\Users\Assad\workspace_v8\MBMS_0v1_021118_CPP\MBMS_F28335\configPkg\package\ccfg\app_F28335_p28fp.o28FP 中引用
  • 未解析的符号_IdleTask、首先在 C:\Users\Assad\workspace_v8\MBMS_0v1_021118_cpp\MBMS_F28335\configPkg\package\ccfg\app_F28335_p28fp.o28FP 中引用

是否有其他方法可以这样做?  如果是、请提出建议。

请帮助我解决这个问题。

非常感谢您的回复。  

非常感谢您的善意考虑。

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

    编译器使用文件扩展名来决定源文件是包含 C 代码还是 C++代码。  通常、.c 表示 C 代码、.cpp 表示 C++代码。  但这仅适用于编译器在命令行上看到的文件。  它适用于以#include 显示的头文件 ,例如,以下情况并非如此...

    /*情况不是这样工作的*/
    #include "cpp_header.hPP"/* C++*/
    #include "c_header.h" /* C *// 

    如何管理如何编译包含文件?  包含源文件的扩展名。  file.cpp 中包含的头文件编译为 C++。  file.c 中包含的相同头文件编译为 C。 头文件的文件扩展名不会影响任何内容。

    所以这个...

    [引用 user="Assad Mahmood67"]#20标识符"类"未定义 SoC.hpp  
    #66预期会有一个";" SoC.hpp  [/quot]

    (笑声) 可能是由头文件引起的,该头文件的 C++代码包含在扩展名为.c 的文件中。   

    [引用 user="Assad Mahmood67"]未解析的符号_Clk_Fxn

    此错误的常见原因... 函数 Clk_Fxn 在 C++文件中定义、但没有 extern "C"限定符。  有关此问题以及其他类似问题的更多信息、请参阅 常见问题解答( 不是来自 TI)的集合、了解如何混合使用 C 和 C++代码。

    谢谢、此致、

    乔治

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

     George 您好:

    非常感谢您的回复。 您的回复对我很有帮助、它解决了我的编译错误问题。  

    但是、现在我在代码编译之后面临另一个问题、即我收到警告

    "正在将数据写入自动生成的文件空:正在将数据写入自动生成的文件"  

    现在、当我对芯片进行编程/调试代码时、它既不会显示正在对代码进行编程、也不会显示在程序加载之前正在擦除闪存扇区、它还会禁用调试窗口中的代码播放和暂停按钮。  

    这对我来说很奇怪。

    请在这个问题上帮助我。

    代码编译/编译后、控制台末尾将显示以下内容:

    构建目标:"MBMS_0v1_021118_CPP_F28335.OUT"
    调用:C2000链接器
    "c:/ti/ccsv8/tools/compiler/ti-cgt-c2000_18.1.2.LTS/bin/cl2000 -v28 -ml -mt -off --advice:performance=all -define=XDC__strict -g -diag_warning=225 --diag_wrap=off -display_error_number -z -m"MBMS_0v1_021118_cpp_f28335.map"/ti/c2000/C2000Ware_1_00_05_00/device_support/f28335/headers/include -heap_size=-exag_express-/ti/ccsv8/tools/compiler/ti-cgt-c2000_18.1.2.LTS/lib --intrack_caps=-display_info-display_it_ex--display_info-display-link_express--ines=-r161002-ine_display_linkg-cn_guid_guide-ines=-ines=-ine_display-inese-inese-inese-inese-inese-inese-inese-inese-inese-intrack-link_guid_guid_guid_guid_/ti/ccsv8/tools/compiler/ti-cgt-c2000_18.1.2.LTS/include rom_model -o "MBMS_0v1_021118_CPP_F28335.out"./adc_Control.obj "./bms_Control.obj "./BMSmain.obj "./Balancing.obj "./batter.obj 1./contact./dsp2833x"/filter.control"/mobj 1.s/mobj /ControlAPIs/RealtimeParameter.obj /ApplicationLayer/application.obj。 l"C:/ti/controlSUITE/libs/math/IQmath/v160/lib/IQmath_fpu32.lib -lrts2800_fpu32.lib

    已完成构建目标:"MBMS_0v1_021118_CPP_F28335.OUT"

    构建文件:"MBMS_0v1_021118_CPP_F28335.out"
    调用:C2000十六进制实用程序
    "c:/ti/ccsv8/tools/compiler/ti-cgt-c2000_18.1.2.LTS/bin/hex2000 "-o "MBMS_0v1_021118_CPP_F28335.hex""MBMS_0v1_021118_CPP_F28335.out"
    正在转换为扩展 Tektronix 格式...
    "MBMS_0v1_021118_CPP_F28335.out".text =>.text
    "MBMS_0v1_021118_CPP_F28335.out".econst =>.econst
    "MBMS_0v1_021118_CPP_F28335.out".cinit =>.cinit
    "MBMS_0v1_021118_CPP_F28335.out" ramfuncs => ramfuncs
    "MBMS_0v1_021118_CPP_F28335.out".switch =>.switch
    "MBMS_0v1_021118_CPP_F28335.out" IQmath => IQmath
    "MBMS_0v1_021118_CPP_F28335.out" codestart => codestart
    警告:正在将数据写入自动生成的文件
    MBMS_0v1_021118_CPP_F28335.x01
    完成构建:"MBMS_0v1_021118_CPP_F28335.OUT"

    ****构建完成****