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