s*********s 发帖数: 140 | 1 Glass door上面的:Have a register, that cannot be READ, but you have to
WRITE a single bit into the register without modifying the other bits.
原题: http://www.glassdoor.com/Interview/National-Instruments-Interview-RVW2077327.htm
没明白是什么意思...寄存器的基础知识完全不记得了。谁能讲讲?多谢 |
y*****h 发帖数: 22 | 2 假设使用的CPU是8位的。
union REG {
uint8 byte;
struct {
uint8 bit0:1;
uint8 bit1:1;
uint8 bit2:1;
uint8 bit3:1;
uint8 bit4:1;
uint8 bit5:1;
uint8 bit6:1;
uint8 bit7:1;
} bits;
struct {
uint8 bit01:2;
uint8 bit23:2;
uint8 bit47:4;
} other;
}
这样就可以修改整个寄存器的值,某两位的值,以及单个bit的值。
我之前在日本给丰田,日产等做汽车发动机和空调的软件控制系统的时候,关于寄存器
的代码就是这么写的。
#define IOREG_0 someREG.bits.bit0
IOREG_0 = (uint8)1;
我只是说一下我所用到过的方法。可能还有其他好方法。 |
y*****h 发帖数: 22 | 3 另外,little-endian和big-endian的时候,bit0-bit7的顺序相反,需要把宏加上去。 |
p******a 发帖数: 130 | 4 这应该是考按位与/或操作。 写0按位与,写1按位或。
【在 s*********s 的大作中提到】 : Glass door上面的:Have a register, that cannot be READ, but you have to : WRITE a single bit into the register without modifying the other bits. : 原题: http://www.glassdoor.com/Interview/National-Instruments-Interview-RVW2077327.htm : 没明白是什么意思...寄存器的基础知识完全不记得了。谁能讲讲?多谢
|
y*****h 发帖数: 22 | 5 但是这个寄存器是只写的。
如果要进行与或运算的话,必须先读出该寄存器的值才行。
Have a register, that cannot be READ。也就意味着不能进行与或运算了吧。
【在 p******a 的大作中提到】 : 这应该是考按位与/或操作。 写0按位与,写1按位或。
|
s*********s 发帖数: 140 | |