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/MSP430FR2311:计算浮点运算

Guru**** 2595770 points
Other Parts Discussed in Thread: MSP430FR2311, MSP430FR5994

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/639944/ccs-msp430fr2311-compute-floating-point-operations

部件号:MSP430FR2311
主题中讨论的其他部件: MSP430WAREMSP430FR5994

工具/软件:Code Composer Studio

我有MSP430FR2311连接到LIS3DH (加速计)。 我有3个16位整数值,我是通过I2C接口从LIS3DH读取的。 我想对这三个16位值执行数学运算。  

操作如下:

浮点值=((((accel_x / 8190)* 9.8)*((accel_x/8190)* 9.8))+ (((accel_y / 8190)* 9.8)*((accel_y / 8190)* 9.8))+ (((accel_z / 8190)* 9.8)*((accel_z / 8190) 9.8 *))))

但是,当我尝试这样做时,我得到了以下编译错误:

"../lnk_msp430fr2311.cmd",第133行:错误#1.0099万-D:程序将不适合可用内存。对"all_FRAM"区大小0x22b9进行定位失败。 可用内存范围:
FRAM大小:0xe80未使用:0xe80最大孔:0xe80
错误#1.001万:链接期间遇到错误;未构建"MSP430FR231x_SmartBottle_v3.out

当我对该行进行注释时,将其写为  

浮点值= 0.1 ;

编译成功完成。 这是否意味着此计算操作至少占用0x22b9 - 0xe80 = 0x1439的额外空间量? 解决方案是什么?如何执行浮点运算?

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

    是的,由于MSP430FR2311片上没有浮点加速器,因此执行浮点计算会增加大量开销代码,以便在它上执行。 浮点乘法增加了更多的开销,以便执行。 这只是浮点运算的性质。 仅将变量声明为浮点,其累加量几乎不会增加。 例如,将上面的字符串与长字符串相同(当然要删除小数),这很可能适合设备。

    一种选择是继续使用浮点并升级到更大的设备。 数学将占用大量内存,并将需要大量的周期才能完成。

    另一种方法是使用MSP430Ware中提供的IQLibrary将浮点计算转换为Qmath格式。这将减小代码大小并提高性能。 话虽如此,我不确定此库是否适合此设备,因为MSP430FR2311的内存占用空间较小,但值得调查。 如果不适合,则可能需要迁移到更大的内存设备。

    如果您需要额外的性能,则可能需要了解MSP430FR5994系列器件,因为它包含低能量加速器(LEA)模块。 此模块用于执行浮点计算和矢量数学。 它使用DSPLIB来执行此操作。 MSP430FR5994也以Launchpad形式提供。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以考虑所有常量:

    value =(accel_x*accel_x + accel_y*accel_y + accel_z*accel_z)*(9.8 * 9.8 /(8190*8190)8190));

    然后,您可以使用整数乘法执行第一部分(但这需要32位整数),根据您要对值执行的操作,可能不需要按常量因子进行缩放。