结构体、联合体、位域融合,巧妙灵活使用
2021/5/7 10:27:53
本文主要是介绍结构体、联合体、位域融合,巧妙灵活使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考地址:http://www.51hei.com/bbs/dpj-39303-1.html
1 typedef union 2 { 3 __u32 dwval; // 这里是对寄存器整体赋值修改 4 struct 5 { 6 __u32 io_map_sel : 1 ; // default: 0; 7 __u32 res0 : 29 ; // default: ; 8 __u32 tcon_gamma_en : 1 ; // default: 0; 9 __u32 tcon_en : 1 ; // default: 0; 10 } bits; // 这里个单独对某些寄存器进行操作 11 } tcon_gctl_reg_t;
/* 联合体 只占用4个字节*/
因联合体的特性,dwval与 bits 共用同一个内存空间;因结构体的特性,将每个寄存器分开;因位域的特性,得以单独修改某一位或几个位
---------------------------------------------------------------------------------------------------------------------------------------------------------
GPIOA
基址 + 偏移地址
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) (强制类型转换)
强制转为GPIO_TypeDef 类型的指针,表示从 0x40010800 开始连续占用sizeof(GPIO_TypeDef) 字节的长度。注意,它把 0x40010800 转为 GPIO_TypeDef 类型的指针,即GPIOA的地址0x40010800。
看看GPIO_Pin的定义 #define GPIO_Pin_0 ((uint16_t)0x0001) /*!< Pin 0 selected */ #define GPIO_Pin_1 ((uint16_t)0x0002) /*!< Pin 1 selected */ #define GPIO_Pin_2 ((uint16_t)0x0004) /*!< Pin 2 selected */ #define GPIO_Pin_3 ((uint16_t)0x0008) /*!< Pin 3 selected */ #define GPIO_Pin_4 ((uint16_t)0x0010) /*!< Pin 4 selected */ #define GPIO_Pin_5 ((uint16_t)0x0020) /*!< Pin 5 selected */ #define GPIO_Pin_6 ((uint16_t)0x0040) /*!< Pin 6 selected */ #define GPIO_Pin_7 ((uint16_t)0x0080) /*!< Pin 7 selected */ #define GPIO_Pin_8 ((uint16_t)0x0100) /*!< Pin 8 selected */ #define GPIO_Pin_9 ((uint16_t)0x0200) /*!< Pin 9 selected */ #define GPIO_Pin_10 ((uint16_t)0x0400) /*!< Pin 10 selected */ #define GPIO_Pin_11 ((uint16_t)0x0800) /*!< Pin 11 selected */ #define GPIO_Pin_12 ((uint16_t)0x1000) /*!< Pin 12 selected */ #define GPIO_Pin_13 ((uint16_t)0x2000) /*!< Pin 13 selected */ #define GPIO_Pin_14 ((uint16_t)0x4000) /*!< Pin 14 selected */ #define GPIO_Pin_15 ((uint16_t)0x8000) /*!< Pin 15 selected */ 仔细观察,发现定义的宏都很有规律,展开二进制来看刚刚好是对应16位数的每一个位。
这篇关于结构体、联合体、位域融合,巧妙灵活使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-01一个基于注解驱动的可视化的DDD架构-超越COLA的设计
- 2025-01-01PlantUML 时序图 基本例子
- 2025-01-01plantuml 信号时序图
- 2025-01-01聊聊springboot项目如何优雅进行数据校验
- 2024-12-31自由职业者效率提升指南:3个时间管理技巧搞定多个项目
- 2024-12-31适用于咨询行业的项目管理工具:提升跨团队协作和工作效率的最佳选择
- 2024-12-31高效协作的未来:2024年实时文档工具深度解析
- 2024-12-31商务谈判者的利器!哪 6 款办公软件能提升春节合作成功率?
- 2024-12-31小团队如何选择最实用的项目管理工具?高效协作与任务追踪指南
- 2024-12-31数据赋能,智慧养老:看板软件如何重塑养老服务生态