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.

[参考译文] CCS/MSP430G2553:使用浮点值和sqrt()函数

Guru**** 2608385 points
Other Parts Discussed in Thread: MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/655614/ccs-msp430g2553-working-with-floating-point-values-and-sqrt-function

部件号:MSP430G2553

工具/软件:Code Composer Studio

大家好,我一直在使用MSP430 g2553,首先从太阳传感器收集模拟数据,然后将其转换为数字形式。从所有三个方向的太阳传感器获得值后,我想根据我的设置找到光源的矢量。用于查找矢量 我需要一个sqrt()函数,我正在进行一些乘法。当我编译代码时,它显示了某种警告,即MSP 430没有乘法硬件,而且我正在处理浮点值,因此它变得耗电。我只是一个初学者 我不知道如何使用数学函数和浮点值。

请尽早有人帮助我。

我要在此处附上我的代码

#include <msp430g2553.h>

#include <stdio.h>

#include <mathing.h>

void main (void){

无符号int标志;
无符号int传感器[3];
长整型sunvec[3];
long int vecx;
长整型矢量;
long int vecz;


WDTCTL = WDTPW + WDTHOLD;
//TACCTL0 &=~CCIE;
//P3SEL = 0x00;
//P3REN = 0x06
//P3OUT = 0x02;
//P3DIR |= 0x02;
//P3DIR |=0x01;


标志= 0;
对于(;;)

IF (标志== 0)

传感器[0]=0;

ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON;

ADC10CTL1 = inch_0 + ADC10DIV_3;

ADC10AE0 |= BIT0;

ADC10CTL0 |= ENC + ADC10SC;

//___之二_SR_REGISTER (CPUOFF + GIE);

传感器[0]= ADC10MEM;

ADC10CTL0 &=~ENC;

标志= 1;

}

IF (标志= 1)

传感器[1]=0;

ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON;

ADC10CTL1 = inch_1 + ADC10DIV_3;

ADC10AE0 |= BIT1;

ADC10CTL0 |= ENC + ADC10SC;

//___之二_SR_REGISTER (CPUOFF + GIE);

传感器[1]= ADC10MEM;

ADC10CTL0 &=~ENC;

标志= 2;

}

IF (标志=2)

传感器[2]= 0;

ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON;

ADC10CTL1 = inch_2 + ADC10DIV_3;

ADC10AE0 |= BIT2;

ADC10CTL0 |= ENC + ADC10SC;

//___之二_SR_REGISTER (CPUOFF + GIE);

传感器[2]= ADC10MEM;

ADC10CTL0 &=~ENC;

标志= 0;

}


长int mul=传感器[0]*SENSOR[0]+ SENSOR[1]*SENSOR[1]+ SENSOR[2]*SENSOR[2];

long int deno=sqrt(mul);

vectra =传感器[0]/deno;

very =传感器[1]/deno;

vez =传感器[2]/deno;

sunvec[0]=vecx;
sunvec[1]=vecy;
sunvec[2]=vecz;

}
}

谨致问候

Tejas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ULP声明是正确的,因为您的程序将更大,并且使用浮点运行速度较慢(或更高的功率),而不是没有浮点运行。 另一方面,如果您需要它,则需要它,忽略(甚至禁用) ULP通知不会阻止您。

    如果您后来发现您的程序不符合您的限制条件,它不适合G2553闪存或不符合您的期限,您可以尝试通过Google搜索整数平方根函数或使用TI的IQMathLib。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢Bruce,
    还有一些警告告诉我在运行期间将代码移动到RAM。这实际上意味着什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这意味着从RAM运行的代码比闪存中的代码快得多。 您可以告诉链接器自动将某些函数移动到RAM以利用此功能。 如果性能良好或您的RAM很紧,请勿打扰。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢Keith,

    这是真的,但现在我应该做的事情我无法说明。 请告诉我如何找到带有浮点的sqrt。即使我意识到正在发生的问题,但问题是我无法找到解决办法,每个人都给出不同的解决方案。有人可以看看sqrt()的代码,因为当我评论的时候 sqrt(),代码运行正常,但当我涉及平方根时,它显示警告。所以,这有什么替代方法。我甚至尝试了sqrt(4),但它仍然显示相同的错误

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    普法大学的建议就是这样--建议。 这不是警告。 编译器的警告/错误指向可能的故障;ULP建议只是一个建议。

    我认为Keith和我都同意:忽略它。 如果实际出现故障,它将显示在其他位置。

    您可以使用“项目”->“显示生成设置”->“ULP顾问”来禁用这些消息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    许多使用MSP系列的人都在争夺无人机系统。 TI有益地添加了ULP建议消息,以便这些人员可以将功耗降至绝对最低。 在您的情况下,如果电流不是问题,您可以放心地忽略建议,使用sqrt(),就像使用任何嵌入式处理器一样。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢Keith,希望它能像这样工作。非常感谢

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