- 博客(42)
- 收藏
- 关注
原创 Qt中编译问题,程序异常退出,进不了调试模式 Nothing to be done for ‘first‘
在环境变量中添加此项目所需的dll文件的目录;环境变量添加完成,重启即可;
2024-03-19 12:08:01
493
原创 Qt不能安装自己想要的版本,如Qt 5.15.2
使用在线安装工具安装Qt5.15.2时,发现没有Qt 5的相关版本,只有Qt 6的版本,这时选择右边的Archive,再点击筛选,这时就会出现之前的Qt版本。
2023-10-15 17:57:59
4354
9
原创 项目的QML文件中,Component.onCompleted的顺序是什么?
信号处理程序的执行顺序在同一层级内是不确定的,因此无法确保哪个子矩形的初始化先于另一个子矩形的初始化。但是,父矩形的初始化一定在子矩形之后执行。这是因为在层级结构中,子项的初始化先于父项的初始化。信号处理程序,然后执行父矩形的。执行顺序是先执行子矩形的。
2023-10-09 16:29:48
624
1
原创 Red-Black Tree红黑树
5.如果父亲颜色是红色,父亲的兄弟节点是空或黑色,则需要旋转变色;不满足条件,所以该进行左下旋、右下旋、LR先左上旋再右下旋、RL先右上旋再左下旋。4.如果父节点的颜色是红色,他也是红色,那么执行重新着色,并检查新节点的父节点,如果它不是根节点,那么重新着色,父节点变黑色;6.父节点为红色,子节点为红色,如果不是根节点,则重新着色。1.如果是空树,插入新的黑色节点作为根节点;2.如果不为空,插入一个新的红色节点;
2023-09-09 22:22:47
167
原创 Symbocl SystemInit multiply defined (by systen stm32fl2x_1.o and systam stmn32fl1x.o)stm32多次定义问题
上面的两个文件重复,删除上面多余的一个文件即可。
2023-09-09 16:34:45
205
原创 qt使用write写入中文时,会出现少写的情况
length()获取字符长度,一个中文也会被当成一个字符。正常情况下,一个中文大小为2个字符。qt的length()返回的是字符数量,不是字符串大小。先将中文转码之后,再求length就是字符大小。解决办法:将中文转为8bit编码,
2023-09-02 23:13:54
94
原创 Error: L6218E: Undefined symbol HAL_I2C_Init (referred from main.o).
解决:没有被正确引入,文件,更具下面操作重新加载文件,选择相应的模块。未定义符号HAL_I2C_Init(从main.o引用)。
2023-08-29 20:27:03
782
1
原创 nfs服务器搭建
nfs服务器IP :服务器nfs工作路径 本地挂载点。有效配置就 最后一行 /home /nfshome 指定工作目录 * 任意IP都可以访问。示例: /home /nfshome 你的目录的位置或用户名不同 该路径就不同。在客户端 将 服务器的 nfs工作目录 挂载到 本地文件系统中 直接访问。(3) 进入该目录 执行pwd命令 得到该目录的绝对路径。(1) 创建一个目录 作为 nfs服务器的工作目录。(4) 编辑nfs服务器配置文件。1. 安装nfs服务器。
2023-08-18 08:10:27
65
原创 tftp 服务器搭建
TFTP_OPTIONS="--secure -c" # 此处添加 -c 选项 使能客户端可以上传文件。# TFTP_DIRECTORY="/var/lib/tftpboot" # 此处需要修改 工作路径。示例: /home/xwq/tftpboot 你的目录的位置或用户名不同 该路径就不同。上传文件 put + 你要上传的文件名 该文件在你的当前文件中。一个文件上传与下载的服务器 使用cs模型 客户端与服务器模型。(1) 创建一个目录 作为 tftp服务器的工作目录。
2023-08-17 08:14:56
203
原创 在Linux中,高效的命令以及常用命令
当按下Ctrl+R后,会出现一个提示符号((reverse-i-search)),你可以输入关键字来搜索之前输入的命令。如果有多个匹配的命令,可以按下Ctrl+R来继续搜索下一个匹配项。要在搜索结果中切换上下,可以按下Ctrl+R后,再按下Ctrl+P(向上)或Ctrl+N(向下)来切换搜索结果。这个命令会冻结终端的屏幕输出,直到按下 Ctrl + Q 恢复屏幕输出。Shift + Insert 是一个常见的组合键,在终端中使用时,它用于将剪贴板中的内容粘贴到终端中,类似ctrl+v。
2023-08-16 08:20:43
1031
原创 重载运算符,坚持4个“不”原则:
4)运算符原有的语法结构,不能改变!1)运算符操作数的个数,不能改变!3)运算符原有的结合性,不能改变!2)运算符原有优先级,不能改变!
2023-08-15 08:00:24
50
原创 malloc/free和new/delete的本质区别:
简单来说就是new/delete能完成跟家详细的对内存的操作,而malloc/1.malloc/free 是C/C++语言的标准库函数,new/delete是C++的运算符。一次C++需要一个能够对对象完。由于malloc/free是库函数而不是运算符,不在编译器的控制范围,不能把构。3.对于用户自定义的对象而言,用malloc/free无法满足动态管理对象的要求。对象在创建的时候会自动调用构造函数,对象在消亡之前自动执行析构函数。成动态分配内存和初始化工作的运算符new,以及一个释放内存的运算符。
2023-08-14 08:31:45
46
原创 c++友元函数
更一般的讲,必须先定义包含成员函数的类,才能将成员函数设为友元。一个类将对其非公有成员的访问权限授予其他函数或者类,会破坏该类的封装性,降低该类的可靠性和可维护性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明。当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。类授予它的友元特别的访问权,这样该友元函数就能访问到类中的所有成员。、汇编等)进行混合编程;
2023-08-13 09:18:41
34
原创 scripts/kconfig/mconf Kconfig Your display is too small to run Menuconfig!使用UI界面配置arm内核.config文件
make menuconfig会启动一个文本界面的配置菜单,允许你选择和配置内核的不同功能和选项,并生成一个配置文件(.config文件)用于后续的内核编译。ncurses是一个用于在终端上创建文本用户界面(TUI)的库,它提供了在控制终端上显示文本、处理用户输入、控制终端光标位置等功能。sudo apt-get install libncurses5-dev是一个在Ubuntu和其他基于Debian的Linux发行版中安装开发库libncurses的命令。解决办法:把虚拟机的。
2023-08-12 09:35:26
182
原创 无法使用apt-get下载lib32z1
E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
2023-08-11 08:26:56
350
原创 在64位虚拟机上安装32位的程序失败
问题: 我们的arm-gcc它是32bit程序, 而我们的ubuntu是64bit电脑.需要安装支持包 sudo apt-get install lib32z1。出现相关版本号表示成功。
2023-08-10 08:21:18
188
原创 裸机开发中,出现undefined reference to ‘__aeabi_idiv’错误
裸机开发中,出现undefined reference to ‘__aeabi_idiv’错误。因为裸机没有操作系统,不能使用除法,除以一个变量;可以讲除法改为右移>>运算符。
2023-08-09 08:29:04
228
原创 arm控制器,中断、串口、定时器、PWM、ADC硬件技术
PWM信号的占空比(Duty Cycle)表示高电平的时间占整个周期的比例,可以通过调节脉冲宽度来改变占空比。它通常由一个计数器和相关的控制逻辑组成,可以通过设置计数器的初始值、计数方向和时钟源等参数来实现不同的计时功能。量化:采样后的模拟信号需要进行量化,即将连续的模拟信号转换为离散的数字信号。调节脉冲宽度:通过改变比较器的参考值,可以调节脉冲的宽度。较小的参考值会生成较窄的脉冲,较大的参考值会生成较宽的脉冲。定时触发事件:当定时器计数达到设定的定时时间时,会触发相应的事件,如产生中断、改变输出状态等。
2023-08-08 21:57:18
222
原创 不能声明为虚函数的函数
因为构造函数本来是为了初始化对象成员才产生的,然而虚函数的目的是为了在完全不了解细节的情况下也能正确处理对象,两者根本不能“ 好好相处 ”。因为虚函数要对不同类型的对象产生不同的动作,如果将构造函数定义成虚函数,那么对象都没有产生,怎么完成想要的动作?:当我们把一个函数声明为一个类的友元函数时,它只是一个可以访问类内成员的普通函数,并不是这个类的成员函数,自然也不能在自己的类内将它声明为虚函数。:定义虚函数的主要目的是为了重写达到多态,所以普通函数声明为虚函数没有意义,因此编译器在编译时就绑定了它。
2023-08-07 21:04:06
39
原创 求结构体、嵌套结构体总大小
3.结构体变量中的每个成员相对于结构体首地址的偏移量,都是该成员基本数据类型所占字节数的整数倍。1.第一个成员在于结构体变量偏移量为0的地址处。2.嵌套结构体大小,嵌套结构体在结构体中。
2023-08-06 10:19:52
124
原创 字符数组作为参数时,会退化为一个指针
注意到,array的大小是6(包括结尾的空字符\0),而在func函数中,arr的大小却是8字节(64位系统下的指针大小)。这说明在函数中,arr被视为一个指向字符的指针。当你传递一个字符数组作为参数时,它在函数的形参中将被解释为一个指向字符的指针,而不是一个字符数组。这是因为在C和许多其他编程语言中,数组本质上是通过指针来表示的。在主函数(main)中,我们定义了一个字符数组array,并查看了其大小和地址。然后,我们将array传递给func函数,并在函数中同样打印了该参数的大小和地址。
2023-08-05 08:58:29
85
原创 线程、进程以及他们的区别
线程是进程内的执行流,一个进程可以有一个或多个线程,每个线程都有自己的执行路径、栈空间和执行状态。线程的主要作用是实现并发执行,即多个任务在同一时间段内同时进行,使得程序能够同时处理多个操作,从而提高程序的响应性和效率。每个进程都有自己的内存空间和系统资源,包括打开的文件、网络连接、进程ID等。切换开销:进程切换需要保存和恢复整个进程的上下文,开销较大;线程之间是并发执行的,共享进程的资源,需要注意同步问题。资源占用:进程拥有独立的内存空间和系统资源,而线程共享进程的资源。
2023-08-04 20:25:36
38
原创 检索数据库
2.构建查询语句:使用数据库查询语言(如SQL)编写查询语句来检索所需的数据。3.执行查询:使用连接对象调用执行查询的方法或函数,将查询语句传递给数据库服务器执行。1.连接数据库:使用适当的数据库连接库或驱动程序,根据数据库类型建立与数据库的连接。4.获取查询结果:获取执行查询后的结果,通常以数据集(如结果集、游标等)的形式返回。5.处理结果:对于每条检索到的数据,你可以应用适当的业务逻辑来处理数据,进行计算、过滤或展示等操作。6.关闭连接:在完成数据库操作后,记得关闭数据库连接,释放相关资源。
2023-08-03 19:55:57
180
原创 Unable to open serial 无法打开串行端口
串口工具“CH341SER.EXE”安装,并且不要叉掉,可以让他最小化,在连接串口。端口连接不上,提示“Unable to open serial”无法打开串行端口。
2023-08-02 21:05:28
3741
原创 参数宏、宏函数与内联函数:
宏名无类型,它的参数也无类型,只是一个符号代表,展开时带入指定的字符即可。宏定义时 ,可以是任何类型的数据。3.inline关键字只是对编译器的一个定义,如果函数不符合内联函数的标准,编译器就会把这个函数当成普通函数。3 函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致,应进行类型转换;的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。,因为每展开一次都使程序增长,而函数调用不使源程序变长。而使用带参的宏只是进行简单的。的,分配临时的内存单元;2.有参数检测更安全。
2023-08-01 20:47:33
16
1
原创 arm指令
是一条加载立即数到寄存器的指令,它将一个立即数地址(0x1234)加载到寄存器r0中。相反,MSR (Move to Special register from Register) 是一种ARM指令,用于将通用寄存器中的值移动到特殊寄存器中。MRS (Move to Register from Special register) 是一种ARM指令,用于将特殊寄存器的值移动到通用寄存器中。,{r0-r12,lr} @@ 将r0-r12,r14寄存器 统统存入sp指向栈空间。将寄存器内容写入到内存。
2023-07-31 20:38:20
25
1
原创 标准I/O和文件I/O区别
1.标准I/O(Standard I/O)使用标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)作为输入和输出的来源。它提供了一系列的函数,如printf、scanf等,用于从标准输入流读取数据,将数据写入到标准输出流或标准错误流。在标准输入中,当使用scanf或相关函数从标准输入中读取数据时,数据首先会被读取到缓冲区,然后再从缓冲区中提取相应的数据进行处理。标准I/O和文件I/O是在编程中用于处理输入和输出操作的两种不同的方法。高级别的I/O操作,使用库函数,更简便易用。
2023-07-30 09:17:12
104
1
原创 怎么检测服务器连接状态是否断开
select()函数:可以用于监视一组文件描述符(包括套接字)是否准备好进行读写操作。当套接字连接断开或有消息到达时,select()函数会返回相应的状态。当连接断开时,该函数可能返回一个错误代码, 可根据该错误代码判断连接是否已断开。如果发送失败,该函数可能返回一个错误代码,可以通过检查该代码判断连接是否断开。getsockopt()函数:可以用于查询套接字选项的值。你可以使用它来检索套接字错误状态,例如连接是否断开。在C语言中,你可以使用套接字(socket)编程相关的函数来检测服务器连接状态。
2023-07-29 21:26:04
771
原创 C语言中strlen和sizeof区别:
strlen计算的是‘\0’之前的字符个数,sizeof计算所占空间内存的大小;strlen是库函数,使用时需要引用;sizeof是一个运算符号;strlen只能用char做参数,sizeof可以用类型做参数。strlen计算时不包含'\0',sizeof包含'\0';sizeof类型是unsigned int ,无符号整型。strlen遇到'\0'才结束;
2023-07-28 21:31:30
61
1
原创 ARM体系结构主要有七种工作模式
未定义指令模式(Undefined Instruction Mode):当ARM处理器遇到无法识别或不支持的指令时,会进入未定义指令模式。数据继续模式(Data Abort Mode):当访问非法的内存地址或发生数据访问错误时,ARM处理器会进入数据继续模式。在该模式下,ARM处理器可以一次处理更多的中断请求,提供低延迟的响应。在中断模式下,ARM处理器提供一组较少的寄存器用于保存中断处理的上下文。系统模式(System Mode):是ARM体系结构的特权模式之一,提供给操作系统内核使用。
2023-07-27 22:30:56
749
1
原创 虚函数、虚继承、析构函数、构造函数
当基类指针指向派生类对象并且通过基类指针删除对象时,如果析构函数被声明为虚函数,将会触发动态绑定,从而调用派生类的析构函数,确保在多态情况下正确执行析构操作。当一个派生类从多个基类继承,并且这些基类之间存在共同的基类(也称为虚基类),为了避免出现多份共同基类的实例,可以使用虚继承。当基类中的函数被声明为虚函数时,派生类可以通过覆盖(重写)这个函数,实现自己的版本。1.构造函数不能被声明为虚函数,因为构造函数在对象创建阶段就会被调用,还没有确定对象的具体类型,这是静态绑定的过程,不符合虚函数的动态绑定特性。
2023-07-26 22:53:15
89
1
原创 虚函数和纯虚函数区别
实现要求:虚函数在基类中有函数体的实现,实现了默认的行为,但也可以在派生类中进行覆盖实现。纯虚函数在基类中只有声明,没有函数体的实现,要求派生类必须实现该函数。对象实例化:虚函数所在的类可以实例化对象,但是若类中存在纯虚函数,则该类成为抽象类,无法实例化对象。只能通过派生类来实例化对象。
2023-07-26 22:22:14
44
1
原创 在C语言中,判断当前系统的字节序是大端还是小端
在这个示例代码中,我们使用了一个名为test的联合体。联合体包含一个整数类型的成员i和一个字符数组类型的成员c,长度为4个字节。我们将整数值1存储到test.i中,并通过test1.c的各个元素来判断字节序。如果低地址存放的是值的最低位,那么c[0]的值将为1;如果低地址存放的是值的最高位,c[0]的值将为0。该方法通过将int类型的指针转换为char类型的指针,然后判断指针指向的内存中的值,来确定字节序。大端模式是高位字节存储在低位地址,小端模式是高位字节存储在高位地址。
2023-07-26 20:53:13
253
1
原创 c语言中stat函数作用
结构体中的成员变量,可以获取文件的各种属性,例如文件大小、修改时间等。这些属性可以用于文件操作、文件系统操作、权限控制等方面的判断和操作。是一个用于获取文件或文件夹状态信息的函数,通常在C编程中使用。它可以用于检查文件的存在性、文件类型、文件大小、修改时间等属性。结构体中,并返回一个零值表示调用成功,返回-1表示调用失败。结构体的指针,用于存储获取到的文件状态信息。函数后,函数会将文件或目录的状态信息填充到。:表示文件或目录的路径名。
2023-07-25 00:02:04
1869
原创 电脑的编码格式与应用程序所需的编码格式不一致?可以使用Qt的QTextCodec类来处理编码转换。
通过设置适当的默认编码格式,将确保应用程序正确处理与系统不一致的编码格式。这样,当你处理从外部来源(如文件、网络)获取的文本数据时,Qt会自动进行编码转换,以确保正确的显示和处理。首先,你需要确定应用程序所需的编码格式。假设你的应用程序需要使用UTF-8编码格式。函数设置C字符串的默认编码格式。函数设置系统的默认编码格式,或者使用。
2023-07-24 22:56:16
218
原创 一个vector容器中连续插入数据,没有更新迭代器位置,导致删除某个数据错误
迭代器失效原因:当进行插入操作时,如果容器的内部存储空间已满或需要更多空间来容纳新元素,容器会重新分配一块更大的内存空间,并将原有的元素从旧的内存空间拷贝到新的内存空间。因此,如果在插入操作后继续使用之前获取的迭代器,可能会导致未定义的行为,例如访问无效的内存地址、引发异常或产生错误结果。当您在同一迭代器位置连续插入元素时,由于插入元素后可能发生内存重新分配和元素位置改变,最初的迭代器位置将会失效。由于插入操作可能导致迭代器失效,因此在删除时使用已失效的迭代器会导致未定义的行为。
2023-07-23 13:43:32
201
原创 C++中存在的显示调用,隐式调用,虚析构函数,析构函数
显示调用:指的是在代码中明确指定要调用的函数名称和参数,这样调用语句明确地指定了要调用的函数。为了避免重复调用父类的析构函数,子类的析构函数应该显式调用父类的析构函数,并且应该在子类析构函数的代码的末尾调用父类的析构函数,确保资源的正确释放。隐式调用:指的是在代码中通过语言规则或编译器自动插入的机制触发函数的调用,而不需要显式指定函数的名称和参数列表。要实现多态析构,即在派生类中正确调用析构函数,需要将基类的析构函数声明为虚函数。这样,在通过基类指针删除派生类对象时,将正确调用派生类的析构函数。
2023-07-23 10:12:02
1172
原创 const修饰的变量,函数,成员变量,成员函数注意事项
用于成员属性:const修饰成员变量表示该成员变量是常量,其值在对象创建时初始化后不能再被修改。const成员变量必须在类的构造函数的初始化列表中进行初始化,因为它们不能在构造函数体内赋值。用于成员函数,表示该函数不会修改对象的状态。这样的成员函数称为常量成员函数,只能读取对象的数据成员,而不能修改它们。用于函数参数,表示参数是只读的,函数内部不能修改它的值。用于函数返回类型,表示函数返回的值是只读的,不能被修改。前后,表示指针和指向的内容都是只读。前面,表示指针指向的内容为只读。
2023-07-22 23:14:14
131
原创 static修饰的变量与函数
静态成员变量:在类内部,使用关键字"static"声明的成员变量被称为静态成员变量。静态成员变量在类的多个对象之间共享,只有一份空间存在,可以通过类名直接访问或对象来访问静态成员变量。静态成员函数:使用关键字"static"声明的类成员函数被称为静态成员函数。静态局部变量:在函数内部,使用关键字"static"声明的变量被称为静态局部变量。静态全局变量:在所有函数外部,使用关键字"static"声明的变量被称为静态全局变量。静态函数:使用关键字"static"声明的函数被称为静态函数。
2023-07-22 21:16:29
84
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人