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.

[参考译文] 编译器/CC2650:定点乘法需要400个时钟周期

Guru**** 2588135 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/607499/compiler-cc2650-fixed-point-multiply-is-taking-400-clock-cycles

器件型号:CC2650

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

您好!

我正在尝试构建双二阶滤波器、但我无法通过乘法?

我要确保700个时钟周期。 第一个副本只需要52个副本。

q31_t test1、test2、test4;

stampy[stampTick].wordcount1 = HWREG (I2S0_BASE + I2S_O_STMPWCNT);
stampy[stampTick].bClocks1 = HWREG (I2S0_BASE + I2S_O_STMPXCNT);


test1 =((HannahStereoFrame *) i2sBlockActiveIn->buf)->Fixed32[0];
test3 = test1 *(test2 + 0.5);                                  //这需要700个周期


stampy[stampTick].wordcount2 = HWREG (I2S0_BASE + I2S_O_STMPWCNT);
stampy[stampTick].bClocks2 = HWREG (I2S0_BASE + I2S_O_STMPXCNT);

如果您对快速定点乘法和总和有任何帮助、我们将不胜感激。

谢谢、

Ken Koch

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

    我想您要向 Q31_1中的一个添加双字面量(0.5)。 这将使您的加法和乘法双精度浮点运算成为可能。 我想这些操作是在软件中实现的。 您应该使用定点字面量0.5、这可能只是"1"。

    Markus

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

    [报价用户="Markus Molol"]我想这些操作是在软件中实现的。

    正确。  Cortex-M 器件没有浮点指令。  因此、"* 0.5"操作通过调用双精度数学例程来完成。

    谢谢、此致、

    乔治

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

    应该有一个用于将浮点值转换为 Q31的宏、但我不知道该宏的名称是什么。