uV4如何在优化级别0的情况下,使得for循环实现在优化级别3时的运行速度?

2019-07-21 00:31发布

以下是uV4的优化级别设置:




以下是所要运行的程序(for循环实现从后面地址中提取数据送给shuzhu1[]):



for()循环的执行速度,在优化级别为0的情况下是在优化级别为3的情况下的10/14,
虽然在优化3的情况下执行速度快,但是debug效果很差,程序会乱跑,不能用优化3
而优化0情况下,虽然debug正常,但是执行速度比较慢
所以我就想是不是可以在优化级别0的情况下,通过某种方法使得for循环执行速度达到优化3情况下的速度(别的程序不用快,只要for循环快就行)
现在有两个想法:
1,for循环部分直接用汇编编写,在优化0的情况下把for循环替换成优化3下的for的反汇编指令
2,对现有的for循环优化,例如用指针什么的,或者用别的更快的循环方法代替for循环(具体还不知怎么办)


以下为优化0情况下和优化3情况下,for循环反汇编

优化0(黑 {MOD}部分):


优化3(黑 {MOD}部分)



哪位大神知道的,请给点意见,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
xijiele
1楼-- · 2019-07-21 21:38
在STM32F7的库里看到有这样的语句
#if defined   (__CC_ARM) /*!< ARM Compiler */
#pragma O0
#elif defined (__GNUC__) /*!< GNU Compiler */
#pragma GCC optimize ("O0")
#endif /* __CC_ARM */
整个工程设置的是O3的优化等级,不过这貌似是对一整个函数进行优化,不知道能不能对函数内的某一部分优化。实在想提高速度的话就用DMA呗
FreeRTOS
2楼-- · 2019-07-22 02:19
回复【7楼】等待烟花美:
---------------------------------
楼主,想请教你个问题,MDK的优化级别2和优化级别3编译代码后,代码量相差比较少,想问下你如果我不考虑这么点代码量差别时,那么选用优化级别2好呢还是用优化级别3好?
等待烟花美
3楼-- · 2019-07-22 08:01
 精彩回答 2  元偷偷看……
等待烟花美
4楼-- · 2019-07-22 09:29
回复【9楼】FreeRTOS:
---------------------------------
我程序感觉优化2和优化3debug的时候,乱跳的效果一样。
一般好像基本用优化0,不咋的会出问题。用优化2,3的话,我老是出问题,程序乱跑,有人说优化2,3不出出问题,问题出在程序不够规范上。
优化3好像是在时间和空间上优化,可能涉及到某些程序时,优化3会比优化2优化的更多一点。
不过如果不是必要,还是用优化0比较稳妥吧。
下面是我查到的关于优化0,1,2,3的解释,英文版,你可以参考下
http://blog.csdn.net/yangtalent1206/article/details/8493120
还有一个思路就是楼上说的对某个子程序进行局部优化,下面是有关局部优化方法的链接
http://comm.chinaaet.com/adi/blogdetail/42068.html
FreeRTOS
5楼-- · 2019-07-22 15:06
 精彩回答 2  元偷偷看……
等待烟花美
6楼-- · 2019-07-22 18:07
 精彩回答 2  元偷偷看……

一周热门 更多>