uv2软件设置c语言路径,KeilC51(UV2/UV3)使用经验

KeilC51(UV2/UV3)使用经验

emesjx | 2010-10-13 21:57:28    阅读:2410

db6c9df9ccb71c554faea6ec7ad19010.png发布文章

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

(1)在任意模块中定义的函数均是全局函数,在其它模块调用前加上“extern  函数名”说明即可。

(2)在任意模块中所有函数实体之外定义的变量时全局变量,在其它模块引用之前加上“extern   类型 变量名”即可。

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字节可用,如果缺省类型的变量太多(特别是静态和全局变量),就会导致空间不够而出现如下错误:

ERROR L107:ADDRESS SPACE OVERFLOW

SPACE:DATA

SEGMENT:_DATA_GROUP_

LENGTH:xxH(表示超出DATA空间字节数)

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

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

unsigned char xdata *str;

str="ABCDEF";

但在UV3中编译会出现如下错误:

waring C259: '=': pointer:different mspace

必须将其改为:

str=(unsigned char xdata*)"ABCDEF";

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

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

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论

请登录...

登录后参与讨论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值