自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 51单片机实现Ds18b20的温度采集

在往单片机发送数据的时候18b20发送的是数字量,结构的优势让18b20可以避免进行手动的ADC转换。下位机(回复给上位): AA 81 01 04 XX XX XX XX ** 0D。在加上拉电阻,双方都拉高的时候,上拉电阻可以上高电平更准确,相当于再使一把劲。//在复位的过程中, 如何检测引脚确实发生如下变化,证明18b20的存在。下位机(回复给上位):AA 81 02 XX XX ** 0D。上位机(02):AA 01 02 00 XX 0D。发送0xBE //开始读取温度。

2024-05-16 15:17:46 352

原创 ARM9驱动开发基础概念

它用于实现堆栈指针操作,实现数据的先进后出。它用于实现堆栈指针操作,实现数据的先进后出。它用来在调用子程序时保存返回地址。它用于存放下一条执行的指令的地址。它用来在调用子程序时保存返回地址。它用于存放下一条执行的指令的地址。中的那几位是用来设置工作模式的?中的那几位是用来设置工作模式的?的通用寄存器有几个?的通用寄存器有几个?

2024-05-16 14:37:25 289

原创 裸机关于GPIO || URAT

在中央处理器CPU执行的过程中,外部发生更为紧急的事物,可以打断CPU的正在运行的工作,转而去执行更为紧急的事情,执行结束之后回到原来的状态。if((P1 & (1

2024-05-16 14:36:20 1035

原创 opencv常用库的使用

opencv库函数调用1、图像 2、读取图像 3、显示图像 4、保存图像 5、Mat类 6、图像的翻转 7、图像的缩放 8、图像的模糊 9、图像的二值化处理 10、腐蚀: 11、膨胀:使用opencv调用摄像头实现人脸检测定位在QT下使用opencv实现图片人脸检测定位在QT下调用opencv库实现摄像头人脸检测定位

2024-05-08 20:20:20 516 3

原创 C++之函数指针与动态内存分配

c语言:Clock *p = malloc(sizeof(Clock));//malloc返回的是void*Clock *q = new Clock(*p);//q和p指向不同的内存。使用malloc创建的对象,并不是真正意义上的创建对象,未调用构造和析构函数。//p释放了内存,q指向的内存失效。//q释放了内存,程序出错。//q和p指向同一块内存。1、malloc返回的是void*,new返回的是对象指针。[&] 引用捕获外部全部变量,可修改。int &fn(void) //错误。

2024-04-28 19:14:09 317

原创 初见C++

首先:C++是所有编程语言中最难的属性:面向对象的编程思想不能像C一样编写操作系统(比C语言差30%)变量:一段内存空间1、类库:MFC、STL、QT、OpenCV、OpenGL2、编译:g++ -o hello hello.cpp3、运行:./hello。

2024-04-25 09:24:43 519

原创 打开QT creater 频繁弹窗Cannot overwrite file /.config/QtProject/qtcreator/devices.xml: Permission denied

Cannot overwrite file /home/linux/.config/QtProject/qtcreator/devices.xml: Permission denied

2024-04-24 17:27:58 207

原创 Makefile进阶使用

是一种模式规则(Pattern Rule),用于定义如何从一个源代码文件(当Makefile执行时,它会查找当前目录下所有与目标模式()匹配的文件,并寻找与其具有相同名字但扩展名为。在这个例子中,规则告诉 Make,对于任何以。文件时,它会调用指定的命令来执行编译操作。当 Make 需要重建某个。文件)生成对应的编译目标文件(,Make会根据这个规则编译。结尾的源文件,都应该使用。代表第一个依赖(也就是。,那么这条规则就会匹配。在Makefile中,

2024-04-19 11:15:59 332

原创 全网最全详解【线程邮箱】

最近项目中涉及到采集端需要多线程任务,发现网上关于线程邮箱的帖子视频很少,而且都是一知半解。链表中保存了关于线程的相关信息(线程名、线程tid、线程的函数指针、线程中队列)线程邮箱的头文件mailbox.h主要包含线程中所需要的结构体。全局变量实现线程通信的原因:“线程间的共享堆区、静态变量区、常量区的特点”。1、使用线程邮箱可以避免资源间竞争,减少损耗的时间,提高系统的执行效率。队列中保存的数据有:发送方的线程名,接收方的线程名,和发送的数据。2、线程邮箱区别于“定义全局变量”的通信方式。

2024-04-06 14:22:06 772 7

原创 linux使用GDB调试段错误

前因:由于在做线程邮箱项目的过程中,遇到了段错误,情况如下:代码量达到了500多行,使用打印难以实现,试着用GDB调试段错误。

2024-03-29 15:19:44 156

原创 数据结构之单链表

线性结构:元素之间一对一的关系(表(数组,链表),队列。单链表:链表的头插、尾插、头删尾删、查找、更改、销毁。数据的逻辑结构:数据元素与元素之间的关系。图形结构:元素之间多对多的关系(网状结构)树型结构:元素之间一对多的关系(二叉树)数据结构就是存储数据的不同方式。数据与数据之间的关系。

2024-03-18 19:44:39 512

原创 sqlite3 数据库的增删改查

sqlite> insert into student (id, name, score) values (1002, "李四", 100);sqlite> insert into student values (1002, "王二", "女", 18, NULL);sqlite> insert into student values (1001, "张三", "男", 19, 80);1.创建一张订单表,由 ID, 订单号, 货物信息, 生产厂商, 联系人, 联系电话, 订单时间。

2024-03-12 23:02:56 980 1

原创 TCP并发模型 || select || poll || epoll

4.select只能工作在水平触发模式(低速模式),无法工作在边沿触发(高速模式)3.poll只能工作在水平触发模式(低速模式),无法工作在边沿触发(高速模式)events:要监听的事件 POLLIN:是否可读 POLLOUT:是否可写。select监听文件描述符集合中是否有文件描述编程ready状态。1.select监听的集合中的文件描述符有上限限制。3.select必须轮询检测产生事件的文件描述符。2.poll必须轮询检测产生事件的文件描述符。成功返回文件描述符集合中的文件描述符个数。

2024-03-12 08:42:53 1154

原创 TCP传输收发

backlog:允许等待的尚未被处理的三次握手请求的最大个数。addrlen:存放IP地址大小空间首地址。address:存放IP地址的空间首地址。addr:目的地址存放空间首地址。sockfd:套接字文件描述符。sockfd:套接字文件描述符。addrlen:IP地址的大小。sockfd:套接字文件描述符。socket:套接字文件描述符。buf:发送数据空间首地址。flags:属性默认为0。buf:存放数据空间首地址。len:最大接收数据的长度。sockfd:文件描述符。len:发送数据的长度。

2024-03-07 23:33:23 506

原创 UDP通信发送和接收 || UDP实现全双工通信

3.UDP是不安全不可靠的,连续且快速的传输数据容易产生数据丢失。addrlen:存放接收到IP地址大小空间的首地址。src_addr:存放IP地址信息的空间首地址。1.UDP是无连接,发端退出,收端没有任何影响。在套接字上绑定一个IP地址和端口号。addrlen:绑定IP地址的长度。addr:绑定IP地址空间首地址。ip.addr == IP地址。sockfd:套接字文件描述符。sockfd:套接字文件描述符。buf:存放数据空间首地址。打开wireshark抓包工具。成功返回实际接收字节数。

2024-03-06 22:16:16 798

原创 进程间通信之信号灯 || 网络协议UDP/TCP || 三次握手四次挥手

在线程通信中由于数据段等内存空间的共用性,导致同时访问时资源竞争的问题,在线程中我们使用信号量的申请和释放,在防止资源竞争的产生。网络协议模型:OSI协议模型、 TCP/IP协议模型 、三次握手四次挥手子网掩码和网络位,主机位UDP编程

2024-03-06 08:47:47 1094

原创 进程间通信之消息队列及共享内存

根据pathname和proj_id生成一个key_t类型的key值,将来可以用来创建消息队列、共享内存、信号灯。练习:编写2个进程任务(recv.c send.c),send.c从终端接收一个字符串利用消息队列发送给recv.c。创建共享内存 -> 映射到共享内存中 -> 共享内存操作 -> 解除映射 -> 删除共享内存。ipcrm -q/-m/-s 消息队列ID/共享内存ID/信号灯ID。成功返回key_t类型的IPC对象的key值。查看系统重的消息队列、共享内存、信号灯的信息。

2024-03-04 22:56:02 869

原创 进程间通信之管道与信号

写入数据时,如果管道中没有存满(64k),则直接写入,管道中如果存满,则阻塞等待直到有数据读出,才能继续写入。读取数据时,如果管道中有数据直接读取,管道中没有数据阻塞等待直到有数据写入读出,继续向后执行。读取数据时,如果管道中有数据直接读取,管道中没有数据不阻塞等待直接向下执行。编写两个进程,A B A给B发送一条消息,B接收到打印后再给A回复一条消息。写入数据时,会产生管道破裂错误,导致程序崩溃。打开管道文件 -> 读写管道文件 -> 关闭管道文件。pipefd[0]:读管道文件描述符。

2024-02-28 22:49:17 866

原创 线程——线程间通信、互斥锁

之前学习到线程可以通过手动pthread_join手动回收线程的空间,和进程中的wait作用类似,然而,在进程的创建过程中可以使用第二个参数来设置分离属性,达到自动回收线程空间的效果,然而这个效果也需要考虑现实情况来用。线程在运行的过程中总是同时发生的,这会对现实的需求造成干扰,因此我们定义了多种函数接口,来解决线程在运行过程中存在的资源竞争以及运行先后顺序的问题。5.互斥锁只能解决资源竞争的问题,无法同步代码(没有先后执行的顺序关系)mutex:互斥锁空间首地址。mutex:互斥锁空间首地址。

2024-02-27 22:23:54 883

原创 进程与线程之线程

首先exec函数族是进程中的常用函数,可以利用另外的进程空间执行不同的程序,在之前的fork创建子进程中会完全复制代码数据段等,而exec函数族则可以实现子进程实现不同的代码。一个线程异常结束会导致进程异常结束,进程异常结束,该进程内所有线程任务均无法向下执行。线程:线程是一个轻量级的进程,位于进程空间内部,一个进程中可以创建多个线程。进程空间是独立的,没有共享空间,通信实现比较复杂。线程独占栈空间,文本段、数据段和堆区与进程共享。进程没有共享空间,不存在资源竞争的问题。一个进程异常不会影响其余进程空间。

2024-02-26 22:35:48 1128

原创 进程与线程之进程的理解

进程与线程进程的命令:进程的调度:1·先来先执行 2·短作业优先 3·优先级调度 4·时间片轮转调度算法 宏观并行 微观串行 (多任务) 5·多级反馈队列调度 6.负载均衡调度7.进程的消亡让父进程先结束 2.让父进程回收子进程空间

2024-02-24 21:56:13 793 1

原创 使用系统调用实现shell命令之【ls -l】

将pathname对应的文件信息放入statbuf中。通过文件名链接,所有能够看到的连接文件均为软连接文件。通过文件对应的inode节点链接。pathname:文件路径字符串的首地址。statbuf:存放文件信息空间的首地址。pathname:链接文件的路径。一旦链接项消失,硬链接的文件依然存在且内容不变。/etc/group 组信息文件。tloc:存放秒数空间首地址。硬链接:是同一个两个文件指向了同一个数据块。软连接:本质上是一个文件存放了链接项的路径。一旦链接项消失,那么软链接文件将会失效。

2024-02-21 00:14:28 812 3

原创 文件IO的lseek以及目录IO

SEEK_CUR 文件当前位置。SEEK_SET 文件开头。SEEK_END 文件末尾。X_OK 检测是否拥有执行权限。R_OK 检测是否拥有读权限。W_OK 检测是否拥有写权限。检测调用函数的程序对文件是否拥有指定权限。F_OK 检测文件是否存在。重新设定文件描述符的偏移量。成功返回包含目录项信息的空间首地址。r: 目录中是否能够查看文件。w: 目录中是否能够新建文件。pathname:文件路径。pathname:文件路径。读到文件末尾返回NULL。

2024-02-19 22:26:13 865

原创 系统调用之文件IO

学习完使用标准io库函数,进一步深入linux的内核实现系统的调用,本节主要学习文件io的相关函数。1.利用read和write实现文件内容的拷贝(将src.jpg中的内容拷贝到dst.jpg文件中)从文件描述符fd对应的文件中读取count个字节存放到buf开始的空间中。O_TRUNC 文件存在截断(清0)向fd对应的文件中写入buf指向的count个字节。新生成的文件描述符总是为尚未被使用的最小的非负整数。每组rwx分别表示创建人员的权限,同组人员的权限,其他人员的权限。

2024-02-19 08:48:33 909

原创 解决Ubuntu下网络适配器桥接模式下ping网址不通的情况

打开虚拟机中的设置,更改网络适配器为NAT模式。确定保存更改之后,退出输入如下命令。问题反应:ping不通网址。

2024-02-18 19:25:03 649

原创 linux高级编程 | IO输入输出

4.DownLoad Form 选择 "Others" -> "China" -> "mirrors.aliyun.com"练习:一条shell命令,将/usr/include/stdio.h文件后200行中与extern相关的内容记录到file.txt文件中。w 只写 文件不存在创建,文件存在将文件内容清空,只写打开。w+ 写读 文件不存在创建,文件存在将文件内容清空,写读打开。2.在Ubuntu左侧找到"Ubuntu Software"

2024-02-03 19:27:58 903

原创 C语言问题汇总

A :(p+i)表示指针偏移int【3】的大小,即在数组中跳过i行。代表数组的地址从首元素,偏移一个sizeof(int)的空间,,指向数组中的第二个元素。:int * p定义的是一个指向整型变量的指针,然而在赋值的过程中,试图将一个数组的地址赋值给整型指针。输入的abcd efg 10 作为函数的参数,本题实现的功能主要是求和数组中字符串的总长度。(本题有别的意图,但是这种赋值是不正确的,而且赋值之后p指向的是未定义的空间。*(&a+I) 同理可得:取a的地址偏移了 I 整个数组的大小空间。

2024-02-02 23:48:31 927

原创 结构体、共用体、枚举、链表

共用体:与结构体较为相似,不过其内部成员共用一块内存,该内存的大小是成员中的最大内存的大小。结构体和共用体都是定义一种数据类型,有了数据类型便可以实现定义变量、数组、指针、函数返回值。struct //形式3 省略了类型名 --如果只用一次,可以这样写。struct stu //形式2 定义类型的同时定义变量。struct stu //形式1 先定义类型,后定义变量。//让p指向下一个节点。//让p指向下一个节点。//统计有效节点的个数。

2024-02-01 21:41:02 834

原创 关于指针的若干思考

解释:int * *p 其中*p代表的是代表的是定义了一种指针变量 其中 p 存放的数据是int *型的数据即存放的是地址。在该函数中,引用的指针型变量可以在主调函数中直接输入函数名来实现。一维数组的变量们代表的就是函数的首地址。int[4] (*a)理解的形式可看做如此,但是在语法角度的书写方式为int (*a)[4]其中int代表基类型、*代表定义的是一个指针变量、p为指针变量内部存放的是 a的地址。也是使用p+1的实现数组的偏移。解析:a的地址赋值给了p而不是(*p)。

2024-01-31 23:18:52 410

原创 指针与函数以及二维数组

/&a[0]--对应的数据类型 int(*)[4] //数组类型 (一维整型数组类型)//数组类型的指针 --- 数组指针。//*(p+1) 代表的类型int[4] 此时相当于是 int[4]的数组名。//a --代表的值 -- 首元素的地址 -- a[0]//a --数组名 --代表类型 int [3][4]//a[0] 的数据类型 int[4]void * //万能指针 --可以接收任意类型的指针。*p 相当于 是 int[4]这种类型 //数组。p+1 //偏移到了 下一个 int[4]

2024-01-30 23:06:07 352 1

原创 指针操作数组

指针可以实现操作函数和操作数组。

2024-01-30 22:55:15 503 1

原创 变量的存储方式以及指针

考点:地址是内存单元上的编号,因此32位电脑和64位电脑由于地址总线的原因,所访问的内存容量被限制。与一维字符型变量传参不同,一维字符型变量传参可以忽略数组空间,因为有自己的结束标准,可以在传参的过程中使用“\0”来结束。解释为基类型为int型的指针,指针变量p 存储的是a变量的地址。指针从定义形式上来讲,以一种区别于整型浮点型的数据类型,其数据空间中存放的是地址编号。数组的变量名代表的是该数组的首地址,也就是指针变量所储存的地址编号。2、找到地址编号所对应的地址,偏移一个基类型的大小的空间。

2024-01-28 22:35:56 369

原创 函数的再认识

递归思想的灵活使用往往能使问题变得非常容易实现,在递归中找到后一项与前几项的关系,从而实现自身的调用,直到到达结束的条件,往往结束的条件是一个明确的结果,然后在回归实现最终的结果。函数是实现C语言模块化的重要组成部分,正因为不同的功能可以写在不同的函数里,通过函数之间的调用实现功能的叠加。要点2:在函数传递参数的时候,如果是变量则不更改原参数的值,若是地址(这里值数组则会更改原数据)int a【】在函数传递中一般传递的是该数组空间的首地址。要点1:在不同函数之间的调用,形参和实参的匹配是从。

2024-01-26 23:31:18 383 1

原创 C语言三座大山之函数

main -->getMonthDays --> isLeapYear //函数调用的 本质?main -->printPrimeNumIn100-->isPrime //函数的嵌套调用。栈 --- 数据结构 --先进后出 (FILO) //First In Last out。栈 --- 数据结构 --先进后出 (FILO) //First In Last out。(3).形式参数 --- 函数接收数据的入口。特殊的嵌套调用 --- 递归 (自己调用自己)2.流程图 --- 某一个功能块。

2024-01-25 22:16:24 347

原创 <string.h>下的常用字符串操作

因此在物理意义上依然是以一维数组存储的不过,其存储思维体现在:在一维数组的基础上开存储一个数组。strlen(s) //该函数是用于求数组中字符串的长度的函数,替代了使用while循环计数的操作。strcpy (s【1】,s【3】)将数组中s【3】复制到s【2】,此时的s【3】与s【2】都可以看做变量名。strcat(s1,s2) //将s2数组中的字符串拼接在s1数组的后面。a [ n ][ m ]在n个数组的基础上,每一个数组内再存储m个数组。使用排序排列字符串的大小。

2024-01-24 22:34:18 395 2

原创 字符型数组——字符串

冒泡排序法的算法思想是:相邻的两个数两两比较,大的放在放在后面小的放在前面,这样每一趟的循环会冒出一个最大数,那么下一次循环就可以较小一次比较的次数。思维逻辑:顺序的选择一个位置上的数,逐个地与后面进行对比,如果比后面的数大则交换位置,继续用1号为的新数和后面的进行对比。其本质是使用字符存储,通过顺序的存储达到字符串的存储效果。程序通过识别\0的位置可以确定数组中字符串存在的具体位置和空间。二分查找的逻辑原理是使用找中间的逻辑,通过对比中间值,然后确定往前寻找还是往后寻找,这是一种高效的寻找方式。

2024-01-23 21:51:36 355

原创 C语言“三座大山”之数组

答:数组是连续性的同一数据类型的变量集合。其中int 表示这些集合中所有元素的数据类型,即数组中所有的元素都是整型变量。本篇将通过问答的方式来描述数组的相关概念以及要点,是加深理解又一新的形式。答:数组在存储上是连续存储的,首先开辟一块地址上连续的空间用于存放变量。答:数组的初始化通过初始化器来实现,例如:a【3】={1,2,3};例如:排列一个数组的所有元素。[ 10 ]表示数组的空间为10个int型变量的空间大小。数组在初始化的过程中有全初始化、部分初始化、不初始化。答:a代表数组首个元素的地址。

2024-01-22 22:28:07 337

原创 C语言之循环结构

while(表达式):while语句首先会判断括号内表达式的真假,如果为真则执行下面的循环体,一般循环需要逻辑变量来达到循环结束的条件,不然会形成死循环。如为假则执行while语句之后的其他语句。do_while语句:其在与while语句在形势上变现的不同主要体现在do while 语句其循环体放在前面,执行一次循环以后再进行判断while。重复的对比工作考虑使用循环,但是循环执行的要有一个变化的量,而输入输出的判断条件无法选择,也就是说n1\n2\n3等之间没有联系,不能通过++i等操作,来变化。

2024-01-21 23:29:29 323

原创 分支与选择

前言:程序设计的基本结构可以由:顺序结构、分支结构、循环结构。顺序结构不在这里讨论了。

2024-01-19 21:47:53 368 1

原创 赋值类型转换、标准输入输出以及运算符优先级

简洁明了的变量名不仅能给自己在编程过程中带来方便,而且在别人阅读代码时也能清楚知道变量的大致意思。培养良好的编程习惯是一件非常有意义的事情。接下来介绍几种变量的命名方式和一些常用的规则。读者可以选择合适的一种作为自己的编程风格。1、尽量使用单词进行命名2、如果变量名过长则可以使用简写单词,在缩短简写变量的时候可以省去元音字母a、o、u、i等保持原本的发音不受过大影响。3、驼峰命名法,其命名方式类似于骆驼的驼峰因此得名。下列两种举例反应了驼峰命名法的具体方法。作者习惯于使用大驼峰的方式命名变量。

2024-01-18 21:14:40 823 1

空空如也

空空如也

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

TA关注的人

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