单片机代码优化
一.宏定义与头文件
头文件基本组成
#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;
}