- 博客(439)
- 资源 (16)
- 收藏
- 关注
原创 什么是C++模块化系统?C++20的模块化系统
C++20引入的模块化系统是一种新的代码组织和编译机制,它旨在替代传统的头文件机制,提供更好的代码组织、更快的编译速度和更强的封装性。通过减少冗余的头文件解析和宏定义传播,模块可以显著减少编译时间。模块提供了更好的封装,减少了不必要的依赖暴露。模块可以更清晰地表达模块间的依赖关系,提高代码的可维护性。C++20的模块化系统通过引入模块声明和导入,提供了一种替代传统头文件机制的现代化解决方案。模块化系统不仅减少了编译时间,增强了代码的封装性,还改善了代码的组织和可维护性。
2024-11-02 09:18:58 818
原创 C++接口:构建模块化与可扩展的软件架构
在C++中,接口通常指的是一组纯虚函数,这些函数定义了一个类必须实现的行为。接口本身不提供任何实现,它的主要目的是定义一个契约,任何实现该接口的类都必须遵守这个契约。提供一种方式来定义类之间的协议。促进代码的模块化和解耦。支持多态,使得代码更加灵活和可扩展。
2024-11-02 09:09:53 554
原创 插件式模块化软件框架的思想图解一(框架篇)
模块与模块的信息交换是通过数据交换机完成,可以避免模块单元相互引用,并且达到解耦要求(每个模块都有独立的数据存储单元,交换机仅是事件驱动和信息传递无存储功能)。如果A模块使用B模块的接口,但B模块又引用到C模块的数据类型,那么B模块应该把C模块的类型做别名处理,保证A模块一次引用单元文件即可完成对B模块的使用操作。不仅要求模块代码、模块数据类型、配置文件部分高度独立,还要求模块代码文件高度独立在模块目录内,即模块专有的各类信息、源代码和代码文件均独立存在模块目录内部,不能分散在其它模块或框架内部。
2024-11-02 08:50:48 463
原创 SOLIDWORKS CAM数据无法恢复,因为已检测到轻化零件
SolidWorks保存时一直提示“SOLIDWORKS CAM数据无法恢复,因为已检测到轻化零件。解决方法:打开插件选项卡,取消勾选“SolidWorks CAM 2018”即可。
2024-10-31 14:18:18 228
原创 C++编程法则 静态成员函数和非静态成员函数之间的相互调用
其生命期和类对象是异步的,(而且静态语意说明即使没有类实体的存在,其静态数据成员的实体也是存的)这个时候对象的生命期还没有开始,如果你要到类中去初始化类静态数据成员,让静态数据成员的初始化依赖于类的实体,,那怎么满足前述静态语意呢?但是在有些情况下只能使用静态成员函数,比如类内绑定自身成员函数作为回调函数,这种情况在开启多线程时很常见,如果不想将回调定义为全局那只能定义为类静态了,为了避免过度破坏封装类中应当尽量不要让类静态成原函数调用类成员。能在类中初始化的成员只有一种,那就是静态常量成员。
2024-10-29 08:26:12 857
原创 ubuntu18.04下载国内镜像及安装事项
Debian是一种自由的操作系统,它基于Linux内核和GNU项目的软件。Debian的目标是提供一个稳定、安全、高效和易于使用的系统,适用于各种硬件平台和应用场景。Debian的特点包括:丰富的软件包:Debian拥有超过60000个软件包,涵盖了各个领域,如办公、教育、游戏、编程、科学、多媒体等。用户可以通过apt工具方便地安装和更新软件包。多架构支持:Debian支持多种处理器架构,如x86、x86_64、arm、mips、ppc等。用户可以根据自己的硬件选择合适的版本。
2024-10-28 08:47:14 925
原创 QT获取本机所有IP地址以及修改本机IP(注意区分Windows和Linux环境)
它提供了获取本地系统中所有网络接口的信息的能力,并允许访问与这些接口相关的属性,比如IP地址、硬件地址、接口名称等。上面代码中Qt::CaseSensitivity 为枚举类型, 可取值Qt::CaseSensitive 和 Qt::CaseInsensitive, 表示匹配的灵敏度,例如,查看设备上所有网络接口的状态、检测网络连接问题、获取接口相关信息等。每个 QNetworkInterface 对象包含接口的属性,如硬件地址、接口名称、标志(如是否为环回、是否可用、是否为无线等)。
2024-10-21 19:34:13 701
原创 Ubuntu16.04安装openssl库
1.首先去openssl官网下载源码www.openssl.org/source/(我下载的是openssl-1.1.1f版本)2.把源码包移动到进usr/local目录下(要在root权限下进行)5.进入目录cd /usr/local/openssl-1.1.1f。4.压缩tar xfz openssl-1.1.1f.tar.gz。7.测试openssl是否安装成功openssl version。3.进入usr/local目录 cd /usr/local。再次查看openssl版本,成功。
2024-10-19 19:23:10 322
原创 嵌入式Linux开发板配置静态IP
修改interfaces配置文件,普通用户interfaces文件权限只可读,首先切换到root权限。文件里添加如下信息,对应于以太网接口配置的网口信息,键盘按Esc,输入:wq 保存退出即可。
2024-10-15 11:46:19 178
原创 嵌入式C语言之结构体封装函数
由于函数指针的定义和使用都在结构体内部,因此修改或调整代码时,只需要修改结构体中的函数指针定义或调用方式,而不需要修改其他部分的代码,从而使得代码更加健壮、易于维护和修改。这种方法可以将代码的复杂性分解到不同的模块中,降低了代码的耦合性,提高了代码的可读性和可维护性。更好的隐藏实现细节:结构体封装函数使得函数的实现细节被封装在结构体内部,只有结构体暴露给外部的函数指针,实现了良好的封装和信息隐藏。值得注意的是,在实际应用中,我们需要根据实际情况修改函数的实现,以及结构体中的成员变量和函数指针的数量和类型。
2024-10-14 15:30:29 730
原创 【嵌入式C语言】crc32校验的c语言实现
一种的多项式也有很多种变化,输入输出方式也有区别,有一些初始值是0,有一些初始值是0xFFFFFFFF,有一些直接返回,有一些异或返回,因此,CRC校验很难用一个代码兼容全部,只能根据具体项目修改相关参数。对于不同类型的文件所使用的多项式以及算法不同,对于不同的生成多项式所生成的crc32表不同,不同的算法也会产生不同的结果。生成多项式采用0xEDB88320的时候,生成的crc32Table的算法如下。CRC算法查表法很常见,但表是怎么来的,看了上面的代码应该就可以清楚了。查表法CRC32校验算法。
2024-10-14 13:29:31 603
原创 VMware导入vmdk文件(亲测有效)
硬件兼容性:默认选择最新的行,因为和本地安装的vmware版本有关,这里演示的版本是:VMware® Workstation 17 Pro。根据机器的内存选择虚拟机分配的内存,建议20GB及以上,如果机器内存不够32G,那么虚拟机就分配机器内存的60%根据cpu的数量和每个cpu的内核数选择,建议cpu的数量为机器cpu数量的50%新建虚拟机向导,点击浏览按钮,选择后缀为vmdk的文件,然后点击下一步。修改虚拟机的名称,不修改的点击下一步。网络类型默认选择NAT,点击下一步。点击开启此虚拟机,流程完毕。
2024-10-12 13:52:57 744
原创 Solidworks斜接法兰快速绘制钣金箱体
Solidworks斜接法兰快速绘制钣金箱体Chapter1 Solidworks斜接法兰快速绘制钣金箱体Chapter1 Solidworks斜接法兰快速绘制钣金箱体
2024-09-30 16:52:14 280
原创 Altium Designer软件使用记录05-PCB叠层设计
正片就是平常用在走线的信号层,既走线的地方是铜线,用Polygon Pour进行大块敷铜填充。
2024-09-13 09:58:56 1168
原创 Altium Designer18集成库的创建及安装
很多用过立创EDA的小伙伴都会被他们里面自带的库深深吸引着,同时操作也十分方便。本文将交给大家如何迁移一个已经在立创画好的工程完完全全的“拷贝”到AD。一、准备工具1.立创EDA(专业版)一定要专业版,专业版比标准版功能多了不少,并且专业版跟标准版的工程不互通!注意:Altium Designer和SOLIDWORKS 最好是同版本的。即Altium Designer19对应SOLIDWORKS 2019或SOLIDWORKS
2024-09-12 09:34:26 1447
原创 【Altium Designer】AD18/AD22 导入3D模型
原文链接:https://blog.csdn.net/qq_43328313/article/details/106927113。之后 按下 Tab 键 选择属性,Generic → \to→ Embed Model → \to→ Choose。快捷键 P + B,注意把输入法调成英文输入(按下Shift)快捷键2 和 3 分别用来切换2D和3D显示模式。放置完成后,切换3D视图(按下数字3即可)打开 AD 软件,进入 PCB 库。
2024-09-11 21:46:54 430
原创 QT串口读取Serial->readAll()踩过的坑
因为串口设置的是8位数据位,因此拿到的数据是32位,但是博主想要的是“00 10 00 00 00 00 01 00 28 00 0A 01 01 01 01 00 \r\n”。主要是串口每次只能打印32个字节的数据,如果多了就会把数据放到缓冲区,这导致要二次打印,使json格式不连续,就构不成json格式,如下图。上位机的写入lcd_Number的数据,因为单片机是分时发送数据,当发送power的数据时,电流、电压的json解析失败,那存放电流,电压的数据肯定为 0。这样处理后拿到的数据是:如图。
2024-09-07 09:59:26 1667
原创 如何隐藏 Ubuntu 顶部状态栏
Hide Top Bar 扩展是隐藏 Ubuntu 顶部状态栏的最佳选择,它提供了包括「智能隐藏」在内的多种功能,可以在应用窗口触碰到屏幕顶部或全屏时自动隐藏顶部栏。Hide Top Bar 支持 GNOME 3.16 到 46 版本,包括当前最新的 Ubuntu 24.04 LTS 和所有基于早期 GNOME 版本的旧系统。3安装好后,返回「已安装」标签页,点击 Hide Top Bar 旁边的「齿轮」图标。Hide Top Bar 支持自定义,支持「智能隐藏」功能,当应用窗口全屏时自动隐藏顶栏。
2024-07-13 14:52:15 1324
原创 Linux:Ubuntu18.04下开机自启动QT图形化界面
如果这里启动失败了需要回头更改rc.local文件看看是不是有语法错误或者执行的脚本有没有问题。如果在里面运行了脚本记得给脚本也添加可执行权限(在脚本所在文件夹下打开终端)困扰了一天的时间,终于解决,好了,废话不多说,直接上干货。电脑重启后就会自动执行,跳出QT图形运行界面 ,成功!如果查看状态和我一样的话,就说明程序启动成功了。如果启动一切无误且状态正常的话使能开机自启动。
2024-07-06 08:51:09 1224
原创 【正点原子MP157连载】第十九章 Buildroot根文件系统构建-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
答案肯定是有的,buildroot就是这样一种工具,buildroot比busybox更上一层楼,buildroot不仅集成了busybox,而且还集成了各种常见的第三方库和软件,需要什么就选择什么,就跟我们去吃自助餐一样,想吃什么就拿什么。因此在做产品的时候推荐大家使用buildroot来构建自己的根文件系统,当然了,类似buildroot的软件还有很多,比如yocto,一般半导体厂商会选择yocto来制作系统包,但是由于国内的网络环境,yocto编译起来会有很多问题!19.1 何为buildroot?
2024-07-04 09:54:38 788
原创 为RK3568或RK3288开发板创建交叉编译环境{采用amd64的ubuntu系统配置交叉编译arm64开发环境}(保姆级包括安装QT)超详细记录版
开发环境采用的是amd64 linux的系统,所以.run可以运行,我们在QT官网下载即可,版本自己选择即可,最好与后面要编译的qt对应起来。(9)这个hello.c建议放在/home/你的用户名/下面的文件夹内。(8)创建一个简单的c程序,用arm64编译器编译一下放到板子上运行。(1)将两个交叉编译器文件放在Downloads下面。(5)添加交叉编译器环境,路径在:/opt/都显示版本号说明没有问题。
2024-07-02 16:54:37 1824
原创 linux就该这么学【进程间通信】
原文链接:https://blog.csdn.net/m0_53421868/article/details/123194775
2024-06-29 11:00:36 159
原创 深入了解Qt 控件:Display Widgets部件(1) 以及 QT自定义控件(电池)
做一个电池控件,需要一个拖动条和一个进度条。不多说,直接上代码.h文件Q_OBJECTpublic:~Widget();private:.cpp文件//将拖动条设置为横向//设置拖动条范围//设置样式//拖动条每次值改变都会执行if(m_batteryBar->value()
2024-06-29 10:40:03 437
原创 OpenSSL EVP详解
EVP 提供了通用的加密和解密函数,可以用于对称加密和非对称加密。选择加密算法,创建相应的 EVP_CIPHER 结构。初始化 EVP_CIPHER_CTX 上下文。使用 EVP_EncryptInit_ex 或 EVP_DecryptInit_ex 初始化加密或解密操作。使用 EVP_EncryptUpdate 或 EVP_DecryptUpdate 处理数据。使用 EVP_EncryptFinal_ex 或 EVP_DecryptFinal_ex 完成加密或解密操作。
2024-06-27 12:50:37 1328
原创 环境篇-Windows下安装OpenSSL, 【QT】windows下OpenSSL的使用,RSA加解密
OpenSSL是一个功能丰富且开源的安全工具箱,它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能。建议,不要拷贝到系统目录下,如果其他软件使用的OpenSSL版本与你安装这个版本不同,可能导致该软件无法使用。再次验证,查看OpenSSL版本正确。
2024-06-14 13:16:53 1013
原创 Qt QQueue 详解:从底层原理到高级用法
在现代软件开发中,数据结构和算法扮演着至关重要的角色。它们为程序员提供了处理各种不同场景下数据的有效方法。QQueue(队列)是一种常见且实用的数据结构,它在许多应用中都发挥着关键作用。本文将简要介绍QQueue的重要性和简介。队列(Queue)是一种遵循先进先出(FIFO,First In First Out)原则的线性数据结构。在这种结构中,元素的添加(入队)和移除(出队)操作分别在队列的尾部和头部进行。这种特性使得队列在处理一些需要按顺序执行任务的场景中表现出优越性。
2024-06-09 22:31:01 928
原创 QT中为程序加入超级管理员权限
QT的一些文件操作,注册表的操作等,有些操作会无效,主要是因为没有对C盘的相关权限。通过为程序加入超级管理员权限可以解决此问题。第一行是为程序添加图标,第二行是增加超级管理员权限。
2024-06-08 08:35:14 1265
原创 Solidwokrs钣金拆图之移动面命令使用技巧
这个命令用处很多,比如说在一个step格式的零件中想要去改它的外形尺寸或者孔的尺寸,一般大家可能用的最多的都是拉伸切除等命令。以下本人提供的方法供大家参考:大家可以看出以下是step格式的零件,现在我需要改这个长、宽、高及孔的尺寸,目前的尺寸是300mm。接着选择下图中的边线1和2,输入移动的距离,此处我们要将1000改成1200,所以输入200;第二步:用同样的方法依次将宽(850mm)、高(300mm)改成我们想要的尺寸。将宽850mm改成1050mm,按下图顺序依次选择。第一步:找到移动面的命令。
2024-06-04 15:48:50 533 1
原创 QT语言国际化 动态修改
2、对于需要翻译的文本,需要使用QObject::tr(“1111”).或QApplication::translate(“Widget”, “\346\227\213”, 0)包含,这要Qt的语言家功能才会将需要翻译的文本找到保存到ts文件中。5、生成的qm文件是在项目文件家中,而不是exe文件所在文件夹。4、工程的菜单: 工具 -> 外部 -> 语言专家 ->更新翻译(lupdate) 生成ts文件。6、工程的菜单: 工具 -> 外部 -> 语言专家 ->发布翻译(Release) 生成qm文件。
2024-06-03 09:32:00 708
原创 超详细基于Qt平台实现C/C++调用Matlab函数全流程
基于Qt平台实现C/C++调用Matlab函数有三种方式:(1)将Matlab函数封装成.dll文件,再在Qt平台上调用.dll文件实现;(2)将Matlab函数导出成.exe可执行程序,再在Qt平台上调用.exe可执行程序;(3)直接在Qt平台上调用Matlab Engin引擎,这种方法需要计算机上安装有Matlab软件。本文是通过第一种方式,将MATLAB代码转成C/C++代码和相关动态链接库进行实现的,其他两种方式具体可以参考:Qt调用MATLAB引擎混合编程。
2024-06-03 08:58:52 2055 2
原创 【Qt底层之内存管理机制】Qt 对象 父子关系、运行时机制与高效编程技巧
也就是说,在析构父对象–w时,会自动调用子对象btn的析构函数。当父对象析构的时候,这个子对象列表中的所有对象都会被析构,当析构子对象的时候,会自动从父对象的子对象列表中删除。按照这种形式排列就会形成一个对象树的结构,最上层是父对象,下面是子对象,在再下面是孙子对象,以此类推。值得注意的是,如果在构造时设置父对象为 NULL,那么当前实例不会有父对象存在,Qt 也不会自动析构该实例,除非实例超出作用域导致析构函数被调用,或者用户在恰当时机使用 delete 操作符或者使用 deleteLater 方法。
2024-05-30 21:15:30 841
原创 Linux之killall命令
我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。默认情况下,killall 会告诉你命令执行情况,但是,我们如果不关心它的执行结果,只想让它静默执行,只需加上-q选项即可,其中q表示quite。如果你在杀死多个进程时不太放心,担心把不该杀死的进程给杀死了,那么你可以使用-i选项。killall 命令是大小写敏感的,所以我们如果写错大小写,将无法正确杀死进程。
2024-05-30 09:09:10 984
原创 win10双网卡如何同时上内网和外网?
右键点击“以太网”,在打开的菜单项中,选择“属性”,点击选中“Internet协议版本4” - 点击“属性” - “高级” - 接口跃点数设置为“1”,各个窗口点击“确定”经常使用有线网访问外网,可以将有线网网络跃点数设置为“1”。如果经常使用无线网,那么就将无线网的跃点数设置为“1”。即哪个网络常用就设置哪个网络跃点数。原文链接:https://www.jb51.net/os/win10/806585.html。
2024-05-29 17:56:06 1687
原创 【选型】效率高达95%,国产电源芯片SCT2650 可PIN TO PIN 替换TPS54560
随着网络信息技术的快速发展,5G基站建设规模不断扩大,某客户在研发一个5G大功率基站的项目,使用到了一款TI的电源芯片TPS54560,目前因为TI的交期比较紧张,急需要一款参数合适的国产电源芯片去替代它。2、虽然说SCT2650的静态电流没有TPS54560小,但是SCT2650的内置MOS管的导通电阻要比TPS54560小,说明SCT2650的功耗可以做的比TPS54560小,这大大地延长了芯片的使用寿命;最后,SCT2650除了具有更高的效率之外,芯洲科技还可以提供及时的技术服务和稳定的现货支持。
2024-05-16 20:34:30 1119
原创 驱动一个mipi接口的屏幕
目前的改写都是需要自己一一改写,本文借助Chatgpt写了一个自动转换的代码,实际上是一个文本处理程序,为了节省时间,仅实现多余三个参数的情况,1个参数和2个参数还有延时的情况需要自己添加。原理图:这里主要是R4电阻的确定,根据MP3302数据手册和屏幕的数据手册得到屏幕背光led的额定电流,用MP3302DJ这颗IC做恒流驱动。PCB:唯一注意的地方就是mipi需要做100Ω的差分等长布线,预留测时序的接口P1。通常厂家给的格式如下:(伪代码)电路设计、确定时序、上电验证。
2024-05-16 20:09:55 764
原创 RK3568外置RTC芯片PCF8563T(或替代型号)实验
rtc芯片的电压不低,但是总报错,先注释掉就可以使用了。报错原因以后再看一下寄存器相关文档。在kernel的menuconfig中选中。
2024-05-13 15:40:37 1029
原创 RK3568 解决MIPI屏幕开机只显示uboot logo的问题
之前写过一篇文章介绍了RK3568驱动MIPI屏幕的方法,这次产品迭代,硬件改版,选型的新的屏幕了。所以再次开启调试屏幕的过程。本以为会和上次一样会轻车熟路,事情总是事与愿违,同样的路,遇到新的坑。屏是嵌入式驱动开发中常见的设备,一般的带屏项目中最开始要调试的,简单记录一下自己在项目开发中的经验过程。所用平台是rockchip的rk3568,android11。
2024-05-11 13:41:55 1137
原创 RS232,RS485接口模块PCB布局布线EMC浪涌防护设计规范
RS232接口多用于计算机与设备之间的通讯,用于数据监控及调试。在应用的过程中通讯电缆容易耦合外部的干扰对信号传输造成一定的影响,单板内部的干扰也可能通过电缆形成对外辐射。本方案从EMC原理上,进行了相关的抑制干扰和抗敏感度的设计,从设计层次解决EMC问题。
2024-05-10 17:15:51 2300
FreeRTOSv202112.00.zip
2022-01-04
cJSON(STM32CubeMX5.3.0).rar
2021-10-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人