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.

[参考译文] Makefile 工程:CCS 不"know"由诸如__TMS320C28XX__的编译器预定义的宏

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1290554/makefile-project-ccs-does-not-know-macros-predefined-by-compiler-like-__tms320c28xx__

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

您好!

在我们的项目中、我们需要使用 Git 来清晰地跟踪所有配置更改、因此几乎不可能依赖于 CCS 的 XML 配置文件。

相反、我们希望将手动编辑的 Makefile 与 CCS Makefile 工程一同使用。 我们使用 TMS320F28388D 实现了它、例如、我们可以编译、运行和调试。

但是:CCS 编辑器对于激活和非激活段不会正确设置代码格式、编辑器会显示许多"Symbol xxx 无法解析"、尽管编译器会在没有警告的情况下完成。 原因是 CCS 不认为编译器会自动定义一些宏、如__TMS320C28XX__、并且更多宏是通过我们的 Makefile 在编译器命令行中定义的。 在编辑器中、代码被视为未定义这些宏。 更糟糕的是、当单步执行 CCS 调试器中的代码时、程序和所示行不同步、这也是因为调试器认为这些宏未定义。

我已选中"C/C++ General"->"预处理器包含路径、宏等"下的选项。 ->"提供商",但似乎没有太多的事情要做。 "CCS Build-in Compiler Settings"已被选择。

我想我应该以某种方式让 CCS 使用我们 makefile 文件中的设置来调用编译器、以便 CCS 能够找出真正定义了哪些宏。 但该怎么做呢?

感谢您的支持!

 

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

    您好!

    此功能将依赖于索引器、并且可能依赖于托管的 make 工程与自定义 makefile 工程。 我需要仔细研究,看看后者是否可以支持这一点。

    谢谢

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

    谢谢你。 您能否查看一下这个最小的 "led_ex1_blinky"代码(见下文)? 我是从 TMS320F28388 CPU 的 driverlib 示例导出的。 通过运行"gmake"、可以从 CCS 外部正常编译。 将其导入 CCS:

    • NEW -> C/C++项目->带有现有代码的 makefile 工程
    • 将其称为"makefile_leed_ex1_blinky"
    • 选择解压缩 ZIP 文件所在的目录
    • 选择"TI 编译工具"作为索引器支持的工具链
    • 您可能需要调整 Makefile 中的目录,

    在 CCS 内、"构建项目"和"清理项目"运行良好。 但索引已如初始 POST 中所述断开。 如何解决此问题或如何解决此问题?

    此致、Nils

    e2e.ti.com/.../makefile_5F00_led_5F00_ex1_5F00_blinky.zip

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

    谢谢、这对您有所帮助。 我将尝试使用您的示例项目

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

    很好、我期待收到您的反馈!

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

    您好!

    索引器似乎用于自定义 makefile 工程。 我可以跳到声明(F3)、 编辑器 无活动代码的底纹似乎可以正常工作。 如果以上方法都不起作用、那么在创建自定义 makefile 工程时、是否为索引器设置选择了工具链?

    至于:

    Unknown 说:
    编辑器显示许多"Symbol xxx 无法解析"、即使编译器没有警告也能完成。 原因是 CCS 不认为编译器会自动定义一些宏、如__TMS320C28XX__、并且更多宏是通过我们的 Makefile 在编译器命令行中定义的。 在编辑器中,代码被视为未定义这些宏。

    此部分预计会得到 CCS Eclipse 附带的静态代码分析工具(Codan)的误报。 我们建议禁用此功能、以避免产生混淆

    https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/944045/ccs-drv8301-69m-kit-error-after-first-build-with-iqmpy/3487430#3487430

    Unknown 说:
    更糟糕的是、当单步执行 CCS 调试器中的代码时、程序和所示行不同步、这也是因为调试器认为这些宏未定义。

    这部分使我感到困惑。 无论 Codan 是否有误报、都不应在调试期间产生任何影响。 显示的行应与编译的可执行文件中的调试信息相对应。 Codan/分度器应该对调试没有影响。 如果在调试期间遇到不匹配的源代码行关联、则更可能是调试优化代码时出现问题或引用了错误的源文件。

    坦斯克

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

    感谢您测试我的定制 makefile 工程! 您的反馈已经非常有用。

    为回答您的问题、是的、我选择了"TI 编译工具"作为索引器的工具链。

    跳转到声明(F3)
    我可以使用 F3跳转到 Device_init()和 Device_initGPIO()的声明。 而不是 GPIO_setPadConfig ()的声明。 区别在于前者是项目文件夹中源代码的一部分、而后者是项目文件夹之外的"driverlib"的一部分。 您会遇到同样的行为吗? 如果是、是否有办法"解决"此问题?

    代码分析中的误报错误(Codan)
    感谢您的解释。 最好禁用它(Project Settings -> Code Analysis)。 对我们来说、只需看到"真实的"编译器错误即可。 遗憾的是、无法正确解析编译器输出。 如果我添加一个额外的参数 GPIO_setDirectionMode (),我可以在问题窗格中看到"太多的参数",但文件和行号都没有被"理解",所以我必须在 CDT 构建控制台中手动查看"led_ex1_blinky.c",第76行:错误#141 : 函数调用中的参数太多"。 单击此处也不会"发送"我到任何地方。 它是否可以"固定"?

    非活动代码段的底纹
    我也可以看到阴影、但错误的部分会被阴影化。 如果您在 device.c 中打开 Device_init(),段"#ifdef cpu1"会被阴影化(=inactive),但实际上 CPU1定义,且该段已编译。 如果我们使用基于 Makefile 的工程、如果没有这个出色的功能、似乎也必须这样做。 不活动设置的底纹是否只能全局禁用(Window->Preferences->C/C++-> Editor->Inactive code highlight)、或者按项目或每个工作区禁用?

    调试期间的影响-正常工作
    抱歉、您说得对、它工作正常。 再次检查后、程序和显示的行实际上完全同步、同样在被错误地标记为无效的部分内。

    此致、Nils

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不同之处在于前者是项目文件夹中源代码的一部分,而后者是项目文件夹外"driverlib"的一部分。 您会遇到同样的行为吗? 如果是、是否有办法"修复"此问题?

    是的、如果源文件不是工程的直接一部分、则索引器可能会在引用工程文件夹之外的文件时遇到问题。

    您可以尝试下面文章中的建议将 driverlib 文件夹添加到索引器扫描路径:

    https://www.eclipse.org/community/eclipse_newsletter/2013/october/article4.php

    单击此处也不会"发送"我到任何地方。 它是否可以"固定"?
    非活动代码段的底纹
    我也可以看到阴影、但错误的部分会被阴影化。 如果您在 device.c 中打开 Device_init(),段"#ifdef cpu1"会被阴影化(=inactive),但实际上 CPU1定义,且该段已编译。 如果我们使用基于 Makefile 的工程、如果没有这个出色的功能、似乎也必须这样做。 不活动设置的底纹是否只能全局禁用(Window->Preferences->C/C++-> Editor->Inactive code highlight)、或者按项目或按工作区禁用?

    请注意、索引器和 Codan 是我们 从 CCS Eclipse 继承的特性。 这不是我们直接支持的。 对于非管理项目尤其如此。 另请注意、我们的下一个 CCS 版本将基于 Theia IDE 环境、因此 CCS Eclipse 环境不太可能发生任何新的增强。

    谢谢

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

    感谢您的链接。 这实际上解决了我的开头问题:在 Project Settings -> C/C++ General ->"Preprocessor Include Paths、..." 我可以添加"CDT 用户设置条目"、并指示索引器和 Codan 威胁要预定义的 CPU1或__TMS320C28XX__之类的宏、我还可以添加其他包含路径。 我现在可以通过添加更多条目来修复"非活动代码阴影"和"跳转到声明"问题。 好的,这是相当笨拙(因为我需要手动使它与 Makefile 保持同步),但至少是可能的。

    仍然不起作用的是此器件:

    如果我添加一个额外的参数 GPIO_setDirectionMode (),我可以在问题窗格中看到"太多的参数",但文件和行号都没有被"理解",所以我必须在 CDT 构建控制台中手动查看"led_ex1_blinky.c",第76行:错误#141 : 函数调用中的参数太多"。 单击此处也不会"发送"我到任何地方。

    也许我们必须接受这一点,看看 Theia IDE 能为我们做什么(也感谢你的这提示)。