问:我想访问某个字节中的单个位,但是当我尝试用绝对变量结构定义一个位变量时,例如:
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
+关注
关注
8文章
1404浏览量
121319 -
编译器
+关注
关注
1文章
1673浏览量
52122 -
变量
+关注
关注
0文章
616浏览量
29640
发布评论请先 登录
相关推荐
热点推荐
芯海通用 MCU 应用笔记:在 MDK 开发环境下代码重定向到 RAM 执行的几种方法
空间并写入新的代码。此外还具备执行效率高,寿命长优点。
本文档介绍和说明在 MDK 开发环境下将代码重定向到 RAM 中执行的方法。本文档使用开发环境位 keil UVision,版
发表于 05-16 11:58
请问ESP32如何实现Flash到ram重映射这种功能呢?
拷贝到对应ram内存中,当在线标定时,会直接操作ram中相应的地址,以实现参数在线修改。
请问ESP32如何实现Flash到ram重
发表于 06-14 06:31
如何将变量定义在外部RAM呢?
随着单片机功能的拓展,协议栈or算法因此变得越来越庞大,此时内部RAM是不能满足需求了,必须将变量定义在外部RAM(如SDSRAM)。那么如何将变量定义在外部
发表于 01-21 08:28
ESP32 flash地址如何重映射到ram?
拷贝到对应ram内存中,当在线标定时,会直接操作ram中相应的地址,以实现参数在线修改。请问ESP32如何实现Flash到ram重
发表于 02-13 08:42
请问ESP32如何实现Flash到ram重映射这种功能呢?
拷贝到对应ram内存中,当在线标定时,会直接操作ram中相应的地址,以实现参数在线修改。请问ESP32如何实现Flash到ram重
发表于 03-06 08:35
求助,S32K312上RAM资源不够怎么解决?
如果S32K312运行autosar RAM资源不够用导致程序死机,请问有什么好的解决办法吗?我们可以想到一些方法1、直接定义函数和变量给TCM执行。这涉及到修改启动文件和重新
发表于 03-15 06:24
Freescale 16位单片机的地址映射
原文链接:freescale 16位单片机的地址映射--(1)前言 freescale 16位单片机的地址映射--(2)飞思卡尔16位单片机
发表于 11-24 07:43
•1653次阅读
全局变量和成员变量的区别分析
成员变量是指定维度的成员变量,用于标识某个维度成员。简介由 Analysis Services 内部使用的值,以标识某个维度成员。MemberKeyColumn 属性指定维度的成员
发表于 12-11 13:50
•7367次阅读
把指定代码、常数或变量到某个特定地址的一个方法
问:如何指定代码、常数或变量到某个特定的地址? 答:使用“#pragma psect”伪指令来把代码、常数或变量放到你定制的psect。于是你就可以使用链接器选项来把这个定制的psect放到
组态屏变量地址映射 / 数据类型不匹配解决方法
、控制失效问题屡见不鲜。这些问题轻则造成数值跳变、按钮无响应,重则引发设备误动作,甚至危及生产安全。因此,掌握变量地址映射与数据类型不匹配的系统性解决方法,是每一位自
映射位到某个RAM变量的方法
评论