当前位置: 首页 > news >正文

C语言学习【1】C语言关于寄存器的封装

目录

  • 1.封装寄存的C语言的语法
    • volatile:
    • unsigned int:
    • *pGpiobOdr
    • volatile unsigned int *
  • 2.进一步C语言的封装

在嵌入式中,底层一定是操作寄存器,我有一个理念,凡事一定要想清楚,把任何知识点融入自己的理解之中,这样不被技术限制的同时,还能让自己其他方面的认识得到进步。
下面我把自己的理解写出来,抛砖引玉!

1.封装寄存的C语言的语法

volatile:

编译器在处理变量的时候,为了效率考虑,对于频繁修改的变量会把他放在缓存(CPU里面的缓存比RAM速度快的多的多)中进行计算,等到不频繁或者确实需要写入内存的时候,才会写到RAM中,不会实时的和RAM交互,对于寄存器这种和外界交互的“内存”来说,就会出现问题,看似我操作了寄存器,实际上我是自娱自乐
可以这么记忆,底层操作必须用这个volatile把寄存器和变量绑定在一起才能用,不然这个程序就不能用,或者这个数字是极其关键的,实时更新!

unsigned int:

寄存器都是32位的,在32位单片机中,我们需要一个能覆盖32的数据类型,这个数据类型就是int,你问long int能不能行,其实也是可以的,不过计算起来就会非常的麻烦,unsigned是为了保证int32位都是可以说的(signed类型最高位会变成正负号)
也就是说,用unsigned int这个数据类型和整形这个概念没有关系,只和占据32位有关系

*pGpiobOdr

指针,对于指针我们都知道是指的一个地址,但是我们要明白在实现世界还是程序代码的世界,都是有空间时间这个概念的(by the way,多维数组表示三维空间,有点类似于二向箔对三维的二维展开),既然是一个地址根本代表不了什么,还需要知道这个地址起始,占据的空间,占据空间这个维度就需要数据类型指定,你给什么数据类型,你就在内存中圈多大的地盘,这个就是前面定义的 unsigned int参数的作用

volatile unsigned int *

强制类型转换,c语言要求必须和前面指针类型的一致,不然就会警报。

在这里插入图片描述

2.进一步C语言的封装

C语言的进一步封装就是用结构体把大块的内存框起来,比如关于GPIOA所有寄存器全部用结构体框起来,GPIOA内部的多个寄存器,用结构体成员区分,其实就是先用结构体圈地,然后把圈来得地分割,为什么要加结构体这个环节,主要是为了方便管理,层次分明才能逻辑清晰,打个比喻,本来你的各类资料胡乱几千本放在一个大箱子里面,你要去寻找一个叫做东京有点热的学习资料,发现你要一本本的去翻,这个时候你完全可以整几个箱子分类放置,我们就可以很快的找到,很快的学习了!
在这里插入图片描述

http://www.lryc.cn/news/542416.html

相关文章:

  • 鸿蒙app 开发中的 == 和 === 的区别
  • 【算法】冒泡排序
  • R Excel 文件:高效数据处理的利器
  • 数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表
  • 电力通信物联网应用,国密网关守护电力数据安全
  • vue:vite 代理服务器 proxy 配置
  • Java【网络原理】(2)初识网络续与网络编程
  • AI+集装箱号码识别技术,主要发展方向和应用潜力
  • 安装可视化jar包部署平台JarManage
  • 后端之JPA(EntityGraph+JsonView)
  • Java数据结构第十三期:走进二叉树的奇妙世界(二)
  • JavaScript系列(86)--现代构建工具详解
  • docker容器网络配置及常用操作
  • Docker 性能优化指南
  • 课程1. 深度学习简介
  • 【cuda学习日记】4.3 结构体数组与数组结构体
  • 2025最新高维多目标优化:基于城市场景下无人机三维路径规划的导航变量的多目标粒子群优化算法(NMOPSO),MATLAB代码
  • 数字IC后端设计实现OCC(On-chip Clock Controller)电路介绍及时钟树综合案例
  • Linux内核,slub分配流程
  • 本地部署DeepSeek-R1(Ollama+Docker+OpenWebUI知识库)
  • Java 实现快速排序算法:一条快速通道,分而治之
  • 20250223下载并制作RTX2080Ti显卡的显存的测试工具mats
  • element-ui的组件使用
  • 医疗AI领域中GPU集群训练的关键技术与实践经验探究(上)
  • 详解Redis淘汰策略
  • HarmonyOS 5.0应用开发——鸿蒙接入高德地图实现POI搜索
  • nginx关于配置SSL后启动失败原因分析
  • 【自学嵌入式(9)ESP8266网络服务器的使用】
  • 危化品经营单位安全管理人员的职责及注意事项
  • 项目实战--网页五子棋(匹配模块)(5)