打印

宏理解求助

[复制链接]
885|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hlhfootbal|  楼主 | 2014-10-14 16:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define REG_OFFSET_FIELD_SET(OFFSET, NAME, VALUE) { \
    *(unsigned volatile short *)((PBYTE)g_psPearlRegs + REG_ADDR_##NAME + OFFSET) = \
        ((*(unsigned volatile short *)((PBYTE)g_psPearlRegs + REG_ADDR_##NAME + OFFSET) & ~REG_MASK_##NAME) | \
         (((unsigned volatile short)(VALUE) << REG_SHIFT_##NAME) & REG_MASK_##NAME)); \
}

以上代码中,##是怎么样的用法。
这个赋值语句吗?
没有理解=左右两边的意思。


相关帖子

沙发
luofeng2g| | 2014-10-14 16:26 | 只看该作者
就是宏定义一个函数,=不就是赋值的意思嘛! 就是配置寄存器!

使用特权

评论回复
板凳
hlhfootbal|  楼主 | 2014-10-14 18:03 | 只看该作者
yyy71cj 发表于 2014-10-14 17:37
起连接作用。
当你的参数并不是独立的一个元素,而只是一个变量中的一部分时,要使用##来标记,类似于分隔 ...

谢谢大侠指点的这么清楚。

使用特权

评论回复
地板
hlhfootbal|  楼主 | 2014-10-14 18:05 | 只看该作者
luofeng2g 发表于 2014-10-14 16:26
就是宏定义一个函数,=不就是赋值的意思嘛! 就是配置寄存器!

我知道是配置寄存器
=左边是一个运算,=右边也是一个运算,不是很明白这种写法的优点。

使用特权

评论回复
5
luofeng2g| | 2014-10-17 17:23 | 只看该作者
本帖最后由 luofeng2g 于 2014-10-17 17:40 编辑
hlhfootbal 发表于 2014-10-14 18:05
我知道是配置寄存器
=左边是一个运算,=右边也是一个运算,不是很明白这种写法的优点。 ...

你所说的运算是指,地址的运算?对片内外设寄存器寻址,才能进行配置啊!xx寄存器 = xx寄存器bit0|bit1|...  这样写不是很正常么?不然你觉得改怎么写?

使用特权

评论回复
6
lwm1368| | 2014-10-18 09:56 | 只看该作者
本帖最后由 lwm1368 于 2014-10-18 09:57 编辑

REG_ADDR_##NAME
组合作用,组合方式:
将##去掉,用输入的形参代替NAME。
举个例子:
比方说你输入给NAME的形参为 12
那么这里就将其组合成 REG_ADDR_12
而REG_ADDR_12则应该是你在某处已经定义过的宏或者变量等。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

417

帖子

1

粉丝