g***i 发帖数: 4272 | 1 应该是很简单的,但是概念性地有点不太明白。
typedef volatile unsigned short int hwreg16_t;
hwreg16_t *p;
p = (hwreg16_t*) 0x208000A0;
Write C code, to set bit 9 in a 16-bit hardware register pointed to by p。
这个bit9是指左边数还是右边数?
假设bit 9 是从右边数,理解没错的话是不是这个操作就是
*p&=0xfeff//set as 0
*p|=0x0100 //set as 1
刚想起一点,这种bit operation的术语,set是不是就是设为1? 设为0叫reset? |
X****r 发帖数: 3557 | 2 You need to assign it back.
【在 g***i 的大作中提到】 : 应该是很简单的,但是概念性地有点不太明白。 : typedef volatile unsigned short int hwreg16_t; : hwreg16_t *p; : p = (hwreg16_t*) 0x208000A0; : Write C code, to set bit 9 in a 16-bit hardware register pointed to by p。 : 这个bit9是指左边数还是右边数? : 假设bit 9 是从右边数,理解没错的话是不是这个操作就是 : *p&=0xfeff//set as 0 : *p|=0x0100 //set as 1 : 刚想起一点,这种bit operation的术语,set是不是就是设为1? 设为0叫reset?
|
g***i 发帖数: 4272 | 3 嗯改了,意思我明白,但这道题的目的是不是就是这样了?
【在 X****r 的大作中提到】 : You need to assign it back.
|
t****t 发帖数: 6806 | 4 usually bit count start from 0. so mask of bit 9 is 0x200 or (1<<9). to
reset, use ~(1<<9). you should let compiler count.
【在 g***i 的大作中提到】 : 应该是很简单的,但是概念性地有点不太明白。 : typedef volatile unsigned short int hwreg16_t; : hwreg16_t *p; : p = (hwreg16_t*) 0x208000A0; : Write C code, to set bit 9 in a 16-bit hardware register pointed to by p。 : 这个bit9是指左边数还是右边数? : 假设bit 9 是从右边数,理解没错的话是不是这个操作就是 : *p&=0xfeff//set as 0 : *p|=0x0100 //set as 1 : 刚想起一点,这种bit operation的术语,set是不是就是设为1? 设为0叫reset?
|
d****n 发帖数: 1637 | 5 use macro , no need to calculate the constant
~~~~~~
#include
#define SETN( x ,n) ((x)|=(1<<(n)))
#define UNSETN(x, n) ((x)&=~(1<<(n)))
int main(){
unsigned short int i=1;
SETN(i, 9) ;
printf("%d\n",i);
UNSETN(i, 9) ;
printf("%d\n",i);
}
///output
513
1 |
a****l 发帖数: 8211 | 6 usually from right. But in the world of hardware/bit, always ask for
datasheet/reference, never guess.
【在 g***i 的大作中提到】 : 应该是很简单的,但是概念性地有点不太明白。 : typedef volatile unsigned short int hwreg16_t; : hwreg16_t *p; : p = (hwreg16_t*) 0x208000A0; : Write C code, to set bit 9 in a 16-bit hardware register pointed to by p。 : 这个bit9是指左边数还是右边数? : 假设bit 9 是从右边数,理解没错的话是不是这个操作就是 : *p&=0xfeff//set as 0 : *p|=0x0100 //set as 1 : 刚想起一点,这种bit operation的术语,set是不是就是设为1? 设为0叫reset?
|