两年的工作经验心得总结一下:怎么做到嵌入式高效编程。
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 重复代码的问题
- 程序体积变大
- 维护成本增加
- 容易漏改问题
- 迷惑人,对排查问题带来干扰
- 容易引发不一致性,造成程序运行意外
代码简洁暂且写到这里,以后工作中遇到典型问题继续更新。