c语言学习心得65008 11页

  • 63.13 KB
  • 2022-08-23 发布

c语言学习心得65008

  • 11页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
  4. 网站客服QQ:403074932
c语言学习心得.txt1、只有频繁用到或对运算速度要求很高的变量才放到dataIX内,如for循环中的计数值。2、其他不频繁调用到和対运算速度要求不高的变量都放到xdata区。3、常量放到code区,如字库、修正系数。4、逻辑标志变量可以定义到bdata屮。在51系列芯片屮有16个字节位寻址区bdata,其中可以定义8*16=128个逻辑变量。这样可以大大降低内存占用空间。定义方法是:bdatabitLedState;但位类型不能用在数组和结构体中。5、datalx内最好放局部变量。因为局部变暈的空间是可以覆盖的(某个函数的局部变录空间在退出该函数是就釋放,由别的函数的局部变虽覆盖),可以提高内存利用率。当然静态局部变量除外,英内存使用方式与全局变量相同;6、确保程序中没有未调用的函数。在Ke订C里遇到未调丿IJ函数,编译器就将具认为可能是屮断两数。两数里川的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Ke订做得很愚蠢,但也没办法。7、如果想节省data空间就必须用large模式。将未定义内存位置的变量全放到xdata区。当然最好对所侑变最都要指定内存类型。8、使用指针时,要指定指针指向的内存类型。在C51中未定义指向内存类型的通用指针占用3个字节;而指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。如指针p是指向data区,则应定义为:chardata*p;o还可指定指针本身的存放内存类型,如:chardata*xdatap;。其含义是指针P指向data区变量,而其本身存放在xdata区。以前没搞过C51,大学时代跟单片机老师的时候也是捣鼓下汇编,现在重新搞单片机,因为手头资料不多,找到一些C51的程序,发现里面有这些关键字,不共明了,没办法只好找了下,发现如下描述:从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata.idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将冇利于提高程序执行效率(此问题将在后面专门讲述)。与ANST-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。在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空间,用DPTR访问。\npdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movxACC,@Rx读写。这个比较特殊,而且C51好彖有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。三、有关单片机ALE引脚的问题〃单片机不访问外部锁存器吋ALE端有止脉冲信号输出,此频率约为时钟振荡频率的1/6.每当访问外部数据存储器是,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲•〃这句话是不是冇毛病.我觉得按这种说法,应该丢失3个ALE脉冲才対,我一直想不通是怎么回事,希望大虾们帮帮我.小弟感激涕零.答:其他所有指令每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和#define有何不同??typedef和#define有何不同》》》如typedefunsignedcharUCHAR;#defineunsignedcharUCHARtypedef命名一个新的数据类型,但实际上这个新的数据类型是己经存在的,只不过是定义了一个新的名字.\n^define只是一个标号的定义.你举的例子两者没有区别,但是define还可以这样用ttdefineMAX100#defineFUN(x)100-(x)ttdefineLABEL等等,这些情况下是不能用typedef定义的七、请问如何设定KELC51的仿真工作频(时钟)用右键点击左边的的target1,然后在xtal一栏输入八、不同模块怎样共享sbit变量,extern不行?把SBIT定义单独放到一个.H中,每个模块都包含这个.h文件九、C51中对于Px.x的访问必须B己定义吗?是的。如sbitP17=0x97;即可定义对Pl・7的访问十、SWITCH()语句屮表达式不可以是位变最对吗?可以用位变量:#inelude#ineludevoidmain()bitflag;flag=O;switch(flag)!\ncase'0':{printf(〃O\rT);break;}case'1':{printf("1\n");break;}defauIt:break;}}bit变量只有两种状态,if语句足够啦,!!!—、const常数声明占不占内存???const只是用來定义“常量”,所占用空间与你的定义有关,如:constcodecstStr[]={"abc"};占用代码空间;而如:constchardatacstStr[]={"abc"};当然占用内存空间。另外,^defineZ定义似乎不占用空间。十二、philips的单片机P89C51RD+的扩展RAM在C51中如何使用?试一试将auxr.1清0,然示在c语言屮肓接声明xdata类型的变量十三、BUGofKeilC51程序中用如卜-语句:constunsignedcharstrArr[]={"数学"};结果发现strArr[]内容为{OxCA,OxDl,0xA7},真奇怪!\n凡是有Oxfd,则会通通不见了,所以只能手工输入内码了,例如ucharstrArr[]={OxCA,Oxfd,Oxdl,0xa7}(用Ultraedit会很方便)。十四、KeilC51中如何实现代码优化?菜单ProjectFOptionfortarget"Simulator"的⑸.看到Codeoptimization了吗?十五、请教c的!和~符号有甚区别??!是逻辑取反,~是按位取反。十六、c51编程,读端口,还要不耍先输出1?我怎么看到有的耍,有的不耍,请高手给讲讲,到底咋回事?谢了要输出1的,除非你能保证Z前已经是1,而中间没有输出过其他值。十七、当定时器1(T1)用于产生波特率时,P3"5还是否可以用作正常的I/O口呢?p3.5完全可以当普通的io使用十八、C51中TNT转换为2个CHAR?各位高手:051中INT转换为CHAR如何转换诸如:X=LOW(Z);Y=HIGH(Z);答:x=(char)z;y=(char)(z»8);十九、如果我想使2EH的笫7位置1的话,用位操作町以吗?\n现在对位操作指令我一些不太明口请各位多多指教:如SETB07H表示的是20H.7置1,对吗?(我在一本书上是这么看到的)那么如果我想使2EH的第7位置1的话,象我举的这个例了怎么表示呢?谢谢!SETB77Hsetb(2eh-20h)*8+720h-2fh每字节冇8个可位操作(00h-7fh),其它RAM不可位直接操作二十、char*addr=OxcOOO和charxdata*addr=OxcOOO有何区别?char*addr=OxcOOO;charxdata*addr=OxcOOO;除了在内存中占用的字节不同外,还有別的区别吗?char*addr=OxcOOO;是通用定义,指针变量addr可指向任何内存空间的值;charxdata*addr二OxcOOO;指定该指针变量只能指向xdata中的值;后一种定义屮该指针变量(addr)将少占用一个存储字节。ucharxdata*addr二OxcOOO;指针指向外ram;如果:dataucharxdata*addr=0xc000;指针指向外ram但指针本身存在于内ram(data)中以此类推可以idataucharxdata*addr=0xc000;pdataucharxdata*addr=0xc000;dataucharidata*addr=OxaO;二••一、while(pl_O)的执行时间?\n假设,P1_O为单片机Pl口的第一脚,请问,while(Pl_O){Pl0=0;}while(!Pl_0){Pl_0二1;}以上代码,在KEILC中,需要多长时间,执行完。能具体说明while(Pl_0)的执行时间吗?仿真运行看看就知道了,我仿真了试了一下,约14个周期二十二、怎样编写C51的watchdog程序?各位大虾,我用KEILC51编写了一个带外部开门狗的程序,可程序无法运行起来,经过查找,发现程序在经过C51编译后,在MAIN()函数的前部增加了一端初始化程序,等到进入主程序设置开门狗时,开门狗已经时间到,将我的程序复位了,请问我怎样才能修改这一•端初始花程序,使他一运行,就设置开门狗?可以在startup.a51屮加入看门狗刷新指令,当然用汇编,然后重新编译startup.a51,将他和你的程序连接即可。新的startup.a51会白动代替系统默认的启动模块。\n一十三、keilC51怎样把修改的startup.a51加到工程文件中直接加入即可注意不要改动?STACK,?C_START,?C_STARTUP等符号。startup.a51直接加入项目,不用修改也可。可在内面自己修改汇编的一些限制或堆栈指针。二十四、关于波特率的设置我在设定串口波特率时发现一个问题:在晶体震荡器为11.0592MHz时,若设9600BPS的话,TH1=OXFD,TL1=OXFD,而要设19200BPS的话,TH1、TL1有否变化,如果没变,为什么?如果变了,又为什么?(因为我看书上俩个是一样的),希望人家点拨。答:当电源控制寄存器(PC0N)第B1T7(SMOD)为1时波特率加倍。TH1和TL1的值不变.二十五、如何在C屮声明保留这部分RAM区不被C使用?我不知道在C源程序中怎么控制这个,但在汇编程序中加入下面一段就行:DSEGAT2011AA:DS10这样C51就不会占用20H-29HT或者在c51里这样定义:uchardataasm_buff[10]_at_0x20;二十六、问浮点运算问题我在JUC51时发现它对传递浮点参数的个数冇限制,请问:1)参数是以全局变量的形式传递的,请问以全局变量的形式传递的参数也冇限制吗?\n1)这种传递浮点参数的限制有多少呢?2)float^float的结果是float类型还是double类型?能否肓接赋值给float类型的变最?答:由于KEILC51的参数传递是通过R0-R7來传递的,所以会有限制。不过KEIL提供了一个编译参数,可以支持更多参数的传递。具体的内容见KETL的PDF文档。我建议你把多个要传递的参数定义到指针或结构体中去,传递参数通过指针或结构进行,这样好一些。第3个问题回答是YES,你自己试试不就知道了。二十七、如何在某一个地址定义mm用」t_命令,这样可以定位灵活一点的地址ucharxdatadisbuff[16]at_0x6020;//定位RAM将dis_buff[16]定位在0x6020开始的16个字节二十八、keilc中,用什么函数可以得到奇偶校验位?例如32位数据,将四个字节相互界或后检查P即可,若耽心P被改变,可用内嵌汇编。#ineludeunsignedcharparity(unsignedcharx){x"二x;if(P)return(l);elsereturn(0);unsignedcharparity2(unsignedintx){\nttpragmaasmmova,r7xrlar6,attpragmaendasmif(P)return(1);elsereturn(0);}演讲稿尊敬的老师们,同学们下午好:我是來自10级经济学(2)班的学习委,我叫张盼盼,很荣幸有这次机会和大家一起交流担任学习委员这一职务的经验。转眼间大学生活已经过了一年多,在这一年多的时间里,我一直担任着学习委员这一职务。冋望这一年多,自己走过的路,帘下的或深或浅的足迹,不仅充满了欢愉,也充满了淡淡的苦涩。一年多的工作,让我学到了很多很多,下面将自己的工作经验和大家一起分享。学习委员是班上的一个重要职位,在我当初当上它的时候,我就在想一定不要辜负老师及同学们我的信任和支持,一定要把工作做好。要认真负责,态度踏实,要有一定的组织,领导,执行能力,并且做事情要公平,公正,公开,积极落实学校学院的具体工作。作为一名合格的学习委员,要收集学生对老师的意见和老师的教学动态。在很多情况下,老师无法和那么多学生直接打交道,很多老师也无暇顾及那\n么多的学生,特别是大家刚进入大学,很多人一时还不适应老师的教学模式。学习委员是老师与学生之间沟通的一个桥梁,学习委员要及时地向老师提出同学们的建议和疑问,熟悉老师对学生的基本要求。再次,学习委员在学习上要做好模范带头作用,要有优异的成绩,当同学们向我提出问题吋,基木上给同学一个正确的刨复。总之,在一学年的工作之中,我懂得如何落实各项工作,如何和班委有效地分工合作,如何和同学沟通交流并且提高大家的学习积极性。当然,我的工作还存在着很多不足Z处。比日:有的时候得不到同学们的响应,同学们不积极主动支持我的工作;在收集同学们对自己工作意见方面做得不够,有些事情做错了,没有周围同学的提醒,自己也没有发觉等等。最严重的一次是,我没有把英语四六级报名的时间,地点通知到位,导致我们班有4名同学错过报名的时间。这次事使我懂得了做事要脚踏实地,不能马虎。在这次的交流会中,我希望大家可以从中吸取一些好的经验,带动本班级的学习风气,同时也和信大家在大学毕业后找到好的工作。谢谢大家!

相关文档