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:堆栈用法:包含未使用的函数。

Guru**** 2611165 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1007366/tms320f28379d-stack-usage-unused-functions-being-included

器件型号:TMS320F28379D

我正在使用 CCS 中的"Stack Usage"工具来了解代码中占用最多空间的部分。 我包含一个头文件、其中除其他外、定义了当前代码未调用的 Park 和逆向 Park 变换函数。 这些器件内的正弦和余弦运算显示出非常大的堆栈使用量。

问题1:"Stack Usage"函数是否显示函数的栈使用情况、无论它们是否包含在最终可执行文件中? 如果没有、为什么这些未使用的函数会显示在我的堆栈使用中?

问题2:由于我使用的是启用了浮点支持的 F28379D、正弦和余弦函数应分别使用636字节的栈吗? 技术简介 SPRY288B 举例说明、帕克变换只需短短13个 CPU 周期。 我意识到我在 math.h 中使用正弦和余弦的实现可能没有那么高效、但是这么大的堆栈使用使我怀疑正在进行一个长而复杂的近似、并且可能会有问题。  

void control_ab_to_dq (comp_num * p_ab,
                       float * p_theta,
                       dq_quantity * p_dq)
{
    p_dq->d = p_ab->real*cos(*p_theta) + p_ab->imag*sin(*p_theta);
    p_dq->q = p_ab->real*-sin(*p_theta) + p_ab->imag*cos(*p_theta);

    return;
}

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

    您可以参阅《TMS320C28x 优化 C/C++编译 器用户指南》(SPRU514)、以使用 三角函 数数学单元(TMU)、该单元仅需要几个 CPU 周期。

    此外、您还可以参阅 《C28x 优化指南 》、该指南介绍了如何为 C28x CPU 编写优化代码、如下链接所示。

    https://software-dl.ti.com/C2000/docs/optimization_guide/index.html

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

    谢谢 Yanming。 表7-8非常有用、因为它列出了编译器内在函数、以确保使用 TMU。 我假设编译器默认使用 TMU、只要在编译设置中启用 TMU。 这解决了我最初的问题、因为现在执行速度要快得多。  我看到它还包括乘除2 π 的指令,因此我也会使用这些指令。

    在类似的注释中,divf32()将一个 float 除以另一个 float。 我是否可以问、如果我只使用"/"运算符将一个浮点除以另一个浮点、会发生什么情况? 很明显,代码运行良好,但这是否会导致比我用 divf32()函数替换所有“/”的计算效率低?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="425347" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1007366/tms320f28379d-stack-usage-unused-functions-being-included "] Stack Usage 函数是否显示函数的栈用法,而不管它们是否包含在最终可执行文件中?

    如果该函数未进行优化、则会显示其堆栈使用情况。  尝试使用更高级别的优化进行构建。  如果函数被优化、可能是通过在调用函数的任何位置进行内联来实现、则不会显示函数的栈使用情况。

    谢谢、此致、

    乔治