c - ((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
.
推荐阅读
- javascript - 使用 Jest 对仅在函数存在时调用函数的 JavaScript 进行单元测试
- python - 无法摆脱使用 asyncio 时出现的一些错误页面
- php - 使用 htaccess 重定向到 https,但不使用 XAMPP 进行开发
- c# - 我可以对 Azure Cosmos 中的 DateTimeOffset 序列化对象使用 DateTimePart 函数吗?
- c# - 无法将 Json 字符串反序列化为 .NET 对象,但反序列化后对象为空
- c# - 使用 Nodejs/Electron 处理 Windows COM 对象
- c++ - 如何获取特定子进程的进程 ID?(C++)
- python - 如何使用 Gurobi Python API 添加“For”循环
- c# - 我收到一个错误:CS0116 A namspace cannot directly contain members,例如第 3 行的字段或方法
- c# - EFCore 急切加载问题