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

    文章

    7604

    浏览量

    136718
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28363
收藏 人收藏

    评论

    相关推荐

    C语言中赋值运算详解

    C语言中,赋值运算用于将一个值赋给变量
    发表于 08-18 16:38 1977次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言中</b>赋值运算<b class='flag-5'>符</b>详解

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

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

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

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

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

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

    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语言中的volatile关键字

    volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改。
    发表于 05-27 09:32 3271次阅读

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

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

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

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

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

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

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

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

    C语言中变量的作用域

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

    Java四种访问修饰符及访问范围

    public修饰的类、类属变量及方法,包内及包外的任何类均可以访问;任何情况下都可以访问;如果一个类、类属变量及方法没有用任何修饰符,则其访问权限为默认权限,只认包。同包下可以访问,同
    的头像 发表于 02-28 14:35 6623次阅读

    快速掌握C语言关键字

    C语言中的32个关键字你知道多少个呢?根据关键字的作用分为四类:数据类型关键字、控制语句关键字、存储类型关键字和其它关键字。1.1基本数据类型int:用于声明整数类型的变量。char:用于声明字符
    的头像 发表于 07-06 08:04 344次阅读
    快速掌握<b class='flag-5'>C</b><b class='flag-5'>语言</b>关键字