【发布时间】:2017-02-20 10:53:19
【问题描述】:
我无法理解头文件中的某些代码部分及其用法。 我有一个名为 xxx.h 的头文件,其中包含一个类型定义的结构和一些成员变量,如下所示:
typedef Struct{
int x,y,z; //members inside structure
}myStruct;
#define base 0x02300 // must be a RAM address
#define access ((myStruct *) base)
我无法找出定义 #define access ((myStruct *) base) 在我的代码中的实际作用。 同样在我的源文件 yyy.c 中,我可以使用这一行访问结构变量:
#include "xxx.h"
void main()
{
access->x = 23;
}
在引用 C 语言中的“指向结构的指针”部分后,我真正理解的是,我可以创建一个 myStruct 类型的新指针变量,并使用“->”运算符使用该变量访问结构内的变量。 请帮助我理解这段代码。 谢谢
【问题讨论】:
-
这只是以通常的方式将一个结构映射到一个硬编码的内存地址(对于小型嵌入式应用程序来说很常见) - 您难以理解哪一部分?你有a good book on C 吗?
-
typedef Struct在 C 语言中无效。您的编译器应该报错。 -
对于一个非常基本的理解,这将在地址
0x02300处创建一个myStruct类型的struct。access是指向该结构的指针。 -
@Paul R 你好 Paul,“base”是特定 GPIO 端口的地址,结构内的成员是寄存器名称。我发现很难理解 Typecasting 是如何工作的。这行 ((myStruct *) base)->x = 23 ; 是在“base”地址处隐式声明 myStruct 类型的新指针变量吗?
标签: c pointers casting structure