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.

[参考译文] 在<stdint.h&gt 中为标准整数类型(如 uint32_MAX)使用定义的限制时、符号无法解析错误;

Guru**** 2578845 points
Other Parts Discussed in Thread: C2000WARE, SYSBIOS

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1126118/symbol-could-not-be-resolved-error-when-using-defined-limits-for-standard-integer-types-like-uint32_max-in-stdint-h

Thread 中讨论的其他器件:C2000WARESYSBIOS

可能涉及的人员、

每当我使用中定义的标准整数类型的#define limits 时、我都会遇到"Symbol could not be resolved"错误 。 例如、我 在代码中使用 uint32_MAX 来获取包含 uint32_t 类型的最大值 但是、我收到错误"Symbol could not be resolved"。 作为一种权变措施、我必须使用一个抑制 //@suppress ("符号未解析")来成功编译。 输入时的值 我看到以下定义了 UINT32_MAX 和其他标准类型的最大值的代码:

#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)

/* 7.18.2 Limits of specified width integer types */

#if defined(_TMS320C6X) || defined(__ARM_ARCH) || defined(__MSP430__) || \
    defined(__TMS320C55X_PLUS_BYTE__)          || defined(__ARP32__)  || \
    defined(__PRU__)    || defined(__C7000__)
    #define  INT8_MAX   0x7f
    #define  INT8_MIN   (-INT8_MAX-1)
    #define UINT8_MAX   0xff
#endif

    #define  INT16_MAX  0x7fff
    #define  INT16_MIN  (-INT16_MAX-1)
    #define UINT16_MAX  0xffff

    #define  INT32_MAX  0x7fffffff
    #define  INT32_MIN  (-INT32_MAX-1)
    #define UINT32_MAX  0xffffffff

#if defined(__ARM_ARCH) || defined(_TMS320C6X) || defined(__C7000__) || \
    defined(__ARP32__)  || defined(__MSP430__) || defined(__PRU__)
    #define  INT64_MAX  0x7fffffffffffffff
    #define  INT64_MIN  (-INT64_MAX-1)
    #define UINT64_MAX  0xffffffffffffffff
#elif defined(__TMS320C2000__)
#if defined(__TMS320C28X__) || \
    (defined(__TMS320C28XX_CLA__) && defined(__TI_EABI__))
    #define  INT64_MAX  0x7fffffffffffffff
    #define  INT64_MIN  (-INT64_MAX-1)
    #define UINT64_MAX  0xffffffffffffffff
#endif
#endif

// etc. etc.
#endif

中的整个代码段 在我的 Code Composer Studio 窗口中、似乎呈灰色显示、表示_cplusplus 是在某个位置定义的...除了我找不到它的定义位置? _cplusplus 未在我在项目中拥有的任何文件中定义、也未在我所知的任何项目属性中定义(例如 CCS Build > C2000 Compiler > Predefined Symbols)。 我目前正在编写 C 代码、因此我 不会在任何地方使用__cplusplus。 我还对我的项目文件进行了全局搜索、找不到__cplusplus 可以定义的其他位置。 这部分代码为什么位于中 变灰了吗? 这是编译器/ Code Composer Studio 错误吗? 我假设这就是我在尝试在代码中使用 uint32_MAX 时遇到编译器错误"无法解析符号"的原因。

非常感谢您的帮助、谢谢!

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

    您好!

    您运行的是 C2000Ware 示例还是自定义项目? 是否可以  从控制台日志发送完整错误?

    谢谢、

    桑托什

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

    自定义工程、这是"问题"选项卡中的错误:无法解决符号'uint16_MAX'语义错误。 我认为这实际上可能是代码分析(不是编译器/编译器?) 因此、不需要从控制台日志复制任何内容。 具体而言、我在 Codan 设置中打开了"Symbol is not resolved"错误。

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

    Nigel、

     包含路径中可能存在一些问题。 您能否打开任何 C2000Ware 示例、然后添加代码并检查代码是否能够解析。 我刚刚在一个 C2000Ware 示例中对我的设置进行了测试、工作正常。

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

    此外、如果我右键单击 uint32_MAX 进行声明、它解析为:

    C:/ti/ccs1110/ccs/tools/compiler/ti-cgt-C2000-21.6.0.LTS/include/machine/_stdint.h

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

    使用 C:\ti\c2000\C2000Ware_4_01_00_00\device_support\f2837xd\examples\CPU1\GPIO_toggle 中的 GPIO 切换示例、我没有遇到任何问题。 右键单击 uint32_MAX 以查找打开 的声明 C:/ti/ccs1020/ccs/tools/compiler/ti-cgt-C2000-20.2.LTS / include/stdint.h

    在我的自定义项目中、当我右键单击以查找 uint32_MAX 的声明时、它为空。

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

    您的项目的包含路径设置可能不正确。 您可以查看项目设置和项目、然后进行比较。

    打开项目设置、转到 Build -> C2000 Compiler、然后打开 Summary of flag Set。 您 应该将其与您的定制项目和 C2000Ware 示例进行比较。 这可以指向缺失的内容。

    另一个选项是 从 empty_project 开始、然后在该项目中添加您的代码。 这样、所有包含路径、链接器路径和工程设置都已正确定义。  

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

    将示例代码设置与我的自定义项目设置进行比较、两者都包括"${CG_TOOL_ROOT}/INCLUDE"、该文件扩展到文件路径  C:/ti/ccs1020/cs/tools/compiler/ti-cgt-C2000_20.2.ls/include (这两个项目的路径相同 位于中)。

    因此、它似乎不是包含路径的问题。

    从一个空项目开始、迁移我的代码不是一个好选择、因为我已经在这个项目上工作多年、并且我已经为我的工作区设置了过多的配置/选项(MISRA、调试、Codan、文件特定选项、共享空间、 双核等)、很难从零开始重新迁移我的项目、我只会将其作为最后的手段。

    似乎有两个问题:

    1) 似乎认为我在项目中的某个位置定义了__cplusplus,所以我无法使用 uint32_MAX...但我在项目中没有定义__cplusplus? (是否有简单的方法可以肯定地了解这一点? 我已经尝试对我的项目执行文件搜索)

    2) 2) Code Composer 无法 解析 uint32_MAX 符号、并且由于问题1、很可能找不到声明

    我认为我们应集中讨论问题1,因为问题2似乎只是问题1的副作用。 由于 我没有在任何地方定义__cplusplus,所以 Code Composer 似乎没有正确地解释行#if !defined (__cplusplusplusplusplus)|| defined (__STDC_limit_macros)。

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

    Nigel、

    您是否可以创建一个修整项目、我可以使用该项目在本地重新创建问题?

    此外、您能否发送项目摘要、如下所示:

    谢谢、此致、

    桑托什

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="462401" URL"~//support/tools/code-composer-studio 组/ccs/f/code-composer-studio 论坛/1126118/symbol-could not be resolve-error-when 使用时定义的限制对于标准整数类型类似 uint32_max-in-in C 语言编写代码 ] 我还对我的项目文件进行了全局搜索、找不到__cplusplus 可以定义的其他位置。 这部分代码为什么位于中 呈灰色显示?

    这是一个漫长的过程、但您(意外)是否为项目中的一个或多个文件选择了以下选项?

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

    下面是 测试项目工作区的.zip、我启用了 Codan、只需在 main.c 中使用 uint32_MAX、就会得到相同的错误:

    e2e.ti.com/.../2821.test.zip

    以下是编译器标志测试项目的屏幕截图:

    [引用 userid="479799" URL"~//support/tools/code-composer-studio-group/Ccs/f/code-composer-studio 论坛/1126118/symbol-could not be resolved-error-when 使用定义的限制对于标准整数类型类似 uint32_max-in-st8915" d178915"

    这是一个漫长的过程、但您(意外)是否为项目中的一个或多个文件选择了以下选项?

    [/报价]

    感谢您的建议、不是、我没有启用此选项。

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

    Nigel、

    我刚导入了您的测试项目、没有看到任何构建错误。 我做了一个更改、做了易失性变量、因此没有警告。

    /**
     * main.c
     */
    int main(void)
    {
        volatile uint32_t max_val = UINT32_MAX;
        return 0;
    }
    

    **** Clean-only build of configuration Debug for project test ****
    
    /Users/a0132919/ti/ccs1120/ccs/utils/bin/gmake -k -j 7 clean -O 
     
    rm -rf  "test.hex"  "test.out" 
    rm -rf "main.obj" 
    rm -rf "main.d" 
    Finished clean
     
    
    **** Build Finished ****
    
    **** Build of configuration Debug for project test ****
    
    /Users/a0132919/ti/ccs1120/ccs/utils/bin/gmake -k -j 7 all -O 
     
    Building file: "../main.c"
    Invoking: C2000 Compiler
    "/Users/a0132919/ti/ccs1120/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/bin/cl2000" -v28 -ml -mt --cla_support=cla1 --float_support=fpu32 --tmu_support=tmu0 --vcu_support=vcu2 --include_path="/Users/a0132919/Downloads/test" --include_path="/Users/a0132919/ti/ccs1120/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/include" -g --diag_warning=225 --diag_wrap=off --display_error_number --abi=coffabi --preproc_with_compile --preproc_dependency="main.d_raw"  "../main.c"
    Finished building: "../main.c"
     
    Building target: "test.out"
    Invoking: C2000 Linker
    "/Users/a0132919/ti/ccs1120/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/bin/cl2000" -v28 -ml -mt --cla_support=cla1 --float_support=fpu32 --tmu_support=tmu0 --vcu_support=vcu2 -g --diag_warning=225 --diag_wrap=off --display_error_number --abi=coffabi -z -m"test.map" --stack_size=0x200 --warn_sections -i"/Users/a0132919/ti/ccs1120/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/lib" -i"/Users/a0132919/ti/ccs1120/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/include" --reread_libs --diag_wrap=off --display_error_number --xml_link_info="test_linkInfo.xml" --rom_model -o "test.out" "./main.obj" "../2837x_FLASH_lnk_cpu1.cmd"  -llibc.a 
    <Linking>
    Finished building target: "test.out"
     
    
    **** Build Finished ****
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="462401" URL"~//support/tools/code-composer-studio 组/CCs/f/code-composer-studio 论坛/1126118/symbol-could not be resolved-error-when 使用时定义的限制对于标准整数类型类似 uint32_max-in-in-in-in-in-in-analysis/d7819](本代码可能不会实际构建于174h/intrin/trines[#177819]

    我想您在编译期间不会看到错误。 我在原始帖子中讲错了。 Codan 正在标记符号未解决错误。 您必须在设置中启用 Codan。  但是、Codan 很可能不是问题、它只是揭示了 stdint.h 错误地传播不允许我们使用 uint32_MAX 的代码段这一更深层次的问题。

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

    Nigel、

    啊哈。  我明白了。 如何启用 Codan?

    谢谢、此致、

    桑托什

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

    我为工作区中的所有项目启用 Codan (代码分析)(不是特定于项目)、因此我转到"文件">"属性">" C/C++常规">"代码分析">"启动">"启用"和"在键入时运行">应用并关闭

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

    Nigel、

    不幸的是,我仍然无法看到这个问题。

    您何时看到该问题?

    谢谢、此致、

    桑托什

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

    您可能正在使用不同版本的工具?

    • Code Composer Studio 10.2.0.00009
    • 编译器 ti-cgt-C2000_20.2.LTS
    • C2000Ware_4_01_00_00
    • XDCtools 3.62.0.08_core
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我正在使用:

    • CCS 版本:11.2.0.00007  
    • 编译器: 21.6.0.LTS
    • C2000Ware:4.01.00.00
    • 无 XDC 工具。

    只需检查一下、您是否未使用 SYSBIOS、对吧? 您共享的项目没有 SYSBIOS。  如果我们不使用 SYSBIOS、则 XDCTools 无关紧要。

    谢谢、此致、

    桑托什

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35062" URL"~//support/tools/code-composer-studio 组/CCs/f/code-composer-studio 论坛/1126118/symbol-could not be resolved-error-when 使用定义的限制用于标准整数类型类似 USys32_max-in-st9796[引用自定义的限制]、请勿使用 INTC17496[#INT496]、

    没错、据我所知、我们没有使用 SYSBIOS

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

    您是否可以尝试与我的工具链相同的工具链、如果它们会产生任何影响?

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

    现在、不会 除非有充分理由更改版本、否则我们的软件开发团队会使用相同的版本在项目中保持一致。 我依赖 TI 支持来重现此问题。

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

    正如我提到过的、我甚至无法在您的项目中产生问题。 让我与其他人核实一下。

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

    Nigel、

    我将 TT 转移给编译器团队。 我们应该在今天晚些时候作出反应。

    谢谢、此致、

    桑托什

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

    Nigel、

    这里有很多帖子、所以让我看看我是否可以总结这些问题。

    您的项目构建良好。

    1) 1)未解析的符号

    从内置到 CCS/Eclipse 中的静态分析工具(Codan)中可以得到未解析的符号错误。

    我们故意在 CCS 中默认关闭 Codan、因为它错误地报告了许多问题。  我们甚至在项目和工作区设置中隐藏了这些选项、以防止用户打开它。  我们不建议使用此功能。

    2) 2)条件代码用_cplusplus 突出显示

    就条件代码的传播而言、这存在一些问题。  我相信您正在遇到此错误: https://sir.ext.ti.com/jira/browse/EXT_EP-9603

    该问题应在 CCSv10.4.0中解决。

    此致、

    John

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

    感谢 John、这可能是问题所在。 我们必须与团队讨论如何升级我们的工具集。 谢谢!