- 博客(107)
- 资源 (13)
- 收藏
- 关注
原创 C++笔记
在C++中,友元函数(friend function)是在类的声明中被声明为友元的非成员函数。友元函数可以访问类的私有成员和受保护成员,即使它们不是类的成员。通过友元函数,我们可以允许其他函数或类直接访问另一个类的私有或受保护成员。下面是一些关于友元函数的特点和用途:友元函数的声明通常出现在类的内部,但不是类的成员函数。它可以在类的任何地方进行声明,例如在公共、私有或保护部分。友元函数的定义必须在类外部进行,与类的定义分开。友元函数在其定义中使用类的对象作为参数来访问类的成员。
2023-11-23 22:07:02
1119
原创 QT中样式表常见属性与颜色的设置与应用
要获取QCheckBox控件的样式表(QSS)中设置的颜色,你可以使用QCheckBox对象的styleSheet()函数获取当前应用于它的样式表。然后,你可以解析样式表字符串以提取所需的颜色信息。在Qt中,可以使用颜色来设置样式表(QSS)中的各种元素的外观。在示例中,我们检查样式表中包含"color:"、"background-color:"或"border-color:"的项,并提取冒号后面的值作为颜色值。在Qt中的样式表(QSS)中,有一些特定的英文单词和关键字用于指定不同的样式属性。
2023-11-23 22:05:41
3094
原创 MII、RMII、 SMII、GMII、RGMII、SMI接口介绍
这几种接口是我们常说的网卡中应用的接口,应用于MAC和PHY直接的通信接口,符合IEEE定义的标准,不同厂家生产的网卡也都是按照标准生产的,所以我们能直接换网卡使用。
2023-10-21 14:39:39
1203
原创 存储器IP核与DDS信号发生
时钟--------------------------------------------------------------------------------信号发生器不断在时钟的驱动下,计算出存储表中数据的地址,取出数据送到DA转换器转换,进而生成一个频率和相位可控的信号发生器。频率控制字reg—相位累加器—相位偏移—信号存储表—DA转换器。信号存储表:存储一定深度和位数的数值,是模拟信号的离散话采样值。频率控制字:控制相位累加器的加数值,表示每次间隔几个点取值。相位控制字reg————————|
2023-09-05 10:28:45
187
原创 按键消抖与仿真源文件中的随机数
在FPGA中可以通过对信号的快速精准判断,只需要根据电平持续时间来解决抖动问题,按键按下一般会有20ms以上的电平平稳时间,就是通过按键的边沿开始计算,只要20ms中没有多个边沿触发,就说明不是抖动。在C程序中一般通过延时函数解决,根据按键速度,一般延时20ms之后再重新对引脚判断是否真正按下,来解决抖动问题。由于按键的机械弹簧结构,在按键按下与释放的过程中,存在类似接触不良,断断续续的信号,导致电平信号的抖动。{$random(2)} % 10000000 :对随机数取绝对值后再取余,限制其范围。
2023-08-30 15:52:03
160
原创 串口接收数据-控制LED灯
串口接收8字节数据,2字节头+4字节time+1字节LED+1字节尾。通过串口接收数据,对数据分析,控制8个LED灯按照设定时间闪烁。分析到一帧完整数据就可是提取并设置LED闪烁样式。
2023-08-29 19:43:47
2264
原创 ESP8266固件烧录
烧写工具下载链接:https://www.espressif.com/support/download/other-tools。选择好要烧录的固件文件,并设置烧录地址,根据固件大小进行设置。此时通过REST复位引脚复位,8266进入烧写模式。此时通过REST复位引脚复位,8266进入烧写模式。烧写通过串口烧写,波特率设置115200。也可以在下面固件资料中下载。选择好端口下载就可以了。设置参数如上图所示。
2023-08-27 16:48:22
240
原创 段错误(核心已转储)定位错误位置
由于程序运行访问 不存在、系统保护或只读的内存地址,导致程序错误异常退出,操作系统在程序退出时把当前程序运行的内存状况存储到core文件中,并报告发生段错误(核心已转储)。
2023-08-15 17:08:05
982
原创 Web服务器项目一
这一通信过程首先要客户端通过TCP协议的三次握手建立与目标Web服务器的连接,然后HTTP协议生成针对目标Web服务器的HTTP请求报文,通过TCP,IP等协议发送到目标Web服务器上,然后目标Web服务器通过HTTP协议生成响应数据,通过TCP/IP等协议发送给客户端。两种高效的事件处理模式:Reactor和Proactor,通常同步IO模型用于实现Reactor模式,异步IO模型用于实现Proactor模式,但也可以通过同步IO模拟出Proactor模式。区别在于工作线程做的事情,
2023-08-14 13:34:06
143
原创 Linux上的五种IO模型
EAGAIN:没有事件到达,返回值为-1, errno为EAGAIN。👆:异步IO,内核帮助完成数据从内核空间拷贝到用户空间。
2023-08-13 11:13:29
160
原创 阻塞和非阻塞,同步和异步
具体数据读取还是通过应用程序自己完成的。只有使用了特殊API调用才是异步。同步:需要应用程序自己操作。epoll也是同步的。
2023-08-13 10:53:55
143
原创 UDP通信实验、广播与组播、本地套接字
服务器和客户端运行会产生两个伪文件,分别为《server.sock》《client.sock》,两个文件的大小为0。有关系和没有关系的进程之间都可以进行本地套接字通信。客户端需要加入多播组,才能接收到多播的数据。组播既可以用于局域网,也可以用于广域网。服务器:创建socket设置组播地址。通过本地套接字,实现缓冲区的连接。成功,返回成功发送的数据长度。成功,返回成功接收数据长度。本地client.sock。绑定本地IP和多播端口。服务器向组播地址发送。
2023-08-11 22:08:08
513
原创 半关闭、端口复用与IO多路复用
上面的代码的问题是,设置rdset后传入传出后被修改了,下次传入不是想要的了,可以定义一个传入传出的集合tmp,一个设置的集合rdset,每次需要select时将设置集合赋值给tmp,进行操作。fd_set:为1024bit的标志位寄存器,是一个传入传出参数,将需要检测的文件描述符位置1传入,内核负责判断需要检测的文件描述符是否有IO操作,若有标志位依然为1,若没有则标志位置0,检测完成传出。如果时间>0,阻塞对应的时间。设置完成进行select,有文件描述符发生变化会有返回值,否则阻塞。
2023-08-11 17:26:20
274
原创 TCP通信——多线程并发回环服务器
问题2:可以预设客户端信息数组,在主线程和子线程中使用指针变量控制客户端连接信息,通过指针控制方便,但客户端信息数组空间需要提前申请好,放在共享空间堆中。问题1:之前说C语言种结构体无法直接赋值,只能单个成员直接赋值,但经过C语言测试,可以直接赋值。
2023-08-10 14:30:36
484
原创 多进程并发服务器
问题4:接收数据中没有结束符’\0’,在`printf %s时,会导致数据错误(数据先长后短,打印的会包含上次数据),注意结束符的位置,strlen计算到结束符之前。可以设置客户端先发送,再读取,客户端发送后,数据经过服务器回传,客户端收到数据后,再进行下一次发送,若有一次数据丢失则无法进行数据发送,有一直阻塞在接收的风险。读取数据,该读取是阻塞的,所以一开始没有数据时是一直阻塞的,回环服务器接收到数据回传给客户端,这样客户端和服务器同时进行。信号,信号触发回调函数,进程子进程资源回收,父进程阻塞在。
2023-08-09 21:59:47
554
原创 TCP的四次挥手与TCP状态转换
三次握手由客户端主动发起,客户端请求连接的时候,服务器若不同意直接拒绝,若同意说明肯定也要请求和客户端建立连接,所以同意和请求连接一起传输,进行第二次握手,然后客户端同意服务器请求进行第三次握手。第一次挥手主动方发起,如客户端发起断开连接请求,服务器同意请求但还有数据发送的时候,可以继续发送,当服务器想断开连接的时候进行第三次挥手,发送断开连接请求,然后客户端应答。四次挥手是用于客户端和服务器断开连接的时候,可以由客户端或者服务器任一方主动发起断开请求。因TCP连接时候是双向的,所以断开的时候也是双向的。
2023-08-08 21:27:57
1045
原创 滑动窗口——缓冲区大小
mss:Maximum Segment Size(一条数据的最大的数据量)窗口理解为缓冲区的大小,滑动窗口的大小会随着发送数据和接收数据而变化。win:大小,告诉对方自己的缓冲区大小,当前缓冲区大小。通信双方都有发送缓冲区和接收缓冲区。
2023-08-08 20:12:50
138
原创 TCP三次握手
发生在客户端连接服务器的时候,当调用connect();时,底层会通过TCP协议进行三次握手。ack = m+1(仅仅在SYN = 1\FIN = 1 的时候)确保数据完整,并确保数据顺序。保证双方互相建立了连接。SYN、ACK:标志位。
2023-08-03 11:07:16
176
原创 Linux下TCP网络服务器与客户端通信程序入门
实现客户端连接服务器,通过终端窗口发送信息给服务器端,服务器接收到信息后对信息数据进行回传,客户端读取回传信息并返回。绑定本地IP地址并设置端口号。知道服务器的IP地址和端口号。服务器当前IP地址要知道。
2023-08-02 22:03:04
766
原创 ARP协议请求
目前只知道目标主机IP地址,想把数据发送过去,需要查询到目标主机的MAC地址,采用ARP协议。根据上图的源主机和目标主机请求报文和应答报文数据。通过 IP地址 查找 MAC地址。
2023-08-01 22:20:28
423
原创 生产者消费者模型——条件变量与信号量
使用时,会阻塞在这,并对互斥锁解锁,当拿到条件后,立即上锁并结束阻塞。用于阻塞线程,但不能保证共享资源的安全,要保证安全还得用互斥锁。条件变量不是锁,可以控制线程阻塞与否,可以配合锁使用。就会唤醒等待,使其停止阻塞。生产者、消费者用线程。
2023-07-31 19:54:41
162
原创 线程操作——创、取、终、分、连
=注意:==设置分离后,再对相同的子线程进行join连接会出错。main.c:(.text+0x65):对‘pthread_create’未定义的引用。main函数执行的线程叫主线程(main线程),其余创建出来的叫子线程。粗略的理解为从用户区到内核区的切换,这个位置称为取消点。:线程取消后不会自动释放资源,需要进行连接终止线程(系统调用到取消点时才会终止取消的线程(可以用。),若线程已调用线程分离,则无需连接终止线程。线程是第三方的库,编译的时候需要指定库名称。回收子线程资源,解决僵尸线程问题。
2023-07-30 17:28:44
138
原创 线程初见——对速度的追求
同一个程序的所有线程共享一份全局内存区域特例:只包含一个线程的进程查看线程号:和进程类似,完成并发任务的执行会将栈空间和text段划分多个线程使用,其余共享。
2023-07-29 21:24:05
287
原创 共享内存
共享内存维护了一个结构体struct shmid_ds,这个结构体中有一个成员 shm_nattach,记录了关联进程的个数。因为shmctl标记删除共享内存,不是直接删除,而是当共享内存关联的进程数为0的时候才真正被删除。如果一个进程和共享内存之间取消关联,那么这个进程就无法继续操作这个共享内存了,也不能重新关联。键key为0:表示共享内存被标记删除。被标记删除的共享内存没有进程关联的时候才会进行删除。当共享内存key为0的时候,表示共享内存被标记删除了。创建共享内存的进程被销毁后对共享内存没有影响。
2023-07-29 14:19:55
217
原创 信号的学习笔记二
假如能够捕捉这两个信号,捕捉之后不进行任何操作,不忽略,然后进程会一直运行,无法停止,所以需要他们不能被捕捉,不能被忽略。在执行回调函数时,是阻塞函数,不会被再一次的信号打断,而是在回调函数执行完成之后才进行新信号的捕捉。存在问题:多个子进程同时结束的问题,由于无排列队列,同时只能处理1个。未决信号不支持排队,仅能存一个信号,多余信号直接忽略掉。没有就是不阻塞,添加信号到信号集中,通过判断就是阻塞。创建清空后——判断信号为——不阻塞。删除信号后——判断信号为——不阻塞。添加信号后——判断信号为——阻塞。
2023-07-29 12:31:24
524
原创 信号——进程间最古老的通信方式之一
it_interval:定时器执行周期(定时结束到下一次定时开始)it_value:定时时间。该函数为非阻塞函数。
2023-07-26 16:56:15
109
原创 Linux多进程应用——聊天功能实现
有A、B两个聊天进程,在每个进程中分别创建子进程,使其读写分开。采用多进程+有名管道实现。父进程:负责发送信息。子进程:负责接收信息。
2023-07-24 10:46:59
289
原创 进程间的通信之管道(匿名管道)
在使用fork创建进程后,文件描述符被复制,有两个相同的文件描述符同时指向管道。匿名管道只能用于具有关系的进程之间的通信(父子,兄弟,孙子进程)。若没有写端,则写时进程收到SIGPIPE信号,进程异常终止。当管道满了,若存在读端,则写时进入阻塞等待有空间再写;使用读函数读取的时候管道没有资源会进入阻塞态。当管道中没有数据,如果有写端,则阻塞等待数据;当管道中有数据,读取时返回实际读取的字节数。当管道没有满时,写时返回实际写入的字节数。非阻塞输入时,阻塞状态的情况会返回-1.如果没有写端,则返回0。
2023-07-23 17:32:45
214
原创 进程控制学习笔记
每出现孤儿进程,内核就会把其父进程设置为init(pid 为 1),而init进程就会循环的wait()它的已经退出的子进程。父进程调用wait()函数时,该父进程会被挂起(阻塞),直到它的一个子进程退出或者收到一个不能被忽略的信号时。子进程的退出需要父进程对其资源的释放,子进程只能对用户区的数据进行释放,无法完成对内核区的释放。当有子进程退出,会返回子进程的进程号,如果所有子进程都已经结束,没有子进程了,就会立即返回-1。需要父进程去释放回收子进程资源,无法使用kill -9杀死僵尸进程。
2023-07-22 22:16:43
132
原创 exec函数族
优点:不用输入可执行文件的路径,可以自动在PATH环境变量中查找;环境变量中没有的也是不能直接使用。👆:前六个函数为C库函数,后面一个是系统函数,C库函数里面封装了这个系统函数。返回值:只有错误时有返回值,返回-1,并修改errno值;第一个参数一般写执行程序的名字。参数最后以NULL结尾。
2023-07-22 19:46:08
100
原创 进程的创建
8.1版本的GDB对于多进程调试有些问题,可以使用7.11版本进行多进程的调试(挂起某个进程,只运行调试的进程)fork后父子进程共享文件,相同的文件文件描述符指向相同的文件表,引用计数增加,共享文件偏移指针。资源的复制是在需要写入时候才会进行,在此之前,只有以只读方式共享。可以通过他们的区别来判断当前是子进程还是父进程。这是一种推迟甚至是避免拷贝数据的技术。
2023-07-22 17:35:29
59
番茄钟QT源代码,完整工程
2023-12-16
番茄钟电脑软件(免安装)
2023-12-16
webserver高并发web服务器源代码+注释
2023-08-24
陶瓷剪切三轴加速度传感器
2023-02-26
日志记录管理系统,可以做日志,可以记笔记,QT源代码
2022-07-11
日志记录管理系统 软件下载 适用于Windows
2022-07-11
QT自制秒表 可打点计数 可获取当前电脑时间
2022-06-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人