((PtrToStruct)*(unsigned int*)ADDRESS)
((PtrToStruct)*(unsigned int*)ADDRESS)
在我问之前我研究过类似的问题。最壁橱是这样的:
https://www.careercup.com/forumpost?id=5752438032171008
但是我还是不明白,这段代码是什么意思?
((PtrToStruct)*(unsigned int*)ADDRESS)
原始代码格式如下:
typedef struct __st_vec{
member 1
...
...
...
member n
}VEC, *PVEC;
#define ADDRESS 0x2000
#define VEC_PLACE() ((PVEC)*(unsigned int*)ADDRESS)
然后在代码的某处可以使用它来获取结构中的成员数据
variable = VEC_PLACE()->member 1;
许多硬件系统都有内存映射寄存器,它们存储或读取数据的地方。在小型嵌入式直接硬件系统上,这些寄存器通常放置在固定位置,即地址。
宏所做的基本上是允许以更好的方式访问这样的位置,而不必每次都编写所有的强制转换和取消引用。
更具体地说,在 ADDRESS
(0x2000
) 的位置似乎存储了一个指向 VEC
.
类型结构的指针
与 (unsigned int*)ADDRESS
宏假装 ADDRESS
的值实际上是指向 unsigned int
的指针。然后宏取消引用该指针,以获取存储在内存中 ADDRESS
处的值。最后,这个值被转换为指向 VEC
.
的指针
此代码非常面向硬件。
实际上假设VEC
类型的数据结构的地址存储在arADDRESS
中,address/pointer的大小为sizeof(unsigned int)
.
((PVEC)*(unsigned int*)ADDRESS)
==> (unsigned int*)ADDRESS
-- 使用值 ADDRESS
作为指向 unsigned int
的指针
==> *(unsigned int*)ADDRESS
-- 取消引用它(从地址[=]读取 sizeof(unsigned int)
字节12=]).
==> (PVEC)*(unsigned int*)ADDRESS
-- use/treat 这个取消引用的值作为指向结构的指针(地址) VEC
在我问之前我研究过类似的问题。最壁橱是这样的: https://www.careercup.com/forumpost?id=5752438032171008
但是我还是不明白,这段代码是什么意思?
((PtrToStruct)*(unsigned int*)ADDRESS)
原始代码格式如下:
typedef struct __st_vec{
member 1
...
...
...
member n
}VEC, *PVEC;
#define ADDRESS 0x2000
#define VEC_PLACE() ((PVEC)*(unsigned int*)ADDRESS)
然后在代码的某处可以使用它来获取结构中的成员数据
variable = VEC_PLACE()->member 1;
许多硬件系统都有内存映射寄存器,它们存储或读取数据的地方。在小型嵌入式直接硬件系统上,这些寄存器通常放置在固定位置,即地址。
宏所做的基本上是允许以更好的方式访问这样的位置,而不必每次都编写所有的强制转换和取消引用。
更具体地说,在 ADDRESS
(0x2000
) 的位置似乎存储了一个指向 VEC
.
与 (unsigned int*)ADDRESS
宏假装 ADDRESS
的值实际上是指向 unsigned int
的指针。然后宏取消引用该指针,以获取存储在内存中 ADDRESS
处的值。最后,这个值被转换为指向 VEC
.
此代码非常面向硬件。
实际上假设VEC
类型的数据结构的地址存储在arADDRESS
中,address/pointer的大小为sizeof(unsigned int)
.
((PVEC)*(unsigned int*)ADDRESS)
==> (unsigned int*)ADDRESS
-- 使用值 ADDRESS
作为指向 unsigned int
==> *(unsigned int*)ADDRESS
-- 取消引用它(从地址[=]读取 sizeof(unsigned int)
字节12=]).
==> (PVEC)*(unsigned int*)ADDRESS
-- use/treat 这个取消引用的值作为指向结构的指针(地址) VEC