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.

[参考译文] TMS320F28379D:错误:包括 stdlib 在内将抑制格式警告

Guru**** 2581345 points
Other Parts Discussed in Thread: C2000WARE, TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1207533/tms320f28379d-bug-including-stdlib-suppresses-format-warnings

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

大家好

我浪费了大量时间进行调试、因为我在 printf 语句中使用了错误的格式说明符、导致打印出错误的数字、这让我不得不大老远地追逐。

这使我们想知道为什么我没有从编译器那里收到任何有关这一点的警告。 在检查是否启用了所有警告和备注内容后、我仍然看不到警告。

构建了一个简单的新项目来进行测试、并就此向 TI 报告。 突然我收到了预期的警告

进一步深入探究这个,我发现它是一个包括一个包括,包括一个包括 stdlib.h ,这是罪魁祸首。

我没有为你做一个拉链,但这里是一个简单的食谱:

从 C2000Ware 导入 empty_driverlib 项目。

将 empty_driverlib_main.c 的内容替换为这个

//#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>

void f(void)
{
    uint32_t u32var=0;
    int32_t s32var=0;

    printf("%i", u32var);
    printf("%i", s32var);
}

使用"构建所选文件"选项编译此文件。 并验证您是否看到有关格式的两条警告。

"c:\\ti\\ccs1220\\ccs\\tools\\compiler\\ti-CGT-C2000_22.6.0.LTS \\bin\\cl2000"-v28 -ml -mt /ti/C2000Ware_4_03_00_00/driverlib/f2837xd/driverlib - cla_support=cla1 /ti/ccs1220/ccs/tools/compiler/ti-cgt-c2000_22.6.0.LTS/include --float_support=fpu32 --tmu_support=tmu0 - 
"..\empty_driverlib_main.c"、第10行:警告#183-D:参数与相应的格式字符串转换不兼容
"..\empty_driverlib_main.c"、第11行:警告#183-D:参数与相应的格式字符串转换不兼容

现在使用`//#include 取消注释第一行 `μ A

再次编译、看到警告现已消失。

我使用的 CCS 版本:12.2.0.00009  

和 C2000编译器 ti-CGT-C2000_22.6.0.LTS

我正在为 TMS320f28379D 进行编译 µC、但我不希望将其孤立于此。

编辑:

请注意 include 问题的顺序、如果 stdio 之后包含 stdlib、则会按预期提供警告。

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

    您好——我已经验证了您描述的行为,并提交了错误 https://jira.itg.ti.com/browse/EXTSYNC-3766 来跟踪问题。 stdlib.h 的包含顺序会影响"format"函数属性"__attribute__(__format__)"是否应用于 printf()例程的声明。  首先包含 stdlib.h 会导致属性未被应用。 应用该 函数时、它将强制编译器使用格式字符串来检查函数是否被调用、该格式字符串使用允许的格式说明符、并且参数是否与格式字符串匹配。 如果编译器在进行此检查时遇到问题、则将在编译时发出警告诊断。

    这种影响是不一致的、但最终对生成的代码的正确性是有利的。

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

    链路中断

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

    很抱歉、这是正确的链接: https://sir.ext.ti.com/jira/browse/EXT_EP-11095

    -艾伦