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.

[参考译文] CC3220SF-LAUNCHXL:在 CCS 中以解析的方式包含 C 标准库头文件的 CC3220 工程

Guru**** 2905430 points

Other Parts Discussed in Thread: CC3220SF-LAUNCHXL, SYSCONFIG, CC1310, TI-CGT

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1641878/cc3220sf-launchxl-cc3220-projects-with-unresolved-inclusion-of-c-standard-library-header-files-in-ccs

器件型号: CC3220SF-LAUNCHXL
Thread 中讨论的其他器件: SysconfigCC1310

你(们)好

我将测试 CC3220SF-LAUNCHXL 的功能。

我将 CSS 版本:12.8.1.00005 与 SimpleLink CC32xx SDK 7.10.00.13 和 SysConfig v1.20.0 搭配使用

我可以顺利编译并运行 network_terminal 和配置示例。

我在空示例中编译并运行自定义测试程序、没有问题。

但在所有这三种情况下、都找不到 C 标准库头文件(stdlib.h、string.h、stdio.h 等)的包含(CCS 报告未解析的包含)。

构建过程不会失败(我想编译器找到 C 标准库文件)、但不包括头文件、因此 CCS 编辑器无法识别任何 C 标准库函数 (malloc ()、memcpy ()、sprintf () 等)、因此对这些函数的任何调用都不会在编辑器中加粗、当我将鼠标悬停在这些函数上时无法看到任何描述。

我认为这应该是与 CCS 工程的#include 搜索路径相关的问题。 以下是我编译的三个工程的#include 搜索路径:
${COM_TI_SIMPLELINK_CC32XX_SDK_INCLUDE_PATH}
${SysConfig_tool_include_path}
${PROJECT_ROOT}
${PROJECT_ROOT}/${ConfigName}
${COM_TI_SIMPLELINK_CC32XX_SDK_INSTALL_DIR}/source
${COM_TI_SIMPLELINK_CC32XX_SDK_INSTALL_DIR}/kernel/tirtos7/packages
${COM_TI_SIMPLELINK_CC32XX_SDK_INSTALL_DIR}/source/ti/posix/ticlang

是否缺少某些内容? 我尚未修改或删除任何项目中的任何路径。

我曾使用 CC1310 MCU 在 CCS 版本 9.3.0 中处理过许多项目、但从未遇到过此问题。
研究完一点后、我发现 CC1310 工程有这个路径、CCS 可以在其中找到 C 标准库头文件:
${CG_TOOL_ROOT}/包含

但 CC3220 工程中未包含此路径。 我曾尝试将该路径添加到 CC3220 工程中、但这条路径不起作用。

您有任何解决方案吗?

谢谢!

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

    尊敬的 Juan:

    “我的文件包含“选项略有不同、没有收到任何警告。 您能否看到以下任何一项是否可以解决您的问题?

    ${COM_TI_SIMPLELINK_CC32XX_SDK_LIBRARY_PATH}
    ${SYSCONFIG_TOOL_LIBRARY_PATH}
    ${COM_TI_SIMPLELINK_CC32XX_SDK_INSTALL_DIR}/source
    ${COM_TI_SIMPLELINK_CC32XX_SDK_INSTALL_DIR}/source/ti/drivers/net/wifi
    ${COM_TI_SIMPLELINK_CC32XX_SDK_INSTALL_DIR}/kernel/tirtos7/packages
    ${PROJECT_BUILD_DIR}/syscfg
    ${CG_TOOL_ROOT}/lib

    此致、

    Josh Prushing

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

    您好、Josh、

    我已添加所有不同的选项、但未解决问题:

    我在编译过程中没有收到任何警告、但警告位于 CCS Editor 和 Outline 中:

      (屏幕底部的警告)

     (stdio.h 项目中的警告)

     (C 标准库函数在编辑器中未加粗,当我将鼠标悬停在其上时,不会提供其功能说明)  

    还有其他想法吗? 谢谢!

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

    尊敬的 Juan:

    您是否可以尝试添加包含选项: C:\ti\ccs1281\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\include?  

    如果这不起作用、请在您使用#include stdxxx.h 文件的.c 文件中、单击该语句并按 F3、如果这将打开文件、然后将该文件位置复制到包含选项中。

    不确定 CCS 无法自行找到该文件的原因... 但这样可以为我解决所有 stdxxx.h 文件的警告。

    此致、

    Josh Prushing

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

    您好、Josh、

    我非常确定不会使用旧的 TI ti-cgt_arm_20.2.7.LTS 编译器。

    我想我正在使用新的 TI Clang ti-cgt-armllvm_3.2.LTS 编译器:

    从 Resource Explorer 导入示例工程时、唯一的 TI 编译器选项是:

    因此、如果我手动添加 \TI\ccs1281\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\include 路径、CCS 编辑器现在可以找到 stdxxx.h 文件、但我认为这不是正确的方式、因为这不是当前的编译器。

     TI\ccs1281\ccs\tools\compiler\ti-cgt-armllvm_3.2.LTS\include 路径的问题是它不包含任何 stdxxx.h 文件。 它们实际上存储在 TI\ccs1281\ccs\tools\compiler\ti-cgt-armllvm_3.2.lts\include.c 中

    如果手动添加 TI\ccs1281\ccs\tools\compiler\ti-cgt-armllvm_3.2.LTS \include\c 路径、则 CCS 编辑器现在会找到 stdxxx.h 文件。

    stdxxx.h 文件也 与许多其他头文件一起存储在 src 中。

    哪条路径是正确的? 或者我应该同时添加这两个吗?

    另一方面、虽然 CCS 编辑器现在找到了 stdxxx.h 文件并且不显示警告、但编辑器会持续显示以下内容:

    将鼠标悬停在上方时、无法查看和检查函数定义。

    对于 CCS 9.3.0 和 CC1310 项目、我可以看到函数定义、并且编辑器中的函数名称在识别时加粗:

    如何针对 CCS 12.8.1 和 CC3220 项目修复此问题?

    谢谢!

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

    尊敬的 Juan:

    抱歉、感谢您的澄清!

     TI\ccs1281\ccs\tools\compiler\ti-cgt-armllvm_3.2.LT\include 路径的问题是它不包含任何 stdxxx.h 文件。 它们实际上存储在 TI\ccs1281\ccs\tools\compiler\ti-cgt-armllvm_3.2.2.lts\include\c

    这些位置中的 stdxxx.h 文件是相同的、它们的内容完全相同。 添加任何一个都足够了。

    当我将鼠标悬停在上方时、我无法查看和检查函数定义。

    我查看了 stdio.h、似乎声明就在这个文件中、但实际定义应该在 C 源代码中、因此我认为这不能具有相同的悬停功能。 您能否确认悬停定义适用于 CCS 12.8 中源代码之外定义的其他函数?

    此致、

    Josh Prushing

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

    您好、Josh、

    这些位置的 stdxxx.h 文件是相同的、它们的内容完全相同。 添加任何一个都将足够。

    使用 CCS 12.8-1 导入示例时、为什么 CCS 没有添加 ${CG_TOOL_ROOT}/include/c 或 ${CG_TOOL_ROOT}/lib/CCS src 来支持 C 标准库头文件? 它应该可以做到、不是吗? 这是一个错误吗?

    我看了一下 stdio.h、似乎声明就在这个文件中、但实际定义应该在 C 源代码中、所以我认为这不能具有相同的悬停功能。 您能否确认悬停定义适用于 CCS 12.8 中源代码之外定义的其他函数?

    例如、当我将鼠标悬停在 GPIO_WRITE 调用上时(在编辑器中以粗体显示):

    我可以看到 gpio.h 中定义的函数声明:

    我无法理解的是:

    如果我删除  程序中的#include、我仍然看到 gpio_write ()(和 gpio_init () 等)以粗体显示、并且鼠标功能正常工作。

    即使我开始在编辑器中编写 GPIO、它也会显示所有相关选项:

    以下是我的程序中包含的文件:

    我已经检查过、它们都没有 GPIO.h 引用

    SPI.h 和 SPI 相关函数也是如此。

    在 带 CC1310 项目的 CCS 9.3.0 中删除驱动程序标头后、所有编码调用都不会按预期识别。  C 标准库头文件也是如此。

    我不知道带有 CC3220 项目的 CCS 12.8.1 会发生什么情况。

    可能与使用 CLANG 编译器有关?

    我尝试更改编译器、但我没有完成、因为我不想破坏任何东西:

    谢谢!

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

    尊敬的 Juan:

    对延迟表示歉意,我从星期五 — 星期二离职!

    在使用 CCS 12.8-1 导入示例时、为什么  src 不添加${CG_TOOL_ROOT}/include/c 或${CG_TOOL_ROOT}/lib/CCS 来支持 C 标准库头文件? 它应该可以做到、不是吗? 这是一个错误吗?

    我认为 SDK 应包含这些位置中的任何一个、但我不认为我们的网络终端示例(我需要查看其他示例以确认这一点)使用这些文件。 它们包含在标头中、但我想知道这些库是否是之前需要这些库的迭代中剩余的。  或者、另一种可能性是这些移动的位置、并且从未在默认的包含列表中更新。

    如果删除  程序中的#include、我仍然看到 gpio_write ()(和 gpio_init () 等)为粗体、悬停功能正常。

    此处需要注意以下几点:

    • GPIO、SPI 等实际上是 TI 提供的库(至少在此上下文中)。 请参阅下面的、查看[install_directory]/source/ti/drivers 中提供的 ti 驱动程序列表
      • (TI 驱动程序中的 GPIO 定义)
    • 整个源文件夹都包含在默认的包含列表中(在下面突出显示):
    我看了一下 stdio.h、似乎声明就在这个文件中、但实际定义应该在 C 源代码中、所以我认为这不能具有相同的悬停功能

    这一点仍然存在。 由于这些函数的代码位于源代码中、因此即使您在 CCS 导入和/或标题#include 中包含这些函数、也无法转至这些函数的定义。  

    若要进行确认、在 CCS 12.8 src 中、如果您在包含选项中添加了 TI\ccs1281\ccs\tools\compiler\ti-cgt-armllvm_3.2.LTS \include.c(或 lib/CCS)、这是否会解决“未解析的包含“错误? 我认为没有办法删除发生写入的消息、因为这与 SDK 本身无关、只是标准 C 库的一个限制。

    此致、

    Josh Prushing

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

    您好、Josh、

    我知道 C 标准库和 TI 驱动程序库是两个完全不同的概念、但我在带有 CC3220 项目的 CCS 12.8.1 中发现这两个库中都包含奇怪的功能、因此我不知道问题是否与此无关。

    奇怪的是、将“CCS 12.8.1 与 CC3220 项目“与“CCS 9.3.0 与 CC1310 项目“进行比较。

    我将尽量总结并简洁:

    a) C 标准库:

    A.1) 带 CC1310 项目的 CCS 9.3.0:

    在编辑器中、我可以在鼠标悬停时看到以粗体显示的函数和说明:

     (功能正确)

    A.2) 包含 CC3220 项目的 CCS 12.8.1:

    我确认是否 在我的 include 选项中添加了 TI\ccs1281\ccs\tools\compiler\ti-cgt-armllvm_3.2.LTS \include.c(或 lib/lib/ src)来解决“未解析的包含“错误、但仍然:

     (功能不正确)

    我认为没有办法删除发生写入的消息、因为这与 SDK 本身无关、只是标准 C 库的一个限制。

    如果它仅与 C 标准库有关、为什么我 在 CCS 9 中完成功能、而在 CCS 12 中不完成功能?

    b) TI 驱动程序库:

    B.1) 带 CC1310 项目的 CCS 9.3.0:

    如果我删除#include ,则编辑器中的 API 函数调用不会加粗,我在悬停时没有得到描述。 (正确和预期的功能)

    B.2) 包含 CC3220 项目的 CCS 12.8.1:

    如果我删除#include ,则编辑器中的 API 函数调用仍会以粗体显示,当我悬停时,我仍会得到描述。 (功能不正确,不符合预期)

    为什么我在 CCS 9 中纠正功能而在 CCS 12 中不纠正功能?

    最后:

    可能与使用 CLANG 编译器相关?

    除了不同的 SDK 和电路板、在 CCS 12 中、我使用 Clang 编译器、而在 CCS 9 中、我使用旧的 TI 编译器。

    所有问题都可能是由编译器引起的吗?

    尝试将旧的 TI 编译器与 CCS 12.8.1 一起用于 CC3220 项目是否安全?

    谢谢!

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

    尊敬的 Juan:

    我想我发现了为什么会发生这种情况...

    在 CCS 9.3.0 中、默认安装在工程设置中包括一些附加路径(Properties -> C/C++ General -> Paths & Symbols -> Includes,您可能需要在左下角显示高级设置):

    在 CCS 12.8.1 中、无论出于何种原因、默认情况下都不存在这些项:

    在此处添加正确的路径后、我可以按住 Shift 并点击 memcpy 和其他函数、然后显示定义。  为了便于参考 、我添加了 C:\ti\ccs1281\ccs\tools\compiler\ti-cgt-armllvm_3.2.LTS \include\c、因为这与 9.3.0 中默认设置的值最匹配。 这解决了问题 A.2.

    当我删除 12.8 中包含该路径的标头时、我仍然可以构建...  我 目前无法得到 12.8、无法达到预期的功能性。 我确实尝试将编译器切换到旧编译器、但没有收到与标准 C 库函数相关的任何错误。  由于 CCS 9.3 和 12.8 已停产将近 5 年、因此我认为必须满足以下条件之一:

    • 索引器的行为不同(不过所有设置看起来都相同)
    • 一些 优化差异
    • 放宽 ANSI 在 12.8 中被强制出现、而严格 ANSI 在 9.3 中被强制出现?  
    • 也许 Arm Linker 会自动包含标准库吗?
    • CC13xx 和 CC32xx 之间可能存在差异、因为 CC13xx 由 TI 的其他产品线处理。  也许有一些架构差异? 我认为这些选项中最有可能出现这种情况、因为 CCS 版本似乎不匹配...

    如果它归结为版本差异、我想能够找到根本原因、而不仅仅是理论化、但到目前为止、我尝试的所有内容都没有提供预期的结果。 明天和下周初、我将继续研究这一问题。

    此致、

    Josh Prushing

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

    您好、Josh、

    在此处添加正确的路径后、我可以按住 Shift 并点击 memcpy 和其他函数、然后显示定义。  为了便于参考 、我添加了 C:\ti\ccs1281\ccs\tools\compiler\ti-cgt-armllvm_3.2.LTS \include\c、因为这与 9.3.0 中默认设置的值最匹配。 这解决了问题 A.2.

    我可以确认这一点。 我只需要重新启动 CCS 12.8 即可在编辑器中开始获得 C 标准库函数的全部功能。

    所以一个问题解决了!

    关于 B 问题:

    没错、它不仅影响 TI 驱动程序库函数、也会影响 C 标准库函数。 因此、当删除工程中的任何标头时、您仍然可以获得有关该标头中任何函数的帮助、并且可以无错误地进行编译。

    当我删除 12.8 中包含此路径的标头时、我仍然可以进行构建...

    根据我的经验、即使不包含该路径、您也可以毫无错误地构建。

    希望你能设法揭开神秘!

    非常感谢

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

    尊敬的 Juan:

    进行一些挖掘后、看起来可以归结为支持隐式函数声明的 CCS 12.8、而 CCS 9.3 不支持此特性、并将返回错误而不是警告。

    默认情况下、此设置内置在 TI ARM LLVM 编译器中。 我确定必须有一种方法来禁用此功能、但我无法找到它。

    但最终、是的、这归结为两个 CCS 版本使用的 ARM 编译器之间的差异。 如果您有任何其他问题、请告诉我。

    此致、

    Josh Prushing

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

    您好、Josh、

    非常感谢您的帮助和研究!