1453|0

1140

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

嵌入式C代码优化 [复制链接]

之前刚开始工作时,参与做过嵌入式代码优化,除了最基本的函数实现细节算法优化外,还有一些细节的处理。当然之前优化时,也是借助了分析工具来分析哪些函数调用频繁,哪些开销比较大。对于具体细节的处理记得不一定全面了,当然也有部分操作在编译时,工具也有可能自动进行优化。

函数展开

类似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开销。

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表