您现在的位置: 主页 > MCU > 单片机技术应用 > KeilC51(UV2/UV3)使用经验 -
本文所属标签:
为本文创立个标签吧:

KeilC51(UV2/UV3)使用经验 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]  1、在UV2/UV3中,一个工程可以由多个模块(即*.c文件)组成,模块之间的变量与函数的调用与标准C语言类似。即变量必须是全局变量(公共变量),函数必须是全局函数。一般缺省规则是:  (1)在任意模块中定义的

  1、在UV2/UV3中,一个工程可以由多个模块(即*.c文件)组成,模块之间的变量与函数的调用与标准C语言类似。即变量必须是全局变量(公共变量),函数必须是全局函数。一般缺省规则是:
  (1)在任意模块中定义的函数均是全局函数,在其它模块调用前加上“extern 函数名”说明即可。
  (2)在任意模块中所有函数实体之外定义的变量时全局变量,在其它模块引用之前加上“extern 类型 变量名”即可。

本文引用地址: http://www.21ic.com/app/mcu/201807/784241.htm

  2、有些变量可能会随时改变,例如:在中断中赋值的变量,以及硬件修改的输入/输出寄存器等,在程序中使用这些变量时,最好加上“volatile”关键词,告诉C51编译器:
(1)不要优化该变量,例如相连的两个相同的赋值语句,第二个不要优化掉,因其处于不同“时刻”赋值结果可能不一样。
(2)每次取该变量值时要从其实际地址的寄存器取,不要从内存的副本中取,因其值可能随时比改变了。

  3、在C51中,每个变量增加“存储类型”约束,存储类型有:data,idata,bdata,pdata,xdata,code等没有显式定义存储类型的变量,缺省类型:small模式为data,compact模式为pdata,large模式为xdata。通常,对于51单片机,data空间为00~7F(128字节),其中还要扣除0~7寄存器区间,实际只有120字节可用,如果缺省类型的变量太多(特别是静态和全局变量),就会导致空间不够而出现如下错误:

ERRORL107:ADDRESSSPACEOVERFLOWSPACE:DATASEGMENT:_DATA_GROUP_LENGTH:xxH(表示超出DATA空间字节数)

解决办法是:将大部分全局/静态变量(特别是数组)定义到xdata段中。

  4、在UV2中,下述程序段能编译通过:

unsignedcharxdata*str;str="ABCDEF";

但在UV3中编译会出现如下错误:
waring C259: '=':pointer:different mspace
必须将其改为:

str=(unsignedcharxdata*)"ABCDEF";

这说明UV3中变量赋值时,对其“存储类型”约束更严格,与C++类似。

  5、在Keil C51 for Cypress EZ-USB中,可以使用下述数据类型:BYTE,WORD,DWORD,BOOL(类似VC6),但这不是C51定义的标准类型,而是EZ-USB FX2中重新定义的(详见“fx2.h”)。




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > KeilC51(UV2/UV3)使用经验 -
 

"KeilC51(UV2/UV3)使用经验 -"的相关文章

网站地图

围观()