如何将嵌入式的代码优化

之前刚开始工作时,参与做过嵌入式代码优化,除了最基本的函数实现细节算法优化外,还有一些细节的处理。当然之前优化时,也是借助了分析工具来分析哪些函数调用频繁,哪些开销比较大。对于具体细节的处理记得不一定全面了,当然也有部分操作在编译时,工具也有可能自动进行优化。
函数展开
类似inline,减少函数出栈入栈开销
结构体比较
相应数据结构具有不同的比特位含义,而高位更具有意义,比较时无需将成员一一比较,强转32/64位格式比较。
相同操作提取
提取相同深度的指针指向,如下a、c、d为指针,e为具体成员操作。
a-》c-》d-》e1,a-》c-》d-》e2,a-》c-》d-》e3.。. 。..则可将a1 = a-》c-》d,然后使用a1-》e1、a1-》e2、a1-》e3进行替换操作。
消息合并
线程之前多个消息发送会导致开销变大,可以合并成单个消息,同时处理多个事情,当然前提是这些事件可进行合并。
时间空间的转换(动态申请用静态变量替代)
频繁使用的消息可以改为一次性申请或是静态方式,以减少频繁申请释放的开销;而同一逻辑部分可能申请多次的情况,可以采用半静态半动态的方式,可以通过统计经常同时使用的次数来确定静态内存的大小。
寄存器(变量定义)问题
在arm上汇编可以看到当定义uint8 i;for(i = 1; i《 255; i++)时寄存器为32bit,所以在处理8bit数据时,需要额外的移位等操作来放置溢出超过8位情况,此时使用uint32定义反而可以减少mips开销。
来源:eefocus

浅谈开关电源上的电压波形曲线
Aptina推具有超高清4K视频和图像捕捉性能的1200/1300万像素移动图像传感器
仅有2%用户通过Alexa智能音箱购物中有90%的用户表示不会再尝试,亚马逊略显尴尬
Fitbit、Apple Watch等智能设备组成的是物联网吗?
可制造性、可靠性和可测性协同设计
如何将嵌入式的代码优化
51单片机设计测距仪原理及其应用
使用UCC28070实现无桥PFC方案
中温锡膏炉温曲线设置
傲势助力安全飞行 筑牢无人机安全基石
半导体光放大SOA应用(二)
SIM卡座生产制造,厂家需要做好哪些准备
推荐3款无线蓝牙耳机,什么才是适合自己的蓝牙耳机?
全球内存已开启涨价模式 Q2季度还会再涨10%
伺服控制与步进控制的性能对比
Pebble之后 Fitbit又收购Vector Watch
AI智能外呼机器人应具备哪些能力?
蒸汽流量计的误差分类互及特性
苹果未来iPhone或不再使用高通的基带芯片
安卓核心板_MT6765/MTK6765核心板规格参数