- 博客(104)
- 问答 (2)
- 收藏
- 关注
原创 安装完芯片包.fml后jflash能识别下载但是keil找不到相关芯片
keil的jflash和你自己装的jflash是两个独立的,参考上面连接。不过可以不用直接安装,只把jflash里的JLinkDevices.xml(选项列表文件)和你需要的驱动芯片文件夹(里面是.flm文件)复制粘贴到keil的jlink对应文件夹去。比如直接把fmsh文件夹移过keil的jflash/Devices去。
2025-03-03 19:18:26
214
原创 VSCODE添加c/c++头文件路径
这会打开一个图形化界面,并自动生成或修改。,输入头文件所在的目录路径(支持通配符。(Windows/Linux)或。(macOS),打开命令面板。(Linux/macOS)或。(例如 OpenSSL 库)
2025-02-25 14:10:53
728
原创 linux c 读写锁pthread_rwlock
当持续不断的有新的线程获取读锁又释放,就可能会出现一个现象,因为读读允许,所有可能会很长时间一直有不同的线程正在读,这样写入线程一直无法获取到写锁,这就是写饥饿,可以通过初始化设置将该读写锁设置为:有线程在写阻塞时新的读锁获取也阻塞。这样就不会有新的线程获取读锁,等当前存在的读锁都释放后写线程就得以运行。一个线程获取了读锁,另一个线程再获取写锁时将阻塞,反之亦然。在其他线程没获取写锁时,任意数量的线程都可以获取读锁。写写互斥,读写互斥,读读允许,同线程读写死锁。//定义且初始化互斥量。
2025-02-14 14:15:53
446
原创 Linux c pthread互斥量
pthread_mutex_timedlock(&mutex) //扩展:阻塞一段时间无法获取则不再阻塞,返回超时。mutex做全局变量,不需要函数初始化,初始化等于PTHREAD_MUTEX_INITIALIZER即可。pthread_mutex_trylock() 尝试获取互斥量,无法获取不阻塞立刻返回。pthread_mutex_lock(&mutex) 获取互斥量,未获得则一直阻塞。thread_mutex_unlock(&mutex) 释放互斥量。
2025-02-13 19:59:17
183
原创 通过内网穿透ssh实现远程对家里的linux进行终端操作和编程
/.ssh 目录为ssh服务的秘钥目录,里面的authorized_keys文件即是允许登录的ssh公钥,通过cat 公钥 >> authorized_keys在当前秘钥文件authorized_keys后添加新的公钥。官网登录后在左侧"状态"栏可以看到我们的已经连接上隧道(127...是本机地址,如果是本机的windows安装我估计是本机地址处填写虚拟机的网络地址和ssh端口22,可能虚拟网卡会要修改成桥接模式)ssh连接就输入公网地址端口,虚拟机登录时的用户名和密码即可。我是ubuntu虚拟机,在。
2025-02-13 10:15:07
389
原创 linux使用有名管道mkfifo
include "sys/stat.h"//文件属性和mkfifo管道相关。mode:权限,同open O_CREAT时的第三个参数。根据代码,发送端发送end,回车后结束。建立一个可以以文件接口访问的有名管道。path:管道路径,可当一个文件看待。可以看到该管道文件已创建,类型为p。编译后打开两个终端运行这两个程序。return: -1为失败。接收的代码fifo_r.c。管道已经被unlink。发:fifo_w.c。
2024-12-08 16:02:08
365
原创 linux 进程间通信:匿名管道pipe()
输入一个2个元素的int数组地址,生成单向匿名管道,调用后该数组[0]为读取描述符,[1]为写入描述符,默认打开,使用前需要关闭另一通道,然后直接调用系统调用函数write open来进行读写。运行,分别输入10字节以上和10字节以下的数据看看。进程间内存独立且相互不可见,进程间通信需要特殊方法。匿名管道pipe()
2024-12-07 16:40:38
231
原创 linux通过fork()和execve()调用其他程序在子线程中运行
可以通过echo $PATH获取当前终端的环境,字符串格式为格式为"name=value" 和__argv类似,数组结尾必须是NULL。可以看到环境和参数都被输入到子程序中,由父程序调用,且父程序也执行了自己的程序。__path :待执行文件路径,可以通过pwd查询当前路径,再加上文件名。execve的作用为:让当前进程内容销毁大部分,重新执行一个程序。(猜想用于结束,类似于 while(argv!*__argv[] :一个由字符串指针组成的数组,编译子程序,再编译父程序,并且运行父程序。
2024-12-04 18:53:40
362
原创 linux C fork()和系统调用文件
fork()的意义是在当前进程中创建一个子进程,之后的代码在当前进程和子进程中都执行,也就是相当于执行两次,两个代码的资源相同,唯一不同的是在fork后返回的子进程号pid,看执行结果可以发现这个pid变量在子进程中为0,而在父进程中为真实的子进程号。注意到这里一个打开的文件执行了两次关闭,父进程关闭后子进程仍然能写,事实上是fd对应的结构体中有一个调用位,表明此文件有几个地方打开,父子进程都打开了,这个值为2,等父子进程都关闭该文件,该值会为0,此时才真正关闭该文件。
2024-12-01 15:25:07
334
原创 linux 文件权限,修改权限,系统调用
每一类用户的权限有3个,用二进制的每一个位表示,3位2进制也就是8进制的每一位代表一个权限。后面3*3位分别表示所有者用户,同组用户,其他用户的读(r),写(w),执行(x)权限。100 r-- 对应二进制为4。110 rw- 对应二进制为6。111 rwx 对应二进制为7。ls -l 查看当前目录文件的权限。一共有三个权限类型所以三个数字。比如777就是权限全开的意思。
2024-11-29 20:06:29
416
原创 vs编译编辑参数修改无效,按回车只会输入lf,无法更改,每次改成crlf回车就变成混合
其实是你github clone下来的的代码以前可能已经有.editorconfig强制定义过编码了,修改/删除该文件即可。
2024-11-22 08:59:24
189
原创 重新安装VMware tools为灰色,linux无法安装VMware tools
udo apt-get install open-vm-tools-desktop 即可。其实是新版vm不再自带vm tools了,自行安装即可。
2024-11-09 15:10:44
403
1
原创 VS ssh连接linux无法运行的问题 GDB 的解决方法
Unable to start debugging. Program path ... is missing or invalid. GDB failed with message:/home/zsy/projects/是一个目录。把这个将解决方案和项目放在同一目录中勾选。
2024-11-09 14:33:04
232
原创 主机可以ping通linux虚拟机但linux虚拟机无法ping通主机的解决办法
出现这个问题一般是由于物理主机的防火墙挡住了ping包,可以试试看把主机的防火墙关闭看看。如果可以ping通的话那么试试看添加规则将虚拟机ip添加进去。高级设置,入站规则,新建规则。
2024-10-06 00:36:11
570
原创 visual studio使用ssh连接linux虚拟机运行程序
回到vs 工具->开发->选项->跨平台->添加。打开端口22(取消端口22的注释)可以看到该代码已经在linux下执行。继续连接,成功后关闭,就是这样了。设置网络为桥接网卡后打开虚拟机。使用vs提升的那句话安装工具。项目对应的linux的目录为。1.vs安装linux组件。新建后会有一个使用指南。接着进去打开ssh端口。再下载linux头文件。再restart一次。
2024-10-05 16:49:05
694
原创 qt事件过滤器
2.事件过滤器是在事件响应前面加了一道过滤网,可以在这道过滤网中预处理,处理完后可以继续放过去继续处理,也可以不再处理,与返回值相关。4.事件过滤器的QEvent *event是输入的事件的基类,可以通过dynamic_cast转换以获得更多可执行方法。,因为我们打印按键后返回的是true,代表事件已处理完成,不需要调用组件默认的事件处理。,事件是QObject的枚举,更倾向于组件通用,信号槽则更有针对性,每个组件有不同的信号。识别事件发生是否是输入栏,是否是按键按下,如果是按键按下则打印到调试框。
2024-09-08 20:57:38
654
原创 qt多线程的两种方法run和movetothread
你可以直接调用run方法,仍会执行run函数内容,但是只会在调用run的线程里执行run的内容,不会创建新线程执行run内容,只能通过调用start方法才能真正在新线程里执行run函数的内容。执行,点击两下计算,会发现一开始只打印了一次,因为此时算法线程在执行第一个信号槽函数的QThread::sleep,所以信号在事件里等待,然后过2s后第二个信号执行。在主线程中创建这个类的对象并start,连接算法对象的接收发送信号槽,最后将算法对象移动到创建的线程对象。对象间操作都要通过信号槽或者元对象系统访问。
2024-09-08 01:09:06
510
原创 QT多线程引起的问题QBackingStore::endPaint() called with active painter; did you forget to destroy it or call
不要在主线程以外的任何子线程对GUI界面相关的小组件等进行建立/调用/操作等,通过信号槽在主线程的槽函数进行操作。
2024-09-07 19:42:01
405
原创 C++ explicit
代码1能正常执行的原因是因为c2 c(1)的过程中将1通过调用c1的构造函数隐式转换成了c1对象,加explicit后编译器不再允许隐式转换,需要通过显式转换来通过编译。加explicit前。加explicit后。
2024-09-02 15:04:14
267
原创 关于c++ 右值引用和移动语义的一点浅薄理解
3.引入右值构造函数可能需要对析构进行一定处理(比如代码中,如果右值函数不对源对象的name对象操作,析构不对右值构造的情况做释放,那么析构时仍然会释放掉name对应的内存,导致错误),为了效率应该使用右值复制函数,因为在此函数中我们只是转移了name这个指针的所有权。而左值构造函数是将其name内存中的内容复制过来。右值引用用于解决移动语义,移动语义用于解决不同情况下重载构造函数的问题。时,使用左值构造函数,const&保证了不会改变任何源对象的值。时,使用右值复制构造函数,提高效率。
2024-08-30 15:46:28
215
原创 C++ virtual虚函数 继承链override final关键字
编译器通过,可以执行,但是此时编译器认定为重载,所以调用的结果当然是只调用了基类的show的函数。override关键字用于为派生类覆盖基类虚函数时的检测是否成功添加编辑器检查。当在派生类函数加了override检查以后。在不能覆盖的情况下就会报错提醒。
2024-08-27 15:26:30
397
原创 linux qt编写串口软件
界面的简单设置,用到了1.输入显示栏2.数据发送栏3.选择栏4.16进制显示栏和若干pushbottom label,布局就是横竖横竖这样布局下去。
2024-08-25 21:56:23
1261
原创 虚拟机virtualbox linux ubuntu使用usb串口
brltty是一个没啥用但是会抢占ch431的软件,所以卸载它。查看tty组的最近日志,如果连接成功会显示连接的时间和串口号。2.连接上串口,点击连接对应的usb串口。1.卸载brltty。
2024-08-25 13:25:26
413
原创 linux Qt QkeyEvent及驱动键盘按键捕获
查看输入的QKeyEvent类,发现有一个方法key返回哪一个按键按下,返回的按键为枚举Qt::Key的值。也就是说接受按键事件在keyPressEvent和keyReleaseEvent这两个函数,继续查看。查看驱动可以得知正点原子开发板上的按键驱动为键盘的114键值,即。QT中有专门的类处理键盘事件的类QKeyEvent。3.运行,按下键盘上的0,显示按下,松开显示松开。./执行,尝试按键,查看文字变化,成功。2.重构按键按下松开的函数。跳转到安装的交叉编译器目录。查看它的说明中的描述。
2024-08-22 00:36:11
578
1
原创 正点原子linux开发板 qt程序交叉编译执行
1.开发板光盘 A-基础资料->5、开发工具->1、交叉编译器->fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh 拷贝到 Ubuntu 虚拟机。/etc/rc.local是启动界面的程序,可以换成自己的程序后再重启就会从自己的程序开始重启了。可以直接主目录下面界面进去,也可以使用命令行,u盘挂载在media下。这里采用u盘拷贝,插入u盘连接到虚拟机,有问题可参考。
2024-08-19 22:22:49
551
原创 QT 建立tcp服务端 TcpServer TcpSocket,TCP客户端TcpSocket
基于正点原子教程,个人改编一点点(先写着,还没学客户端来验证)QTcpServer 服务端,下控制多个socketQTcpSocket 可以理解为一个TCP连接。
2024-08-04 16:41:45
1115
原创 Q_PROPERTY 提供新的变量访问方法
READ的返回类型为QVariant类型,可以帮助里看一下支持的类型(复制构造函数自动调用转换类型,所以可以直接使用QVariant复制构造函数有的任何类型)可通过setProperty和property函数 调用变量读写函数读写操作变量,至于有什么用,我也不懂贴个AI回答吧。语法可以参考QWidget的任意一个,举个简单的例子比如。2.要转化的字符串(可以随便取,一般是变量名)查看帮助文档,发现参数分别为。6.WRITE时调用的函数。4.READ时调用的函数。1.READ返回类型。5.关键字WRITE。
2024-08-04 15:31:02
215
空空如也
一个关于lwip硬件连接层low_level的问题
2022-01-26
一个关于c语言三目运算符的问题
2022-01-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人