当前位置:网站首页>嵌入式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、总结
循环体中的循环变量采用自减的方式要比采用自增的方式,汇编代码要优化。
边栏推荐
- Webmagic+selenium+chromedriver+jdbc grabs data vertically.
- The understanding of string in C.
- Memory management A4
- Down sampling - signal phase and aliasing
- 技术实践干货 | 初探大规模 GBDT 训练
- c语言:13、指针与内存
- Win10 tips (1) -- transfer desktop location
- 利用 Fastjson json (简单粗暴版)
- C language: 13. Pointer and memory
- Hardware acceleration of zero knowledge proof
猜你喜欢

c语言:clion调试方法

200行代码快速入门文档型数据库MonogoDB

4 轮拿下字节 Offer,面试题复盘

C language case: password setting and login > clear solution getchar and scanf

c语言:12、gdb工具调试c程序

Daily question (02): inverted string

IPFs obtains the public key and private key through the interface, and encrypts the storage. First bullet

MongoDB学习笔记(1)——安装MongoDB及其相关配置

带来高价值用户体验的低代码开发平台

rxbinding
随机推荐
IPFs obtains the public key and private key through the interface, and encrypts the storage. First bullet
Error analysis of building Alibaba cloud +typera+picgo map bed
Cumulative output data of kettle Excel
MySQL学习笔记(2)——存储过程与存储函数
Yanghui triangle
opds sql 里面可以用set 定义局部变量吗
C language: 7. How to use C language multi source files
c语言:9、main函数中的return
C language: 12. GDB tool debugging C program
c语言:14、预处理
C语言案例:密码设置及登录> 明解getchar与scanf
我想咨询下,我们的maxcompute spark程序需要访问redis,开发环境和生产环境redi
Double insurance for line breaking
来一遍《剑指Offer》03. 数组中重复的数字
sql 字段类型转换
阿里云对象存储OSS的开通和使用
27. Basics of golang - mutex lock, read / write lock
Browser rendering principle analysis suggestions collection
Analysis of Eureka server
Can set be used to define local variables in OPDS SQL