单片机代码优化

单片机代码优化

一.宏定义与头文件

头文件基本组成

#ifndef _KEY_H_ //防重复引用,如果没有定义过_KEY_H_,则编译下句
#define _KEY_H_ //此符号唯一, 表示只要引用过一次,即#i nclude,则定义符号_KEY_H_

char keyhit( void ); //击键否
unsigned char Keyscan( void ); //取键值
#endif

宏定义

  • 宏名用大写
  • 宏定义不是C语句,结尾不加分号
#define KEYNUM 65//按键数量,用于Keycode[KEYNUM]
#define LINENUM 8//键盘行数
#define ROWNUM 8//键盘列数

二.运算优化

1.乘除法都可换成移位

2的倍数

a = a * 4;
b = b / 4;
// 可以改为:
a = a << 2; 
b = b >> 2;

其他

a = a * 9
// 等价于 a = a * 8 + a
a = (a << 3) + a

2.取模

x = x % 8
// 就是8 - 1
x = x & 7

三.语句

1.循环

for(;;)while(1)

四.变量类型

1.全局变量

  • 定义在函数外的变量,占用资源
  • 通用性变差

2.局部变量

只在函数内部有效,不赋值,他的初值是不确定的啊

3.auto类型

局部变量默认就是auto

4.static类型

  • 将局部变量定义为static,则他在函数内的值是不变的(函数结束的时候不会消亡)且初值默认为0。
  • 将全局变量设置为static,则他在当前文件可用,在其他文件是读取不到的

5.extern类型

多文件要用到,比如定义一个全局变量,多文件都要读取到这个全局变量的值。

// 这里是声明
extern int MAX;

6.register类型

调用寄存器来算

int sum = 0;
for (register int i = 0; i < 10; ++i)
{
    
    
    sum += i;
}

猜你喜欢

转载自blog.csdn.net/weixin_44179485/article/details/113529150