【发布时间】:2021-02-12 10:33:23
【问题描述】:
- 此函数读取相应寄存器地址处的值。
- 我正在尝试对地址的位进行一些操作。
- 我遵循的公式是:(1
- 我将如何运行此函数的示例是 (0x8,1) ,0x8 是寄存器地址,1 是 nbytes。
char *function(struct devices *address, int nbytes)
{
if((1<<0)|address)
{
printf("Hello World");
}
else if((1<<2)|address)
{
printf("Hello World");
}
return 0;
}
- 例如假设我有一个寄存器地址 0x8 = 0000 1000 ,现在假设我想设置这个寄存器的第 2 位。所以,它变成了 (1
- 我正在使用这个 (1
但是问题在于我无法使用地址,因为它是一个指针,所以有人可以告诉我如何相应地设置地址以便可以执行位操作吗?还是我自己在代码里面手动定义地址?
【问题讨论】:
-
我不明白问题出在哪里。您是在问如何取消引用指针并获取它指向的值?
-
不清楚您是要更改地址的位(这将是不寻常的),还是要修改地址指向的某些硬件寄存器的位。指针是指向结构的指针也很奇怪。你能包括结构的定义或它的一些sn-p吗?
-
@PaulHankin,我必须切换和设置/重置地址的位以分别对每个位执行某些功能。例如设置第 1 位,它将执行某些功能,设置第 2 位,然后设置其他功能等。结构的定义只不过是一个包含寄存器地址结构的结构。
-
(1<<0)|address始终为真。要测试某个值,请使用&,而不是|,如1<<position & x。 -
例如,假设我有一个 0x8 = 0000 1000 的寄存器地址,现在假设我想设置这个寄存器的第 2 位。 用 地址是否与更改该寄存器的内容有关?如果你想改变客厅家具的位置,你不要改变邮箱上的门牌号。