当前位置: 首页 > 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内部的多个寄存器,用结构体成员区分,其实就是先用结构体圈地,然后把圈来得地分割,为什么要加结构体这个环节,主要是为了方便管理,层次分明才能逻辑清晰,打个比喻,本来你的各类资料胡乱几千本放在一个大箱子里面,你要去寻找一个叫做东京有点热的学习资料,发现你要一本本的去翻,这个时候你完全可以整几个箱子分类放置,我们就可以很快的找到,很快的学习了!
在这里插入图片描述

相关文章:

  • 数字化营销时代,我们需要有哪些思维?
  • 深入理解指针(六)
  • 深度学习-6.用于计算机视觉的深度学习
  • CPU封装形式解析:从传统到先进封装的技术演进
  • hotkey的学习
  • 深度学习在图像识别中的应用-以花卉分类系统为例
  • Microsoft 365 Copilot中使用人数最多的是哪些应用
  • 聊聊 FocusSearch/focus_mcp_sql:Text2SQL 的新玩法
  • Word文档中插入的图片不能完整显示
  • LeetCode 热题 100_搜索二维矩阵(64_74_中等_C++)(二分查找)(暴力破解法;Z字形查找;一次二分查找)
  • 第8章:LangChain检索增强生成RAG--2.4Advanced RAG【高级RAG】
  • windows怎样查看系统信息(处理器等)
  • QSplashScreen --软件启动前的交互
  • 头像壁纸小程序源码,壁纸取图小程序源码系统
  • 【matlab代码】基于故障概率加权与多模态滤波的AUV多源融合导航
  • 如何有效利用MYSQL的连接数
  • cline通过硅基流动平台接入DeepSeek-R1模型接入指南
  • Windows 下如何对 node/vue 进行多版本管理?
  • 【后端基础】布隆过滤器原理
  • flowable适配达梦数据库
  • 大学2025丨专访西湖大学副校长邓力:如何才能培养“不惧未知”的创新者
  • 以色列称“将立即允许恢复”人道主义物资进入加沙
  • 蔡建忠已任昆山市副市长、市公安局局长
  • 视频丨歼-10CE首次实战大放异彩
  • 第十届曹禺剧本奖上海揭晓,首次开放个人申报渠道
  • 网易有道一季度净利润同比增长247%:有能力在今年实现更强劲的利润增长