搜索
bottom↓
回复: 5

求助,关于WINAVR的一个很高级的用于位操作的宏定义,忘记了,哪位大侠给个网址吧!!!

[复制链接]

出0入25汤圆

发表于 2012-2-10 22:42:29 | 显示全部楼层 |阅读模式
之前在这个论坛上看到过一个很高级的WINAVR的宏定义的代码,只记得代码很长,而且里面有很多“###”符号,然后定义这个宏之后,只要通过简答的宏定义,比如:
#define LED0_OUT XXXXXXXXXX           //这里的“XXXXX"表示之前定义的那个很高级的宏

然后就可以简单的位操作了,像下面那样子:

LED_OUT = 1;



可是现在怎么都找不到那个宏的定义了,希望知道在什么地方的大侠给指引一下,谢谢了!!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入25汤圆

 楼主| 发表于 2012-2-11 10:37:23 | 显示全部楼层
功夫不负有心人啊,终于给我找到了:

#ifndef __BITWISE_H
#define __BITWISE_H
#ifdef __cplusplus
extern "C" {
#endif
#define _BITFIELD_(_W)        \
    typedef union {           \
        struct {              \
            uint8_t used :_W; \
        };                    \
        uint8_t dummy;        \
    } _bit_0_ ## _W ## _t
#define _BITFIELD1_(_S, _W)   \
    typedef union {           \
        struct {              \
            uint8_t :_S;      \
            uint8_t used :_W; \
        };                    \
        uint8_t dummy;        \
    } _bit_ ## _S ## _ ## _W ## _t
_BITFIELD_(1);
_BITFIELD_(2);
_BITFIELD_(3);
_BITFIELD_(4);
_BITFIELD_(5);
_BITFIELD_(6);
_BITFIELD_(7);
_BITFIELD_(8);
_BITFIELD1_(1, 1);
_BITFIELD1_(1, 2);
_BITFIELD1_(1, 3);
_BITFIELD1_(1, 4);
_BITFIELD1_(1, 5);
_BITFIELD1_(1, 6);
_BITFIELD1_(1, 7);
_BITFIELD1_(2, 1);
_BITFIELD1_(2, 2);
_BITFIELD1_(2, 3);
_BITFIELD1_(2, 4);
_BITFIELD1_(2, 5);
_BITFIELD1_(2, 6);
_BITFIELD1_(3, 1);
_BITFIELD1_(3, 2);
_BITFIELD1_(3, 3);
_BITFIELD1_(3, 4);
_BITFIELD1_(3, 5);
_BITFIELD1_(4, 1);
_BITFIELD1_(4, 2);
_BITFIELD1_(4, 3);
_BITFIELD1_(4, 4);
_BITFIELD1_(5, 1);
_BITFIELD1_(5, 2);
_BITFIELD1_(5, 3);
_BITFIELD1_(6, 1);
_BITFIELD1_(6, 2);
_BITFIELD1_(7, 1);
#define SFR(_P, _S, _W) (*(_bit_ ## _S ## _ ## _W ## _t volatile*)(_SFR_ADDR(_P))).used
#ifdef __cplusplus
}
#endif
#endif

#define LED SFR(PORTB, 0, 1)

LED = 1;

#define LED SFR(PORTB, 0, 2)

LED = 3;

看到没,不仅可以一位一位的操作,还可以两位两位的操作,比Keil那个还要强大!!!!

就是不知道,这样操作对效率的影响到底有多大!!!!

出0入0汤圆

发表于 2012-2-11 10:43:37 | 显示全部楼层
这个够厉害!

出0入0汤圆

发表于 2012-2-11 11:08:53 | 显示全部楼层
收藏一下啊!感谢楼主

出0入0汤圆

发表于 2013-7-30 18:50:01 | 显示全部楼层
XIVN1987 发表于 2012-2-11 10:37
功夫不负有心人啊,终于给我找到了:

#ifndef __BITWISE_H

可以解释吗?

出0入0汤圆

发表于 2017-1-5 09:01:55 | 显示全部楼层
iar中这句应该怎么定义,谢谢
#define SFR(_P, _S, _W) (*(_bit_ ## _S ## _ ## _W ## _t volatile*)(_SFR_ADDR(_P))).used
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-17 05:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表