首页 > 解决方案 > ((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;

标签: cram

解决方案


许多硬件系统都有内存映射寄存器,它们存储或读取数据的地方。在小型嵌入式直接硬件系统上,这些寄存器通常放置在固定位置,即地址。

宏所做的基本上是允许以更好的方式访问这样的位置,而不必每次都编写所有的强制转换和取消引用。


更具体地说,在ADDRESS( 0x2000) 的位置上似乎存储了一个指向类型结构的指针VEC

使用(unsigned int*)ADDRESS宏假装 的值ADDRESS实际上是指向unsigned int. 然后宏取消引用该指针,以获取存储在内存中的值ADDRESS。最后,这个值被转换为指向VEC.


推荐阅读