首页 > 代码库 > 嵌入式高效编程(一)——简洁

嵌入式高效编程(一)——简洁

两年的工作经验心得总结一下:怎么做到嵌入式高效编程。

1、高效编程的概念

  • 程序的性能高≠高效编程
  • 精确实现预定功能
  • 调试时间在整个开发周期内占比低
  • 代码简洁
  • 代码便于维护的代码
  •  高效编程就是快速写出高质量的代码

2、高效编程的要点

  • 简洁
  • 清晰
  • 灵活
  • 安全
  • 单元测试
  • 设计

3、高效编程要点:简洁

简洁可以简单理解为无重复的量和代码,无无效代码或逻辑。

3、1 用宏代替常数

double circle_area(double r)
{
	return 3.14 * r * r;
}

#define PI	3.1415926
#define float_t	double
float_t circle_area(float_t r)
{
	return PI * r * r;
}

3、2 用宏表示重复的计算公式或操作

#define point_reset(p)	((p % 4) < 2) ? (p / 4 * 4) : (p / 4 * 4 + 4)
xxx = point_reset(xxx)
yyy = point_reset(yyy)

3、3 用同一个量来表达一致的量

pAudioBuf = malloc(一个稍复杂的计算表达式exp);
…
memcpy(pAudioBuf, src, 一个稍复杂的计算表达式exp);

iAudioSize = 一个稍复杂的计算表达式exp;
pAudioBuf = malloc(iAudioSize);
…
memcpy(pAudioBuf, src, iAudioSize); 
Funxxx()
{
	for (i = 0; i < 16; i++)
	{…
	}
	for (i = 0; I < 16; i++)
	{
	}
}

Funxxx()
{
	iCnt = 16;

	for (i = 0; i < iCnt; i++)
	{
	}
	for (i = 0; I < iCnt; i++)
	{
	}
}

3、4 通用的代码逻辑独立成函数

3、5 函数只定义一份

3、6 无效的逻辑判断

例一
{
	…
	if (res)
	{
		return rs;
	}
	else
	{
		return 0;
	}
}

//修改
{
	…
	return res;
}
例二
{
…
	if (res)
	{
		return xxxx;
	}
	else
	{
		return 0;
	}
}
修改
{
…
	return res ? xxx : 0;
}

3、7 数组的应用

例:
{
	…
	if (0 == res)
	{
		return xxx1;
	}
	else if (1 = res)
	{
		return xxx2;
	}
	else if (2 = res)
	{
		return xxx3
	}
	….
}
修改:
{
	vals[] = {xxx1, xxx2, xxx3, …};
	…
	return vals[res];
}

3、8 模板应用

double double_add(double a, double b)
{
	return a + b;
} 
float float_add(float a, float b)
{
	return a + b;
}
int int_add(int a, int b)
{
	return a + b;
}

#define DECLARE_MATH_FUN(name, type, op) type type##_##name(type a, type b) { 	return (type)(a op b);}
DECLARE_MATH_FUN(add, int, +);
DECLARE_MATH_FUN(add, float, +);
DECLARE_MATH_FUN(add, double, +);
DECLARE_MATH_FUN(sub, int, -);
DECLARE_MATH_FUN(sub, float, -);
DECLARE_MATH_FUN(sub, double, -);

3、9 简洁代码的恶敌

  • 复制&粘贴
  • 懒惰的程序员
  • 不思考的程序员
  • 没长进的程序员
  • 以代码量的多寡论成就感的程序员

3、10 重复代码的问题

  • 程序体积变大
  • 维护成本增加
  • 容易漏改问题
  • 迷惑人,对排查问题带来干扰
  • 容易引发不一致性,造成程序运行意外
代码简洁暂且写到这里,以后工作中遇到典型问题继续更新。