自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(122)
  • 收藏
  • 关注

原创 stm32学习笔记---MPU6050(代码部分)软件I2C读写MPU6050

​通过AD0引脚改名的功能我们可以把一根飞线连接AD0引脚和VCC, 这时MPU6050的从机地址就是1101 001了。​编辑这个时候运行就发现从机没有给我们应答了,因为它刚刚改名成1101 001了。这个时候把飞线拔掉,再次运行发现它又可以应答了。​编辑这就是改名的实验现象。目前我们这个芯片只有AD0一个引脚,它就只能拥有两个名字。如果有AD0和AD1两个引脚,就可以拥有总共四个名字。如果有更多的可配置引脚,就有更多的改名机会。当我们需要一条总件挂载多个相同型号的设备时,就可以利用这个改名

2024-07-22 11:30:40 371

原创 stm32学习笔记---MPU6050(理论部分)

什么是6轴姿态传感器?在现实的三维空间里,只有xyz三个轴。但是这个MPU6050芯片里面有加速度计和陀螺仪两种传感器,可以分别测量xyz三个轴的加速度和角速度,加起来总共就是六个轴,所以这个芯片是六轴姿态传感器。当然,如果芯片里再集成一个三轴的磁场传感器,测量xyz轴的磁场强度,就叫做九轴姿态传感器。如果再集成一个气压传感器,测量气压大小,就叫做十轴姿态传感器。一般气压值反映的是高度信息,海拔越高,气压越低,所以气压计是单独测量垂直地面的高度信息的。这也就是姿态传感器的一些术语,之后别人再说这个传感器是

2024-07-11 18:33:49 810 3

原创 stm32学习笔记---I2C通信协议(理论部分)

同步和异步的区别异步时序的好处就是省一根时钟线,节省资源,缺点就是对时间要求严格,对硬件电路的依赖比较严重。同步时序的好处就是反过来,对时间要求不严格,对硬件电路不怎么依赖。在一些低端单片积没有硬件资源的情况下,也很容易使用软件来模拟时序。缺点就是多一根时钟线。本节我们最基本的任务是通过通信线实现单片机读写外挂模块寄存器的功能。其中至少要实现在指定的位置写寄存器和在指定的位置读寄存器这两个功能。实现了读写寄存器就实现了对这个外挂模块的完全控制。

2024-07-11 18:11:29 847

原创 stm32学习笔记---FlyMcu串口下载&STLINK Utility(理论部分)

本节主要是教大家使用两个小软件,这两个软件也是比较常用的,里面有很多有意思的功能。这个功能能帮助我们干什么呢?比如你看到别人用STM32做了一个产品,你觉得不错,就可以抄一下它的PCB板,然后程序文件又可以通过这个软件读出来,这样就可以大批量山寨别人的产品了。不过STM32也可以配置读保护,这个等会儿再说。但是反过来,如果你开发产品不注意这个问题的话,是不是一不小心程序就泄露了!我们看一下读出来的这个文件,这个文件是.bin格式的,里面记录的就是STM32从0800开始存储的程序数据,bin格式是没

2024-07-04 12:30:00 1196

原创 stm32学习笔记---USART串口数据包(代码部分)串口收发HEX数据包/文本数据包

这个程序还隐藏有一个问题,就是这个Serial_RxPacket数组,它是一个同时被写入,又同时被读出的数组。在中断函数里,我们会依次写入它,在主函数里,我们又会依次读出它。这会造成数据包之间可能会混在一起。比如读出的过程太慢了,前面两个数据刚读出来,等了一会儿才继续往后读取。这时后面的数据就有可能会刷新为下一个数据包的数据,也就是读出的数据可能一部分属于上一个数据包,另一部分属于下一个数据包。解决方法可以在接收部分加入判断,就是在每个数据包读取处理完毕后,再接收下一个数据包。当然,很多情况下其实还可以不

2024-07-04 11:30:00 1033

原创 stm32学习笔记---USART串口数据包(理论部分)

我们之前学习了串口的代码,发送一个字节,接收一个字节都没问题。但在实际应用中,我们可能需要把多个字节打包为一个整体进行发送。比如说我们有个陀螺仪传感器,需要用串口发送数据STM32。陀螺仪的数据,比如x轴一个字节,y轴一个字节,z轴一个字节,总共三个数据需要连续不断的发送,当你像这样xyzxyzxyz连续发送的时候,就会出现一个问题,就是接收方不知道这数据哪个对应x,哪个对应y,哪个对应z,因为接收方可能会从任意位置开始接收,所以会出现数据错位的现象。这时候我们就需要研究一种方式,把这个数据进行分割,把x

2024-07-03 15:57:09 1305

原创 stm32学习笔记---USART串口外设(代码部分)串口发送/串口发送+接收

第一步,开启时钟,把需要用的USART和GPIO的时钟打开。第二步,GPIO初始化,把TX配置成复用输出,RX配置成输入。第三步,配置USART,直接使用一个结构体,就可以把这里所有的参数都配置好了。第四步,开关控制,如果只需要发送的功能,就直接开启USART初始化就结束了。如果需要接收的功能,可能还需要配置中断。那就在开启USART之前,再加上ITConfig和NVIC的代码就行了。初始化完成之后,如果要发送数据,调用一个发送函数就行了。如果要接收数据,就调用接收的函数。如果要获取发送和接收的状态

2024-07-03 10:32:46 1616

原创 stm32学习笔记---USART串口外设(理论部分)

USART简介USART(UniversAl Synchronous/Asynchronous Receiver/TrAnsmitter)通用同步/异步收发器。注:这个S就是Synchronous同步,如果少了这个S就是异步,一般来说我们串口很少使用同步功能。所以USART和UART使用起来也没什么区别。其实这个STM32的USART同步模式,只是多了个时钟输出而已,它只支持时钟输出,不支持时钟输入。所以这个同步模式更多的是为了兼容别的协议或者特殊用途而设计的,并不支持两个USART之间进行同步通信。所

2024-07-02 20:41:20 987

原创 stm32学习笔记---USART串口协议(理论部分)

通信的目的将一个设备的数据传送到另一个设备,扩展硬件系统比如STM32芯片它里面集成了很多功能模块,比如定时器计数,PWM输出、AD采集等等。这些都是芯片内部的电路,这些电路的配置寄存器,数据寄存器都在芯片里面,操作这些寄存器非常简单,直接读写就行了。但是也有些功能是STM32内部没有的,比如我们想要蓝牙无线遥控的功能,想要陀螺仪加速度计测量姿态的功能。STM32没有这些功能,所以就只能外挂芯片来完成。外挂的芯片的数据都在STM32外面。STM32如何才能获取到这些数据?这就需要我们在这两个设备之

2024-07-02 20:32:20 1023

原创 stm32学习笔记---DMA直接存储器存取(代码部分)DMA数据转运/DMA+AD多通道

​ADC和DMA配合起来的配置步骤第一步,开启RCC时钟,开启ADC1、GPIOA和DMA1的时钟,另外这里ADC CLK的分频器也需要配置一下;第二步,配置GPIO,把需要用的GPIO配置成模拟输入的模式。第三步,配置多路开关,把通道接入到规则组列表里。这个过程就是我们之前说的点菜,把各个通道的菜列在菜单里。第四步,配置ADC转换器,在库函数里是用结构体来配置的,要使能连续转换模式,每转换一次规则组序列后立刻开始下一次转换。第五步,配置DMA,就可以直接调用DMA_Init,所有的参数通过一个结

2024-07-01 13:58:58 930

原创 stm32学习笔记---DMA直接存储器存取(理论部分)

DMA(Direct Memory Access)直接存储器存取,或者叫直接存储器访问;从这个DMA名字的意思来看,DMA这个外设是可以直接访问STM32内部的存储器的,包括运行内存SRAM、程序存储器flash和寄存器等等,DMA都有权限访问它们,所以DMA才能完成数据转运的工作。DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源这里外设指的就是外设寄存器,一般是外设的数据寄存器DR、Data、Register。比如ADC的数据寄存器、串口的数据寄

2024-07-01 11:09:07 928

原创 stm32学习笔记---ADC模数转换器(代码部分)AD单通道/多通道

​ADC初始化的步骤具体的步骤:第一步,开启RCC时钟,包括ADC和GPIO的时钟。另外这里ADC CLK的分频器也需要配置一下。第二步,配置GPIO,把需要用的GPIO配置成模拟输入的模式。第三步,配置多路开关​编辑把左边的通道接入到右边的规则组列表里。这个过程就是我们之前说的点菜,把各个通道的菜列在菜单里。第四步,配置ADC转换器,在库函数里是用结构体来配置的,可以配置这一大块电路的参数。​编辑包括ADC是单次转换还是连续转换,扫描还是非扫描,有几个通道,触发源是什么,数据对齐是左对齐还

2024-06-29 19:09:48 1557 1

原创 stm32学习笔记---ADC模数转换器(理论部分)

ADC简介ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。另外,使用DAC就可以将数字变量转化为模拟电压。上一节我们还学到了一个数字-模拟的桥梁:PWM。我们使用PWM来控制led的亮度,电机的速度,这就是DADC的功能。同时,PWM只有完全导通和完全断开两种状态。在这两种状态上都没有功率损耗,所以在直流电机调速这种大功率的应用场景,使用PWM来等效模拟量是比DADC更好的选择。并且

2024-06-29 18:02:34 1227

原创 stm32学习笔记---TIM编码器接口(代码部分)编码器接口测速

第一步,RCC开启时钟,开启GPIO和定时器的时钟。第二步,配置GPIO,这里需要把PA6和PA7配置成输入模式。第三步,配置时基单元,这里预分频器,一般选择不分频。自动重装一般给最大65535,只需要个CNT执行计数就行了。第四步,配置输入捕获单元,不过这里输入捕获单元只有滤波器和极性这两个参数有用,后面的参数没有用到,与编码器无关。第五步,配置编码器接口模式,这个直接调用个库函数就可以了。第六步,启动定时器,调用TIM_Cmd启动定时器。

2024-06-28 13:51:48 984 1

原创 stm32学习笔记---TIM编码器接口(理论部分)

使用正交信号相比较单独定义一个方向引角有什么好处?首先就是正交信号精度更高,因为AB相都可以计次,相当于计次频率提高了一倍。其次就是正交信号可以抗噪声。因为正交信号,两个信号必须是交替跳变的,所以可以设计一个抗噪声电路。如果一个信号不变,另一个信号连续跳变,也就是产生了噪声,这时计次值是不会变化的,这个等会儿会再介绍。接着我们来看一下状态表,看一下正交信号如何计次和区分旋转方向。首先我们观察一下波形的特点,在正转的时候,第一个时刻A相上升沿。对应B相此时是低电平,也就是表里的第一行。

2024-06-28 13:31:29 827

原创 stm32学习笔记---TIM输入捕获(代码部分)输入捕获模式测频率/PWMI模式测频率占空比

第一步,RCC开启时钟,把GPIO和TIM的时钟打开。第二步,GPIO初始化,把GPIO配置成输入模式,一般选择上拉输入或者浮空输入模式。第三步,配置时基单元,让CNT计数器在内部时钟的驱动下自增运行。这一步和之前的代码是一样的。第四步,配置输入捕获单元,包括滤波器、极性、直连通道还是交叉通道、分频器这些参数用一个结构体就可以统一进行配置了。第五步,选择从模式的触发源,触发源选择为TI1FP1,这里调用一个库函数,给个参数就行了。第六步,选择触发之后执行的操作,执行reset(复位)操作,这里也是

2024-06-27 16:39:15 1240

原创 stm32学习笔记---TIM输入捕获(理论部分)

输入捕获模式下,当通道输入引脚出现指定电平跳变(就是上升沿或者下降沿,可以通过程序配置)时,当前CNT的值将被锁存到CCR中(把当前CNT的值读出来写入到CCR中去,这里对应定时器的结构图),可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数。(脉冲间隔实际和频率是差不多的意思,电平持续时间和占空比差不多)

2024-06-27 16:13:06 1243

原创 stm32学习笔记---TIM输出比较(代码部分)PWM驱动LED呼吸灯/舵机/直流电机

第一步,配置RCC开启时钟,把我们要用的TIM外设和GPIO外设的时钟打开。第二步,配置时基单元,包括这前面的时钟源选择;第三步,配置输出比较单元,里面包括这个CCR的值,输出比较模式,极性选择,输出使能这些参数,在库函数里也是用结构体统一来配置的。第四步,配置GPIO,把PWM对应的GPIO口初始化为复用推挽输出的配置。这个PWM和GPIO的对应关系可以参考一下引脚定义表第五步,配置运行控制,启动计数器,这样就能输出PWM了。

2024-06-26 17:45:16 769

原创 stm32学习笔记---TIM输出比较(理论部分)

这里简单概括就是:通过这个PWM波形就可以实现。我们让led不断点亮熄灭,点亮熄灭。当这个点亮熄灭的频率足够大时,led就不会闪烁了,而是呈现出一个中等亮度。当我们调控这个点亮和熄灭的时间比例时,就能让led呈现出不同的亮度级别。对于电机调速也是一样,以一个很快的频率给电机通电断电,通电断电,电机的速度就能维持在一个中等速度,这就是PWM的基本思想。我们直接把之前学51单片机的时候的结论搬过来:Ton的时间长Toff时间短电机会快,Ton的时间短Toff时间长电机会慢;LED亮的时长比LED

2024-06-26 17:08:07 1144

原创 stm32学习笔记---TIM定时中断(代码部分)定时器定时中断/定时器外部时钟

初始化定时器的步骤大体上的步骤就是:第一步,RCC开启时钟,这个基本上每个代码都是第一步。在这里打开时钟后,定时器的基准时钟和整个外设的工作时钟就都会同时打开了。第二步,选择时基单元的时钟源,对于定时中断,我们就选择内部时钟源。第三步,配置时基单元,包括这里的预分频器、自动重装器、计数模式等等。这些参数用一个结构体就可以配置好了。第四步,配置输出中断控制,允许更新中断输出到NVIC。第五步,配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级。这部分在上

2024-06-25 13:41:35 1493

原创 stm32学习笔记---TIM定时中断(理论部分)

因为定时器的内容很多,我们将总共分为四个部分讲解:在第一部分,主要讲定时器基本定时的功能。也就是定一个时间,然后让定时器每隔这个时间产生一个中断,来实现每隔一个固定时间执行一段程序的目的。比如要做个时钟秒表,或者使用一些程序算法的时候,都需要用到定时中断的这个功能。在第二部分,主要讲定时器输出比较的功能。输出比较这个模块,最常见的用途就是产生PWM波形。用于驱动电机等设备,在这个部分我们将会学习到使用STM32输出的PWM模型来驱动舵机和直流电机的例子。在第三部分,主要讲的是定时器输入捕获的

2024-06-25 13:16:25 1166

原创 stm32学习笔记---EXTI外部中断(代码部分)对射式红外传感器计次/旋转编码器计次

具体步骤就是:第一步,配置RCC,把我们这里涉及的外设的时钟都打开,这个别忘了不打开时钟外设是没法工作的。第二步,配置GPIO ,选择我们的端口为输入模式。第三步,配置AFIO ,选择我们用的这一路GPIO ,连接到后面的EXTI。第四步,配置EXTI,选择边沿触发方式,比如上升沿、下降沿或者双边沿,还有选择触发响应方式,可以选择中断响应和事件响应。当然我们一般都是中断响应。第五步,配置NVIC,给这个中断选择一个合适的优先级。通过NVIC,外部中断信号就能进入CPU

2024-06-24 13:47:39 999

原创 stm32学习笔记---EXTI外部中断(理论部分)

STM32的中断68个可屏蔽中断通道(也可以说是中断源),包含EXTI外部中断、TIM定时器、ADC模数转换器、USART串口、SPI通信、I2C通信、RTC实时时钟等多个外设。通过这一句,我们知道STM32的中断是非常多的,几乎所有的模块都能申请中断。注:这是F1系列最多的中断数量,对于一个具体的型号,可能没有这么多中断,所以这个数量看看就行。使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级这个NVIC就是STM32

2024-06-24 11:22:28 1175

原创 stm32学习笔记---OLED调试工具(理论部分和代码部分)

​三种常用的程序调试方法首先我们先来看一下目前常用的程序调试方式。这里列举了三种常用的程序调试方法:第一种是串口调试第一种是串口调试,它是通过串口通信将调试信息发送到电脑端,电脑使用串口助手显示调试信息。这种调试方式是非常见的,就是用串口将单片机连接到电脑,相当于把电脑的屏幕挂在单片机上,方便单片机显示调试信息。一般我们设计pcb电路板的时候,都会在pcb边上留一个串口通信的硬件,需要调试程序的时候,把单片机连在电脑上,然后就可以在电脑屏幕打印信息了。调试好之后,就断开串口程序,就

2024-06-23 15:05:16 1394

原创 stm32学习笔记---GPIO输入(代码部分)按键控制LED/光敏传感器控制蜂鸣器

GPIO_ReadInputDataBit第一个函数是用来读取输入数据寄存器某一个端口的输入值。它的参数是指定外设和某一个端口。返回值代表这个端口的高低电平。读取按键,我们就需要用到这个函数。GPIO_ReadInputData第二个函数比上一函数少了个bit,它是用来读取整个输入数据寄存器,参数只有一个GPIOx,用来指定外设。返回值是是一个16位的数据,每一位代表一个端口值。GPIO_ReadOutputDataBit第三个函数是用来读取输出数据寄存器的某一个位。所以原则上来说,它并不是用

2024-06-23 15:03:17 1129

原创 stm32学习笔记---GPIO输入(理论部分)

传感器模块:传感器元件(光敏电阻/热敏电阻/红外接收管等)的电阻会随外界模拟量的变化而变化,比如光线越强,光敏电阻的阻值就越小,温度越高,热敏电阻的阻值就越小。红外光线越强,红外接收管的阻值就越小,但是电阻的变化不容易直接被观察,所以我们通常将传感器元件与定值电阻进行串联分压,这样就可以得到模拟电压的输出了,对电路来说,检测电压就非常容易了。另外这个模块还可以通过电压比较器进行二值化即可得到数字电压输出。它们的电路结构和工作原理都差不多,我们来具体看一下传感器模块的电路:

2024-06-23 15:01:33 951

原创 stm32学习笔记---GPIO输出(代码部分)LED闪烁/流水灯/蜂鸣器

现在我们开始学习如何点亮一个LED之前也介绍过,操作STM32的GPIO总共需要三个步骤:第一步,使用RCC开启GPIO的时钟;第二步,使用GPIO_Init函数初始化GPIO;第三步,使用输出或者输入的函数控制GPIO口。在这里总共涉及了RCC和GPIO两个外设,我们先来看一下这两个外设都有哪些库函数:先看RCC的库函数

2024-06-23 14:32:48 937

原创 stm32学习笔记---GPIO输出(理论部分)

GPIO在输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等。另外在其他的应用场景,只要是可以用高低电平来进行控制的地方,都可以用GPIO来完成,如果控制的是功率比较大的设备,只需要再加入驱动电路即可。GPIO在输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等。这个输入模式最常见的就是读取按键,用来捕获我们按键按下的事件。另外也可以读取带有数字输出的一些模块,比如我们套件里的光敏电阻模块,热敏电阻模

2024-06-23 13:54:52 1077

原创 stm32学习笔记---新建工程步骤和点灯演示

本篇我们来建立一个STM32的工程。 这个STM32的工程结构还是比较复杂的,需要用到很多文件,之后我们的代码也都是需要建立在工程结构上的。所以在开始学习后续内容之前,我们先来学习一下如何新建STM32的工程。STM32的三种开发方式目前STM32的开发方式主要有基于寄存器的方式、基于标准库,也就是库函数的方式和基于Hal库的方式。基于寄存器的方式这种方式和我们51单片机的开发方式一样,是用程序直接配置寄存器来达到我们想要的功能,这种方式最底层、最直接,效率会更高一些。但是由于STM32的结构复

2024-06-23 11:03:41 812

原创 stm32学习笔记---STM32基础介绍

STM32介绍ST公司,M是Microcontroller的首字母。微控制器就是MCU(就是我们常说的单片机)32的意思是这是一款32位的单片机。ARM Cortex-M内核就是stm32内部的核心部分。(可以理解为ST公司给ARM内核加上一些外设,封装成了stm32,其他厂商也可以用ARM内核来封装成自己的芯片)STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器。STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等。

2024-06-21 10:03:43 1101

原创 stm32学习笔记---STM32套件介绍

使用面包板能够完成任意电路的连接,连线和修改都是非常方便的。相比较成品的开发板方式,使用面包板更有利于我们对硬件电路的学习,而且也可以避免开发板的一些问题。比如引脚冲突,引脚无法更改等。但是使用面包板也有一定的问题,比如程序现在不出来,不仅可能是程序的问题,也有可能是接线的问题。这就需要我们在连线的时候要更加细心一些。关注软件程序的同时,也需要关注一下硬件电路。

2024-06-21 09:31:05 901 2

原创 嵌入式全栈开发学习笔记---C语言笔试复习大全索引

到今天为止,我们的C语言笔试复习基本结束,为了方便日后再翻看我们的复习内容,我觉得有必要做一个索引表,也相当于是一个C语言知识框架。

2024-05-26 16:44:11 843

原创 嵌入式全栈开发学习笔记---C语言笔试复习大全25(实现学生管理系统)

一般来说,管理系统都包含学生信息,和“增删改查”这些管理操作。用结构体来实现,步骤分解:完成参考代码:

2024-05-26 16:08:25 1040

原创 不小心关闭了Linux的终端窗口怎么恢复文件?

当你在用vim编写程序的时候,没有保存你正在编写的程序,不小心关闭了窗口,而当你重新进入这个.c文件的时候,发现变成了只读文件?而且没有刚刚写的程序了?那刚刚写的程序是不是白写了?不要慌!它现在不是只读文件,vim它有一个保护的功能,就是你当你打开一个文件的时候,它一边写它一边会在后台保存的,然后它会把这个文件保存在一个,比如说你写的是1.c,它会同时产生一个.1.c.SWP这么一个文件。所以像你这种异常关闭的话,它这个点开头的这个文件一直存在,等到你下次再打开的时候呢,就会出现你现在看到的这种界面。

2024-05-26 12:32:29 286

原创 嵌入式全栈开发学习笔记---C语言笔试复习大全24

堆和栈的区别?(面试重点)堆空间是用户管理的,用户申请,用户释放;而栈空间是系统管理的,当用户定义一个变量的时候,系统会自动为它开辟一个空间,当一段程序运行完时候,系统会自动释放掉这个空间。堆空间更大,栈空间更小,如果我们要申请连续的大内存,比如说10万个整数,我们可以去堆空间申请。堆空间使用效率低(因为空间大,内存记在一个链表里面,申请内存时,它需要去查一下链表,查一下哪边可以使用),栈空间使用效率高(一直往前申请就可以了)。堆空间函数结束不会释放(需要用户手动释放),栈空间函数结束自动释放。

2024-05-26 11:05:11 1314

原创 嵌入式全栈开发学习笔记---C语言笔试复习大全23

为什么要学习联合体?结构体有个缺点就是比较占内存,因为我们每次使用结构体时要给里面的每个成员都开辟空间,但是有时候我们只需要用到里面的某个成员,而不是全部,我们只想为我们使用到的成员申请空间,但是其他成员又不能直接删掉,因为我们有时候还会使用到其他成员,所以怎么办呢?这个时候联合体就派上了用场。联合体又叫共用体。是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。联合体可以带有多个成员,但是任何时候只能有一个成员带有值。联合体提供了一种使用相同的内存位置的有效方式。联合体的定义

2024-05-26 10:05:49 919

原创 嵌入式全栈开发学习笔记---C语言笔试复习大全22

结构体为什么要学习结构体?我们以往存储数据都是用数组来存储的,但是数组有个缺点就是存储的数据的类型必须是一样的。如果我们想要存储一个人的信息,比如,身高、年龄等,身高是浮点型,年龄是整型,那这种数据用数组来存储是不行的,因此我们需要学习结构体。结构体的声明struct的语法格式如下:struct 结构体名 {成员表列}; //分号不能丢比如:struct student{int num;char name[20]

2024-05-26 09:59:10 676

原创 嵌入式全栈开发学习笔记---C语言笔试复习大全21(编程题25~30)

上一篇复习了数组指针和指针数组、指针的指针和命令行参数,这一节完成最后6道编程题。这篇博文的目的是复习C语言,我们会陆续以30多个编程题作为复习要点,这30多个编程题基本涵盖了C语言所有的内容了,只要你掌握了这30多个编程题,那么你的C语言基本就没什么问题了。

2024-05-25 14:07:22 768

原创 嵌入式全栈开发学习笔记---C语言笔试复习大全20

指针数组是数组!一个数组的元素值为指针,则该数组是指针数组。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。指针数组说明的一般形式为:类型说明符 *数组名[数组长度]其中类型说明符为指针所指向的变量的类型。例如: int *pa[3];表示pa是一个指针数组,它有三个元素,每个元素值都是一个指针,指向整型变量。数组指针数组指针是一个指针!该指针指向数组(一维或二维都可以)。例如:int (*p)[5];可以这么理解,p是一个指

2024-05-25 13:54:18 807

原创 嵌入式全栈开发学习笔记---C语言笔试复习大全19

函数指针的定义在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。把函数的这个首地址(函数入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。函数指针变量定义的一般形式为:类型说明符 (*指针变量名)();例如:int (*pf)(); 表示pf是一个指向函数入口的指针变量,该函数的返回值(函数值)是整型。

2024-05-18 17:26:56 810

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除