函数参数类型 总体思想:尽量采用int、long类型。 有符号数和无符号数 如果程序中只有加、减、乘法,那么有符号数和无符号数的执行效率没有区别。 如果有除法,那么需要额外的步骤。 有符号数和无符号数(续) 有符号除法 在ARM C中,如果x是负数,那么除2操作不是一个右移操作。例如-3/2=-1。但是在ARM机器中: 1 1 1 1 1 1 0 1 -3 1 1 1 1 1 1 1 0 -2 -1 1 1 1 1 1 1 1 1 直接右移 加1右移 结论: 使用无符号数除法效率更高。 对于存放在寄存器中的变量,尽量采用整型。 尽可能使用无符号数进行运算。 函数参数和返回值尽量采用整型数据。 总结 三、循环方式对程序效率的影响 循环是代码优化的重点 C程序主要使用for和while进行循环 固定次数的循环 什么是ARM上编写for循环最高效的方法? 固定次数的循环(续) int i; for (i=0; i100; i++) {…} int i; for (i=100; i0; i--) {…} 上面代码要实现转移需要两条指令,首先把某寄存器的内容和100比较,其次条件符合时转移。相同功能的代码如果写作下面形式,则可用“BNE”一条指令实现比较以及转移两个功能。 至少一次循环 对于“for(;n0;n--)”,如果能确保第一次循环之前n恒大于0,此时取消第一次n大于0的判断,是不会影响程序的逻辑,而且显然程序执行效率可以提高,用do…while…循环可以达到这一目的 循环展开 循环开销重复100次,假设每次循环开销占用4个时钟周期,循环体中的加法占用1个时钟周期,那么有效程序仅占CPU执行时间的20%,其余80%都是服务性开销,效率为1/5。 int i,t=0; for (i=100; i0; i--) { t++; } 循环展开(续) int i,t=0; for (i=50; i0; i--) { t++; t++; } 每次循环开销4个时钟周期不变,但是有效程序占用2个时钟周期,也即效率提高到1/3。 循环展开(续) 问题:循环展开到什么程度?全部展开是否最优?要意识到循环展开是有代价的: 增加程序的长度。 循环体内代码越多,就越有可能造成cache失效 所以在任何程度上展开循环要具体问题具体分析,在执行时间和代码量间找到一个最佳平衡点。 总结: 循环计数递减。 如确定循环次数大于1,那么用do…wile。 对于小循环体,可以循环展开。 【例3-23】 /* ch3_23.c */ #include stdio.h #include syslog.h #include unistd.h #include stdlib.h #include time.h int main() { int mask; time_t rawtime; struct tm * timeinfo; char c[100]; openlog(test:, LOG_PID, LOG_USER); time ( rawtime ); 【例3-23】(续) timeinfo = localtime ( rawtime ); syslog(LOG_INFO, The current date/time is: %s\n, asctime(timeinfo)); getcwd(c,sizeof(c)); syslog(LOG_INFO, you are in the direcory: %s\n, c); closelog(); mask=setlogmask(LOG_UPTO(LOG_NOTICE)); syslog(LOG_INFO, LOG_INFO is inferior to LOG_NOTICE.\n); syslog(LOG_DEBUG, LOG_DEBUG is inferior to LOG_NOTICE.\n); syslog(LOG_NOTICE, you can see the notice. \n); ~/exp/vmlinux/logit.c 【例3-23】(续) setlogmask(mask); syslog(LOG_INFO, restore the old log level. \n); syslog(LOG_DEBUG, the debug information.\n); return 0; } ~/exp/vmlinux/logit.c 运行结果 用命令:tail -10 /var/log/message得到后10行,如下图 嵌入式C程序架构 嵌入式C程序 人机界面
您可能关注的文档
最近下载
- 初中语文228条文学常识总汇.docx VIP
- BS EN 15551 2017 国外国际标准.pdf VIP
- 鲁教版(五四学制)(2024)六年级上册地理第二章 地图 单元测试卷(含答案).docx VIP
- 六年级上册数学量率对应问题专项.docx VIP
- 松下SA-PM18组合音响中文维修手册.pdf VIP
- 六年级上册数学复习练习:寻找单位“1”和列出等量关系式专项练习.docx VIP
- DB3705_T 11-2023 野大豆耐盐性鉴定技术规程.docx VIP
- DB3705_T 10-2023 盐碱地酸枣栽培技术规程.docx VIP
- DB3705_T 07-2023 专属网格工委建设指南.docx VIP
- DB3705_T 05-2023 盐碱地梨生态栽培技术规程.docx VIP
原创力文档

文档评论(0)