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.

[参考译文] MSP430F5259:iqmathlib global_IQ 始终默认为4

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/566025/msp430f5259-iqmathlib-global_iq-always-defaults-to-4

器件型号:MSP430F5259
主题中讨论的其他器件:MSP-IQMATHLIBMSP430WARE

您好!  

在我的项目中、我在各种文件中使用 IQmathlib 定点算术库。

在每个文件中、我使用以下序列:

#define GLOBAL_IQ 6 //例如
#include 

在构建和闪存之后、我注意到在打开的声明时  

_iq (211.98232); 

它将跳转到 iqmatlib.h 并转到以下部分、就像 GLOBAL_IQ = 4一样  

打开以下声明时也会发生同样的情况:

iqtemp =_IQmpy (ucnt、_IQ (-636.8443398)); 

它将跳至:

我甚至尝试了:

#undef global_IQ
#defineglobal_IQ6
#include "IQmathLib.h"

相同的结果:(

这种情况发生在任何文件上的任何#define 值、始终处理 global_iq==4

我在项目属性>编译器>预定义中双击 global_IQ、没有这样的定义

我已经清理并重建了项目。 相同的结果。

有什么想法吗?

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

    您好、Eyalasko、

    我将尝试引入 MSP430 MSP-IQMathlib 作者征求他的意见。 我认为#define 宏不是全局宏、因此尝试在 IQmathLib.h 之外更改值不会产生任何影响。 您是否曾尝试更改 IQmathLib.h 内的 global_IQ 定义?

    此致、
    Ryan

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

    感谢您的快速响应。
    我没有更改 iqmathlib.h 中的 global_IQ、因为我在每个源文件中都需要不同的定点"解决方案"。
    这就是为什么我在 #include "iqmathlib.h"之前使用本地#define global_IQ 的原因、如《iqmathlib 用户指南》(第一种方法)第2.6节所述

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

    好的、我们现在位于同一页上。 当我在 CCS 内部打开函数声明时、我注意到它确实会跳转到 IQmathLib.h 中定义的 global_IQ 值的设置、但是反汇编器显示所引用的实际函数来自在 IQmathLib.h 被包含之前定义的 global_IQ。 您使用的是什么 IDE、编译器和 IQmathLib 版本?

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

    CCS 7.0.0.00042
    编译器16.9.1LTS
    iqmathlib .A 取自 TI_products_DIR\MSP430Ware_3_50_00_04\iqmathlib\libraries\ccs\MPY32\5xx_6xx\IQmathLib.A (我认为它的01.10.00.05)
    iqmathlib.h 包含在"${TI_products_DIR}\MSP430Ware_3_50_00_04\iqmathlib\include"中  (我认为它的01.10.00.05)

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

    您好、Ryan、

    是否有此更新?

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

    Yealasko、

    我可以重新创建此问题、我看到使用了不正确的 global_Q 定义、但是当我编译和运行时、我会得到正确的结果。 我使用以下两个文件创建了一个测试项目。

    main.c:

    #include "msp430.h"
    
    //将全局 Q 设置为12,这在标头
    #define global_Q 中正确显示 12
    #include "QmathLib.h"
    
    volatile _q result;
    
    extern _q testQ4 (void);
    
    int main (void)
    {
    /*禁用 WDT。 *
    WDTCTL = WDTPW + WDTHOLD;
    
    //结果正确设置为_Q12 (1.0)= 4096
    结果=_Q (1.0);
    
    //调用测试函数、结果正确设置为_Q4 (1.0)= 16
    结果= testQ4();
    
    返回0;
    }
    

    test.c:

    //将全局 Q 设置为4,标头仍然显示 main.c
    #define global_Q 中的12 4
    #include "QmathLib.h"
    
    _q testQ4 (void)
    {
    _q 结果;
    
    结果=_Q (1.0);
    
    返回结果
    ;}
    

    从 main.c 中打开 QmathLib 头会显示_Q (a)被定义为_Q12 (a)、正如您所期望的那样。 然而、从 test.c 中打开标头时、错误地显示_Q (a)被定义为_Q12 (a)、此时它应该是_Q4 (a)。 当我运行项目时、两种情况下的结果都已正确设置、因此宏工作正常。但是我认为这是 CCS 处理处理器和语法突出显示的问题、一个.c 文件的头文件会被处理、但从其他源代码打开时不会重新处理。

    此致、

    Brent