0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析C语言中的变量修饰符

朱老师物联网大讲堂 2024-04-15 08:10 次阅读

一、修饰符类型


51单片机采用哈佛结构。内存空间编址有重叠。可以在不同总线上定义不同的变量。在KEIL C51中定义了data、idata、xdata、code几种域修饰符。这些修饰符决定了变量访问方式。

data:固定指前面0x00-0x7F的128个RAM,可以用acc直接读写,速度最快,生成的代码也最小。

idata:固定指前面0x00-0xFF的256个RAM,其中前128和data的128完全相同,只是访问的方式不同。

xdata:外部扩展RAM。

code:ROM

920b97e6-fabc-11ee-9118-92fbcf53809c.png

92020730-fabc-11ee-9118-92fbcf53809c.png

二、变量定义


对变量进行声明时可以指定变量的存储类型如:uchar data x和data uchar x相等,都是在片内RAM区分配一个字节的空间。

同样对于指针变量的声明,因涉及到指针变量本身的存储位置和指针所指向的存储位置不同而进行相应的存储区类型关键字的声明。

如下一句代码,表示的是:指在RAM区分配一个指针变量(“*”号后的关键字的作用),而且这个指针本身指向xdata区(“*”前xdata关键字的作用)

921610b8-fabc-11ee-9118-92fbcf53809c.png

92020730-fabc-11ee-9118-92fbcf53809c.png

三、指针变量与存储区域关系


定义如下变量:

9225e24a-fabc-11ee-9118-92fbcf53809c.png

第一种情况:是指在片内RAM分配一个指针变量(“*”号后的data关键字的作用),而且这个指针本身指向xdata区(“*”前xdata关键字的作用)。这种定义方式访问效率最高。

922d1e70-fabc-11ee-9118-92fbcf53809c.png

第二种情况:是指在idata区域分配一个指针变量,指针变量指向xdata区域。这种访问效率不如第一种。

9233a22c-fabc-11ee-9118-92fbcf53809c.png

第三种情况:是指在xdata区域分配一个指针变量,指针变量指向xdata区域。这种访问效率不如第二种。

923a94a6-fabc-11ee-9118-92fbcf53809c.png

第四种情况:这种定义方式是错误,该指针变量只能访问data区域,无法访问xdata区域。

9248eb1e-fabc-11ee-9118-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7534

    浏览量

    128852
  • 变量
    +关注

    关注

    0

    文章

    596

    浏览量

    28112
收藏 人收藏

    评论

    相关推荐

    C语言中static的作用(转载)

    就是在各自文件中,在相同的全局变量申明前加上static修饰符。这样系统就会为他们分配不同的内存,互不影响了。在C语言中static的作用如下:第一、在
    发表于 01-23 16:49

    “无注册”修饰符如何防止变量被保存到CPU寄存器中?

    好的,我的意思是,我希望真正的内存位置(无论是全局的还是本地的,不是基于堆栈的,变量)都要更新,所以当中断发生时,它会找到一个更新的值。我知道“寄存器”修饰符,但它正好相反。F我想做什么,我在文档中
    发表于 10-09 11:09

    请问C++代码的修饰符该怎么理解?

    有如下的代码段,写出下面除了宏定义外的其他代码的真实代码(即预处理后的代码)。然后写出对const的修饰符的理解(当前的代码用于单片机中):#define DECL_PC_CMD_FUN(name
    发表于 11-11 04:35

    请问什么是正则表达式修饰符

    什么是正则表达式的修饰符
    发表于 11-04 06:10

    【每日一知识点】C语言中const详解

    马上就想到了常量。事实上在C语言中const功能很强大,它可以修饰变量、数组、指针、函数参数等。1、 修饰
    发表于 03-29 10:53

    c语言中整数的取值范围是多少

    c语言中整数的取值范围,文章目录1、整数的取值范围2、版权声明整数是我们生活中常用的数据类型,也是编程中常用的一种数据,C语言使用int关键字来定义整数
    发表于 07-20 07:50

    C语言中三目运算? :怎么使用?

    C语言中三目运算? :怎么使用?
    发表于 11-02 09:23

    C51语言变量定义方式

    C51 语言变量定义定义方式:普通变量:(修饰符)数据类型 [存储类型] 变量名 [= 值]指
    发表于 12-01 06:18

    HAL库中__weak修饰符是什么?

    单片机系统时钟是什么?HAL库中__weak修饰符是什么?
    发表于 02-23 07:32

    探讨一下C语言中的作用域局部变量

    作用域局部变量--local variable全局变量--global variable修饰符--storage description局部变量–local variable一般在{}
    发表于 02-28 06:00

    C语言类型修饰符Const的教程使用说明

    Const也是应该广泛的关键字,表示后面定义有可能是一个不变的常量,但是跟各种数据类型定义组合,能演变出复杂含义。常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新
    的头像 发表于 09-20 09:37 2827次阅读

    C语言类型修饰符Volatile的使用说明

    C语言是我们经常需要用到的语言,C语言中的类型修饰符Volatile大家知道怎么使用吗? volatile是一个类型修饰符(type spe
    的头像 发表于 09-19 10:54 3297次阅读

    一种修饰符能使变量在处理器复位而不被初始化

    有一种修饰符能使变量在处理器复位而不被初始化
    的头像 发表于 03-14 15:01 3558次阅读
    一种<b class='flag-5'>修饰符</b>能使<b class='flag-5'>变量</b>在处理器复位而不被初始化

    C51 单片机的 C 语言中变量定义与硬件之间的关系

    C51 语言变量定义定义方式:普通变量:(修饰符)数据类型 [存储类型] 变量名 [= 值]指针变量
    发表于 11-23 16:51 3次下载
    C51 单片机的 C <b class='flag-5'>语言中</b>的<b class='flag-5'>变量</b>定义与硬件之间的关系

    C语言中变量的作用域

    作用域局部变量--local variable全局变量--global variable修饰符--storage description局部变量–local variable一般在{}
    发表于 01-13 14:58 0次下载
    C<b class='flag-5'>语言中</b><b class='flag-5'>变量</b>的作用域