c - 访问嵌套结构
问题描述
我有一个嵌套结构,如下所示:
struct stm32fxxx_state {
struct stm32fxxx_gpio_state {
union {
uint32_t regs[10];
struct {
uint32_t MODER;
uint32_t OTYPER;
uint32_t OSPEEDR;
uint32_t PUPDR;
uint32_t IDR;
uint32_t ODR;
uint32_t BSRR;
uint32_t LCKR;
uint32_t AFRL;
uint32_t AFRH;
};
};
} GPIO[STM32FXXX_NUM_GPIOS];
struct stm32fxxx_spi_regs {
union {
uint16_t regs[9];
struct {
uint16_t CR1;
uint16_t CR2;
uint16_t SR;
uint16_t DR;
uint16_t CRCPR;
uint16_t RXCRCR;
uint16_t TXCRCR;
uint16_t I2SCFGR;
uint16_t I2SPR;
};
};
} SPI[STM32FXXX_NUM_SPIS];
uint32_t PWR_CR;
uint32_t PWR_CSR;
};
该结构已在main
函数中实例化,结构如下:
struct stm32fxxx_gpio {
SysBusDevice parent;
MemoryRegion mmio;
qemu_irq irq;
uint8_t port_id, _port_id;
struct stm32fxxx_state *state;
struct stm32fxxx_gpio_state *gregs;
};
在代码中的某处,该结构的访问方式如下:
uint32_t valx = val ^ self->state->GPIO[self->port_id].MODER;
和
uint32_t valx = val ^ self->gregs->OTYPER;
在哪里self
声明为struct stm32fxxx_gpio *self
我的问题是:与 有何self->state
不同self->gregs
?这两种访问结构有何不同。
代码已编译并运行良好。我想知道这两种访问如何返回不同的数据?或者这种嵌套结构有什么用?
我知道也state
包含gpio_state
属性。但是state
结构没有与gpio_state
结构不同的属性,那么为什么在这种情况下我们需要结构呢?
解决方案
self->state
并且self->regs
是 2 个不同的指针。代码可能会初始化这些字段以指向相同结构的部分。
推荐阅读
- linux - 如何在 centos 7 上重新加载 pythonic 服务?
- java - 生产者消费者代码问题(似乎通知方法没有释放循环内的锁)
- mongodb - $filter 在 mongodb 中最多 2 个嵌套级别
- powershell - 获取由 PowerShell 创建的现有 Internet Explorer 窗口
- rust - 计算获取块的平均值时出错
- python - 打印python文件中每个字符的统计信息
- docker - GCloud:使用 docker 容器和 GPU 创建实例模板
- django - 带有 prefetch_related 的 Django 查询
- scala - 我怎样才能以功能方式正确编写此代码而不会重复
- python - 在自定义 numpy 数组而不是 Sunpy Map 上绘制 SunPy HEK 多边形掩码