让单片机代码性能起飞的七大技巧,从位操作到算法优化

目录

1.使用位操作代替算术操作,因为位操作更快。

2.不必要的操作

3.控制数据类型大小

4.利用硬件资源

5.自加、自减指令

6.优化算法


1.使用位操作代替算术操作,因为位操作更快。

// 示例:使用位操作设置和清除标志
 #define FLAG_MASK   0X01
 #define FLAG_OFFSET 0
 
 void SetFlag(void)
 {
	status_reg |= FLAG_MASK << FLAG_OFFSET;
 }
 
 void ClearFlag(void)
 {
	status_reg &= ~FLAG_MASK << FLAG_OFFSET;
 }

还有就是用左移、右移替代乘除法。

比如a=b*256,可以改成a = b<<8

比如a=b/256,可以改成a = b>>8

2.不必要的操作

去除代码中不必要的操作,如多余的变量赋值、函数调用等

// 示例:避免不必要的变量赋值
int GetMinValue(int a ,int b)
{
  return (a<b)?a:b;
}

int GetMaxValue(int a ,int b)
{
  return (a>b)?a:b;
}

3.控制数据类型大小

特别是尽量别用float,浮点运算通常需要更多的CPU周期和内存空间,因为浮点数的表示和运算比整数复杂,除非单片机内置了硬件浮点单元(FPU)。

能用unsigned就不用signed,无符号整数的运算可能比有符号整数更快,因为不需要处理符号位。

能用char就不用int,较小的数据类型在处理和传输时更快,因为它们占用的内存和带宽更少。特别对于存储大量数据的数组或缓冲区,使用 char 类型可以显著减少内存占用。

4.利用硬件资源

比如说STM32单片机,可以利用DMA传输数据,减少CPU负载。

5.自加、自减指令

用i--、i-=1、i++、i+=1、去替代i = i-1,i=i+1的操作,有些编译器对前者进行了优化,效率更高

6.优化算法

以计算1到100的和为例。

我们可能会首先想到使用循环,来写程序:

图片

这种方法虽然直观,但在效率上可能不是最优的。

可以根据等差数列求和公式,1到100的和可以表示为:

图片

n是序列的最后一项,即100。将这个公式应用到代码中:

图片

对以上两种实现代码的总结:

尽管程序都能得到相同的结果,但是第二种方法在运行效率上明显优于第一种。因为它避免了循环的开销,直接通过数学公式计算出结果。

在编写单片机代码时,尽量通过数学方法,或其他算法技巧,提高程序的执行效率。

这不仅可以减少了CPU的计算时间,还能减少程序占用的内存空间,从而提高整体性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挨踢玩家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值