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

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

3天内不再提示

映射位到某个RAM变量的方法

麦辣鸡腿堡 来源:Microchip微芯 作者:Microchip微芯 2023-01-22 15:11 次阅读

问:我想访问某个字节中的单个位,但是当我尝试用绝对变量结构定义一个位变量时,例如:

static bit bitvar @ ((unsigned)&bytevar)*8+0;

我得到一个编译错误。我该怎么做?

答:简单地回答是,你不能这么做。使用@定义绝对变量结构,在编译时需要一个已知地址。(译者注:编译器编译到这一行时,bytevar的地址并不确定)

更详细的(可能也是更有用的)回答是,这要看具体你是要做什么。你可能会在下面的一些简单的宏定义中找到你所需要的东西:

#define testbit(var, bit) ((var) & (1 <<(bit)))

#define setbit(var, bit) ((var) |= (1 << (bit)))

#define clrbit(var, bit) ((var) &= ~(1 << (bit)))

或者你可以定义一个联合union,例如:

union both {

unsigned char byte;

struct {

unsigned bit0:1; // etc.

} bits;

} var;

于是你就可以直接引用var.byte或者var.bits.bit0。

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

    关注

    7

    文章

    1318

    浏览量

    113701
  • 编译器
    +关注

    关注

    1

    文章

    1576

    浏览量

    48606
  • 变量
    +关注

    关注

    0

    文章

    595

    浏览量

    28112
收藏 人收藏

    评论

    相关推荐

    如何将共享代码映射到DSPR5以及将其映射到其他RAM区域?

    Scratch-Pad Sram(CPU5 DSPR)相关联。 在链接器脚本中,我已经映射了每个.text 部分移至其各自的 PSPR 内核。 我想知道如何将共享代码映射到 DSPR5 以及如何将其映射到其他
    发表于 01-24 07:26

    浅谈C51之变量

    )个位变量。其三是用户RAM区,其地址为30H7FH,我们定义的除了bit和bata其他变量,堆栈等都在这80字节单元内存里分配。我们这里重点讲一下
    发表于 02-18 12:34

    内存映射的相关资料推荐

    地址是0x2000 0000,结束地址是0x2000 0000加上芯片的RAM大小。不同的芯片RAM也不同。Flash中的内容一般用来存储代码和一些定义为const的数据,断电不丢失,RAM可以理解为内存,用来存储代码运行时的数
    发表于 12-03 06:24

    如何将变量定义在外部RAM呢?

    随着单片机功能的拓展,协议栈or算法因此变得越来越庞大,此时内部RAM是不能满足需求了,必须将变量定义在外部RAM(如SDSRAM)。那么如何将变量定义在外部
    发表于 01-21 08:28

    16STM32H743备份ram访问问题求解

    我们使用 STM32H743BI。如果映射变量大小不是 32 的倍数,我们在写入备份 RAM 时会遇到问题。根据参考手册(修订版 7),备份 RA
    发表于 02-07 08:05

    ESP32 flash地址如何重映射ram

    拷贝对应ram内存中,当在线标定时,会直接操作ram中相应的地址,以实现参数在线修改。请问ESP32如何实现Flashram
    发表于 02-13 08:42

    请问ESP32如何实现Flashram映射这种功能呢?

    拷贝对应ram内存中,当在线标定时,会直接操作ram中相应的地址,以实现参数在线修改。请问ESP32如何实现Flashram
    发表于 03-06 08:35

    求助,S32K312上RAM资源不够怎么解决?

    如果S32K312运行autosar RAM资源不够用导致程序死机,请问有什么好的解决办法吗?我们可以想到一些方法1、直接定义函数和变量给TCM执行。这涉及修改启动文件和重新
    发表于 03-15 06:24

    全局变量和成员变量的区别分析

    成员变量是指定维度的成员变量,用于标识某个维度成员。简介由 Analysis Services 内部使用的值,以标识某个维度成员。MemberKeyColumn 属性指定维度的成员
    发表于 12-11 13:50 6728次阅读
    全局<b class='flag-5'>变量</b>和成员<b class='flag-5'>变量</b>的区别分析

    全局变量和成员变量的区别分析

    成员变量是指定维度的成员变量,用于标识某个维度成员。简介由 Analysis Services 内部使用的值,以标识某个维度成员。MemberKeyColumn 属性指定维度的成员
    发表于 12-11 13:50 1146次阅读
    全局<b class='flag-5'>变量</b>和成员<b class='flag-5'>变量</b>的区别分析

    FPGA设计中的RAM的两种实现方法

    大家好,又到了每日学习的时间了,今天我们来聊一聊在FPGA设计中RAM的两种使用方法RAM是用来在程序运行中存放随机变量的数据空间,使用时可以利用QuartusII的LPM功能实现
    的头像 发表于 06-08 11:30 2w次阅读

    STM32位带引申的指针变量问题

    位带操作牵涉到的一个重要知识点就是指针变量。这种位带映射操作,就是操作映射过后的地址,其实就是操作指针变量(存放地址的变量)。
    发表于 02-08 15:57 3次下载
    STM32位带引申的指针<b class='flag-5'>变量</b>问题

    单片机指针变量及例子

    这种位带映射操作,就是操作映射过后的地址,其实就是操作指针变量(存放地址的变量)。 指针变量是一种特殊的
    发表于 12-29 13:52 565次阅读

    把指定代码、常数或变量某个特定地址的一个方法

    问:如何指定代码、常数或变量某个特定的地址? 答:使用“#pragma psect”伪指令来把代码、常数或变量放到你定制的psect。于是你就可以使用链接器选项来把这个定制的psect放到
    的头像 发表于 01-22 14:52 2115次阅读

    TSMaster 信号映射的配置方法

    TSMaster信号映射模块可以将数据库变量映射为系统变量,经过映射后的系统变量就等同于数据库中
    的头像 发表于 02-19 14:00 152次阅读
    TSMaster 信号<b class='flag-5'>映射</b>的配置<b class='flag-5'>方法</b>