问:我想访问某个字节中的单个位,但是当我尝试用绝对变量结构定义一个位变量时,例如:
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。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
相关推荐
Scratch-Pad Sram(CPU5 DSPR)相关联。 在链接器脚本中,我已经映射了每个.text 部分移至其各自的 PSPR 内核。 我想知道如何将共享代码映射到 DSPR5 以及如何将其映射到其他
发表于 01-24 07:26
)个位变量。其三是用户RAM区,其地址为30H到7FH,我们定义的除了bit和bata其他变量,堆栈等都在这80字节单元内存里分配。我们这里重点讲一下
发表于 02-18 12:34
地址是0x2000 0000,结束地址是0x2000 0000加上芯片的RAM大小。不同的芯片RAM也不同。Flash中的内容一般用来存储代码和一些定义为const的数据,断电不丢失,RAM可以理解为内存,用来存储代码运行时的数
发表于 12-03 06:24
随着单片机功能的拓展,协议栈or算法因此变得越来越庞大,此时内部RAM是不能满足需求了,必须将变量定义在外部RAM(如SDSRAM)。那么如何将变量定义在外部
发表于 01-21 08:28
我们使用 STM32H743BI。如果映射变量大小不是 32 位的倍数,我们在写入备份 RAM 时会遇到问题。根据参考手册(修订版 7),备份 RA
发表于 02-07 08:05
拷贝到对应ram内存中,当在线标定时,会直接操作ram中相应的地址,以实现参数在线修改。请问ESP32如何实现Flash到ram重
发表于 02-13 08:42
拷贝到对应ram内存中,当在线标定时,会直接操作ram中相应的地址,以实现参数在线修改。请问ESP32如何实现Flash到ram重
发表于 03-06 08:35
如果S32K312运行autosar RAM资源不够用导致程序死机,请问有什么好的解决办法吗?我们可以想到一些方法1、直接定义函数和变量给TCM执行。这涉及到修改启动文件和重新
发表于 03-15 06:24
成员变量是指定维度的成员变量,用于标识某个维度成员。简介由 Analysis Services 内部使用的值,以标识某个维度成员。MemberKeyColumn 属性指定维度的成员
发表于 12-11 13:50
•6728次阅读
成员变量是指定维度的成员变量,用于标识某个维度成员。简介由 Analysis Services 内部使用的值,以标识某个维度成员。MemberKeyColumn 属性指定维度的成员
发表于 12-11 13:50
•1146次阅读
大家好,又到了每日学习的时间了,今天我们来聊一聊在FPGA设计中RAM的两种使用方法,RAM是用来在程序运行中存放随机变量的数据空间,使用时可以利用QuartusII的LPM功能实现
发表于 06-08 11:30
•2w次阅读
位带操作牵涉到的一个重要知识点就是指针变量。这种位带映射操作,就是操作映射过后的地址,其实就是操作指针变量(存放地址的变量)。
发表于 02-08 15:57
•3次下载
这种位带映射操作,就是操作映射过后的地址,其实就是操作指针变量(存放地址的变量)。 指针变量是一种特殊的
发表于 12-29 13:52
•565次阅读
问:如何指定代码、常数或变量到某个特定的地址? 答:使用“#pragma psect”伪指令来把代码、常数或变量放到你定制的psect。于是你就可以使用链接器选项来把这个定制的psect放到
发表于 01-22 14:52
•2115次阅读
TSMaster信号映射模块可以将数据库变量映射为系统变量,经过映射后的系统变量就等同于数据库中
发表于 02-19 14:00
•152次阅读
评论