打印

谁有C代码优化这方面的经验介绍下啊

[复制链接]
1702|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhaoxqi|  楼主 | 2018-6-7 14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
huangchui| | 2018-6-7 15:00 | 只看该作者
楼主碰到什么问题了?

使用特权

评论回复
板凳
zhaoxqi|  楼主 | 2018-6-7 15:02 | 只看该作者

代码通过仿真器,再DSP板子上已经调通,但是速度很慢,大概10多分钟跑几十K的样子

使用特权

评论回复
地板
zhaoxqi|  楼主 | 2018-6-7 15:05 | 只看该作者

但是最终我是要实时处理的,这个速度肯定是不行的,谁有C代码优化这方面的经验介绍下啊,感激不尽!

使用特权

评论回复
5
huangchui| | 2018-6-7 15:08 | 只看该作者
通用的优化方法
(1)减小运算强度

利用左/ 右移位操作代替乘/ 除2 运算:通常需要乘以ARM或除以2 的幂次方都可以通过左移或右移n 位来完成。实际上乘以任何一个整数都可以用移位和加法来代替乘法。ARM 7 中加法和移位可以通过一条指令来完成,且执行时间少于乘法指令。例如: i = i × 5 可以用i = (i<<2) + i 来代替。
利用乘法代替乘方运算:ARM7 核中内建有32 ×8 ARM乘法器, 因此可以通过乘法运算来代替乘方运算以节约乘方函数调用的开销。例如: i = pow(i, 3.0) 可用 i = i×i × i 来代替。
利用与运算代替求余运算:有时可以通过用与(AND )指令代替求余操作(% )来提高效率。例如:i = i % 8 可以用 i = i & 0x07 来代替。
(2)优化循环终止ARM条件
在一个循环结构中,循环的终止条件将严重影响着循环的效率,再加上ARM 指令的条件执行特性,所以在书写循环的终止条件时应尽量使用count-down-to-zero结构。这样编译器可以用一条BNE (若非零则跳转)指令代替CMP (比较)和BLE (若小于则跳转)两条指令,既减小代码尺寸,又加快了运行ARM速度。

(3)使用inline 函数
ARM C 支持 inline 关键字,如果一个函数被设计ARM成一个inline 函数,那么在调用它的地方将会用函数体来替代函数调用语句, 这样将会彻底省去函数调用的开销。使用inline 的最大缺点是函数在被频繁调用时,代码量将增大。

使用特权

评论回复
6
jiajs| | 2018-6-7 15:11 | 只看该作者
TI针对每个系列的dsp都有一个C优化文档,你可以看下,你在CCS界面help->user manuals打开的节目里面找的到

使用特权

评论回复
7
zhanghqi| | 2018-6-7 15:14 | 只看该作者
最关键的关键程序内的循环,按单片机位数,核数,寄存器情况,展开

使用特权

评论回复
8
zhenykun| | 2018-6-7 15:17 | 只看该作者
少用浮点,少用除法,多用硬件提供的特殊功能处理指令,有些算法的东东自己先算好,多用查表方面,等等吧

使用特权

评论回复
9
zhenykun| | 2018-6-7 15:21 | 只看该作者


去了解内核/IC(VHDL/Verilog HDL)设计的内容,也许就会有自己一定的理解

使用特权

评论回复
10
zhaoxqi|  楼主 | 2018-6-7 15:25 | 只看该作者
哦,我知道了

使用特权

评论回复
11
zhanghqi| | 2018-6-7 15:28 | 只看该作者
步进电机 转速 4000转/分钟 怎么做到的步进电机 转速 4000转/分钟 怎么做到的

使用特权

评论回复
12
yszong| | 2018-6-7 15:31 | 只看该作者
这个经验的就是多了解下算法优化方面的知识内容的。

使用特权

评论回复
13
zhaoxqi|  楼主 | 2018-6-7 15:37 | 只看该作者
哦,我知道了

使用特权

评论回复
14
quickman| | 2018-6-8 22:55 | 只看该作者
优化代码框架

简化函数

选取合适的算法和数据结构

减少运算强度

利用操作系统和CPU本身的优势

编译选项

使用特权

评论回复
15
jstgotodo| | 2018-6-8 22:55 | 只看该作者
用最简单的方式去实现,去掉冗余的逻辑

使用特权

评论回复
16
iamaiqiyi| | 2018-6-8 22:55 | 只看该作者
选择最好的算法永远是王道。

使用特权

评论回复
17
dzfansman| | 2018-6-8 22:56 | 只看该作者
将值不变的条件式放在循环的外面

使用特权

评论回复
18
sanxingnote7| | 2018-6-8 22:56 | 只看该作者
尽量使用常量

使用特权

评论回复
19
backlugin| | 2018-6-8 22:56 | 只看该作者
C语言数据运算强度的优化,即使用快的运算代替慢的运算

使用特权

评论回复
20
sdCAD| | 2018-6-8 22:56 | 只看该作者
定义函数原型,便于编译器优化

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

808

主题

10636

帖子

4

粉丝