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.

[参考译文] 编译器/MSP432P401R:IQ 函数

Guru**** 2605765 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/652373/compiler-msp432p401r-iq-functions

器件型号:MSP432P401R

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

您好!

我注意到、当我使用函数 IQ20mpy()时、我的闪存中有所有 IQNmpy 函数。 起初,我认为这是一个例子,因为我使用的全局 IQ 为20,并使用了 IQmpy(),但当我将 IQmpy 更改为 IQ20mpy 时,没有任何变化。 我希望闪存中不会有其他 IQNmpy 函数? 那么、我的问题是、即使我仅使用 IQ20mpy、闪存中是否会始终存在所有 IQNmpy 函数? 我是否可以在链接器中执行一些操作来禁止其他函数下载到闪存?

IQNdiv 和其他函数也是如此。

此致、

Ugljesa Popovic。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    感谢您在论坛上发帖。
    您的期望是正确的、链接器将仅链接项目所使用的函数或 API。
    我在 SDK--> Examples -> nortos -> MSP_EXP432P401r -> iqmathlib 中的两个示例项目上对此进行了测试

    我看到只有项目使用的函数被链接。
    我可以通过构建 CCS 工程并检查调试文件夹中的*。map 文件来验证这一点。
    Ex_2和 Ex_3项目使用不同的函数、映射文件会相应地反映这些函数。

    但是对于您的特定问题、当调用 IQNmpy (或其中一个函数调用另一个函数)时、IQmpy 可能与 IQNmpy 相关或链接在一起。
    我需要对此进行检查、并可以进行回帖。

    您如何确定未使用的函数链接到您的项目?
    是否正在检查映射文件?

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

    您好!

    感谢您的回复。
    是的、我正在检查映射文件。 我在其他项目中尝试过它,我确信我没有使用任何 IQ 函数,只添加了 IQ20mpy,并且再次添加了所有其他 IQNmpy 函数。 我还在映射文件中看到它链接为:IQmathLib_CCS_MSP432.lib:_IQNmpy.obj (.text),所以我想有一个调用其他函数的主函数?... 但另一方面、我可以在汇编窗口中看到 IQ20mpy 和 IQ21mpy 等两个函数在不同的地址上跳转、因此在它们的地址上跳转、而不是在我提到的那个"主"上跳转。

    编辑:

    我已经导入了您提到的 ex2项目并构建它.. 在我的映射文件中有其他 Qmpy 函数... 我看到使用了 Q12mpy (全局 Q 为12)和 Q8mpy、但在映射文件中、我可以看到所有其他 Qmpy 函数。

    全局符号:按名称
    
    地址名称的字母顺序排序
    --- ---
    
    0000a3e9 _Q10mpy
    
    …
    0000a3d9 _Q11mpy
    
    …
    0000a3c9 _Q12mpy...
    
    
    0000a3b9 _Q13mpy...
    
    
    0000a3a9 _Q14mpy...
    
    
    0000a399 _Q15mpy...
    
    
    
    0000a389 _Q1mpy
    
    ……
    0000a379 _Q2mpy...
    
    
    0000a369 _Q3mpy...
    
    
    0000a359 _Q4mpy...
    
    
    0000a349 _Q5mpy...
    
    
    0000a339 _Q6mpy...
    
    
    
    0000a319 _Q8mpy...
    
    
    
    0000a309 _Q9mpy 

     

    此致、

    Ugljesa Popovic。

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

    >>所以我想有一个调用其他函数的主函数?...

    在浏览源代码时、IQ"x" mpy 会调用函数 IQNmpy 并传递"N"参数。
    //来源
    int32_t _IQ31mpy (int32_t a、int32_t b)

    返回__IQNmpy (a、b、31);


    我们的软件团队会研究构建库时使用的编译器选项、以查看它是否导致了行为。
    因此、我们应该能够发布澄清您的问题的更新。

    -Priya
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的。 期待得出结论、这会显著减小代码大小。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我已经研究过这个问题、看起来这些库不是使用"-gen_func_subsections=on"编译器选项构建的。 因此、编译后的目标文件中的所有函数都放置在一个段中、当仅使用一个函数时、链接器无法将它们排除(例如、_Q1mpy 到_Q15mpy 的所有变体都包含在_QNmpy.obj 段中、无法分隔)。

    我确认了使用"-gen_func_subsections=on"重建库可修复此问题、并在下一季度的 MSP432 SDK 版本中归档了一个错误来修复此问题。

    此致、
    Brent Peterson
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了添加到 Brent 的帖子-在2018年、MSP432P4 SDK 版本的第一个版本将在 March15-30时间范围内解决此问题。