1 / 14
文档名称:

c语言学习心得.doc

格式:doc   大小:70KB   页数:14页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

c语言学习心得.doc

上传人:ttteee8 2020/6/12 文件大小:70 KB

下载得到文件列表

c语言学习心得.doc

文档介绍

文档介绍:C语言学****心得二十四桥仍在,波心荡,冷月无声。别有幽愁暗恨生,此时无声胜有声。余将董道而不豫兮,固将重昏而终身。心事浩茫连广宇,于无声处听惊雷。明月松间照,清泉石上流。1、只有频繁用到或对运算速度要求很高的变量才放到data区内,如for循环中的计数值。2、 其他不频繁调用到和对运算速度要求不高的变量都放到xdata区。3、 常量放到code区,如字库、修正系数。4、 逻辑标志变量可以定义到bdata中。在51系列芯片中有16个字节位寻址区bdata,其中可以定义8*16二128个逻辑变量。这样可以大大降低内存占用空间。定义方法是:bdatabitLedState;但位类型不能用在数组和结构体中。5、 data区内最好放局部变量。因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同;6、 确保程序中没有未调用的函数。在KeilC里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Keil做得很愚蠢,但也没办法。7、 如果想节省data空间就必须用large模式。将未定义内存位置的变量全放到xdata区。当然最好对所有变量都要指定内存类型。8、 使用指针时,要指定指针指向的内存类型。在C51中未定义指向内存类型的通用指针占用3个字节;而指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。如指针P是指向data区,则应定义为:chardata*p;□还可指定指针本身的存放内存类型,如:chardata*xdatap;。其含义是指针P指向data区变量,而其本身存放在xdata区。以前没搞过C51,大学时代跟单片机老师的时候也是捣鼓下汇编,现在重新搞单片机,因为手头资料不多,找到一些C51的程序,发现里面有这些关键字,不甚明了,没办法只好找了下,发现如下描述:从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code>data、xdata>idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。与ANSI-C稍有不同,,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。在51系列中data,idata,xdata,pdata的区另Udata:固定指前面0x00-0x7f的128个RAM,直接读写的,速度最快,生成的代码也最小。idata:固定指前面OxOO-Oxff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:,***@Rx.(不重要的补充:c中idata做指针式的访问效果很好)xdata:外部扩展RAM,一般指外部OxOOOO-Oxffff空间,用DPTR访问。pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,,***@Rx读写。这个比较特殊,而且C51好象有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。三、有关单片机ALE引脚的问题〃单片机不访问外部锁存器时ALE端有正脉冲信号输出,此频率约为时钟振荡频率的1/,在两个机器周期中ALE只出现一次,即丢失•个ALE脉冲.〃,应该丢失3个ALE脉冲才对,我一直想不通是怎么回事,:其他所有指令每6个机器周期发出一个ALE,而MOVX指令占用12个机器周期只发出一个ALE四、 如何将一个INT型数据转换成2个CHAR型数据?经keil优化后,charl=intl/256,char2=intl%256或charl=intl>>8,char2=intl&0x00ff效率是一样的。五、 在KEILC51±仿真完了,怎样生成HEX文件去烧写??右键点项目中Target1,选第二个,在OUTPUT中选+GREATHEX六、 typedef和#define有何不同??typedef和#define有何不同》》》如typedefunsignedcharUCHAR;甘defineunsignedcharUCHAR;typedef命名一个新的数据类型,但实际上这个新的数据类型是已经存在的,,但是define还可以这样用ttdefineMAX100