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
    +关注

    关注

    8

    文章

    1368

    浏览量

    114641
  • 编译器
    +关注

    关注

    1

    文章

    1623

    浏览量

    49108
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28360
收藏 人收藏

    评论

    相关推荐

    stm32编程的话,变量定义成8好还是16号?

    比如需要一个变量,8足够,那么定义的时候是定义成u8?u16?u32? “32在某些情况下需要对齐,对datafalsh读写时地址要是4的整数倍 编程方面如果RAM足够考虑
    发表于 05-14 07:29

    芯海通用 MCU 应用笔记:在 MDK 开发环境下代码重定向 RAM 执行的几种方法

    空间并写入新的代码。此外还具备执行效率高,寿命长优点。 本文档介绍和说明在 MDK 开发环境下将代码重定向 RAM 中执行的方法。本文档使用开发环境 keil UVision,版
    发表于 05-16 11:58

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

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

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

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

    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

    RAM扩展接法

    RAM扩展接法
    发表于 12-04 17:16 2089次阅读
    <b class='flag-5'>RAM</b>的<b class='flag-5'>位</b>扩展接法

    Freescale 16单片机的地址映射

    原文链接:freescale 16单片机的地址映射--(1)前言 freescale 16单片机的地址映射--(2)飞思卡尔16单片机
    发表于 11-24 07:43 1148次阅读

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

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

    DSP从FLASHRAM方法详细资料说明

    本文档的主要内容详细介绍的是DSP从FLASHRAM方法详细资料说明。
    发表于 01-17 16:58 22次下载
    DSP从FLASH<b class='flag-5'>到</b><b class='flag-5'>RAM</b>的<b class='flag-5'>方法</b>详细资料说明

    STM32带引申的指针变量问题

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

    单片机指针变量及例子

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

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

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

    TSMaster 信号映射的配置方法

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