c语言学习心得65008

c语言学习心得65008

ID:47277554

大小:63.13 KB

页数:11页

时间:2019-08-26

c语言学习心得65008_第1页
c语言学习心得65008_第2页
c语言学习心得65008_第3页
c语言学习心得65008_第4页
c语言学习心得65008_第5页
资源描述:

《c语言学习心得65008》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、c语言学习心得.txt1、只有频繁用到或对运算速度要求很高的变量才放到dataIX内,如for循环中的计数值。2、其他不频繁调用到和対运算速度要求不高的变量都放到xdata区。3、常量放到code区,如字库、修正系数。4、逻辑标志变量可以定义到bdata屮。在51系列芯片屮有16个字节位寻址区bdata,其中可以定义8*16=128个逻辑变量。这样可以大大降低内存占用空间。定义方法是:bdatabitLedState;但位类型不能用在数组和结构体中。5、datalx内最好放局部变量。因为局部变暈的

2、空间是可以覆盖的(某个函数的局部变录空间在退出该函数是就釋放,由别的函数的局部变虽覆盖),可以提高内存利用率。当然静态局部变量除外,英内存使用方式与全局变量相同;6、确保程序中没有未调用的函数。在Ke订C里遇到未调丿IJ函数,编译器就将具认为可能是屮断两数。两数里川的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Ke订做得很愚蠢,但也没办法。7、如果想节省data空间就必须用large模式。将未定义内存位置的变量全放到xdata区。当然最好对所侑变最都要指定内存类型。8、使用指针时,要指

3、定指针指向的内存类型。在C51中未定义指向内存类型的通用指针占用3个字节;而指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。如指针p是指向data区,则应定义为:chardata*p;o还可指定指针本身的存放内存类型,如:chardata*xdatap;。其含义是指针P指向data区变量,而其本身存放在xdata区。以前没搞过C51,大学时代跟单片机老师的时候也是捣鼓下汇编,现在重新搞单片机,因为手头资料不多,找到一些C51的程序,发现里面有这些关键字,不共明了,没办法

4、只好找了下,发现如下描述:从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata.idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将冇利于提高程序执行效率(此问题将在后面专门讲述)。与ANST-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不

5、同的编译结果。在51系列中data,idata,xdata,pdata的区别data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:moxACC,@Rx.(不垂要的补充:c中idata做指针式的访问效果很好)xdata:外部扩展RAM,一般指外部OxOOOO-Oxffff

6、空间,用DPTR访问。pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movxACC,@Rx读写。这个比较特殊,而且C51好彖有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。三、有关单片机ALE引脚的问题〃单片机不访问外部锁存器吋ALE端有止脉冲信号输出,此频率约为时钟振荡频率的1/6.每当访问外部数据存储器是,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲•〃这句话是不是冇毛病.我觉得按这种说法,应该丢失3个ALE脉冲才対,我一直想不

7、通是怎么回事,希望大虾们帮帮我.小弟感激涕零.答:其他所有指令每6个机器周期发出一个ALE,而MOVX指令占用12个机器周期只发出一个ALE四、如何将一个INT型数据转换成2个CHAR型数据?经keil优化后,charl=intl/256,char2=intl%256或charl=intl»8,char2=inti&0x00ff效率是一样的。五、在KEILC51上仿真完了,怎样生成HEX文件去烧写??右键点项目中Target1,选第二个,在OUTPUT中选中CREATHEX六、typcdef和#d

8、efine有何不同??typedef和#define有何不同》》》如typedefunsignedcharUCHAR;#defineunsignedcharUCHARtypedef命名一个新的数据类型,但实际上这个新的数据类型是己经存在的,只不过是定义了一个新的名字.^define只是一个标号的定义.你举的例子两者没有区别,但是define还可以这样用ttdefineMAX100#defineFUN(x)100-(x)ttdefineLABEL等等,这些情况下是不能用typedef

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

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

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