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.

C2000两个32位数的乘法问题



使用的CCS3.3,芯片是2812,做两个32位数的乘法,结果总是不正确,可以确定不是因为溢出产生的错误。有没有人遇到过类似的情况。

关键部分代码如下:

long long a;

long long b;

long long C;

a = (int64)U;
b= (int64)I;
C = a * b;

U和I是型参,32位无符号整数。测试中U=229777,I =679190,用window的计算机算的值是156062240630,这个值应该是对的。乘数其中一个是10 的整数倍,积应该也是的。而上述代码算出来的结果是157505658604,这个值显然不对,但是有点儿接近正确值,不知道该如何解决

  • 原因找到了,出现的异常现象是因为积的低32位被乘以2了,高32位没有变。试了一下两个比较小的数相乘,乘积不超过32位的时候积是理论值的2倍。

    根本原因怀疑是引用的别人的汇编库运行中修改了PM位的值,因为以前遇到过类似的情况,但是都是32位的数,也没有从根本上解决。

    我想问一下如果全部用TI的库,比如DSP库,会不会也有类似的情况出现。打算参考TI的定点DSP库修改程序,但是怕也有类似的情况出现,希望能给个建议

  • 先看看2812的数据类型吧 

  • 问题的根本原因不是数据类型的问题,简单的数据类型的问题很明显的。
    现在基本可以确定问题的根本原因就在与所用的汇编库里面操作了PM位。导致用C写的函数做乘法时受到了PM位的影响。
    我想确定一下如果没有额外的操作,是不是能保证数据计算的正确性。还有如果是32位的乘法,在CCS里面用C直接写和汇编效率上能差多少?