自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++函数的多重魅力:深入了解函数重载

编译器为了实现函数重载,也是做了一些幕后工作,编译器用不同的参数类型来修饰不同的函数名,比如void fun();:在同一作用域内,允许定义多个名称相同但参数列表不同的函数,编译器根据函数调用的参数类型或个数选择合适的函数。:通过基类指针或引用调用派生类对象的方法时,实际执行的是派生类的方法,而不是基类的方法。”,这里面的读音就是。在我们的现实生活中,我们经常能碰到一些汉字在不同场景下有不同发音的情况,如:“重”这个字,它的发音就有。然而,我们在编写程序过程中可以忽略它的返回值,那么这个时候,一个函数为。

2024-03-02 17:01:34 959

原创 【C++】详细了解namespace命名空间

目录键盘敲烂,月薪过万,同学们,加油呀! 一、命名空间的理解二、::作用域运算符三、命名空间(namespace)3.1、namespace的由来3.2、命名空间使用语法3.3、using声明3.4、using编译指令 同学们好!今天王老师来带大家了解C++中的命名空间(namespace)的一个概念。首先要了解什么是命名空间,这个大家就可以把它理解成一个工具箱,如下图:众所周知,我们C++一般用在大型项目中,现在假设我们一共有张三,李四,王五三个人完成一个大型项目, 因为项目太大了,所以我们在创建变量的

2024-02-29 11:18:46 1070

原创 Qt介绍以及qt_creater的安装和C++项目工程创建

6、选择我们的编译主件,这个地方一定要注意:如果用的是5.8这个版本就只有这一个,你必须勾选这一个,选择MinGW 32位,如果安装的是10版本以上的可能会有好多编译主件,一般选择MinGW的,这样你的代码移植到开发板上或者移植到虚拟机上的是很方便的,因为MinGW 就是迷你的GNU,而GCC和G++都是GNU开发的,缩写就是迷你的GNU for Windows,如果你不选择,你编译的时候就会没有编译器。9、编译C++,右下角上面的是编译并运行,下面是锤子是编译不运行,中间的是调试。下图二是编译后的结果。

2024-02-26 14:42:02 1023

原创 【C++】详细了解引用

目录温馨提示:最近天气降温,同学们注意保暖哦!o(* ̄▽ ̄*)ブ一、引用的重要性二、引用的基本用法1、引用的基本概念2、引用的语法3、引用的作用及用法(1)、用作普通变量的引用(2)、用作函数参数引用是C++对c的重要扩充,在C++中有句话叫:能用引用绝不用指针,因为大家也学过C语言了,也知道指针的厉害,各种各样的指针,学起来也很痛苦,因为C++它的核心目的是为了让大家去写代码,所以它就提出了引用的概念,所以在C++中能用引用绝不用指针。除非是必不得以一定要用指针。引用在C++中的重要性也仅次于封装、继承、

2024-02-23 14:07:46 655

原创 详细了解stm32---按键

提示:永远支持知识文档免费开源,喜欢的朋友们,点个关注吧!蟹蟹!

2023-12-16 00:16:17 2807

原创 Linux知识点--如何配置Linux静态网络以及puty远程登入

并按如下代码修改,注意,这个网关要和自己所连网络的网关一致,然后输入wq保存并退出代码如下:auto loauto ens33#dns。

2023-12-11 09:39:51 1046

原创 详细了解STM32----GPIO

GPIO是单片机上的通用输入输出端口的简称,可以通过软件来控制其输入输出。STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。关于芯片引脚的分类:电源管脚、晶振管脚、复位管脚、下载管脚、BOOT管脚、GPIO管脚。如下图(STM32系统板原理图)中的带P什么的都是STM32的引脚,其中大部分引脚都是用作GPIO,不过也可以用作其它作用,比如说PA9既可以用作GPIO,也可以用作USART1_TX引脚,具体用作什么需要我们后期自己去配置。

2023-12-09 16:45:22 1289

原创 嵌入式每日面试题

不同的通信技术和设备支持的速率各不相同。:在这个区域,三极管的基极-发射极 PN 结是正向偏置的,而集电极-发射极 PN 结是反向偏置的。OTA一次可以传输的位数也就是OTA数据包的大小,通常会根据具体的实现和应用场景而异,一般来说,OTA数据包的大小可以从几KB到几MB不等。另外,OTA不直接涉及到Flash的传输,Flash用于存储固件,而OTA主要涉及传输和固件升级的逻辑。电压标准:RS-485采用不同电平标准,如RS-485和RS-422,其中RS-422标准提供更高的电压范围,适用于长距离通信。

2023-11-01 17:46:05 165

原创 每日C语言经典面试题

答:unsigned char为一个字节大小,所以p1+5表示向后移动5个字节,移动一个字节加一,故p1+5 = 0x801005,unsigned long为四个字节大小,所以p2+5表示向后移动20个字节,因为是16进制,故为14(16+4),故p2+5 = 0x810014.// 通过函数指针调用地址 0x100000 处的代码。// 将函数指针设置为绝对地址 0x100000。答:可以用函数指针来写,首先定义一个函数指针。// 函数指针的声明。

2023-10-17 20:59:30 76

原创 基于腾讯云的OTA远程升级

OTA即over the air,是一种远程固件升级技术,它允许在设备已经部署在现场运行时通过网络远程更新其固件或软件。OTA技术有许多优点,比如我们手机系统有个地方做了优化,使用OTA技术我们就不用召回每部手机,直接通过云端就可以进行远程下发固件,这样就节省了成本。这里我们使用的是腾讯云来进行OTA操作。OTA(空中下载技术,即通过云端远程进行固件升级)1、ESP8266连接本地WIFI(路由器)2、登录腾讯云MQTT服务器3、订阅主题(

2023-10-06 16:32:41 5920 18

原创 ESP8266的AP模式及STA模式的区别

总之,ESP8266可以在两种模式下配置为服务端或客户端,具体取决于你的应用需求。你可以根据项目的要求选择合适的模式和角色。无论哪种模式,ESP8266都具有灵活性和多功能性,适用于各种物联网和无线通信应用。ESP8266是一款强大的Wi-Fi模块,支持多种工作模式,其中包括AP(Access Point)模式和STA(Station)模式。

2023-10-04 16:31:31 714

原创 stm32----ADC模数转换

ADC,即模数转换器,。在stm32种一般有3个ADC,每个ADC有18个通道。12位ADC是一种逐次逼近型模拟数字转换器,它有多达18个通道,可测量16个外部和两个内部信号源。各个通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或者右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。ADC的输入时钟不得超过14MHz,它是由PCLK2(72M的APB2总线)经分频产生。

2023-09-16 10:12:09 583

原创 stm32---定时器输入捕获

在定时器中断实验章节中我们介绍了通用定时器具有多种功能,输入捕获就是其中一种。。输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,通常用于测量输入信号的脉宽、测量 PWM 输入信号的频率及占空比。输入捕获的工作原理比较简单,在输入捕获模式下,当相应的 ICx信号检测到跳变沿后,将使用捕获/比较寄存器(TIMx_CCRx)来锁存计数器的值。

2023-09-13 10:58:36 1771

原创 stm32---外部中断

STM32F10x外部中断/事件控制器(EXTI)包含多达20个用于产生事件/中断请求的边沿检测器。EXTI的每根输入线都可单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或双边沿触发),还可独立的被屏蔽。

2023-09-12 19:37:18 253

原创 stm32---基本定时器(TIM6,TIM7)

预分频器也是16位的,但是在预分频器中数值会自动加1,也就是它的取值范围为1到65536,(因为这个预分频器是作为分母用的,分母不能为0,如:给预分频值设为2-1,那么该定时器的频率为32M)。是用来设置自动重装载值的成员(也就是设置计数次数),也就是自动重装载寄存器中的值,当计数器的计数值达到该值时会产生一个更新事件,这个值我们可以通过传参来设置。是用来设置定时器的时钟分频因子的成员,它用于控制定时器时钟的分频,从而影响定时器的计数速度。定时器的时钟不经过分频,以外部时钟源的速度进行计数。

2023-09-12 10:02:11 1207

原创 stm32f103rct6系统结构框图

它可以用于将外设的数据(例如ADC、UART、SPI等)传输到存储器中,或者将存储器中的数据传输到外设中,而无需CPU的介入。DMA(Direct Memory Access,直接内存访问),STM32微控制器中的一个重要特性,它是一种用于高效数据传输的机制,允许外设和存储器之间的数据传输不需要CPU的干预。这使得可以同时执行多个DMA传输操作,而无需等待之前的传输完成。APB2是高速总线(一般为72M),这使得APB2总线上的外设能够以较高的速度运行,适合处理高速外设,如定时器、GPIO、SPI等。

2023-09-09 11:06:13 430

原创 基于stm32f103rct6的呼吸灯实现

当我们用pwm来生成呼吸灯时,因为在stm32f103rct6中PA8LED灯是通过给PA8输入一个低电平点亮的,所以低电平在一个周期中维持的时间越长,灯越亮。我们可以通过改变灯的有效电压占空比来实现呼吸灯效果。其中我们要用到PWM(脉宽调制),通过pwm我们可以来改变高电平的占空比。占空比:在一个周期中,高电平所占整个周期的百分比。

2023-09-08 18:21:00 706

原创 stm32---用外部中断实现红外接收器

一个脉冲对应 560us 的连续载波,一个逻辑 1 传输需要 2.25ms( 560us脉冲+1680us 低电平),一个逻辑 0 的传输需要 1.125ms(560us 脉冲+560us 低电平)。而红外接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号为:逻辑 1 应该是 560us 低+1680us 高,逻辑 0 应该是 560us 低+560us 高。所以可以通过计算高电平时间判断接收到的数据是0还是1。NEC码位定义时序图如图:简单来说就是,

2023-08-30 21:28:33 1434 2

原创 stm32----用状态机判断单双击

状态机(State Machine)是一种用于描述系统状态和状态之间转换关系的数学模型,说白了就是做出某个动作之后变成什么样的状态,比如stm32中的按键控制开关灯,假设灯一开始是关的,当我们按下按键之后,灯亮了,这相当于一个开灯操作,然后在这个操作之后灯亮了,这就是一个简单的状态机。

2023-08-30 20:36:54 669 2

原创 stm32----SPI协议

SPI(Serial Peripheral Interface,串行外围设备接口),是Motorola公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,节约了芯片pin的数目,同时为PCB在布局上节省了空间。正是由于这种简单易用的特性,现在越来越多的芯片上都集成了SPI技术。这4根线分别是:MOSI(主机输出从机输入)、MISO(主机输入从机输出)、SCLK(时钟同步)、CS(片选线)。

2023-08-29 19:56:56 1764

原创 IIC、SPI以及UART的区别

I2C(也称为IIC)、SPI和UART是三种常见的串行通信协议,它们在通信方式、速度、应用场景和电气特性等方面有一些区别。总的来说,选择使用哪种通信协议取决于应用的需求,包括通信速度、连接的设备数量、电气特性以及系统的可靠性等方面的考虑。

2023-08-29 17:29:48 377

原创 stm32之IIC协议

当由主机向从机发送数据的时候,主机就是数据的发送方,从机就是数据的接收方,而当从机向主机发送数据的时候,从机就是数据的发送方,主机则变成了数据的接收方。这就和设备的唯一的ID有关,主机1可以去信号线上广播想要通信的从机ID,如果对应ID的从机收到了主机1发起的请求,则发送一个。这里要弄清楚一个概念,数据的接收方不等同于从设备,数据的发送方也不等同于主设备,因为数据的接收方可能是主设备也可能是从设备,同理,数据的发送方也一样,可能是主设备也可能是从设备,因为在数据的通信过程中,可能由主机向从机发。

2023-08-28 18:45:29 1736

原创 寄存器的映射过程

2023-08-22 18:58:56 67

原创 stm32的命令规则

stm32型号的说明:以STM32F103RBT6这个型号的芯片为例,该型号的组成为7个部分,其命名规则如下:

2023-08-21 18:58:47 678

原创 C语言volatile关键字的作用

volatile是易变的,不稳定的意思。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。这样看来,如果i是一个寄存器变量,表示一个端口数据或者是多个线程的共享数据,那么就容易出错,所以说volatile可以保证对特殊地址的稳定访问。的值(不会编译生成装载内存的汇编指令,比如ARM的LDM指令),这样提高了效率,但要注意:①、②语句之间确认i没有被用作左值才行。的值,因而编译器生成的汇编代码会重新从i的地址处读取数据放在k中。没有被用作左值(没有被赋值)。

2023-08-18 16:11:55 154

原创 为什么unsigned int a = 6加上int b = -14结果大于0

当int和unsigned int 相加时,要将int转化为unsigned int,而int小于0,因为它的最高位是符号位,为1,所以转化的结果是一个很大的正数,两个正数相加,结果自然大于0了。int 类型的最高位表示正负,是符号位,但是unsigned int的最高位是有效数位。它把a+b的结果看作一个int类型,而a+b最高位为1,所以z是一个负数。

2023-08-18 14:56:22 85

原创 C语言localtime函数

该结构体包含了年、月、日、时、分、秒等时间信息。其中time_t是一个数据类型,用于表示从1970年1 月 1 日午夜(UTC)到现在的秒数,你可以使用。函数来获取当前的时间戳(从 1970 年 1 月 1 日起的秒数),并将其存储在。函数是C标准库中的一个函数,用于将时间戳(类型的值)转换为本地时间的日期和时间表示。

2023-08-13 15:48:07 1472

原创 C语言atoi函数将字符串类型转换为整型

函数会尝试将字符串中的数字部分转换为整数,并返回转换后的整数值。如果字符串中不仅包含数字,还包含其他非数字字符,是C标准库中的一个函数,用于将字符串转换为整数。函数会尽可能地将数字部分解析为整数,并忽略后面的非数字字符。是一个指向要转换的字符串的指针。

2023-08-13 11:36:42 525

原创 osi模型

OSI 模型(Open Systems Interconnection model)是一个用于计算机网络体系结构的参考模型,由国际标准化组织(ISO)在 1984 年制定,旨在定义不同层次上的通信协议,以促进不同厂商的设备在网络上进行互操作。每个层次的协议和功能都独立于其他层次,但在实际通信中,这些层次协同工作,将数据从应用程序传输到物理媒介上的比特流。OSI 模型共有七个不同的层次,每个层次负责特定的功能和任务。:提供端到端的数据传输和可靠性,负责分段、数据的排序和重组,以及流量控制和拥塞控制。

2023-08-10 15:00:26 155

原创 线程和进程的区别

在总体上,线程适用于轻量级的并发任务,可以在同一进程内方便地共享数据和资源。进程则适用于更大粒度的隔离,多个进程之间的隔离性更高,但通信和资源共享相对较为复杂。选择使用进程还是线程取决于具体的应用场景和需求。线程(Thread)和进程(Process)是操作系统中的两个基本概念,用于实现并发和多任务处理。

2023-08-09 21:20:46 181

原创 信号量--同步和异步的区别

例如,假设有两个进程 A 和 B,它们共享一个资源。在同步的情况下,进程 A 需要等待进程 B 使用完该资源后,才能继续执行。而在异步的情况下,进程 A 可能会继续执行,而不必等待进程 B 使用完该资源。在多进程编程中,同步和异步操作在信号量控制下可以用来协调进程之间的行为,以确保顺序性和正确性。

2023-08-09 08:37:51 179

原创 Linux中singal信号的作用

singal函数的返回值是一个函数指针,该指针指向之前与指定信号相关联的处理函数。这允许你在将信号处理程序设置为新函数之前,先保存旧的处理程序,以便稍后进行恢复或其他操作。2、忽略信号(SIG_IGN):忽略信号,即使没有意义,代码执行仍将继续。1、默认处理(SIG_DFL):信号由该特定信号的默认动作处理。其中忽略并不是没有处理信号或者接收,只是它接收后没有做任何改变。3、函数处理程序:定义一个特定的函数来处理信号。函数设置一个新的信号处理函数时,它会返回。通俗的说就是,当你调用。指定使用sig指定的。

2023-08-08 19:43:21 213

原创 C语言用信号量进行pv操作

用semget()函数获取信号量,其中semget()函数中所需传的参数如下:1、其中key可以通过ftok() 函数进行获取,ftok函数所需传入的参数为①文件路径②一个八位的整数2、nsems是所需创建的信号量的个数,如果只是访问已存在的信号量集合,可以将此参数设置为0。3、semflg是一个标志参数,用于指定创建或访问信号量集合的方式,常用的标志有:①:如果指定的键值对应的信号量集合不存在,则创建一个新的信号量集合。②。

2023-08-08 17:31:46 522

原创 Linux进程间通信--msgrcv函数的作用

函数的返回值为实际接收到的消息数据的长度,-1表示失败,并设置errno来指示错误的具体原因。函数用于从消息队列中接收消息。函数从消息队列中取出一条消息,并将其复制到。函数可能会阻塞等待消息到达,或者立即返回。

2023-08-07 20:07:26 891

原创 Linux进程间通信--msgsnd函数的作用

会立即返回,并且不会将消息放入队列中。如果消息队列已满但未设置IPC_NOWAIT标志,则。函数的返回值为0表示成功,-1表示失败,并设置errno来指示错误的具体原因。注意这里传的是void类型的指针,所以在传参的时候我们要用void*强转一下。标志进行相应的处理。如果消息队列已满且设置了IPC_NOWAIT标志,则。函数用于将消息发送到消息队列中。函数将消息复制到消息队列中,并根据。会阻塞,直到有空间可用为止。

2023-08-07 19:45:09 415

原创 C语言memset函数的作用

函数可以快速初始化一块内存区域,例如将整个区域设置为0或者将字符串缓冲区清零。也可以用其他非零值来填充内存,例如初始化一个数组为特定的值。函数是C语言中的一个库函数,其作用是将一块内存区域的每个字节都设置为指定的值。此时可以用memset函数来初始化一个如上的结构体变量。

2023-08-07 19:24:41 393

原创 Linux进程间通信--ftok

因为这个整型值可以通过将一个字符转换为整数来获得。实际上,ftok函数会将第二个参数的最低字节(即最后8位)作为整型值使用,一个字符变量(char类型)刚好是一个字节,也就是8位。因此,传递一个字符变量作为第二个参数也是可以的。在C语言中,ftok函数用于生成一个唯一的键值,该键值通常用于创建共享内存,消息队列和信号量等系统资源的标识符。·proj_id:一个用户定义的整数值,用于生成键值的低序8位,,用于生成键值,建议使用具有全局可见性的文件路径名。进行异或操作生成一个唯一的键值。,通常是一个长整型。

2023-08-07 19:16:38 651

原创 C语言中fork和vfork创建进程的区别

中,子进程拥有父进程的所有资源的副本,包括堆、栈和文件描述符等。存在一些潜在的问题,如父进程挂起期间子进程对共享内存的操作等,因此现代操作系统往往推荐使用。会创建一个新的子进程,该子进程与父进程几乎完全相同,包括程序代码、数据和进程上下文等。中,子进程与父进程共享内存空间,子进程运行时会暂停父进程的执行,直到子进程调用。中,子进程的执行顺序与父进程并发执行,具体取决于操作系统的调度算法。中,子进程与父进程共享内存空间,因此子进程的修改可能会直接影响到父进程。创建了子进程的副本,子进程的修改不会影响父进程。

2023-08-04 15:04:16 121

原创 为什么fork函数创建的进程不能用return函数结束进程

函数终止进程,该进程会立即退出,并且所有在子进程中打开的文件描述符都会被关闭,资源会被释放,确保不会出现资源泄漏等问题。函数用于创建一个新的进程。它会复制当前进程的副本,并在父进程和子进程中返回不同的值。函数时,操作系统会创建一个子进程,该子进程是父进程的副本。因此,为了正确地结束一个进程,应该在需要终止的地方使用。函数用于正常终止进程,并将退出状态传递给操作系统。语句也可以终止子进程,但这并不是一个好的实践。函数在父进程中返回一次,在子进程中返回一次。要结束一个进程,通常使用。另外,如果在子进程中使用。

2023-08-04 15:02:50 115

原创 Linux进程,线程,内核线程的区别

内核线程(Kernel Thread):内核线程是由操作系统内核直接创建和管理的线程。内核线程负责执行操作系统的核心任务,如调度进程、处理中断和异常等。与用户线程相比,内核线程的创建、切换和调度等操作开销较大,但它们具有更高的可靠性和稳定性。线程(Thread):线程是进程中的一个执行流程。进程(Process):进程是计算机中正在运行的程序的实例。在多线程编程中,线程的使用可以提高程序的并发性和响应性。然而,线程之间的共享资源和同步问题需要仔细处理,以避免竞态条件和死锁等并发问题。

2023-08-04 11:00:58 297

空空如也

空空如也

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

TA关注的人

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