- 博客(23)
- 收藏
- 关注
原创 二十三、QT串口调试助手
将comboBoxSerialNum提升为MyComboBoxwidget.h:将原先构造函数中的串口初始化剪切到该槽函数中不插串口显示如图插上串口后会刷新串口号。
2024-12-10 16:35:01
2353
1
原创 二十二、QT记事本
支持文本创建,打开,保存,关闭的功能UI样式美化添加打开快捷键,添加保存快捷底部显示行列号及文本字符编码Ctrl加鼠标滚轮支持字体放大缩小。
2024-12-01 12:38:42
1252
原创 二十一、QT & C++
Qt是一个跨平台的应用程序和用户界面框架,用于开发图形用户界面(GUI应用程序以及命令行工具。它最初由挪威的 Trolltech(奇趣科技)公司开发,现在由Qt Company维护,2020年12月8日发布QT6。Qt使用C++语言编写,支持多种编程语言通过绑定进行使用。
2024-11-30 14:13:03
1568
2
原创 二十、嵌入式数据库
数据:能够输入计算机并能被计算机程序识别和处理的信息集合数据库:数据库是在数据库管理系统和控制之下,存放在存储介质上的数据集合1.大型数据库:Oracle公司是最早开发关系数据库的厂商之一,其技术支持最广泛的操作系统平台。
2024-11-19 18:47:22
2385
1
原创 十九、Linux网络编程(三)
先构造一张有关描述符的表,然后调用一个函数,当这些文件描述符中的一个或多个已准备好进行IO时函数才返回。当一个应用程序使用了非阻塞模式的套接字,它需要使用一个循环来不停的测试是否一个文件描述符有数据可读(polling)一但发送缓冲区内有足够多的空间,内核将唤醒进程,将数据从用户缓冲区中拷贝到相应的发送数据缓冲区。操作不能够马上完成,你想让我的进程进行休眠等待的时候,不要这么做,请马上返回一个错误给我。if(FD_ISSET(fd,&rset)) //有1。fd_set *writefds, //写集合。
2024-11-17 09:24:48
1254
1
原创 十八、Linux网络编程(二)
1.TCP多线程并发服务器2.TCP多进程并发服务器client_pro.c不变额外:TCP的API补充int flags参数:sockfd:socket函数返回的fdbuf:发送缓冲区首地址len:发送的字节flags:发送方式(通常为0),作用和write一样MSG_DONTWAIT:非阻塞MSG_OOB:用于TCP类型的带外数据(返回值:成功:实际发送的字节数失败:-1,并设置errnovoid *buf,int flags。
2024-11-16 12:36:34
901
原创 十七、Linux网络编程(一)
2.已经建立好连接的客户端链表(已经完成三次握手分配好了的newfd)TCP:(Transfer Control protocol,传输控制协议)提供面向连接的,一对一的可靠传输的协议。UDP:(user Datagram Protocol,用户数据报协议):提供不可靠,无连接的传输协议。提供了一个面向连接,可靠的数据传输服务,数据无差错,无重复的发送顺序接收。网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。把ipv4和ipv6的网络字节序变成本地的字符串形式的。
2024-11-14 11:01:16
1856
原创 十六、Linux线程(三)
/等待链表中有了节点之后再继续向下运行。value:最多有几个线程操作共享数据。//我们想让代码在这个位置阻塞。能够阻塞线程但不是什么时候都能阻塞线程。调用一次相当于对sem。当条件满足,通知阻塞的线程开始工作。使用条件变量实现生产者,消费者模型。,但是条件变量能够阻塞线程。加锁失败,不阻塞,直接返回。链表不为空的处理代码。条件不满足,阻塞线程。
2024-11-11 18:45:59
1237
原创 十五、Linux线程(二)
更广泛的意义下原子操作是指一系列必须整体完成的操作步骤,如果任何一步操作没有完成,那么所有完成的步骤都必须回滚,这样就可以保证要么所有操作步骤都未完成,要么所有操作步骤都被完成。解锁:pthread_mutex_unlock(&mutex);所谓原子操作,也就是一个独立而不可分割的操作,就像原子被认为是不可分割颗粒一样。被锁上了:当前线程阻塞,锁被打开之后,线程解除阻塞。CPU处理一个指令,进程/线程在处理完这个指令之前是不会失去CPU的。阻塞在锁上的线程会被唤醒。2.线程A写完之后,线程C加锁, 线程。
2024-11-10 17:04:35
1065
原创 十四、Linux线程(一)
void *arg);const pthread_attr_t *attr, //线程属性,NULL。void *(*start_routine)(void *), //线程处理函数。主线程while循环,子线程在循环i = 2时,调用pthread_exit函数,退出单个子线程。函数原型: int pthread_cancel(pthread_t pthread);多进程:始终共享的资源:代码、文件描述符、内存映射区---mmap。在要杀死的子线程对应的处理的函数的内部,必须做过一次系统调用。
2024-11-09 11:16:19
1080
原创 十三、进程间的通信(五)
semaphoresemget:创建一个新的信号量或获取一个已经存在的信号量的键值函数原型: int semget(key_t key, int nsems, int semflg);所需头文件:函数参数:key:和信号灯集关联的key值nsems: 信号灯集中包含的信号灯数目semflg:信号灯集的访问权限函数返回值:成功:信号灯集ID 出错:‐1。
2024-11-07 17:38:03
691
原创 十二、进程间的通信(四)
函数有二个参数,第一个参数是一个整形变量(信号值),第二个参数是一个函数指针,是我们自己写的处理函数;信号通信,其实就是内核向用户空间进程发送信号,只有内核才能发信号,用户空间进程不能发送信号。信号的接收(接收信号进程) : pause()、 sleep、 while(1)自己处理信号的方法告诉内核,这样你的进程收到了这个信号就会采用你自己的的处理方式。接收信号的进程,要有什么条件:要想使接收的进程能收到信号,这个进程不能结束。信号的发送(发送信号进程):kill、raise、alarm。
2024-11-06 22:06:14
968
原创 十一、进程间的通信(三)
共享内存(Shared Memory)就是允许多个进程访问同一个内存空间,是在多个进程之间共享和传递数据最高效的方式。操作系统将不同进程之间共享内存安排为同一段物理内存,进程可以将共享内存连接到它们自己的地址空间中,如果某个进程修改了共享内存中的数据,其它的进程读到的数据也将会改变。
2024-11-05 16:21:50
1132
原创 十、进程间的通信(二)
消息队列,是消息的链表,存放在内核中,一个消息队列由一个标识符(队列ID)来标识消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级消息队列独立于发送和接收进程,进程终止时,消息队列及其内容仍存在消息队列可以实现消息的随机查询,消息不一定要先进先出的次序读取,也可以按消息的类型读取。1.msgget创建或打开消息队列/*参数:key:和消息队列关联的key值msgflg:是一个权限标志,表示消息队列的访问权限,它与文件的访问权限一样(例如:0755)。msgflg可以与。
2024-11-04 20:14:25
1184
原创 九、进程间的通信(一)
子进程实现grep "bash"首先关闭写管道fd[1],数据重定向将标准输入写到读端fd[0]父进程实现ps aux首先关闭读管道fd[0],数据重定向将标准输出写到写端fd[1]两部分:读端,写端,对应两个文件描述符(数据写端流入,读端流出)mkfifo.c:创建管道后,open打开管道,再将文件fd中的内容打印。若创建成功,打印读端(fd[0])和写端(fd[1])的文件描述符。创建管道fd,定义一个返回值,若返回值为-1,则创建失败。也可将fd[0]换3,将fd[1]换成4,即文件描述符。
2024-11-03 19:14:12
1160
原创 八、Linux进程(二)
一个比较特殊的状态,当进程退出父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵尸进程。一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。不管进程如何终止,最后都会执行内核中的同一段代码,这段代码和相应进程关闭所有打开描述符,释放它所使用的存储器等。pid == 0 回收当前进程组的任一子进程。子进程退出后,父进程还在工作,没时间回收子进程,此时子进程为僵尸进程。
2024-11-02 11:02:59
888
原创 七、Linux进程(一)
程序:二进制文件,占用的磁盘空间进程: 启动的程序,所有的数据都在内存中,需要占用更多的系统资源(cpu,物理内存)并发不是真正意义上的同时进行,只是CPU把一个时间段划分成几个时间片段(时间区间),然后在这几个时间区间之间来回切换,由于CPU处理的速度非常快,只要时间间隔处理得当,即可让用户感觉是多个应用程序同时在进行。如:打游戏和听音乐两件事情在都是在同一台电脑上完成了。那么,就可以说听音乐和打游戏是并发的。并行和并发的区别:并发,指的是多个事情,在同一时间段内同时发生了。
2024-11-01 09:31:18
900
原创 六、Linux文件(五)
etc/ld.so.conf是非常重要的一个目录,里面存放的是链接器和加载器搜索共享库时要检查的目录,默认是从/usr/lib /lib中读取的,所以想要顺利运行,可以把我们库的目录加入到这个文件中并执行/sbin/ldconfig。gcc -shared -fpic -o libfile.so file.o//用该命令生成动态函数库libfile.so。gcc -o main main.c -L. -lfile//编译main.c就会把静态函数库整合进main。而在编译后,却不能执行,这是因为。
2024-10-31 10:03:27
945
原创 五、Linux文件(四)
linux标准文件描述符:文件IO:是直接调用内核提供的系统调用函数头文件是标准IO:是间接调用系统调用函数,头文件是标准IO中的相关函数,不仅可以读写普通文件,也可以向标准的输入或标准的输出中读或写。若使用write函数并标准输出(1):进入while(1)死循环:12.缓存若使用库函数:1.我们的程序中的缓存,就是你想从内核读写的缓存(数组),这个叫用户空间的缓存2.每打开一个文件,内核在内核空间中也会开辟一块缓存,这个叫内核空间的缓存文件IO中的。
2024-10-30 13:03:10
1251
原创 四、Linux文件(三)
at+:打开文本文件,可读写,写的数据加在文本末尾 ab+:打开二进制文件,可读写,写的数据加在文件末尾。该函数不是重定位文件指针,而是重定位文件内部的指针,让指向文件内部数据的指针移到文件中我们感兴趣的数据上。a: 附加方式打开只写,不存在建立该文件,存在写入的数据加到文件尾,EOF符保留。a+:附加方式打开可读写,不存在建立该文件,存在写入的数据加到文件尾,EOF符不保留。w+: 可读写,文件存在则文件长度清0,文件不存在则建立该文件。
2024-10-29 01:00:00
747
原创 三、Linux文件(二)
光标的偏移量fd :文件描述符Offset:偏移量Whence :SEEK_SET:参数offset即为新的读写位置SEEK_CUR:以目前的读写位置往后增加offset个偏移量SEEK_END:将读写位置指向文件尾后再增加offset个位移量当whence值为SEEK_CUR或SEEK_END时,参数offset允许负值的出现。返回值: 文件读写距离文件开头的字节大小,出错返回-1SEEK_CUR:从第一个字母h开始偏移4个字母到o。
2024-10-28 09:24:06
1085
原创 二、Linux文件(一)
学了Linux指令,不学C编程,就是在耍流氓只有C语言编程,才能体现Linux的魅力,万物皆文件Linux自带的工具:man手册:man 1是普通的shell命令,比如lsman 2是系统调用函数,比如openwrite说明高频使用的Linux1.Open函数在Linux系统库的定义:/*比较常用*///包含的头文件:这里提供类型pid_t和size_t的定义成功,返回句柄,我们后面对于文件的读写,关闭等都通过句柄来操作。失败,返回。
2024-10-27 14:42:59
1049
原创 一、linux目录结构以及文件操作
比如说,访问某个目录,或者访问某个文件或者查找某个文件 等。但是跑在嵌入式设备中的Linux操作系统往往不带图形界面,直接用命令行来操作。进入文本输入模式,即可编辑代码,注意只能键盘操作, 鼠标不行。把刚刚复制的内容进行粘贴,粘贴的位置由光标所在位置决定。vi是一种方便的代码编辑器,Linux系统一般是自带的。Ubuntu属于Linux的发行版,带有图形界面。的升级版,基础功能两者一致,不过在嵌入式开发板中。,就是复制当前行和它下面的两行(总共三行),复制某一行,复制的位置由光标所在位置决定。
2024-10-26 18:30:55
525
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人