
工控软件
文章平均质量分 90
宁静致远2021
天道酬勤,持之以恒。
发上等愿,结中等缘,享下等福;
择高处立,寻平处住,向宽处行。
展开
-
深入理解Qt状态机的应用
有限状态机(finite-state machine)又称有限状态自动机(finite-state automaton),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。这个概念在计算机科学、数学、语言学、工程以及其他研究领域都有广泛的应用。有限状态机非常适合用于描述那些通过一系列的输入来转移状态的系统。原创 2025-04-17 12:02:12 · 892 阅读 · 0 评论 -
Qt触摸屏隐藏鼠标指针
1.如果只希望在某个 widget 中不显示鼠标指针,那么在该 widget 的构造函数中调用。还可以用setCursor函数来设置鼠标指针的不同样式。3.可以在任一控件或者页面下显示或者隐藏鼠标指针。QT鼠标图标显示与隐藏。原创 2025-04-12 20:50:09 · 460 阅读 · 0 评论 -
C++单例模式--懒汉与饿汉以及线程安全
无论全局静态变量还是局部静态变量,都是执行动态初始化,也就是都得在代码真正执行时,原创 2025-04-06 22:03:51 · 711 阅读 · 0 评论 -
openssl交叉编译
no-async: 交叉编译工具链没有提供GNU C的ucontext库。no-asm: 在交叉编译过程中不使用汇编代码代码加速编译过程;–cross-compile-prefix=: 交叉编译工具。shared: 生成动态连接库。–prefix=: 安装路径。执行下面的命令配置工程。原创 2025-04-06 10:03:35 · 521 阅读 · 0 评论 -
qt 操作多个sqlite文件
以下是一个简单的示例,展示如何在Qt中操作多个SQLite数据库文件。在Qt中使用多线程操作多个SQLite数据库文件时,需要注意SQLite的线程安全性以及Qt的多线程机制。SQLite默认支持多线程操作,但需要确保每个线程使用独立的数据库连接,以避免竞争条件。如果文件不存在,SQLite会自动创建它。使用QSqlDatabase::addDatabase创建独立的数据库连接,并通过moveToThread将工作者对象移动到独立的线程中。程序会创建多个线程,每个线程操作一个独立的SQLite数据库文件。原创 2025-03-08 20:21:15 · 1371 阅读 · 0 评论 -
QT-自定义参数设计框架软件
常用本地数据参数通常使用的是xml等文本的格式,进行本地的数据参数的存储。这种参数的保存方式有个致命的一点,就是可以存在参数的丢失。特别是在软件异常退出的情况下发生。针对此等情况,我们现在使用的是sqllite的本地存储方式进行设计,并且尽量将参数的格式通用化。原创 2025-03-04 21:17:31 · 849 阅读 · 0 评论 -
Qt互斥锁(QMutex)的使用、QMutexLocker的使用
QMutexLocker提供的简化互斥锁锁定和解锁的机制在很多时候时蛮方便的,在使用互斥锁的地方使用QMutexLocker会减去许多安全隐患;不过在多线程循环输出ABC的时候好像就不适合该方法。所以使用类似的类还得按情况而定。原创 2025-02-27 22:12:20 · 2091 阅读 · 0 评论 -
Qt延时处理的四种方法
这种方法不会阻塞当前线程,尤其适合Qt的单线程带UI程序,或者UI线程,因为线程阻塞时,很明显的现象就是UI卡死。它可以使得程序在while等待期间,去处理一下本线程的事件循环,处理事件循环最多100ms必须返回本语句,如果提前处理完毕,则立即返回这条语句。1、 多线程程序使用QThread::sleep()或者QThread::msleep()或QThread::usleep()或QThread::wait()进行延时处理。4、 创建子事件循环,在子事件循环中,父事件循环仍然是可以执行的。原创 2025-02-26 20:35:28 · 876 阅读 · 0 评论 -
VS Code User和System版区别【推荐使用System版本】and VSCode+Keil协同开发之Keil Assistant
把软件也分用户和系统管理员,对于普通用户而言,为了避免不必要的麻烦,建议使用System版,仅供参考。对于User版安装程序以及VScode程序默认均为英文,貌似不能读取系统语言环境,System版直接是中文安装程序,以及中文显示面板。User版本无法在系统分区(盘) 创建默认文件夹Microsoft VS Code,可见权限不足。Visual Studio Code官网却提供了User和System两个版本。对于System版无此问题,可next step到底,和其他不分的软件一样了。原创 2025-02-16 19:48:14 · 1675 阅读 · 0 评论 -
win10上设置开机自动登录
Win + R,然后在弹出的输入框中输入regedit,回车运行,打开注册表。原创 2025-02-04 14:26:28 · 2096 阅读 · 0 评论 -
TortoiseGit间接处理linux目录下的仓库,用到window映射linux目录方案
这次尝试了3种映射linux目录到window的方案,都可以完成映射,基本的增删改查文件都没问题。但是只有WinFsp这个工具完美运行TortoiseGit,搞定收工。原创 2025-02-02 22:17:47 · 581 阅读 · 0 评论 -
无需命令行,用 VSCode 轻松提交 Git 代码
Git 作为版本控制工具,通过在开发过程中记录代码的变化,简化了开发者之间的代码协作。而对于许多开发者而言,命令行提交 Git 代码却是一项让人感到困难的任务。然而,现在你可以轻松地通过 VSCode 提交 Git 代码,让你的代码管理变得更加轻松和高效。在本文中,我们将介绍如何使用 VSCode 来实现简单的 Git 提交, 帮助你更加流畅地完成软件开发。git stash 命令用于临时保存当前工作目录的修改,并将工作目录恢复到上一次提交的状态。原创 2025-02-01 17:27:15 · 3003 阅读 · 0 评论 -
Ubuntu下的Doxygen+VScode实现C/C++接口文档自动生成
Doxygen 是一个由 C++ 编写的、开源的、跨平台的文档生成系统。最初主要用于生成 C++ 库的 API 文档,但目前又添加了对 C、C#、Java、Python、Fortran、PHP 等语言的支持。其从源代码中提取注释,并生成多种输出格式,如HTML、PDF、LaTeX、RTF等,以帮助开发者创建易于阅读和理解的代码文档。Doxygen 简化了另行编写文档带来的重复性劳动,将代码和文档的工作合二为一。经过 10 年的迭代,Doxygen 成为了 C/C++ 项目首选的文档生成工具。原创 2025-01-31 18:14:31 · 998 阅读 · 0 评论 -
使用Doxygen实现代码自文档化
Doxygen是一个程序的文档产生工具,可以将程序中的注释转换成说明文档,后者API参考手册要遵守一定的注释规范,才能被Doxygen识别和转化在每个代码项中都可以有两类描述:brief描述 和 detailed描述;两种任选其一若需要通过Doxygen生成漂亮的文档,一般有如下几个地方需要使用Doxygen支持的风格进行注释头文件(.h 和 .hpp):主要用于声明版权,描述本文件实现的功能,以及文件版本信息等。原创 2025-01-31 11:34:12 · 1032 阅读 · 0 评论 -
Qt u盘自动升级软件
【代码】Qt u盘自动升级软件。原创 2025-01-30 08:55:33 · 765 阅读 · 0 评论 -
linux下实现U盘和sd卡的自动挂载
2、在/etc下的mdev.conf文件中加入(如果没有这个文件,则新建一个)3、在/etc下建立hotplug文件夹,并在该文件夹下建立两个文件。1、在/etc/init.d/rcS中加入以下语句。原创 2025-01-11 22:39:16 · 965 阅读 · 0 评论 -
千兆宽带和全屋WiFi覆盖
路由器能覆盖的面积,根据房子的格局不同而不同。市面上的路由器信号都差不多(那些看上去很牛逼,很多天线的路由器,信号也好不到哪里去!),一个路由器想要覆盖整个房子,很难!于是乎,我有了做全屋wifi的想法。原创 2025-01-06 14:43:28 · 1845 阅读 · 0 评论 -
C++深拷贝和浅拷贝的区别
在 C++ 中,浅拷贝和深拷贝是处理对象复制时非常关键的概念,尤其是当对象内部有指针成员指向动态分配的内存时。对于指针成员,浅拷贝只复制指针的值(即内存地址),而不复制指针所指向的数据。这意味着原对象和拷贝对象的指针成员将指向同一块内存地址。选择浅拷贝还是深拷贝取决于具体情况,但在涉及到动态内存管理的场景下,深拷贝通常是必要的,以确保数据的独立性和程序的稳定性。这样,原对象和拷贝对象的指针成员就分别指向不同的内存地址,互不干扰。当一个对象被浅拷贝时,所有的成员变量都会直接复制其值,包括指针类型的成员变量。原创 2024-12-27 17:55:45 · 775 阅读 · 0 评论 -
细谈 C++ 返回传值的三种方式:按值返回、按常量引用返回以及按引用返回
C++ 的代码很难看懂,也许就在这些方面,一方面入参的四种方式,一方面出值的三种方式。相互组合,就会让人觉得晦涩难懂。其实好好深入到里面弄清楚其里面的含义,也就比较好理解了。这篇和上一篇写传参四种方式的博客写的非常认真,也希望能够对 C++ 初学者能有一些帮助。原创 2024-12-26 19:42:49 · 1139 阅读 · 0 评论 -
rk3588(七):GPIO简介及使用
原文链接:https://blog.csdn.net/qq_32636415/article/details/134918848在 RK3588 中,有只支持 1.8V,和支持 1.8V/3.3V 两种电压可配置,共两种类型的 GPIO。Core-3588J 有 5 组 GPIO bank:GPIO0~GPIO4,每组又以 A0~A7, B0~B7, C0~C7, D0~D7 作为编号区分,常用以下公式计算引脚:GPIO pin脚计算公式:pin = bank * 32 + numberGPIO 小组编号计原创 2024-12-02 14:19:11 · 2219 阅读 · 0 评论 -
Ubuntu20.04下安装VSCode(配置C/C++开发环境)和设备树插件用于嵌入式开发
vscode-icons , VSCode 图标插件,主要是资源管理器下各个文件夹的图标。用这个命令安装deb文件:sudo dpkg -i <package-name.deb>进入VSCode官网Visual Studio Code,下载deb版本。在左侧扩展商店中查找 ”chinese“选第一个安装,安装好后重启软件。在左侧扩展商店中查找 ”DeviceTree“安装,,设备树语法插件。在左侧扩展商店中查找 ”C/C++“选第一个安装。在左侧扩展商店中查找 ”Json“选第一个安装。原创 2024-11-28 17:52:12 · 881 阅读 · 0 评论 -
【迅为电子】RK3568驱动指南|第十七篇 串口-第199章 串口子系统框架
在串口通信协议和串口通信接口类型的基础上,串口子系统框架为串口设备的驱动和管理提供了完整的架构。rx”,“tx”打开tx dma、“rx”打开rx dma、“!pinctrl-names 和 pinctrl-0:用于串口设备的管脚控制,以配置和管理串口设备的引脚设置。串口子系统框架的层级设计将串口设备的功能分解为不同的层次,实现了功能的模块化和抽象化,方便开发者进行串口设备的驱动开发和维护。reg:指定串口设备的地址和大小,0xfe6d0000 是串口设备的基地址,0x100 表示地址空间的大小。原创 2024-11-27 21:15:48 · 808 阅读 · 0 评论 -
瑞芯微RK3568驱动配置之十串口
瑞芯微RK3568驱动配置之十串口Chaptet1 瑞芯微RK3568驱动配置之十串口Chapter2 创龙瑞芯微RK3568设备树1(修改设备树GPIO和串口)前言基础题外话内容1.GPIO2.串口不同总结后续Chapter3 QT串口大量数据动态实时显示(三)========“customplot绘图步骤”前言第一部分: 串口接收大量数据动态显示的难点串口大量数据QT接收时问题的原因:选择customplot绘图的原因:Chapter4 创龙瑞芯微RK3568参数修改(调试口波特率和rootfs原创 2024-11-27 20:55:03 · 1658 阅读 · 0 评论 -
解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题
设置缩放比例,调节所有字体缩放的倍数,如我设置1.5倍大小,自己根据自己的电脑分辨率定。屏幕分辨率太高了,导致整个系统字体看起来过小。安装完成后,在终端输入下面命令,弹出优化窗口。安装gnome-tweaks桌面配置工具。输入数字完成后,按下enter回车键即可。原创 2024-11-18 19:52:23 · 1172 阅读 · 0 评论 -
Qt 通用pro配置
如果指定 TEMPLATE为 lib模板,且未指定 CONFIG为静态库或者动态库,则默认生成动态库。提供一个通用的Qt pro工程配置。原创 2024-11-16 16:21:04 · 488 阅读 · 0 评论 -
VMware 17虚拟Ubuntu 22.04设置共享目录
lang=zh_cn。笔者按官方文档https://docs.vmware.com/en/VMware-Workstation-Pro/17/com.vmware.ws.using.doc/GUID-AB5C80FE-9B8A-4899-8186-3DB8201B1758.html,以及vmhgfs-fuse -h示例,使用vmhgfs-fuse .host:/ /mnt/hgfs来挂载共享目录,可是还是无法显示出来。是的我认为是我的,共享文件挂载问题,很多文章的挂载过程比较简单,甚至挂载过后依然无效。原创 2024-11-15 11:17:57 · 1572 阅读 · 0 评论 -
Qt生成随机数详细指南(更现代化的QRandomGenerator类)
Qt提供了强大的随机数生成功能,主要通过QRandomGenerator和QRandomGenerator64类来实现。这些类不仅提供了生成整数和浮点数随机数的方法,还支持生成指定范围内的随机数。虽然旧的qrand()函数仍然可以使用,但高版本已经弃用,不再推荐。原创 2024-11-11 14:09:36 · 2094 阅读 · 0 评论 -
QJson-趟过的各种坑(先坑后用法)
rapidjson是腾讯的开源json解析框架,用c++实现。由于全部代码仅用header file实现,所以很容易集成到项目中。rapidjson的性能也非常出色。原创 2024-11-09 17:29:33 · 651 阅读 · 0 评论 -
Ubuntu中以root身份运行Qt创建的项目
使用Qt开发项目时遇到了一个问题,项目要调用串口时会需要root权限,而当我们使用桌面启动Qt creator使用的是用户身份,在debug或run项目时会出现权限不够的状况。可以在终端直接找到项目的bin文件以sudo权限运行,但是太过繁琐,不能每次都这样去调试。原创 2024-11-09 16:00:33 · 854 阅读 · 0 评论 -
【Qt问题】解决 Cannot retrieve debugging output
本文介绍了在Qt开发过程中遇到的’Cannot retrieve debugging output’问题及其解决方法。该问题可能由于同时运行了两个Qt软件导致,解决方案包括关闭其中一个Qt实例或确保项目在单个Qt环境中打开。这时需要打开一个选项:工具->选项->构建和运行->default for “Run in terminal”:由disabled改为enabled。原创 2024-11-07 17:02:59 · 913 阅读 · 0 评论 -
Qt QQueue 安全的多线程队列、阻塞队列
public://唤醒等待队列中的一个线程(来自wait)T take()private:这个 BlockingQueue类使用QMutex和QWaitCondition来保证线程安全,并实现了put、take、isEmpty和size等方法。其中,put方法用于往队列中插入元素,take方法用于从队列中取出元素,isEmpty方法用于判断队列是否为空,size方法用于获取队列中元素的数量。原创 2024-11-06 16:31:18 · 1021 阅读 · 0 评论 -
QtRO(Qt Remote Objects)分布式对象远程通信
Qt Remote Objects(QRO)是Qt提供的一种用于实现远程对象通信的机制。QtRO支持两种类型的通信:RPC(远程过程调用)和LPC(本地进程通信)。RPC(远程过程调用)包括以下几种类型:基于HTTP协议的RPC:例如Dubbo、Thrift等。基于二进制协议的RPC:例如GRPC、Hetty等。基于TCP协议的RPC:例如RMI、Remoting等。LPC包括基于共享内存的通信和基于消息传递的通信。总的来说,QtRO类似于平时的socket通信、串口通信、信号槽通信。原创 2024-11-05 19:40:55 · 778 阅读 · 0 评论 -
QT5串口多线程--派生类加moveToThread
之前讲过继承QThread,在虚函数run()中实现线程里的工作。这是qt4.6之前的方法,目前官方推荐的方法,是继承QObject类,再用方法moveToThread来将QObject派生类移动到新线程中去,这样QObject派生类定义的信号和槽的事件响应行为,都会发生在新的线程中。这个方法非常简单。下面还是以串口通讯作为例子,这次不用窗口,用控制台的方式。原创 2024-11-05 15:15:43 · 975 阅读 · 0 评论 -
Qt 彻底搞懂 SUBDIRS 的作用
本文主要介绍 qmake 的SUBDIRS变量在多项目工程中的应用。当Qt项目规模比较小的时候,我们用一个工程就可以将所有源码文件组织起来,而不影响编译效率。但是随着项目规模的增加,只用一个工程组织所有的文件就不合适了,这时可以考虑将项目按照功能拆分成多个子工程,而SUBDIRS就是用来将多个子工程组织在一起的qmake变量。每个Qt工程文件中都有一个TEMPLATE变量,Qt通过该变量的值决定如何构建工程。TEMPLATE常用的类型有三种,见下表。原创 2024-11-04 12:02:17 · 964 阅读 · 0 评论 -
SDK设计心得之接口设计
嗯,感觉良好,然后有一天,有一个应用只接入第二个平台而不接入第一个平台,我们第一次懵逼了,但是当时偷懒了,没有根本解决这个问题,而是选择虽然不接入第一个平台,也去第一个平台配置这个字段~~~这就已经很傻了,还不赶紧改,第二波就来了,第一个平台忽然调整了那个配置字段,弃用了,换了新的字段来标示,同时值也变化了(他们做了兼容,可以同时支持新旧字段),但是第二个平台就瞬间跪了,只能二选一,用老的值,新版本有问题,用新的值,老版本有问题,瞬间煞笔了~~好吧,在举个实际的例子,发现所有的经验都是血泪史,要哭了啊。原创 2024-11-04 11:52:46 · 938 阅读 · 0 评论 -
Qt中的动态链接库编程(Q_DECL_IMPORT、Q_DECL_EXPORT)
生成Test项目,输出Test.exe。在IAnimal接口中,我们定义了三个纯虚函数Eat()、Run()和 Sleep(),表示吃、跑和睡眠的动作,这是抽象的,因为不同的动物有不同的吃相和睡眠姿态,而世间的动物何止千千万——无所谓,让这些具体动物的不同 表现交给IAnimal插件的编写者发挥吧——这就是接口的魅力,加上插件的思想,整个应用程序就变成开放的,可扩展的了!COM是一个很成功的例子,只要符合COM的规范,我们就能编写出很好的DLL来,然而COM是微软私生的,要想跨平台,我们还得另找它路。原创 2024-11-04 11:45:48 · 1199 阅读 · 0 评论 -
什么是C++模块化系统?C++20的模块化系统
C++20引入的模块化系统是一种新的代码组织和编译机制,它旨在替代传统的头文件机制,提供更好的代码组织、更快的编译速度和更强的封装性。通过减少冗余的头文件解析和宏定义传播,模块可以显著减少编译时间。模块提供了更好的封装,减少了不必要的依赖暴露。模块可以更清晰地表达模块间的依赖关系,提高代码的可维护性。C++20的模块化系统通过引入模块声明和导入,提供了一种替代传统头文件机制的现代化解决方案。模块化系统不仅减少了编译时间,增强了代码的封装性,还改善了代码的组织和可维护性。原创 2024-11-02 09:18:58 · 1259 阅读 · 0 评论 -
C++接口:构建模块化与可扩展的软件架构
在C++中,接口通常指的是一组纯虚函数,这些函数定义了一个类必须实现的行为。接口本身不提供任何实现,它的主要目的是定义一个契约,任何实现该接口的类都必须遵守这个契约。提供一种方式来定义类之间的协议。促进代码的模块化和解耦。支持多态,使得代码更加灵活和可扩展。原创 2024-11-02 09:09:53 · 759 阅读 · 0 评论 -
C++编程法则 静态成员函数和非静态成员函数之间的相互调用
其生命期和类对象是异步的,(而且静态语意说明即使没有类实体的存在,其静态数据成员的实体也是存的)这个时候对象的生命期还没有开始,如果你要到类中去初始化类静态数据成员,让静态数据成员的初始化依赖于类的实体,,那怎么满足前述静态语意呢?但是在有些情况下只能使用静态成员函数,比如类内绑定自身成员函数作为回调函数,这种情况在开启多线程时很常见,如果不想将回调定义为全局那只能定义为类静态了,为了避免过度破坏封装类中应当尽量不要让类静态成原函数调用类成员。能在类中初始化的成员只有一种,那就是静态常量成员。原创 2024-10-29 08:26:12 · 1442 阅读 · 0 评论 -
ubuntu18.04下载国内镜像及安装事项
Debian是一种自由的操作系统,它基于Linux内核和GNU项目的软件。Debian的目标是提供一个稳定、安全、高效和易于使用的系统,适用于各种硬件平台和应用场景。Debian的特点包括:丰富的软件包:Debian拥有超过60000个软件包,涵盖了各个领域,如办公、教育、游戏、编程、科学、多媒体等。用户可以通过apt工具方便地安装和更新软件包。多架构支持:Debian支持多种处理器架构,如x86、x86_64、arm、mips、ppc等。用户可以根据自己的硬件选择合适的版本。原创 2024-10-28 08:47:14 · 3625 阅读 · 0 评论