keilc51编译器的一些使用心得(一)

keilc51编译器的一些使用心得(一)

ID:20428690

大小:54.00 KB

页数:4页

时间:2018-10-12

keilc51编译器的一些使用心得(一)_第1页
keilc51编译器的一些使用心得(一)_第2页
keilc51编译器的一些使用心得(一)_第3页
keilc51编译器的一些使用心得(一)_第4页
资源描述:

《keilc51编译器的一些使用心得(一)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、本人是刚刚参加工作的学生,使用keil编译器已经半年多了,在这半年的时间里,我总结了keil的使用的一些心得,希望和人家分享一下,另外请高人点拨一下,由于我不是计算机专业的,所以对于编译原理和操作系统等高深的课程没有接触过,总是认为以下提到的-•些规律都是有理论根据的,希望高人指点。现在的存储器已经不像七八年前那样昂贵了,但是ram相对于mm和eeprom的价格还是不可同样看待的,所以程序中节省内存在现在看来还足非常关键的。原因宥以下儿点:1.ram的存取速度相对干eeprom的存収速度要快很多倍,不在一个数量级上,主要是因为eep

2、rom的存储要想写入就必须先擦除,而且eeprom的擦出需要成块擦除(这是山于eeprom的擦除原理足场效应管的栅极上电擦除的,为了节衍成本厂家一般都是8Bytes/page64Bytes/page),所以使用ram来处理屮I'⑷的数1W•是能够符合速度要求的。2.龙论是xram还足eeprom都是外部存储器,在负值时都要用到16bit地址空间(8位机),这祥无形中就增大了程序的code的体积并且使得速度上也受到影响,所以尽跫把indata区的ram用到极限是非常有意义的。本人总结了一些节咨内存的规律,提供给人家讨论一K,看看是否可

3、行。1.闪存分配的基本原理.•kcil与艽他的c语言编译器我认为从A存分配的原理上是菽木相同的。总结起来,.其实很简单,就是选最长的路径进行编译(话糙理不糙),例如下凼的两段程序program1:unsignedchara();voidb();voidmain(){unsignedcharbyte1;unsignedcharbyte2;bytel=byte2=3;if(a()==3){b();}a();return;}//afunctionunsignedchara(){unsignedcharbyte_a1;unsignedcha

4、rbyte_a2;byte一a1=byte_a2=3;byte_a1=4;byte_a2=5;returnbyte_a1;}//bfunctionvoidb()unsignedcharbyte_bl;unsignedcharbyte一b2;unsignedcharbyte_b3;byte_bl=byte_b2=byte_b3=3;return;}program2:voida();voidb();voidmain(){unsignedcharbytel;unsignedcharbyte2;bytel=byte2=3;a();retur

5、n;}//afunctionvoida(){unsignedcharbytc_al;unsignedcharbyte_a2;byte_al=byte_a2=3;if(byte_al==3){b();}byte一a1=4;byte_a2=5;return;}//bfunctionvoidb(){unsignedcharbyte_bl;unsignedcharbyte_b2;unsignedcharbyte一b3;byte_bl=byte_b2=byte_b3=3;return;}两段程序的作用是相M的,都是先执行函数a,然后根据byt

6、e_al的值判断去执行b程序,但是川keil编译的结果却不相同program1编译的绍果是data:14code:48,而program2编译的结果是data:16code:56,可见program1比program2BP节省了code又节省了内存。看一下反汇编代码,就可以了解原因了,在a函数中调用b函数,a函数定义的byte_al和byte_a2变量没有被释放,所以program2的内存分配是8(SFR)+1(STACK)+2(MAINFUNC)+2(AFUNC)+3(BFUNC)=16Bytes,而program1的内存分配是8

7、(SFR)+1(STACK)+3(BFUNC)=MBytes,由于B函数和A函数是并行的,所以节省了a函数需要的2个字节。这样总结看來程序不要申行,应尽景并行,充分利川有限的ram资源,这样既可以使code区变小,也可以使速度变快。1.uncalledsegment影响内存分配:不知道人家足否发现过当存在没奋调川的阑数吋,内存空间很奋可能会溢出,这个原因其实也非常简单例如:program3:voida();voidb();voidc(unsignedcharbyte_input);voidmain(){unsignedcharbyt

8、cl;unsignedcharbyte2;bytel=byte2=3;a();c(3);return;}//afunctionvoida(){unsignedcharbytc_al;unsignedcharbyte_a2;byte_a

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。