自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 RS485和RS232区别

在物理布线和接口的实际应用中,RS485通常被认为更适合工业和长距离的应用,而RS232则多用于计算机与周边设备的短距离通信。如果要在物理设备上区分这两种接口,最直观的方法是查看连接器类型和标记。RS485和RS232接口在物理外观上的区别主要在于连接器的类型和接线方式上。这两种串行通讯接口虽然在功能上有所不同,但外观上也有一些显著的特点。

2024-05-14 11:41:37 367

原创 Qt状态机

/ 创建状态机// 创建状态// 设置状态对象名,便于调试。

2024-04-08 14:37:37 461

原创 在C++中使用volatile关键字

在这种情况下,程序需要确保每次读取硬件状态时都能获取最新的值,而不是使用可能已经过时的缓存值。声明的变量,编译器在每次访问时都会重新从其所在的内存位置读取其值,而不是使用保存在寄存器中的副本。这对于多线程程序中共享变量,或者和硬件设备交互、中断服务程序中使用的变量非常重要,因为这些变量的值可能会被外部事件随时改变。由于硬件设备可能会在任何时候改变这些寄存器的值(例如,表示设备状态的寄存器),所以访问这些寄存器的变量应该声明为。关键字在C++中用于告诉编译器,一个变量的值可能以程序未明确指定的方式被改变。

2024-03-06 15:46:05 235

原创 使用模板可变参数template<typename... Args>

由于模板是在编译时实例化的,所以模板的定义(包括模板函数的实现)通常需要放在头文件中。这样,当模板被使用时,编译器可以看到模板的定义并据此生成相应的实例代码。这种方法确实增加了文件数量,但它提供了清晰的代码组织结构,使得模板的声明和实现在逻辑上分离,同时避免了头文件中代码量过大的问题。在C++中,如果你想写一个函数,该函数能接受可变数量的参数,你可以使用C++11引入的可变参数模板或者使用C风格的可变参数列表。一种常见的做法是将模板的实现放在与头文件相同的目录下的另一个文件中(通常是。

2024-02-28 17:16:45 535 1

原创 QTheadPool

是 Qt 并发编程中的一个类,它管理着一组工作线程,可以用来并行执行任务,提高应用程序的效率和响应速度。下面通过一个简单的示例来说明如何使用。

2024-02-28 09:27:13 520

原创 M3568时间设置

M3568Arm板中存储了两个时间:硬件时钟和系统时间。硬件时钟存储的是UTC标准时间,比CST北京时间慢8个小时。Arm板开机后会读取硬件时间,再依据时区文件更新系统时间。假设我们现在需要设置Arm板时间为2024-02-26 17:22:10,重启后时间依然能保持不变。注:CST是中国标准时区,UTC是世界标准时,比北京时间慢8小时。重启后能看到系统时间是北京时间,硬件时间是UTC时间。

2024-02-27 09:51:30 242

原创 QFuture 和 QConcurrent

在使用这些并发工具时,需要注意数据共享和同步问题,以避免竞争条件和数据不一致。确保你的并发代码是线程安全的,特别是当多个线程尝试读写共享数据时。对象,你可以使用这个对象来查询任务的状态(例如,是否完成),以及获取任务的结果(当任务完成时)。这些函数可以让你很容易地在多个核心上并行处理数据集合,或者异步运行函数。当你启动一个异步任务时,这个任务会立即返回一个。提供了一些高级的函数,用于简化并发编程。代表一个异步操作的结果。

2024-02-18 17:30:22 461

原创 虚函数和纯虚函数

以后具体代码扩展……

2024-01-24 15:32:55 317

原创 使用minicom来测试串口

在数据收发界面按ctrl+A 键后,在按o键进入configuration界面,在Screen and keyboard中按S键使HexDisplay变为Yes,在测试中只修改ttyS2。按键盘上对应的行前字母,如A、B、C、D等可以进入对应的设置项,设置完成后按回车进行保存,退回到configuration界面。Ubuntu 18 添加一对虚拟串口,一个为ttyS1,一个为ttyS2,两个串口可以互相发送数据。在一个串口中输入信息可在另外一个终端中显示,反之亦可,输入信息不会在当前终端中显示。

2024-01-05 13:50:43 944

原创 使用mysqldump导出和还原数据

导出:./mysqldump -u root -pZHELISHIMIMA --add-drop-table --databases SHUJUKUMING > /tmp/database_dump.sql。--add-drop-table 是把已存在的表先删除,再导入。需要再输入一遍密码。

2024-01-05 10:29:56 354

原创 Ubuntu20.04 交叉编译Qt4.8.6

找到src/corelib/io/io.pri,并编辑,把。移出linux-*:!

2023-12-27 15:21:36 439

原创 Ubuntu20.04 编译安装Qt4.8.6

4、由于configure选项中有mysql相关配置,所以还需要安装mysql开发环境。PS:之前编译过一个版本的pc端的mysql5.7.28,不知道是否应该手动指定其路径。pc端的mkspec是linux-g++,可以把相似的几个都修改了。加入-no-libtiff,重新configure,重新编译。6、解决一些名称冲突问题,如swap等。到对应的提示目录下找到对应行进行注释。5、安装gcc 7 g++ 7。3、提示xlib相关问题。7、提示tiff相关错误。2、提示POD***

2023-12-26 17:11:36 1085

原创 QML 与C++交互

宏的使用与其他 Qt 版本相似。这个宏允许你将 C++ 类中的方法暴露给 QML,从而可以在 QML 中直接调用这些方法。这是实现 QML 和 C++ 之间交互的重要手段。在 QML 中,你可以直接调用这个方法,就像调用任何 QML 对象的方法一样。这个宏告诉 Qt 的元对象系统这个方法可以从 QML 调用。首先,在你的 C++ 类中定义一个方法,并在声明前加上。在 Qt 5.12 中,

2023-12-15 17:16:33 22

转载 存储过程详解

MySQL---存储过程详解-CSDN博客

2023-12-14 16:31:29 29

原创 策略模式 - C++与Qt5.12实现

通过这个例子,我们展示了如何在 Qt5.12 和 C++ 中实现策略模式。这种模式的优点在于,它允许动态地更换算法,而无需修改使用算法的代码。这样可以提高代码的灵活性和可扩展性,同时也有助于降低各个部分之间的耦合度。

2023-12-08 20:45:17 50

原创 回调函数、Lambda表达式与std::function

这段代码展示了在C++中使用lambda表达式的几个不同场景。Lambda表达式是一个可以捕获作用域中变量的匿名函数,它在C++11及其后续版本中被广泛使用。使得代码更加灵活,允许您传递任何类型的可调用对象,包括函数指针、lambda 表达式和绑定表达式。的灵活性,允许您在需要时轻松更改回调逻辑,或者将不同类型的可调用对象作为回调传递。此代码段展示了lambda表达式在C++中的多样性和灵活性,特别是在捕获列表和使用。,这个 lambda 表达式简单地打印接收到的消息。然后,这个回调被传递给。

2023-12-08 17:36:36 139 1

原创 dynamic_cast、reinterpret_cast 以及static_cast的区别

主要用于多态性相关的安全类型转换,用于低层次或不安全的类型转换,而。则用于普通的非多态类型转换。

2023-12-06 10:47:38 74 1

原创 原型模式(GPT4生成)

以上示例展示了原型模式在Qt中的实现。这种模式适用于对象创建成本较高的场景,它通过复制已有对象来避免这种成本,提高了应用程序的效率和灵活性。

2023-12-04 17:30:57 64 1

原创 纯虚函数->基类指针指向子类对象(GPT生成)

纯虚函数(Pure Virtual Function)是C++中的一个重要概念,用于实现抽象类。在类的成员函数声明中,如果函数后跟= 0,则该函数为纯虚函数。纯虚函数在基类中不提供实现,强制要求派生类必须重写这个函数,从而实现多态性。下面我将详细介绍纯虚函数的实现、作用、优点以及提供一个代码示例。

2023-12-04 16:31:28 73

原创 普通工厂(GPT4生成)

如果一个工厂类能创建多种类型的产品,那么它就有多个改变的理由(例如,如果需要添加或修改一种产品,就可能需要修改这个工厂类)。将每种产品的创建逻辑放在各自的工厂类中,可以使每个工厂只关注一种产品的创建,符合单一职责原则。如果你的应用程序中产品较为简单,且不需要考虑多个相关产品的创建,则普通工厂模式可能更合适。在这种模式中,每个工厂类通常只负责创建一种具体的产品。:如果一个工厂类负责创建多种产品,随着产品种类的增加,这个类可能会变得非常复杂,难以维护和理解。:工厂模式使得产品的使用者不需要知道产品的具体类。

2023-12-01 16:28:40 26 1

原创 基类指针指向子类对象

类中的方法,你需要先将基类指针转换为子类指针,然后通过子类指针调用这个方法。但请注意,这种转换必须谨慎进行,因为如果基类指针实际上没有指向正确的子类类型,这种转换可能会导致未定义的行为。如果子类有一个不同于基类的函数(即子类中的函数在基类中不存在),那么使用基类的指针是无法直接调用这个特有的子类方法的。这是因为基类指针的类型决定了它能够“看到”和调用的成员函数范围,它只能调用基类中声明的函数或者子类中重写的基类函数。:当我们创建一个子类对象时,我们可以使用基类的指针来指向这个子类对象。

2023-12-01 14:50:57 419 1

原创 建造者设计模式(GPT4生成)

首先定义类,它包含了一些基本组件:ComputerBuilder类定义接下来,定义抽象类,它声明了构建所需的步骤:具体建造者类然后,创建具体的建造者类,如,它实现了中定义的抽象方法:Director类最后,创建一个类,它负责管理建造过程:使用示例使用这些类来构建一个计算机对象:代码分析总的来说,通过使用建造者模式,代码结构更加清晰,扩展性和灵活性提高,同时也使得构建复杂对象的过程更加容易管理和维护。Computer类:这个类代表了复杂对象(在此例中是计算机)

2023-11-22 15:49:54 56

原创 单例模式(GPT4生成)

时,会检查实例是否存在,如果不存在,则创建实例。这个检查是在互斥锁的保护下进行的,确保在多线程环境中的安全。一个静态的私有实例指针和一个公共的静态方法来获取这个实例。如果实例不存在,它将被创建。私有的构造函数和拷贝构造函数:这确保无法在类外部实例化和复制对象。这个实现是一个线程安全的单例模式,可以在多线程环境中安全使用。

2023-11-22 14:17:58 29

原创 观察者模式(GPT4生成)

这个接口包含一个用于接收更新的方法,所有具体的观察者类都需要实现这个接口。:这个类维护一系列的观察者,并提供添加和移除观察者的方法。方法被调用时,所有注册的观察者都会收到通知。您可以根据具体的需要修改。我们将创建一个简单的场景,其中包含一个被观察的对象(被观察的对象在其状态改变时通知所有观察者。接口,并在接收到更新通知时执行具体的行动。这个代码展示了一个简单的观察者模式实现。对象和多个观察者对象,然后改变。类来适应不同的场景。

2023-11-22 13:49:09 38 1

原创 代理设计模式(GPT4生成)

这里,我将提供一个简单的代理模式示例,这个示例中,代理类将控制对另一个类(即“实际”类)的访问。我体会这个设计模式的思想:新定义一个代理类,这个代理类接受真实类的指针或者引用,可以定义真实类相同的方法名,在代理类中增加一些处理,之后再调用真实类指针或引用的相同方法名 你看我这样理解正确吗。在这个模式中,代理类和真实类共享一个接口,这使得代理类可以在不改变客户端代码的情况下替代真实类。代理类在执行真实类的请求之前,可以执行一些额外的操作,比如访问控制和日志记录。在这个示例中,客户端可以使用真实类 (

2023-11-22 11:26:10 61

原创 INNER JOIN和OUTER JOIN (GPT4生成)

定义: 用于选择两个或多个表中的记录,这些记录在指定的列上有相匹配的值特点: 只返回在两个表中都有匹配的行。如果在一个表中有匹配而另一个表中没有,则这行数据不会出现在结果集中。定义: 分为三种:, , 和 。它们用于从两个表中选择记录,即使在另一个表中没有匹配的记录也一样。 示例 假设有两个表,一个是学生表 (),另一个是成绩表 ()。两个表通过关联。INNER JOIN 示例: 这个查询将返回所有在和表中都有记录的学生及其成绩。LEFT JOIN 示例: 这个查询将返回所有学生

2023-11-22 10:58:00 29

原创 数据库:横表和竖表 (GPT4生成)

比如在一个电商平台上,每个商品都有一些共通属性,比如价格、品牌、类别,但同时每种商品还有一些特定的属性,比如手机有屏幕大小、电池容量,衣服有材质、尺寸等。使用横表,你可能需要为每个可能的属性都创建一个列,这将导致表非常宽,而且大多数列都是空的。使用竖表,你只需记录商品的共通属性,特定属性可以按需添加。

2023-11-06 10:46:03 213

原创 交叉编译php8.2.5和apache2.4.57

先编译apache,才能再编译php8,因为php8在编译的时候需要指定--with-apxs2=/home/zfadmin/httpdCompile/arm/bin/apxs的目录才行,注意要么把php8编译成线程安全的,要么编译出来一个单线程的apache。如果php8没有编译成线程安全的版本则需要--with-mpm=prefork --enable-mpms-shared=all。进入到/home/zfadmin/httpdCompile/httpd-2.4.57/server 目录。

2023-11-02 09:17:29 158

原创 抽象工厂设计模式(GPT4生成)

这样,如果以后我们想要添加更多的主题或组件,我们只需要扩展相应的工厂和产品即可,而不需要修改现有代码。这就是使用抽象工厂模式的好处。希望这个示例能帮助你更好地理解这个设计模式!函数中,我们演示了如何使用这些工厂来创建并使用不同主题的按钮和文本框。,它可以创建这两种产品,然后我们为深色和浅色主题分别定义了具体工厂。然后,我们为深色和浅色主题分别定义了这些抽象产品的具体实现。接下来,我们定义了一个抽象工厂。

2023-10-27 17:20:37 44 1

原创 交叉编译php8.2.5+phpRedis5.3.7插件到ArmV7

phpRedis5.3.7,php8.2.5 ,ubuntu14.04,交叉编译PHP,交叉编译Apache 2.4.57

2023-05-09 11:27:05 714 1

原创 Ubuntu18.04交叉编译ARM qt4.8.6

tslib可以不编译,整体过程与之前编译5.15.2类似。编译后移植到ARM板,其中/etc/profile设置如下。在mkspec中还需要在qmake.conf额外添加。

2023-04-11 11:16:10 371

原创 交叉编译MySql5.7.28

2、cmake 中指定参数 -DOPENSSL_ROOT_DIR=/home/zfadmin/mysqlCompile/openssl-arm-install。环境ubuntu18.04,使用交叉编译工具链aarch64-linux-gnu。1、需要手动编译OPENSSL,版本openssl-1.1.1g,编译后路径为。3、不需要编译boost,只需要指定mysql中自带的boost路径即可;

2023-04-03 11:20:11 371 1

原创 Ubuntu与致远ARM交叉编译Qt5.12环境

ARM板现有环境配置(主要是对/etc/profile/编辑)较简单,参考上一篇博客,板子上已经部署了Qt5.15。本文主要介绍使用第三方ToolChain编译Qt源码并使用aarch64-linux-gnu-gcc编译器的过程。实际第三方ToolChian可能未使用。

2023-03-14 15:19:20 1285

原创 Ubuntu与国产致远ARM_3568交叉编译Qt

此文档只是为了记录错误的过程,下一往篇博客会直接介绍正确的配置。

2023-03-14 14:14:35 541

原创 CentOS7部署MySQL中的问题

1、提示"unknown variable'connection_control_failed_connections_threshold=3'"2、131017 0:45:52[ERROR]插件“InnoDB”注册为存储引擎失败

2023-03-06 15:48:23 493 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除