自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2024-03-02 17:01:34 1027

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

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

2024-02-29 11:18:46 1182

原创 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 2003 1

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

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

2024-02-23 14:07:46 764

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

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

2023-12-16 00:16:17 5942

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

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

2023-12-11 09:39:51 1617

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

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

2023-12-09 16:45:22 2160

原创 嵌入式每日面试题

不同的通信技术和设备支持的速率各不相同。:在这个区域,三极管的基极-发射极 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 230

原创 每日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 110

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

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

2023-10-04 16:31:31 1057

原创 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 802

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

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

2023-09-13 10:58:36 2402

原创 stm32---外部中断

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

2023-09-12 19:37:18 316

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

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

2023-09-12 10:02:11 2505 3

原创 stm32f103rct6系统结构框图

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

2023-09-09 11:06:13 777

原创 基于stm32f103rct6的呼吸灯实现

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

2023-09-08 18:21:00 1157

原创 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 2002 4

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

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

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

原创 stm32----SPI协议

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

2023-08-29 19:56:56 2252

原创 IIC、SPI以及UART的区别

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

2023-08-29 17:29:48 887

原创 stm32之IIC协议

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

2023-08-28 18:45:29 2174

原创 寄存器的映射过程

2023-08-22 18:58:56 105

原创 stm32的命令规则

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

2023-08-21 18:58:47 723

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

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

2023-08-18 16:11:55 188

原创 为什么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 119

原创 C语言localtime函数

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

2023-08-13 15:48:07 2663

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

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

2023-08-13 11:36:42 774

原创 osi模型

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

2023-08-10 15:00:26 202

原创 线程和进程的区别

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

2023-08-09 21:20:46 196

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

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

2023-08-09 08:37:51 262

原创 Linux中singal信号的作用

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

2023-08-08 19:43:21 416

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

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

2023-08-08 17:31:46 807

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

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

2023-08-07 20:07:26 1436

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

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

2023-08-07 19:45:09 552

原创 C语言memset函数的作用

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

2023-08-07 19:24:41 531

原创 Linux进程间通信--ftok

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

2023-08-07 19:16:38 1914

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

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

2023-08-04 15:04:16 163

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

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

2023-08-04 15:02:50 187

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

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

2023-08-04 11:00:58 432

原创 C语言文件指针设置偏移量--fseek

3、whence这是表示开始添加偏移 offset 的位置。2、offset是偏移量,一般是指相对于whence的便宜量。1、stream是指向文件的指针。成功则返回0,失败则返回非零。

2023-08-01 18:47:31 692

空空如也

空空如也

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

TA关注的人

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