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.

关于CCS9的浮点运算的效率

Other Parts Discussed in Thread: MSP430F247, MSPMATHLIB

芯片是msp430f247,代码是每秒执行两个运算函数,函数里有大量的浮点运算,包括求平均、方差等。

发现执行这两个函数需要240ms的时间,而且执行几次后定时中断函数干脆不触发了。为了缩短浮点运算的运行时间,尝试过用QmathLib,但是精度损失太大,直接损失了20以上

求问各位大神有什么建议,在此先谢过了

  • 请参考我之前的回复

    e2echina.ti.com/.../155324

    另外尽量不要使用浮点除法
  • 你好,谢谢你的回复。我从链接点进去,确实是显示数学库的界面

    但是点进“获得软件”就直接跳到了ccs10的下载界面

    尝试过几次都是这样。我以为数学库隐藏在ccs10的安装包里面,干脆下载并安装了,然而并没有找到MSPMATHLIB。如果说是因为我眼瘸点错了地方,还请原谅我的打扰。希望能提供MSPMATHLIB的压缩包

    万分感谢

  • 现在是包含在CCS内的。以CCS10为例,默认安装路径下可以找到MSPMATHLIB

    C:\ti\ccs1000\ccs\ccs_base\msp430\lib

    另外可以在下面的链接找到用户指南

    www.ti.com.cn/.../slau499.pdf
  • 你好,谢谢你的耐心指导。我找到了数学库,根据文件步骤,导入相关lib文件

    修改了properties的相关设置,添加math.h头文件,使用h文件里的函数运算,带变量分母的除法计算已全部用了IQmath库,仍然无法提高运算速度

    虽然已经可以一直进入定时中断函数了,但是那两个函数运算时间已长达430ms

    同样的代码(去除IQmath)在IAR运行只要6ms...

  • 抱歉,之前忘记说了

    mspmathlib 现在能支持MSP430F5XX,MSP430F6XX,MSP430FRXX三个大系列的MCU。

    您可以尝试使用下面的方法

    e2e.ti.com/.../46816 

    https://e2echina.ti.com/question_answer/microcontrollers/msp430/f/55/t/2760

  • 一般的话,没有MSP430FR系列的LEA的话,浮点运算会比较慢
  • 你好,感谢你的耐心指导

    由于其他项目比较着急,ccs的浮点运算问题搁置了几天。今天调了一下,成功将运算时间减至7ms,网上找不到类似这种的处理方法(或者说我不会用搜索引擎),将之记录如下,以供后来人参考

    本项目主要功能是获取、处理、发送大量浮点型数据,在ccs的项目默认设置中,程序无法正常进入中断。经过多方尝试,排除干扰函数,稍稍可以得出内存溢出的结论,从map文件中可看到,由于程序使用了大量全局变量,RAM几近填满

    程序自然报错。参考IAR的设置 ,将ccs也修改为32位(右键项目>>build>>optimization>>Inline hardware multiply version of RTS mpy routine(--use_hw_mpy)>>32)

    程序运行时间大大缩短,已达到项目要求。但是我后来发现,下位机串口每隔1s发送数据,发送30s左右后,再也进不了串口中断,而定时中断,ad12的中断可以正常响应。网上的前辈说是串口中断溢出,需要清空溢出标志位,但是通过寄存器窗口发现这并不符合我的情况。通过map文件,发现RAM的使用度还是很大,于是我把所有的double全改成float,RAM空间大致还剩500byte左右。这时串口中断可以一直响应

    然后新的问题就来了,串口发送的数据是错误的(事实上上一步的串口数据也是错误的)

    今天要端午放假的小菜鸟我比较快乐,快乐地在想:那个none是什么意思

    设置了之后,哇,RAM使用度骤减,然后我把之前改的float又改回了double,RAM只使用了3187byte,串口正常响应,数据接收正确

    网上找不到相关解释,于是我大胆猜测,Inline hardware multiply version of RTS mpy routine的设置的直观体现就是压缩RAM的数据(艺低人胆大)

    至此,问题完美解决(也许并不完美)。以上用词并不专业,也许还有逻辑bug,贻笑各位了

    补充:哦有点悲伤了,把之前改的float改回了double是不行的,上面RAM使用度骤减可能是我眼瘸看到flash了

  • 谢谢您的详细反馈!

    Inline hardware multiply version of RTS mpy routine 这里是用来选择硬件乘法器的
  • 请问none不是不选择吗,默认是使用64位乘法器?
  • 具体您可以看一下

    www.ti.com/.../slau132m.pdf

    第33页 --use_hw_mpy[= 16,32,F5,none]
  • 好的,谢谢