当前位置:网站首页>嵌入式C语言对次数固定的循环的优化
嵌入式C语言对次数固定的循环的优化
2022-07-27 16:51:00 【WangLanguager】
1、循环优化
(1)循环是代码优化的重点
(2)C代码主要使用for循环或者while循环
2、固定次数的循环
问题:什么是ARM上编写for循环最高效的办法?
例:固定次数的循环
int checksum_v5(int *data)
{
unsigned int i;
int sum = 0;
for(i = 0; i < 64; i++)
{
sum += *(data++);
}
return sum;
}
上述程序的汇编代码为:
checksum_v5_s
MOV r2,#0 ;r2 = data
MOV r0,#0 ; sum = 0
MOV r1,#0 ; i = 0,计数器
checksum_v5_loop
LDR r3,[r2] #4 ;r3 = *(data++)
ADD r1,r1,#1 ;r1++
CMP r1,#0x40 ;compare i,64
ADD r0,r3,r0 ;sum += r3
BCC checksum_v5_loop ;if(i < 64) loop
MOV pc,r14 ;return sum
3、讨论:
ARM汇编中,实现循环只要两条指令就可以了
(1)减法指令用作循环计数,同时设置结果条件标志
(2)一条条件分支指令
4、循环代码修改为:
int checksum_v6(int *data)
{
unsigned int i;
int sum = 0;
for(i = 64; i != 0; i--)
{
sum += *(data++);
}
return sum;
}
checksum_v6_s
MOV r2,#0 ;r2 = data
MOV r0,#0 ; sum = 0
MOV r1,#0X40 ; i = 64,计数器
checksum_v6_loop
LDR r3,[r2] #4 ;r3 = *(data++)
SUBS r1,r1,#1 ;i-- and set flags
ADD r0,r3,r0 ;sum += r3
BNE checksum_v6_loop ;if(i != 0) loop
MOV pc,r14 ;return sum
5、总结
循环体中的循环变量采用自减的方式要比采用自增的方式,汇编代码要优化。
边栏推荐
- Rs2022/ cloud detection: semi supervised cloud detection in satellite images by considering the
- kettle8.2 安装及常见问题
- C language: 11. Pipeline
- sql 字段类型转换
- Basic concepts of Nacos and single machine deployment
- Yanghui triangle
- 利用 Fastjson json (简单粗暴版)
- Web3.0热浪之下 门萨Mensa生态震撼来袭
- ReferenceError: __dirname is not defined in ES module scope
- Technology Summit 58 Liu Yuan in the same city was invited to attend qecon 2022 global software quality & effectiveness conference
猜你喜欢

kettle学习——8.2版本的资源库配置变为灰色,且没有了Connect按钮

Kettle consolidated record data reduction

电商商城小程序项目完整源码(微信小程序)

C language: 7. How to use C language multi source files

C language: 5. Multidimensional array

Golang sets the domestic image, vscode configures the golang development environment, and vscode debugs the golang code

200 lines of code quick start document database monogodb

ES6学习笔记(1)——快速入门

c语言:c语言代码风格

C language: 9. Return in main function
随机推荐
技术实践干货 | 初探大规模 GBDT 训练
win10小技巧(1)——转移桌面位置
c语言:8、makeFile编写
让你的聊天气泡丰富多彩
[Luogu p4183] cow at large P (graph theory) (tree array)
101. (cesium chapter) cesium particle system - snow
Nacos cluster deployment - high availability guarantee
kettle学习——8.2版本的资源库配置变为灰色,且没有了Connect按钮
c语言:clion调试方法
c语言:5、多维数组
Latex use - control the display position of tables or graphics
Basic knowledge of C language (for personal use)
SQL time processing (SQL server\oracle)
Analysis of Eureka server
Daily question (02): inverted string
阿里云视频点播服务的开通和使用
零知识证明的硬件加速
Rename file with command line
New system installation mysql+sqlyog
c语言:c语言代码风格