这些知识是在平常的阅读中,零散的获得的,自己总结了一下,分享在这里
全局变量VS函数参数
全局变量在Linux下的驱动编程里边,用的是非常多,例如中断服务函数ISR,基本上都可以用全局变量来作为数据的更新,及事件的触发。给函数传递参数的效率一般来说,要低于直接使用全局变量,尤其是参数的数目太多的时候。参数传递,是需要先将参数push到stack中,等程序运行完毕,再从stack中pull出来,过程上要比global variable复杂。但是,全局变量过多的话,这里边就设计到管理的问题了,到后面就很难去控制这些变量的修改,这对于函数的模块化有不利的影响。

i=i 1; i ; i–;
这三个语句都通常引用在for()或者是while()里边,从执行效率上来说 3》2》1
这和最终生成的汇编语言有关,一般来说,影响不会太夸张。
switch-case语句
switch-case语句,也是用的非常多的语句。
这里首先的优化原则就是:将发生概率更高的条件,放在更先判断的位置。这样就能够有效的降低比较的次数,达到更优的效果。或者,有一种更好的 *** 来替代switch-case语句的 *** ,就是利用查表
比如
switch(msg_type) { case DATA: handle_data_fun(); break; case RTS: handle_rts_fun(); break; ……. }
这里就可以用函数指针和查表的方式,获得handle_fun的 *** 来替代。
处理函数都在初始化的过程中,放到*handle_fun[MAX]相应的位置上
int (*handle_fun[MAX])(struct msg_t *msg); int msg_type = msg->type; handle_fun[msg_type](msg);//即可
这种 *** ,在Linux的 *** 协议里边,用的非常多,一般对应的查表方式为hash表结构。
sturct 和 union的使用
sturcut 使用,一定要考虑到字节对其的问题,struct中,不同的安排顺序,sizeof是不同的所以要调整好位置,尽量保证struct的size最小。
union的使用,比如对不同包的数据结构上,是不一样的,所以尽量使用union来区分不同的包结构这样对程序的可读性比较好。
volatile的使用
这在驱动编程方面是非常有用的一个标志。目的是不让编译器compiler把当前的变量优化掉。尤其是涉及到硬件寄存器的值的时候。
乘除运算的简化
乘除运算,对arm来说太致命,arm的乘除都生成一堆的汇编指令才能完成。所以一般可以通过位操作,比如移位,取低位来进行适当的化简。比如 a*8 = a<<3;
Inline 函数
在实现比较简单功能的函数,以及那些调用非常平凡的函数,都可以在函数前加入inline的标识。这样在产生汇编的时候,能够更有效。也可以替代较复杂的define语句。
更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码官网:www.west.cn
扫描二维码推送至手机访问。
版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。
前言:本文是原创首发。做站有几年了 (1)初识网络: 高中毕业时候,造化弄人,读了个计算机会计专业(听说好考,找工作容易,呵呵),结果不感兴趣,两年毕业后,全科考试通过,但会计证我都没拿就走了,觉得没意思,会计应该是女人干的活。大专期间,空闲时间很多,那时候有空就去机房(费用从餐...
--- 仿<刘和珍君>版 &n...
春节快到了,因本人经济困难,想做兼职,有意者来电来函咨询,本人承接以下业务: 苦力搬运,装卸,车工,钳工,焊工,水电工,瓦工,砸墙,砌墙,筛沙,油漆,通下水道,贴瓷砖,拆洗油烟机,拆装空调,Vb,C++, .NET,C#,Java,j2ee, j2me,asp,delphi,php,汇编,P...
今天采访的对象是:www.xiaozhanzhang.com的无所谓,他的网站名字:小站长。没有依照管理采访,只是根据平时的交流写一个印象,我对他的评价是:小站长大梦想。用他自己的话说是:致力建立一个为初级站长服务的网站。 他的话刺痛了我,因为半月前,我也是怀着同样的梦想做同样的事情。不...
我们是犯下了罪行,还是创造了奇迹--三步设计熊猫已经肆戮网络,转载的风波刚刚过去,网页吧连接两天被DDOS,为了出名,为了利益,为了钱,什么都敢做,什么都要做,这就是我们需要面对的网络?  ...
2002年 那年我初一,家里就给我添置电脑了。 但是对于初二以前在网络游戏浪费的那段日记我不说了。 2003年 初二的时候,一次偶然的机会,看中...