[AVR单片机] 在IAR for AVR 环境下,如何让指针按位++??而不是按 char

[复制链接]
1595|5
 楼主| 28182900 发表于 2013-1-27 14:06 | 显示全部楼层 |阅读模式
本帖最后由 28182900 于 2013-1-27 14:07 编辑

或者可以定义一个位数组?在IAR for AVR 环境下。
yklstudent 发表于 2013-1-27 19:07 | 显示全部楼层
你想让地址按位++????
huangxz 发表于 2013-1-27 19:49 | 显示全部楼层
cortex-m3有位映射,可以实现你要的功能,呵呵

评论

AVR啊哥哥  发表于 2013-1-28 10:06
ccxlslr 发表于 2013-1-28 09:54 | 显示全部楼层
用位操作能实现类似功能,只是要麻烦一些

评论

怎么弄?  发表于 2013-1-28 11:53
ccxlslr 发表于 2013-1-28 13:34 | 显示全部楼层
本帖最后由 ccxlslr 于 2013-1-28 13:36 编辑

#define BIT_SET(LVALUE, BIT)        (LVALUE |=   1 << (BIT))        /* 位置1,直接操作指定的位          */
#define BIT_CLR(LVALUE, BIT)        (LVALUE &= ~(1 << (BIT)))       /* 位清0,直接操作指定的位          */
#define BIT_REV(LVALUE, BIT)        (LVALUE ^=   1 << (BIT))        /* 位取反,直接操作指定的位         */
#define BIT_SET_MSK(LVALUE, MASK)   (LVALUE |=  (MASK))             /* 位置1,操作MASK指定的位,可以多位 */
#define BIT_CLR_MSK(LVALUE, MASK)   (LVALUE &= ~(MASK))             /* 位清0,操作MASK指定的位,可以多位 */
#define BIT_REV_MSK(LVALUE, MASK)   (LVALUE ^=  (MASK))             /* 位取反,操作MASK指定的位,可以多位*/

#define BIT_CHK(OPERAND, BIT)       ((OPERAND) & 1 << (BIT))        /* 位检测                          */
#define BIT_CHK_MSK(OPERAND, BIT)   ((OPERAND) & (MASK))            /* 位检测,检测MASK指定的位,可以多位*/

#define BIT_SET_BIT(LVALUE, BIT, VALUE) ((VALUE) ? BIT_SET(LVALUE, (BIT)) : BIT_CLR(LVALUE, (BIT))) /* */
                                                                    /* 设置指定位的值                  */
unsigned char bitdata[10]  //可以定义80个位
unsigned char bitpt = 0;  //类似指针
unsigned char x,y//

比如找第28个位
bitpt = 28;
y = bitpt / 8
x = bitpt % 8;

if (BIT_CHK(bitdata[ y], x) {
     //位为1执行
}

设置的话用BIT_SET , 清零用BIT_CLR, 可以将上面的宏展开。
可以通过运算bitpt来查找需要的位
ABCDELF 发表于 2013-1-28 23:27 | 显示全部楼层
楼上写的不错,顶一个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:工作永远干不完,生命却一直在倒计时

100

主题

1127

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部