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

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

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”)。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

嵌入式开发作为一种专业且技术密集型的领域,涵盖了从硬件底层驱动、中间件到应用层软件开发等多个层面的工作,其所需的工具种类繁多,各有针对性,旨在提升开发效率、保证代码质量以及简化调试过程。

关键字: 嵌入式开发 keil

单片机内部有很多的特殊功能寄存器,每个寄存器在单片机内部都分配有唯一的地址,一般我们会根据寄存器功能的不同给寄存器赋予各自的名称,当我们需要在程序中操作这些特殊功能寄存器时,必须要在程序的最前面将这些名称加以声明,声明的...

关键字: C51 数据类型 扩充定义

数据元(Data Element),也称为数据元素,是用一组属性描述其定义、标识、表示和允许值的数据单元,在一定语境下,通常用于构建一个语义正确、独立且无歧义的特定概念语义的信息单元。数据元可以理解为数据的基本单元,将若...

关键字: C51 数据类型

之后新建新的工程,添加.a文件就可以使用了,当然也可以使用keil来添加,但是keil默认的是用.lab,需要自己配置一下文件属性,改为lib文件即可。一半release sdk的时候用这种方式很关键的,毕竟自己的核心代...

关键字: keil 文件属性 lib文件

▼点击下方名片,关注公众号▼欢迎关注【玩转单片机与嵌入式】公众号,回复关键字获取更多免费资料。回复【加群】,限时免费进入知识共享群;回复【3D封装库】,常用元器件的3D封装库;回复【电容】,获取电容、元器件选型相关的内容...

关键字: C51 MDK RealView

在Keil C51软件中51单片机的中断服务和外设驱动程序的开发

关键字: keil5 编译 C51

Intel公司1980年推出了MCS-51系列单片机:集成 8位CPU、4K字节ROM、128字节RAM、4个8位并口、1个全双工串行口、2个16位定时/计数器。寻址范围64K,并有控制功能较强的布尔处理器。 80C5...

关键字: C51 KEIL 编程

c上标3下标5怎么算用计算机,c上标3下标5怎么算

关键字: C51 KEIL

DSP28335与AD7606通过SPI的串行数据交互

关键字: keil C

AD7606的并行采集

关键字: ad7606 数据 C keil
关闭
关闭