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.

[参考译文] TMS320F2800157:f280015x 接头的 C2000Ware 问题

Guru**** 2860250 points

Other Parts Discussed in Thread: C2000WARE, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1632618/tms320f2800157-c2000ware-issue-with-f280015x-header

器件型号: TMS320F2800157
Thread 中讨论的其他器件: C2000WARESysConfig

您好、

我将 C2000Ware 标头用作 5.04 和 26.0 版本的一部分。  当我包含标头路径时、 我得到:

“C:\ti\c2000\C2000Ware_26_00_00\device_support\f280015x\headers\include\f280015x_lin.h“、第 236 行:错误#41:需要一个标识符

编译器在下面的 IDLE 中进行置换。  我在 5.4 上编辑了这个文件的副本,将 IDLE 更改为 IDLE1。  现在我已经升级到 25.0、我又能看到它。  是否有修复、而不是手动编辑?

我认为我不需要这个文件、发现它包含在 f280015x_device.h 中  我发现定义 __TMS320C28XX_CLA__可以绕过 f280015x_LIN.h 的 include、但无法在没有收到错误的情况下定义它。

如有任何建议、将不胜感激。  

struct SCIFLR_BITS {                    // bits description
    bp_16 BRKDT:1;                      // 0 Break-detect Flag (SCI compatible mode)
    bp_16 WAKEUP:1;                     // 1 Wake-up Flag
    bp_16 IDLE:1;                       // 2 SCI receiver in idle state (SCI compatible mode)
    bp_16 BUSY:1;                       // 3 Busy Flag
    bp_16 TIMEOUT:1;                    // 4 LIN Bus IDLE timeout Flag (LIN only)
    bp_16 rsvd1:1;                      // 5 Reserved
    bp_16 TOAWUS:1;                     // 6 Timeout After Wakeup Signal Flag (LIN only)
    bp_16 TOA3WUS:1;                    // 7 Timeout After 3 Wakeup Signals Flag (LIN only)
    bp_16 TXRDY:1;                      // 8 Transmitter Buffer Ready Flag
    bp_16 RXRDY:1;                      // 9 Receiver Buffer Ready Flag
    bp_16 TXWAKE:1;                     // 10 SCI Transmitter Wakeup Method Select
    bp_16 TXEMPTY:1;                    // 11 Transmitter Empty Flag
    bp_16 RXWAKE:1;                     // 12 Receiver Wakeup Detect Flag
    bp_16 IDTXFLAG:1;                   // 13 Identifier On Transmit Flag (LIN only)
    bp_16 IDRXFLAG:1;                   // 14 Identifier on Receive Flag
    bp_16 rsvd2:1;                      // 15 Reserved
    bp_32 rsvd3:8;                      // 23:16 Reserved
    bp_32 PE:1;                         // 24 Parity Error Flag
    bp_32 OE:1;                         // 25 Overrun Error Flag
    bp_32 FE:1;                         // 26 Framing Error Flag
    bp_32 NRE:1;                        // 27 No-Response Error Flag (LIN only)
    bp_32 ISFE:1;                       // 28 Inconsistent Sync Field Error Flag (LIN only)
    bp_32 CE:1;                         // 29 Checksum Error Flag (LIN only)
    bp_32 PBE:1;                        // 30 Physical Bus Error Flag (LIN only)
    bp_32 BE:1;                         // 31 Bit Error Flag (LIN only)
};
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、John:

    您遇到的误差是 A 命名冲突 IDLE中的 bitfield 成员SCIFLR_BITS与 TMS320C28x 编译器环境中的保留关键字或宏定义冲突。 这是整个 C2000Ware 版本中持续存在的问题、5.04 至 26.0 之间未修复、因此手动IDLE → IDLE1编辑在每次升级时都会被清除。

    f280015x_lin.h是由自动导入f280015x_device.h的、这意味着即使您的项目没有 LIN 功能、它也会被编译。 目前、C2000Ware 26.00.00.00 中没有针对此特定冲突的官方 TI 补丁。

    创建一个、而不是直接编辑 TI 提供的文件 包装器标头 的文件#defineIDLE在解析 TI 标头之前使用重命名、#undef之后使用重命名。 这种方法与 TI 本身处理其他保留标识符的类似关键字冲突的方式是一致的。

    //在项目的包装器或预包含头文件中:
    #define IDLE IDLE_LIN
    #include “f280015x_lin.h"</s>“
    #undef idle_lin

    注意 — 如果在工具链中的其他位置定义为宏,则此重命名需要在该定义可见之前进行。  IDLE

    更简洁的方法是使用 强制包含/预包含文件 在编译器设置 (CCS:Project→Properties→C/C++ Build→Tool Settings→Predefined Symbols / Advanced) 中、因此全局应用重命名、而无需触摸任何 TI 文件。

    谢谢、

    IRA

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

    尊敬的 Ira:

    所介绍的内容是有意义的、但我不清楚具体的实现方式。   下面是我在 f280015x_lin.h 中提供的包含内容。

    #include “f280015x_device.h"</s>“
    我已经尝试使用#define /#undefine 对其进行约束、这会给我带来相同的错误。
    我使用的是 CCS 20.5、并且编译器设置不在提供的同一路径下。
    您能帮帮吗?
    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、John:

    CCS 20.5 的步骤如下:

    1.转到您的项目资源管理器,右键点击项目。

    2.1 请参阅“Properties"->"C2000 Compiler"->"Include“ Compiler"->"Include Options"“ Options"</s>“ ““

    2.2 请参阅“Properties"->"C2000 Compiler"->"Pre-defined“ Compiler"->"Pre-defined symbols"“ symbols"</s>“ ““

    3.将您的 inlcude 选项和预定义符号与示例 C:\ti\c2000\C2000Ware_x_xx_xx_xx\device_support\f280015x\examples\empty_bitfield 进行比较

    您能告诉我它们是否完全匹配吗?

    如果在添加包含路径后仍遇到错误、请共享 确切的错误消息 和您的 特定 F280015x 器件型号 (例如 F2800157 与 F2800156)有助于进一步缩小范围、特别是排除 LIN 可用性问题或路径变量误配置问题。

    谢谢、

    IRA

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

    尊敬的 Ira:

    我仍然不清楚如何使编译器绕过在 f280015x_lin.h 中进行拉取、 因为我使用的是以下内容:

    #include  “f280015x_device.h"</s>“

    empty_bitfield 工程和 MINE 工程之间存在一些细微差异。   Empty_bitfield 如下所示

    • ${COM_TI_C2000WARE_symbols}
    • CPU1

    我的项目:

    • ${SysConfig_tool_symbols}
    • ${COM_TI_C2000WARE_symbols}
    • 调试
    • _FLASH
    • LAUNCHXL_F2800157

    以下是我的一个文件的完整编译输出:

    C2000 编译器 — 构建文件:“../Source/XC_CPLD.c “
    “c:/ti/ccs2050/ccs/tools/compiler/ti-cgt-c2000_25.11.0.LTS/bin/cl2000 /Users/jtreubig/OneDrive /ti/C2000/C2000Ware_26_00_00_00/libraries/flash_api/f280015x/include/FlashAPI /ti/C2000/C2000Ware_26_00_00_00/libraries/math/FPUfastRTS/c28/include -v28 -ml -mt --float_support=fpu32 --tmu_support=tmu0 -off--include_path=“C:/ti/C2000/C2000Ware_26_00_00_00 /ti/C2000/C2000Ware_26_00_00_00/driverlib/f280015x/driverlib /ti/C2000/C2000Ware_26_00_00_00/device_support/f280015x/headers/source /Users/jtreubig/OneDrive ---include_path=“C:/Users/jtreubig/OneDrive /ti/ccs2050/ccs/tools/compiler/ti-cgt-c2000_25.11.0.LTS/include /ti/C2000/C2000Ware_26_00_00_00/device_support/f280015x/headers/include /Source/XC_CPLD.c
    [64]“C:\ti\c2000\C2000Ware_26_00_00_00\device_support\f280015x\headers\include\f280015x_lin.h“、第 236 行:错误#41:需要一个标识符
    [65]“C:\ti\c2000\C2000Ware_26_00_00_00\device_support\f280015x\headers\include\f280015x_lin.h“、第 236 行:错误#80:需要一个类型说明符
    [66]“C:\ti\c2000\C2000Ware_26_00_00_00\device_support\f280015x\headers\include\f280015x_lin.h“、第 236 行:错误#170:此处不允许函数类型
    [67]“C:\ti\c2000\C2000Ware_26_00_00_00\device_support\f280015x\headers\include\f280015x_lin.h“、第 236 行:警告#109-D:长度为 1 的有符号位字段
    在编译“../Source/XC_CPLD.c 时检测到 3 个错误。

    期待您的帮助、

    John

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

    您好、John:

    当您时#include "f280015x_device.h"、它会自动f280015x_lin.h作为完整的设备外围设备标头集的一部分进行链式连接。 这是 F280015x 系列的预期行为和不可避免的行为。

    第 236 行的错误f280015x_lin.h
    错误 41:需要一个标识符
    错误#80:需要一个类型说明符
    错误 170:此处不允许函数类型
    IDLESCIGCR1_BITS结构内部的标识符触发(行读数)Uint16 IDLE:1;。 您的项目包括这两个项目 driverlib 标头 (请在编译命令中记下)--include_path=".../driverlib/f280015x/driverlib/"位域标头 ()f280015x_device.h。 Driverlib 定义IDLE为一个宏或枚举值、当 bitfield 标头尝试用作结构成员名称时,预处理器已经将其替换 — 产生编译器抱怨的语法垃圾。 IDLE
    empty_bitfield 项目不会达到这个值、因为它是一个 纯 Bitfield 项目 由于路径中不包括 driverlib、因此IDLE范围中没有冲突的定义。
    您可以尝试以下步骤来解决此问题吗?
    1.右键点击“Project"->"Properties"->"C2000  Compiler"->"Predefined“ Compiler"->"Predefined symbols"“ symbols"。“。</s>“ “““
    2.手动添加符号 DUAL_HEADERS 并保存更改。
    TI 专门为混合使用 driverlib 和 bitfield 标头的项目提供了 dual_headers 预处理器符号。 它激活标头内的保护机制,防止共享标识符(如)IDLE在预处理过程中发生冲突。添加它是为了避免在在位域和 driverlib 标头中共享完全相同名称的枚举/结构体/宏中发生此类冲突。
    您能尝试一下它并告诉我它是否有效吗?
    谢谢、
    IRA
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ira:

    谢谢你的建议,但我仍然得到相同的错误消息.  包括我如何插入符号、以便您可以对我进行检查。

    C2000 编译器 — 构建文件:“../Source/XC_CPLD.c “
    “c:/ti/ccs2050/ccs/tools/compiler/ti-cgt-c2000_25.11.0.LTS/bin/cl2000 /Users/jtreubig/OneDrive /ti/C2000/C2000Ware_26_00_00_00/libraries/flash_api/f280015x/include/FlashAPI /ti/C2000/C2000Ware_26_00_00_00/libraries/math/FPUfastRTS/c28/include -v28 -ml -mt --float_support=fpu32 --tmu_support=tmu0 -off--include_path=“C:/ti/C2000/C2000Ware_26_00_00_00 /ti/C2000/C2000Ware_26_00_00_00/driverlib/f280015x/driverlib /ti/C2000/C2000Ware_26_00_00_00/device_support/f280015x/headers/source --include_path=“C:/Users/jtreubig/OneDrive /ti/ccs2050/ccs/tools/compiler/ti-cgt-c2000_25.11.0.LTS/include /ti/C2000/C2000Ware_26_00_00_00/device_support/f280015x/headers/include /Users/jtreubig/OneDrive /Source/XC_CPLD.c
    [64]“C:\ti\c2000\C2000Ware_26_00_00_00\device_support\f280015x\headers\include\f280015x_lin.h“、第 236 行:错误#41:需要一个标识符
    [65]“C:\ti\c2000\C2000Ware_26_00_00_00\device_support\f280015x\headers\include\f280015x_lin.h“、第 236 行:错误#80:需要一个类型说明符
    [66]“C:\ti\c2000\C2000Ware_26_00_00_00\device_support\f280015x\headers\include\f280015x_lin.h“、第 236 行:错误#170:此处不允许函数类型
    [67]“C:\ti\c2000\C2000Ware_26_00_00_00\device_support\f280015x\headers\include\f280015x_lin.h“、第 236 行:警告#109-D:长度为 1 的有符号位字段
    在编译“../Source/XC_CPLD.c 时检测到 3 个错误。

    我将很高兴尝试任何其他解决方案、感谢您的帮助、

    John

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

    您好、

    让我与团队核实、然后返回给您。

    谢谢、

    IRA

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

    您还可以尝试:

    1.使用 _dual_headers  

    2.同时保留 dual_headers 和_dual_headers。

    3. 你的构建使用ti-cgt-c2000_25.11.0.LTS,但 C2000Ware 26.00.00.00 是针对编译器版本 22.6.2.LTS 验证的 。 编译器 25.11.0.LTS 引入了中断类型定义的更改:

    • uint16_tunsigned int→μ s 更改为 5 μ s unsigned short
    • C2000Ware 仍定义Uint16unsigned int
    • 这种不匹配会导致结构体/位字段声明以看起来像标识符错误的方式失败[3]

    建议的操作: 将编译器降级为 ti-cgt-c2000_22.6.2.LTS and try

    4. Is it possible to use only driverlib headers in your code? This will remove the conflict entirely. Or is it necessary to use both driverlib and bitfield in your project?

    Thanks,

    Ira

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

    尊敬的 Ira:

    已尝试  _dual_headers 并解决问题。  编译 后的结果与修改后的 f280015x_lin.h 文件完全相同、这对我有所帮助、因为我已经将 ROM 文件发送给供应商以构建程序集。

    感谢您的专家帮助!

    John