自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ 基础知识

排序总轮数=元素个数-1每轮对比次数=元素个数-排序论述-1。

2026-08-24 12:30:39 190

原创 C++基础

在创建任意变量和常量时,必须指定出数据类型存在意义:给变量分配合适的内存空间。

2026-08-08 15:12:08 196

原创 对一些基础知识的了解 笔记1

TCP 和 UDP 都是传输层协议可靠 vs 快速。数据是一位一位串行进来的,但最后一次性、多位同时并行输出。串 → 并 转换。

2026-08-08 10:30:56 177

原创 stm32串口通信

在stm32的MicroLIB库中实现的printf函数最终是通过调用fputc函数输出数据。原因:该开发板上使用的是(OS 8M 外部晶振 ),解决办法如下。或者直接再cube的时钟里面改。

2026-03-01 15:10:34 41

原创 keil、Cubemax的一些配置和stm32f103c8t6 循环点亮led

在编写代码的时候,可以看到左边菜单的左下角有对应的函数选项,可以在这里直接找到自己要用的功能。还有第二个解决烧录问题的方法是再keil里对系统的代码进行修改,这里就不写了,太繁琐。这个我个人认为是个很不错的功能,对新手很友好(之前都不知道有这个)写代码时要注意的关于头文件的问题,可以避免很多没必要的报错。第一次使用keil要进行的配置是如图,这里就不一一解释了。时钟要如图选择外部晶振,具体参数的配置如图2就不会出错。关于stmcubemax的配置方面要注意的是。这是一篇对从前学习的内容的复习,重走来时路。

2026-02-06 11:32:50 62

原创 2025年电赛E题 视觉部分 赛后感悟

这篇代码是作者参加电子设计竞赛时编写的视觉控制程序,主要用于激光定位和跟踪。系统通过摄像头识别矩形靶标和紫色激光点,使用PID算法控制云台运动,使激光点对准靶心。代码实现了图像处理、目标检测、PID控制、串口通信等功能,并包含阈值调节界面以适应不同环境。作者反思了参赛过程中的经验教训:过于追求激光定位精度而忽视了整体系统调试,导致时间不足;硬件意外故障也影响了比赛表现。虽然最终成绩不理想,但这段经历让作者认识到在竞赛中需要平衡完美主义和实用性,及时保存代码版本,优先确保系统完整运行的重要性。

2025-09-24 20:16:18 373

原创 备考计算机二级 C语言知识

程序局部性包括系统的时间局部性和系统的空间局部性,1.时间局部性:是指程序即将用到的信息可能就是目前正在使用的信息,2.空间局部性:是指程序即将用到的信息可能与目前正在使用的信息在空间上相邻或临近。&&(与) 和 | |(或) 的短路运算 当 && 左边表达式为 0 的时候,右边表达式就不再进行运算,整个表达式的值为 0;| 短路特性 | 有(&& 左边假 /|| 左边真时,跳过右边) | 无(两边表达式都会计算) || 区别 | 逻辑运算符(&&、||) | 位运算符(&、|) |

2025-09-20 21:39:07 388

原创 C++ (STL,顺序容器,关联容器,容器适配器)

set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就像一个 集合一样。map内部自建一棵红黑树(一种自平衡二叉树),这棵树具有数据自动排序的功能 , 所以在map内部所有的数据都是有序的,以二叉树的形式进行组织。set是一种关联性容器,底层使用红黑树实现,插入删除操作时仅仅移动指针即可,不涉及内存的移动和拷贝, 所以效率比较高。STL 的设计基于泛型编程的思想,通过使用模板,STL 提供了与类型无关的代码,从而实现了代码的高复用性和灵活性。

2025-04-25 18:45:02 871

原创 C++ (非类型参数)

在这个例子中, printValue 函数模板接受一个指向整数的指针作为非类型参数,并打印该指针指向的值。类型限制:非类型参数的类型通常是整形(如int char enum)或指向外部链接的指针,引用。必须是编译时的常量:非类型参数必须是编译时的常量,例如常量表达式或constexpr变量。1.整数常量:非类型参数最常见的形式是整数常量,可以用于定义数组大小,循环次数等。上面的例子,函数模板中接收一个非类型参数size,作为数组arr的大小。非类型参数不是类型,而是值,比如:指针,整数,引用。

2025-04-19 14:31:58 305

原创 C++ (重载,覆盖和隐藏,抽象类,泛类)

当通过基类指针basePtr调用show函数时,实际调用的 是Derived类中的show函数,因为Derived类的对象被绑定到了这个指针上,并且Derived类提供了show函数的 覆盖实现。访问权限:派生类中的覆盖函数可以有不同的访问权限,(例如,可以是public而基类中的函数是protected),但通常它们会保持相同的访问权限以确保一致性。模板是C++中实现泛型编程的主要工具。成员函数的重载和全局函数的重载是类似的,只是作用域不同,成员函数重载在类的范围内,而全局函数重载在在整个命名空间中。

2025-04-19 09:33:01 1055

原创 C++ (菱形继承,通用接口 ,多态介绍)

多态的作用 : 把不同的子类都当父类来看待,可以屏蔽不同子类对象之间的差异来写出通用的代码,做出通用的编译以适应需求的不断变化。在面向对象中,多态是指通过父类的指针或者引用指向子类的对象,在运行时动态调用实际绑定对象函数的行为,即“一个接口,多种实现”在C++中可以使用父类的引用来引用子类的对象,也可以使用父类的指针来指向子类的对象,反过来则不行。动态多态是在程序运行时根据基类的引用(指针)指向的对象来确定自己具体该调用哪一个类的虚函数。父类的引用来引用子类的对象或父类的指针来指向子类的对象。

2025-04-18 19:00:45 254

原创 C++ (初始面向对象之继承,实现继承,组合,修饰权限)

初始面向对象之继承初始面向对象之继承。

2025-04-16 21:05:10 847

原创 C++ (friend友元,运算符重载,特殊运算符重载及注意点)

把类A的一个成员函数声明为类B的友元函数,这样这个类A的成员就可以访问类B的私有成员了。友元类: 把类A声明为类B的友元类,这样这个A的所有成员函数都可以访问类B的私有成员了。运算符重载函数可以是成员函数的形式,友元函数形式,也可以是非成员非友元的普通函数形式。把类外的一个普通函数声明为类的友元函数,这样这个外部函数就可以访问类的私有成员了。双目运算符重载为类的成员函数时,函数只显示说明一个参数,该形参是运算符的右操作数。类的私有成员只能被类的成员直接访问,类外函数是无法直接访问的。

2025-04-16 19:21:09 472

原创 C++ (析构函数,拷贝构造函数,static关键字,const关键字)

浅拷贝容易导致两个对象共享同一个资源的情况,比如在String类中如果使用浅拷贝形式,就会使两个对象的str指向同一个堆区内存,在释放时会出现double free 的bug。拷贝构造函数是一种特殊的构造函数,它再创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。当一个类的成员变量使用"static"关键字修饰的时候,这个成员变量成为静态成员变量。浅拷贝只做对象数据成员的直接赋值,编译器默认的拷贝构造就是浅拷贝的实现方式。调用时刻:当一个对象的创建需要另一个对象来初始化,具体体现在。

2025-04-16 15:06:27 366

原创 C++ (类的设计,对象的创建,this指针,构造函数)

在C++,如果一个类的成员被声明为私有,那么它只能被该类内部的成员函数,友元函数或友元类访问,如果成员不加修饰符则默认为私有。主要体现在默认访问权限上,struct的成员默认为public,class成员默认为private。每个类对象的非静态成员函数都有一个this指针,指向调用成员函数对象的首地址。protect(保护成员):只能被该类的成员函数和其派生类的成员函数访问。对象本质上是一块内存,这块内存中存放的是创建这个对象的类描述的数据。在函数内部,用类创建一个对象,这个对象就是栈上创建的对象。

2025-04-14 21:28:27 469

原创 C++ (new和delete运算符,链接库,面向对象与面向过程)

对于非内部数据类型的对象而言,光用malloc和free无法满足动态对象的要求,对象在创建时要自动执行构造函数,在消亡之前要自动执行析构函数(内部数据是编译器本身就有的,不需要用户定义如int,非内部数据类型是用户自己定义的,如class,struct)由于malloc/free是库函数而不是运算符,不在编译器的控制权限之内,不能把执行构造和析构函数的任务强加给malloc/free,因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。

2025-04-14 19:10:14 241

原创 C++ (初始C++,命名空间,引用,函数增强)

char* 本身是指向字符数组首元素的指针,但字符串常量是字符数组(多个字符连续存储),所以当char* 指向它时会指向数组第一个元素,但C++中字符串的字面量时const char[],转换为char*会丢失const,所以会导致类型不匹配。命名空间通过关键字 namespace来创建,成员可以是函数,变量,常量,枚举/结构体/联合体,类,嵌套名字空间。引用就是对变量或对象的别名,可以替代C语言中通过指针修改变量的值的方法,对引用对象进行的操作与其绑定对象完全一致。

2025-04-14 18:26:48 338

原创 ARM day2

MRS Rn,CPSR/SPSR 将状态寄存器(CPSR)的值,读到通用寄存器中。CP寄存器总是指向正在取址(从寄存器装载一条指令)的指令(不是指向正在执行的指令)MSR CPSR/SPSR,Rn 将通用寄存器的值,到状态寄存器(CPSR)基址变址寻址:将基地址寄存器加上指令中给出的偏移量,得到数据存放的地址。BIC 按位与取反(位清零)(指定位数清零,其他位数保持不变)编译器认识指令ARM核不认识,编译器翻译成ARM核认识的指令。ldr pc,= 标签名 将PC指针指向标签表示的地址。

2024-10-13 09:04:47 460

原创 ARM day1

Supervisor mode 处理器在复位时进入该模式,当用户模式下的用户程序请求使用硬件资源时,通过软件中断进入该模式。IRQ一般中断,用于处理一般的中断请求,通常在硬件产生中断之后自动进入,该模式是特权模式,可以自由访问系统硬件资源。System模式不能通过异常进入,用户模式和System共用一套寄存器,系统模式属于特权模式。Underfined mode 未定义模式,是指令的异常(未能识别的指令)导致的模式。用户模式是用户程序的工作模式,只能处理自己的数据,也不能切换到其他模式下。

2024-10-02 10:00:45 419

原创 IO模型 总结

IO的本质是基于操作系统接口来控制底层的硬件之间数据传输,并且在操作系统中实现了多种不同的IO方式(模型),比较常见的有阻塞型IO模型、非阻塞型IO模型、多路复用IO模型。基本思想:由内核来监控多个文件描述符是否可以进行I/O操作,如果有就绪的文件描述符,将结果告知给用户进程,则用户进程在进行相应的I/O操作。监控一组文件描述符,阻塞当前进程,由内核检测相应的文件描述符是否就绪,一旦有文件描述符就绪,将就绪的文件描述符拷贝给进程,唤醒进程处理。

2024-09-28 15:32:07 733

原创 线程 总结

答:防止在调用 pthread_cond_wait 函数等待一个条件变量收到唤醒信号,另外一个线程发送信号在第一个线程实际等待它之前,也就是说线程还没有完全进入到睡眠状态,其他线程发送唤醒信号。条件变量的本质为 pthread_cond_t 类型的变量,其他线程可以阻塞在这个条件变量上,或者唤醒阻塞在这个条件变量上的线程。线程是进程的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程,一个进程中可以有多个线程。不能被其他线程回收或者杀死的,该线程的资源在它终止时由系统来释放。

2024-09-28 14:38:28 938

原创 进程 总结

waitpid函数的功能与wait函数一样,但比wait()函数功能更强大,可以理解成 wait() 底层调用waitpid()函数。4、在进程结束时,需要释放分配给进程的地址空间以及内核中产生的各种数据结构,会自动释放缓冲区,自动调用exit函数。若子进程为读端,父进程为写端,则通过pipefd和close关闭子进程写端,父进程的读端来实现父子进程信息的传递。并且在阻塞情况下,父进程不能执行其他逻辑。进程描述的是一个程序的执行过程,当程序执行后,执行过程开始则进程产生,执行过程结束则进程也结束。

2024-09-27 20:31:49 623

原创 day21-

echo "${ cmd }" ecoh "${ cmd1 }" 二者输出结果一致。定义变量不用加$,输出变量时需要加$,给变量赋值时等号两边不能有空格。变量没有类型,不需要定义,直接使用,所有内容都会被解释成字符串。${变量名} 将变量名看作一个整体,与 $变量名 等价。$1-$9 : 第一个参数~第九个参数,空格做为分隔符。$# : 位置参数的个数[不包括shell脚本本身]shell脚本中的格式要求很严格,要严格按照格式。$$:获得我们shell脚本的进程号。

2024-08-01 21:07:04 371

原创 day20

说明:find命令用于查找符合条件的文件和目录,路径名是用空各隔开的要搜索文件的目录名清单,表达式包含要寻找的文件的匹配规范或说明。改变指定文件所属的用户组,其中所属组可以是用户组的ID,也可以是用户组的组名。删除目录时,必须对该目录的父目录具有写权限,目录被删除前应该是空目录。-R:递归式改变指定目录及其下的所有子目录和文件的拥有者。-R:递归式地改变指定目录及其下的所有子目录和文件的属组。-r或-R:递归删除目录及其下属各级子目录和相应的文件。-r:递归处理,将指定目录下的所有文件及子目录一并处理。

2024-08-01 20:44:31 618

原创 day 14

单向循环列表:是单项列表的一种改进方式,二者的不同在于单向循环列表的尾结点的指针域存放头结点的地址,首尾相连。释放内存:free(),当用户不再需要一段动态内存空间的时候释放,目前常用的动态内存分配为malloc。则是一个特殊的指针,它始终指向栈顶的那个节点。当进行入栈操作时,新节点会成为新的栈顶,插入和删除操作均再头部进行,链表尾部就是栈底,栈顶指着就是链表的头指针。插入操作再队尾进行,删除操作再队头进行,由队头和队尾指针控制队列的操作。二叉树:任意一个结点的子节点个数最多是两个,二叉树不一定是满的。

2024-08-01 20:44:07 282

原创 day13 数据结构第二天

虚拟头结点:为了方便对链表进行操作,我们一般会在链表的头结点之前,再创建一个结点dummyHead,让该结点的next域指向head。dummyHead结点就称之为虚拟头结点,虚拟头结点数据域默认不使用,只是用指针域。线性表中的各元素分布在存储器中的不同存储区域,线性表中的个元素统称为结点。结点之间通过地址或指针建立联系,所得的存储结构为链表结构。将p所指向的结构体中的指针next对应元素变为空项目。尾结点:链表中的最后一个节点。链表:线性表的链式存储结构。头结点:链表中的第一个结点。

2024-08-01 19:51:22 164

原创 数据结构day1

给名称为size_t的文件开辟size个空间,前面一般要加强转。

2024-08-01 19:48:33 258

原创 day11 最后一次C语言

union ***{联合体也是一种特殊的自定义数据类型,这种类型定义的变量也包含一系列成员,特点是这些成员共用同一块空间(所以联合体也叫共用体)联合体的成员共用一块空间(地址相同)联合体的大小至少是最大成员的大小当最大成员大小不是所有成员的整数倍时,联合体的整体大小就是所有成员的整数倍最大位置偏移大小:如int是4,char是1,char arr[5]也是1在64位的系统中(比如win64)1字(word)= 8字节(byte)=64(bit)

2024-08-01 19:45:06 365

原创 进程 day1

Linux 系统会为每个进程分配id ,这个id作为当前进程的唯一标识,当进程结束,则会被回收。进程的id和父进程的id分别用getpid()和getppide()父子进程的执行顺序是由操作系统的调度算法决定的,不是由程序本身决定的。子进程会拷贝父进程地址空间的内容,包括缓冲区和文件描述符等。fork用于创建一个进程,创建成功返回0,失败返回-1。父子进程并发执行,子进程从fork()函数之后开始执行。fork之后的代码即是主进程的代码也是子进程的代码。数字大,优先级低,数字小,优先级高。

2024-08-01 16:37:04 178

原创 day10

格式1格式2注意:条件编译在多文件编程中经常会用到。

2024-07-11 22:14:07 315

原创 day09

int 和*float 不能混用,他们的存储方式不同,整形数据和浮点型数据在内存中的存储方式不同指针类型是有意义的,指针类型并没有决定指针变量所占内存空间大小,而是(1)指针类型决定了指针在被解引用时访问内存空间几个字节(2)指针类型决定了指针的步长,+1-1向后向前访问几个字节,即跳过几个字节大端(存储)模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存中内存的低地址中小端(存储)模式:是指数据的低位保存在内存的低地址中,而数据的高位,保存中内存的高地址中。

2024-07-05 16:02:12 297

原创 day08

实现功能的一个模块,可把大程序分解成很多小程序---子程序自定义函数返回值类型 函数名(参数列表){函数体;//代码块}如果没有返回值:void一个函数只能返回一种类型的数据一个函数尽量只完成一个功能如果没有参数列表,则void或空函数的定义不能嵌套函数的定义也可以放在使用之后,但是需要在使用之前进行声明。声明可以放在main之前,也可 以放置在调用函数的内部。全局变量未初始化,默认值是0局部变量未初始化,默认值是随机值。

2024-06-24 17:44:30 286

原创 day7--

int* p:p是指针变量,定义指针变量需要在相关的数据类型后面加上*,此处的*并非是解引用操作符,仅仅是一种格式,并无实际意义,int则是指针变量p所指对象的数据类型,因为前面定义的a是int类型,所以该处是int*(整型),在其他场景下可以是double*(双精度型)、char*(字符类型)、float*(单精度型),按照具体情况而定。表示的含义不一样,&arr是整个数组的首地址,arr是数组中首元素的地址。//类型:int [6],占24个字节。

2024-06-19 18:40:27 647

原创 day06

ch可以是被单引号引起来的一个字符,也可以是介于0~127之间的一个十进制 整型数(包含0和127)在内存中开辟了40个byte的空间,用来保存10个int类型的值。exit(1) 等价于exit(EXIT_FAILURE),这里的1代表一个常量。int arr[10] 在变量名后面加上方括号,代表数组,数字代表要保存多少个值。int arr [10]={1,2,3,4,5,6,7,8,9,10}赋值方法。在内存中开辟4个byte的空间,用来保存10。要是有变量,首先声明变量,规则:先先声明,再使用。

2024-06-09 13:57:57 204

原创 day05

循环条件while(sun++

2024-06-05 15:36:48 234

原创 C语言学习

函数名:main 参数列表()(0) 返回值类型:int 函数体:return 0完成功能的代码块。返回值类型(void,int,float...) 函数名(【参数列表】)返回值类型:void(空类型,函数没有返回值时就返回void)灵活性强:选择结构和循环结构(嵌套使用),主要考查逻辑思维。函数声明可以放在函数外面去声明 --在任何地方都可以使用。C语言的设计结构:顺序结构,选择结构,循环结构。也可以放在函数里面去声明--只能在该函数中使用。返回值类型如果时viod,就可以不用返回。

2024-05-31 20:48:55 179

原创 day04

随机数是一个正态分布函数,产生随机数时会有一个种子(电脑开机之后就会产生,这个种子不会变)(伪随机)如果想真的产生随机数,需要更改种子,即重新播种,要用到srand函数重新播种。程序设计的三种结构:顺序结构,分支结构,循环结构----程序都是由这三种基本结构构成。{//语句块,如果条件是真的,就执行语句块,如果语句块只有一条语句可以不写大括号,while(循环条件){//如果循环条件满足,就进入循环中,执行循环体,否则退出。a:b表示取较大的值,a>b?循环三要素:循环条件,循环体,更新循环变量。

2024-05-26 17:19:07 251

原创 day03

整数和整数相乘结果是整数,相除结果也是整数,想输出小数的话要先将其转化为小数,可在后面乘以一个小数(带括号的原因是让其先进行运算,如果不加括号结果仍是整数)条件1 && 条件2 此表达式的结果要成立,条件1,2需要同时成立。条件1 || 条件2 此表达式的结果要成立,条件1,2成立一个即可。含义:如果条件表达式成立,整个表达式的值是表达式1,否则是表达式2。格式:ret = 表达式1,表达式2,表达式3,。结果:真(成立,1表示),假(不成立,0表示)

2024-05-19 16:41:14 448

原创 day02

signed 含义:有符号数——正数,0,负数 写法:(signed)int,(signed)char,其中signed可省略不写。若是为 unsigned char类型,一定为正数或0,原,反,补,都一样,%d输出的原码就是补码,直接转换为元素输出即可。unsigned char,无符号类型,在内存中占1个字节,可表示0,正数,表示数值范围为【0~255】char,有符号类型,在内存中占1个字节,可表示负数,0,正数,表示数值的范围是【-128~127】二,有符号数和无符号数。

2024-05-18 20:02:15 272

原创 day-1

基本命令:exit退出,pwd显示工作目录,lf显示全部目录,cd切换到家目录,cd..切换到上级目录,cd (目录名)切换到对应目录,mkdir (目录名)创建目录,touch (文件名)创建文件,rm删除(默认删除文件),rm -rf删除目录。gcc编译分为四步,xxx.C-预处理-xxx.i-编译-xxx.s-汇编-xxx.o-链接(生成可执行文件)常量分为整型常量,浮点型常量(小数),字符常量,标识符常量(宏定义),字符串常量。ctrl+shift+“+”(放大界面)shift+“-”(缩小界面)

2024-05-02 20:30:23 226 1

空空如也

空空如也

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

TA关注的人

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