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.

[参考译文] TMS320F28388D:关于在 F28388D 上从源构建 DriverLib 时出现的 3 条警告问题

Guru**** 2875350 points

Other Parts Discussed in Thread: TMS320F28388D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1628894/tms320f28388d-question-about-3-warnings-when-building-driverlib-from-source-on-f28388d

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

我正在  为  CCS 中的 TMS320F28388D 使用 Ethernet_ipc_ex1_basic 示例。

之前我使用的 是 driverlib.lib、移除了该库、并在  工程中直接开始从 driverlib 文件夹构建源文件。 完成此操作后、我开始在原始 DriverLib 源文件中看到一些警告、我想确认这是符合预期还是表明确实存在问题。

我看到的警告如下:

  1. 在 ethernet.c 中 、在 ethernet_retrieveRxPacket() 内、变量 newPktPtr 报告为已分配但从未使用。
    示例:
Ethernet_Pkt_Desc *newPktPtr = 0U; ... newPktPtr = (*Ethernet_device_struct.initConfig.pfcbRxPacket)(...);

从函数流程中可以看出、该值似乎已分配、但之后从不读取。 这是原始的 TI 旧代码路径、还是应该稍后使用此变量?

  1. 在 PMBus.c 中、变量包括:
const uint32_t fastPlusLow = 20000000U, fastPlusHigh = 25000000U;

报告为“从不使用“、即使它们出现在 IF 条件中。 我想知道这是否通常是编辑器/clangd 分析的假阳性,或者是否有某种编译条件(#ifdef,宏等)会导致出现此警告。

  1. 我还会看到有关使用 0U 进行指针初始化的警告、例如:
Ethernet_Pkt_Desc *newPktPtr = 0U;

我知道  这里的 NULL 更典型。 TI 是否认为此警告应该正常并且在 DriverLib 源代码中是无害的、或者是否建议在从源代码构建 DriverLib 时更新此类代码?

我的环境:

  • CCS 版本:20.5.0.28__1.11.0  
  • C2000Ware 26.00.00.00
  • F28388D
  • 基于原始 TI 示例的构建项目
  • 只有在从预编译的 .lib 切 换到  直接编译 DriverLib .c 源后才会出现警告

我想确认:

  • 这些警告是否应该在原始来源中出现
  • 是否可以安全忽略它们
  • 或者是否有官方建议在没有这些诊断的情况下从源代码构建 DriverLib、如何抑制此警告

谢谢你。

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

    您好、

    我分析了您提到的所有三个警告。  

    1. NewPktPtr 在 ethernet.c 中“已分配但从未使用“
    -误报:使用该变量(行 2,942,2964,2973),但4297但编译器无法通过函数指针回调 pfcbRxPacket 跟踪数据流。
    -安全忽略。

    2. fastPlusLow 和 fastPlusHigh 在 PMBUS.c 中未使用
    -正版死代码:这些常量可能是未来 FastPlus 模式支持的占位符,但在当前实现中没有引用,这是一种旧代码,但同样,没有任何破坏功能的。
    -安全忽略 — 不影响功能。

    3.指针初始化为 0U 而不是 NULL
    - TI 编码样式:TI 在整个 DriverLib 中一致使用 0U。
    -安全忽略


    您可以通过在 makefile 或 CCS 设置中添加一些标志来抑制这些警告:

    编译器标志语法

    将以下标志添加到编译器选项中:

    -- diag_suppress=179 #已声明但从未引用的变量
    -- diag_suppress=552 #变量设置但从未使用
    -- diag_suppress=238 #  控制表达式是常量的(用于使宏生效)

    Makefile 实现

    选项 1:对所有文件进行全局压缩
    #添加到 CFLAGS
    CFLAGS +=--diag_suppress=179 --diag_suppress=552 --diag_suppress=238  

    #示例完整的 CFLAGS
    CFLAGS =-v28 -ml -mt --float_support=fpu32 \
    --diag_suppress=179 --diag_suppress=552 --diag_suppress=238\  
    -O2 --opt_for_speed=5

    选项 2:仅禁止 DriverLib 文件
    # DriverLib 源代码的单独标志
    DRIVERLIB_CFLAGS =$(CFLAGS)--diag_suppress=179 --diag_suppress=552 --diag_suppress=238

    #应用于特定文件
    driverlib/%.obj:driverlib/%.c
    $(CC)$(DRIVERLIB_CFLAGS)-c $<-o $@

    选项 3:按文件压缩
    Ethernet.obj:Ethernet.c
    $(CC)$(CFLAGS)-diag_suppress=179,552,238 -c $<-o $@μ m

    PMBUS.obj:PMBUS.c
    $(CC)$(CFLAGS)-diag_suppress=179,552,238 -c $<-o $@μ m

    此致、
    Shaunak