打印
[AVR单片机]

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

[复制链接]
985|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
28182900|  楼主 | 2013-1-27 14:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
yklstudent| | 2013-1-27 19:07 | 只看该作者
你想让地址按位++????

使用特权

评论回复
板凳
huangxz| | 2013-1-27 19:49 | 只看该作者
cortex-m3有位映射,可以实现你要的功能,呵呵

使用特权

评论回复
评论
28182900 2013-1-28 10:06 回复TA
AVR啊哥哥 
地板
ccxlslr| | 2013-1-28 09:54 | 只看该作者
用位操作能实现类似功能,只是要麻烦一些

使用特权

评论回复
评论
28182900 2013-1-28 11:53 回复TA
怎么弄? 
5
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来查找需要的位

使用特权

评论回复
6
ABCDELF| | 2013-1-28 23:27 | 只看该作者
楼上写的不错,顶一个

使用特权

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

本版积分规则

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

100

主题

1127

帖子

2

粉丝