2022年c语言学习心得 .pdf
《2022年c语言学习心得 .pdf》由会员分享,可在线阅读,更多相关《2022年c语言学习心得 .pdf(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、c 语言学习心得 .txt人生在世,难敌宿命,沉沦其中。我不爱风尘,似被前缘误!我只为我最爱的人流泪“我会学着放弃你,是因为我太爱你”赢了你, 我可以放弃整个世界1、只有频繁用到或对运算速度要求很高的变量才放到data 区内,如for 循环中的计数值。2、其他不频繁调用到和对运算速度要求不高的变量都放到xdata 区。3、常量放到code 区,如字库、修正系数。4、逻辑标志变量可以定义到bdata 中。在 51 系列芯片中有16 个字节位寻址区bdata ,其中可以定义8*16=128 个逻辑变量。 这样可以大大降低内存占用空间。定义方法是: bdata bit LedState;但位类型不能
2、用在数组和结构体中。5、data 区内最好放局部变量。因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同;6、确保程序中没有未调用的函数。在 Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Keil做得很愚蠢,但也没办法。7、如果想节省data 空间就必须用large模式。将未定义内存位置的变量全放到xdata 区。当然最好对所有变量都要指定内存类型。8、使用指针时,要指定指针指向的内存类型。
3、在 C51 中未定义指向内存类型的通用指针占用3 个字节;而指定指向data 区的指针只占1个字节;指定指向 xdata 区的指针占2 个字节。如指针 p 是指向 data 区, 则应定义为: char data *p;。还可指定指针本身的存放内存类型,如:char data * xdata p;。其含义是指针p 指向 data 区变量,而其本身存放在xdata 区。以前没搞过C51,大学时代跟单片机老师的时候也是捣鼓下汇编,现在重新搞单片机,因为手头资料不多,找到一些C51的程序,发现里面有这些关键字,不甚明了,没办法只好找了下,发现如下描述:从数据存储类型来说,8051 系列有片内、片外程
4、序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data 、xdata 、idata以及根据51 系列特点而设定的pdata 类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时, 最好指定变量的存储类型,这样将有利于提高程序执行效率( 此问题将在后面专门讲述) 。与 ANSI-C 稍有不同,它只分SAMLL 、 COMPACT、LARGE 模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。在 51 系列中 data,idata,xdata,pdata的区别data: 固定指前面0 x00-0 x7f的 128 个 RA
5、M ,可以用 acc 直接读写的,速度最快,生成的代码也最小。idata:固定指前面0 x00-0 xff的 256 个 RAM, 其中前 128 和 data 的 128 完全相同,只是因为访问的方式不同。 idata是用类似C中的指针方式访问的。汇编中的语句为: mox ACC,Rx.(不重要的补充:c 中 idata做指针式的访问效果很好) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - xdata: 外部扩展RAM ,
6、一般指外部0 x0000-0 xffff空间,用DPTR 访问。pdata: 外部扩展RAM 的低 256 个字节,地址出现在A0-A7 的上时读写, 用 movx ACC,Rx 读写。这个比较特殊,而且C51 好象有对此BUG ,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。三、有关单片机ALE引脚的问题 单片机不访问外部锁存器时ALE端有正脉冲信号输出,此频率约为时钟振荡频率的1/6. 每当访问外部数据存储器是, 在两个机器周期中ALE只出现一次 , 即丢失一个ALE脉冲 . 这句话是不是有毛病. 我觉得按这种说法, 应该丢失 3 个 ALE脉冲才对 , 我一直想不通是怎么回事
7、, 希望大虾们帮帮我 . 小弟感激涕零. 答:其他所有指令每6 个机器周期发出一个ALE, 而 MOVX 指令占用12 个机器周期只发出一个ALE 四、如何将一个INT 型数据转换成2 个 CHAR 型数据?经 keil优化后, char1=int1/256,char2=int1%256或 char1=int18,char2=int1&0 x00ff效率是一样的。五、在 KEIL C51 上仿真完了,怎样生成HEX文件去烧写?右键点项目中Target 1 ,选第二个,在OUTPUT 中选中 CREAT HEX 六、 typedef 和 #define 有何不同 ? typedef 和 #def
8、ine 有何不同 如typedef unsigned char UCHAR ; #define unsigned char UCHAR ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - typedef命名一个新的数据类型, 但实际上这个新的数据类型是已经存在的, 只不过是定义了一个新的名字. #define只是一个标号的定义. 你举的例子两者没有区别, 但是 #define还可以这样用#define MAX 100 #def
9、ine FUN(x) 100-(x) #define LABEL 等等 , 这些情况下是不能用typedef定义的七、请问如何设定KELC51的仿真工作频(时钟)用右键点击左边的的target 1,然后在 xtal一栏输入八、不同模块怎样共享sbit变量, extern不行 ? 把 SBIT 定义单独放到一个.H 中,每个模块都包含这个.h 文件九、 C51中对于 Px.x 的访问必须自己定义吗?是的。如 sbit P17 = 0 x97;即可定义对P1.7 的访问十、 SWITCH( )语句中表达式不可以是位变量对吗?可以用位变量:#include #include void main()
10、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - bit flag; flag=0; switch(flag) case 0:printf(0n);break; case 1:printf(1n);break; default:break; bit 变量只有两种状态,if 语句足够啦 ,! 十一、 const常数声明占不占内存?const 只是用来定义“常量” ,所占用空间与你的定义有关,如:const code cstStr
11、= abc; 占用代码空间;而如:const char data cstStr = abc; 当然占用内存空间。另外, #define 之定义似乎不占用空间。十二、 philips的单片机P89C51RD+ 的扩展 RAM 在 C51中如何使用?试一试将auxr.1清 0, 然后在 c 语言中直接声明xdata 类型的变量十三、 BUG of Keil C51 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - 程序中用如下语句:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年c语言学习心得 2022 语言 学习心得
限制150内