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

news/2025/2/22 16:09:21

目录

  • 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.niftyadmin.cn/n/5862506.html

相关文章

MinkowskiEngine安装(CUDA11.8+torch2.0.1+RTX4070TI)

1、背景 1)因为项目要用这个库:MinkowskiEngine,Minkowski Engine — MinkowskiEngine 0.5.3 documentation 然后就用了之前安装好 MinkowskiEngine 的torch1.8.1,cuda11.1的环境。 2)自己的代码出现cuda不支持torch用gpu进行矩…

2024系统编程语言风云变幻:Rust持续领跑,Zig与Ada异军突起

2024年系统编程语言调查报告新鲜出炉!这份报告对Rust、Zig、Ada、C、C等主流语言进行了全面评估,结果令人瞩目。Rust凭借其强大的类型系统和内存安全机制继续领跑,而Zig和Ada则展现出巨大的潜力,为系统编程领域带来了新的活力。本…

有没有使用wxpython开发的类似于visio或drawio的开源项目(AI生成)

有没有使用wxpython开发的类似于visio或drawio的开源项目 是的,有一些使用wxPython开发的类似于Microsoft Visio或draw.io(现为diagrams.net)的开源项目。wxPython 是一个跨平台的GUI工具包,它允许Python开发者创建桌面应用程序&…

【OS安装与使用】part6-ubuntu 22.04+CUDA 12.4运行MARL算法(多智能体强化学习)

文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 下载源码并安装2.2.2 安装缺失的依赖项2.2.3 训练执行MAPPO算法实例 三、疑问四、总结 一、待解决问题 1.1 问题描述 已配置好基础的运行环境,尝试运行MARL算法。 1…

VMware NSX 4.X Professional V2(2V0-41.24)题库

What is the VMware recommended way to deploy a virtual NSX Edge Node? A. Through the NSX UI B. Through automated or interactive mode using an ISO C. Through the vSphere Web Client D. Through the OVF command line tool 答案: A 解析:Install NSX Ed…

C++ 设计模式 - 策略模式

一:概述 策略模式是一种行为设计模式,来源于《设计模式:可复用面向对象软件的基础》一书。它定义了一组算法,并将它们封装成独立的对象。策略模式在标准模板库(STL)中被广泛使用。 二:策略模式…

NeurIPS-2024 | 具身智能如何理解空间关系?SpatialRGPT:视觉语言模型中的具象空间推理

作者:An-Chieh Cheng, Hongxu Yin, Yang Fu, Qiushan Guo, Ruihan Yang, Jan Kautz, Xiaolong Wang, Sifei Liu 单位:加州大学圣地亚哥分校,NVIDIA 标题:SpatialRGPT: Grounded Spatial Reasoning in Vision-Language Models 原…

5G-A的尔滨故事,冰雪下的科技春潮

刚刚结束的第九届亚冬会中,黑科技5G-A达成了刷屏级的效果。这也是5G-A首次大规模服务于国际大型体育赛事。 一场冰雪盛会之后,5G-A向何处去?这个黑科技的能力,将如何投放给大众消费者和企业?这是值得我们进一步思考的话…