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.

[参考译文] 编译器/TMS320F2.8022万:已定义原型,但未在项目中调用,在CCS7 @ CGT 16.9 中进行了优化,但没有分配内存.........3.

Guru**** 2392455 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/640175/compiler-tms320f28022-prototype-defined-but-not-called-in-project-optimized-without-memory-allocation-in-ccs7-cgt-lts16-9-3

部件号:TMS320F2.8022万

工具/软件:TI C/C++编译器

大家好,

 我的客户报告了一个问题: 在 CCS7@CGT_ISR 3中,原型将在不分配内存的情况下进行优化 ,该原型 在项目A中定义,位于F2.8022万扇区A中,但不被项目A调用,而是被位于扇区B/C/D中的项目B调用, 并导致项目B意外运行16.9 ;   但  CCS5@6.0 的C3.22没有出现这一问题

 支持需求:

 1 .关于使用CCS7@LTS 16.9 的准则3 以实现其特点:  项目A中定义的原型位于A区,但项目中未调用,项目B所调用的原型位于B/C/D区;

 e2e.ti.com/.../Prototype-optimized-issue.docx

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

    我需要澄清一些术语。  函数声明表示存在该名称的函数...

    int fxn();/* old-style函数声明*/ 

    函数定义的开头类似于声明,但包括函数的实现...

    int fxn (int arg)/*函数定义*/
    {
    返回arg +10;
    } 

    函数原型也是函数声明,但包括有关函数参数的信息...

    int fxn (int arg);/*函数原型*/ 

    功能原型早已引入C语言。  到目前为止,只能在非常旧的代码中看到旧式函数声明。  因此,声明和原型两个词实际上意味着同样的事情。  在我的大部分读和写中,宣言一词占主导地位,但原型一词是可以理解的。

    从上下文中可以明显看出,如果客户使用术语"函数原型",则他(或她)是指函数定义。  因此,我将从现在开始使用术语定义。

    我并不完全确定发生了什么。  我怀疑,以某种方式使用旧编译器进行构建时不使用选项--gen_func_Subsections,而使用新编译器进行构建时使用选项--gen_func_Subsections.  请在 C2000编译器手册中阅读有关该选项的更多信息。  如果使用--gen_func_Subsections,而从未调用函数,则该函数将从最终链接程序中排除。  消除此行为的最佳方法是将#pragma retain应用到永远不应删除的函数。  请在同一编译器手册中阅读#pragma Retain。

    总之:如果使用--gen_func_Subsections,则修复方法是将#pragma Retain应用于永远不应删除的函数定义。

    谢谢,此致,

    -George