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.

[参考译文] TMS320F2809:SYS/BIOS 生成的文件中存在静态分析错误

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1284280/tms320f2809-static-analysis-errors-in-sys-bios-generated-file

器件型号:TMS320F2809

您好!

我正在 CCS 工程[10.4.0.00006]中使用 SYS/BIOS [6.83.0.0.18]和 XDCtools [3.62.0.08]。  

我们使用 Cppcheck [2.9]进行静态分析,并不断收到错误 src 信息->[..\Va_start\source\Debug\configPkg\package\cg\cpapp_p28L.c:2018](错误) va_list 'va'在 va_start ()被调用前使用。 [va_list_usedBeforeStarted]

函数"xdc_Int xdc_runtime_System_printfExtend__i (xdc_Char System_Parse * pbuf、xdc_CString * PFMT、XDC_VaList * PVA、xdc_runtime_parse *解析)"中的多行中存在此错误

由于这个文件是生成的、我无法找到解决这个问题的方法。 有人可以协助吗?

谢谢!

米兰

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

    如果您可以找到用于生成此代码的模板文件、是否可以尝试进行编辑? 它看起来像这个位于 \packages\XDC\runtimes\System.xdt。

    惠特尼

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

    感谢您的建议。  我可以在技术上更改该文件、但这是非常不可取的解决方案。 我基本上是要更改 XDC 工具附带的文件、并且在他自己的安装中的每个更新时都需要对这个文件进行更改(由负责我项目的任何人进行更改)。
    此外、我还不太清楚如何正确地修改它。 "va_start"在该文件中的任何位置都没有被调用、我无法找到它的实际调用位置、以及将哪些参数传递给该函数。 据我所见、此文件被分配给了"XDC_RUNTIME_System_extendFxn_C"、但我在工程中没有获得任何其他引用。

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

    我曾经使用过 Swi 示例、因为我知道这个示例名为 System_printf、之后我发现对 va_start 的调用出现在生成的.c 文件中。

    我有点惊讶、您在您生成的文件中没有看到它。 你是否在项目中进行 System_printf (或相似函数)调用?

    惠特尼

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

    在工程中未使用"System_printf"。 我发现它在一些未使用的库中、但我的问题仍然存在、即使在删除它之后也是如此。

    "app_p28L.c"文件中有一些对"va_start"的调用、但我无法找到它们与"xdc_runtime_System_printfExtend__i"之间的连接来证明"va_start"确实被调用。

    /*
     *  ======== System_printfExtend__I ========
     *  This function processes optional extended formats of printf.
     *
     *  It returns the number of characters added to the result.
     *
     *  Precision (maximum string length) is not supported for %$S.
     *
     *  Right-justified (which is default) minimum width is not supported
     *  for %$L, %$S, or %$F.
     */
    /* REQ_TAG(SYSBIOS-1072) */
    xdc_Int xdc_runtime_System_printfExtend__I(xdc_Char **pbuf, xdc_CString *pfmt,
        xdc_VaList *pva, xdc_runtime_System_ParseData *parse)

    /*
     * ======== xdc.runtime.System FUNCTION STUBS ========
     */
    
    /* printf_va__E */
    xdc_Int xdc_runtime_System_printf_va__E( xdc_CString fmt, va_list arg__va)
    {
        return xdc_runtime_System_printf_va__F(fmt, arg__va);
    }
    
    /* printf__E */
    xdc_Int xdc_runtime_System_printf__E( xdc_CString fmt, ...)
    {
        xdc_Int retval;
    
        va_list arg__va;
        (void)va_start(arg__va, fmt);
        retval = xdc_runtime_System_printf_va__F(fmt, arg__va);
    
        va_end(arg__va);
        return retval;
    }
    
    /* aprintf_va__E */
    xdc_Int xdc_runtime_System_aprintf_va__E( xdc_CString fmt, va_list arg__va)
    {
        return xdc_runtime_System_aprintf_va__F(fmt, arg__va);
    }
    
    /* aprintf__E */
    xdc_Int xdc_runtime_System_aprintf__E( xdc_CString fmt, ...)
    {
        xdc_Int retval;
    
        va_list arg__va;
        (void)va_start(arg__va, fmt);
        retval = xdc_runtime_System_aprintf_va__F(fmt, arg__va);
    
        va_end(arg__va);
        return retval;
    }
    
    /* sprintf_va__E */
    xdc_Int xdc_runtime_System_sprintf_va__E( xdc_Char buf[], xdc_CString fmt, va_list arg__va)
    {
        return xdc_runtime_System_sprintf_va__F(buf, fmt, arg__va);
    }
    
    /* sprintf__E */
    xdc_Int xdc_runtime_System_sprintf__E( xdc_Char buf[], xdc_CString fmt, ...)
    {
        xdc_Int retval;
    
        va_list arg__va;
        (void)va_start(arg__va, fmt);
        retval = xdc_runtime_System_sprintf_va__F(buf, fmt, arg__va);
    
        va_end(arg__va);
        return retval;
    }
    
    /* asprintf_va__E */
    xdc_Int xdc_runtime_System_asprintf_va__E( xdc_Char buf[], xdc_CString fmt, va_list arg__va)
    {
        return xdc_runtime_System_asprintf_va__F(buf, fmt, arg__va);
    }
    
    /* asprintf__E */
    xdc_Int xdc_runtime_System_asprintf__E( xdc_Char buf[], xdc_CString fmt, ...)
    {
        xdc_Int retval;
    
        va_list arg__va;
        (void)va_start(arg__va, fmt);
        retval = xdc_runtime_System_asprintf_va__F(buf, fmt, arg__va);
    
        va_end(arg__va);
        return retval;
    }
    
    /* snprintf_va__E */
    xdc_Int xdc_runtime_System_snprintf_va__E( xdc_Char buf[], xdc_SizeT n, xdc_CString fmt, va_list arg__va)
    {
        return xdc_runtime_System_snprintf_va__F(buf, n, fmt, arg__va);
    }
    
    /* snprintf__E */
    xdc_Int xdc_runtime_System_snprintf__E( xdc_Char buf[], xdc_SizeT n, xdc_CString fmt, ...)
    {
        xdc_Int retval;
    
        va_list arg__va;
        (void)va_start(arg__va, fmt);
        retval = xdc_runtime_System_snprintf_va__F(buf, n, fmt, arg__va);
    
        va_end(arg__va);
        return retval;
    }

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

    这些函数是否显示在您的.map 文件中? 您是否能够使用 CCS 调试程序将断点放置在这些函数中、以查看它们是否被调用? 据我所知、它们仅与打印呼叫相关。 System 模块用于 abort 函数以及 printf、因此即使您仅使用 abort/exit 功能、它也可能会生成系统模块的所有函数。

    惠特尼

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

    我的.map 文件中没有单独提到"print"(有趣的是、启用了十六进制实用程序的.map 文件会通过其输出重新写入)。 我也无法放置断点。 我收到此消息:

    看起来我将发音这是未使用的生成代码、并希望 我们的安全团队可以轻松处理。

    非常感谢您的帮助。 我从未深入探讨过我们项目的背景基础。