自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 讲讲String类的常用函数

本文介绍了string类的用法

2025-04-15 17:01:34 290

原创 关于HID设备读写过程中的一些坑

介绍在HID软件软件开发过程中踩的坑

2025-04-15 10:44:46 377

原创 一个支持自定义高亮关键字与搜索统计功能的COMTransmit串口调试工具

本文使用COMTransmit串口调试软件来实现CH9143的AT指令集调试,提供从硬件连接到软件部署的完整解决方案。调试过程支持单条/批量指令发送,结合关键字高亮、搜索关键字及日志模式,有效应对复杂测试场景,提升调试效率。在线反馈机制允许用户无缝提交优化建议,形成调试-改进闭环。

2025-04-14 10:55:55 684

原创 Windows BLE调试工具使用指南

本文介绍了一款Windows上的BLE调试软件——BLEDebug,通过“设备扫描--设备查找--设备连接--设备调试”来介绍其功能,全方位展示了使用效果。

2025-03-27 10:55:05 659

原创 为什么Windows平台上很少有BLE调试工具?

在Windows平台上,BLE(蓝牙低功耗)调试工具相对较少的原因涉及技术限制、市场需求、开发成本和生态系统的多重因素。

2025-03-13 15:47:02 286

原创 PC端BLE调试工具——BLEDebug实现蓝牙/串口透传调试

本文介绍了Windows上的BLE调试助手,通过这个工具实现蓝牙与串口的透传。

2025-03-13 15:19:02 797

原创 运算符重载(基础知识回顾)

重载的运算符可能是单目运算符或者双目运算符,双目运算符比如a+b,就可以重载为a.operate U (b),而单目运算符比如++,--(前置或者后置),不需要传递参数,重载类型为a.operate U(),但是后置的时候需要设置一个整形参数,这个参数没有任何作用,仅做形式上的区分。运算符重载实际上属于函数重载,因为在运算符重载中,不是运算符表达式而是调用运算符函数,操作数变成了运算符函数的参数,运算符函数的参数不同时调用不同的函数。此整型形参没有实际意义,只是为了区分前置运算符和后置运算符的重载。

2024-11-29 11:01:06 823

原创 继承与派生之析构函数

派生类的析构函数一般只需要在其函数体中清理新增成员就可以了,对于继承的基类成员和派生类内嵌对象成员的清理,则一般由系统自动调用基类和对象成员的析构函数来完成。这个执行过程的顺序正好和派生类构造函数相反:1.执行析构函数语句清理派生类的新增成员;2.调用内嵌对象成员所属类的析构函数清理派生类内嵌对象成员,各个对象成员的清理顺序与其在构造函数中的构造顺序相反;3.调用基类的析构函数清理继承的基类成员,如果是多继承则各个基类的清理顺序也与其在构造函数中的构造顺序相反。

2024-11-27 16:27:48 212

原创 继承与派生之构造函数(基础知识回顾)

主函数main中声明了派生类Child的对象child,构造对象child时会调用Child类的构造函数,执行时先调用基类的构造函数,调用顺序按照它们在派生类声明时从左到右出现的顺序,即按照先Base2再Base1后Base3的顺序,调用基类构造函数后就调用内嵌对象成员的构造函数,按照它们在派生类中声明的顺序调用,即按照先b1再b2后b3的顺序。派生类的构造函数需要做的工作有,使用传递给派生类的参数,调用基类的构造函数和内嵌对象成员的构造函数来初始化它们的数据成员,再添加新语句初始化派生类新成员。

2024-11-27 15:55:31 490

原创 数组作为函数参数

例如,如下代码中将在主函数中初始化一个矩阵并将每个元素都输出,然后调用子函数,分别计算每一行的元素之和,将和直接存放在每行的第一个元素中,返回主函数之后输出各行元素的和。也就是说形参数组的首地址跟实参是一样的,后面的元素根据其在内存中的顺序进行对应,对应的元素的内存地址相同,所以实参数组的元素个数应该等于或多于形参数组的元素个数。函数的参数可以是数组元素也可以是数组名。数组元素作为函数参数时跟同类型的变量作函数参数效果一样。数组名作为函数参数时,实参和形参都须是数组名,并且数组类型要一样。

2024-11-25 13:58:32 185

原创 编译预处理程序

main.cpp包含了file1.h文件,file1.h又包含了head.h文件,main.cpp还包含了file2.h文件,file2.h也包含了head.h文件,那么main.cpp就包含了两次head.h文件,在编译时就会报错,说head.h中的类A重复定义了。在这个改好的head.h文件中,上来会先判断HEAD_H是否被定义过,如果没有被定义过,则head.h文件还没参与过编译,就编译此文件中的源代码,同时定义HEAD_H,标记head.h文件已经参与过编译。使用形式为:define(标识符)。

2024-11-25 11:37:05 1084

原创 常引用,常对象和常成员函数

上面的R类中声明了两个同名函数print,第二个是常成员函数。在main函数中定义了两个对象a和b,b是常对象,通过a调用的是没有用const声明的函数,而通过b调用的是用const声明的常成员函数。类中用const声明的成员函数就是常成员函数。常成员函数的声明形式为:类型说明符 函数名(参数表) const;常对象的声明形式为:类名 const 对象名 或者 const 类名 对象名。类的数据成员也可以是常量和常引用,用const声明的数据成员就是常数据成员。用const声明的引用就是常引用。

2024-11-22 17:16:10 446

原创 数据共享(基础知识回顾)

在对象A声明时,调用构造函数,m_nCount加1,对象B声明时,调用拷贝构造函数,m_nCount又加1,两次都访问的A和B共同维护的静态数据成员,这样就实现了对象间的数据共享。,如果类B是类A的友元,类B的成员函数可以访问类A对象的私有成员和保护成员,但是类A的成员函数不能访问类B对象的私有成员和保护成员。类B是类A的友元类,B的成员函数可以访问类A的对象的私有成员和保护成员。,如果类B是类A的友元,类C又是类B的友元,类C和类A如果没有声明则没有友元关系,另外,学生A,6 学生人数:1。

2024-11-22 14:52:41 923

原创 生存期(基础知识回顾)

具体点说,第一次调用完fun函数后,fun中变量x的值是7,y=x=7,在第二次调用fun函数时,x不会被赋值为4,而是继续使用7作为自己的值。1.静态生存期——某个对象它的生存期与程序的运行期相同,就是说在程序运行期间它都不会释放。(使用关键字static修饰对象)注:静态局部变量如果没有进行显式初始化,则它将被默认初始化为0。2.动态生存期——常见的全局变量与局部变量。输出结果为:---MAIN---

2024-11-15 16:22:56 221

原创 类模板(基础知识回顾)

类模板——为类声明一种模板,使得类中的某些数据成员,或某些成员函数的参数,又或者是某些成员函数的返回值可以取任意的数据类型,包括基本数据类型和自定义数据类型。

2024-11-15 14:46:29 205

原创 类的组合(基础知识回顾)

比如,Point::Point(int xx, int yy):X(xx),Y(yy) { },这个定义应该怎么理解呢?就是我们在构造Point类的对象时传入实参初始化xx和yy,然后用xx的值初始化Point类的数据成员X,用yy的值初始化数据成员Y。因为内嵌对象是组合类的对象的一部分,所以在构造组合类的对象时不但要对基本数据类型的成员进行初始化,还要对内嵌对象成员进行初始化。类的组合——在一个类里内嵌了其他类的对象作为成员的情况,它们之间的关系是一种包含与被包含的关系。Point拷贝构造函数被调用。

2024-11-15 14:18:47 170

原创 重载函数与函数模版(基础知识回顾)

观察上述代码可知,这两个函数除了返回类型与参数类型不一致,其他功能完全相同,因此可以写一段通用的代码适用于多种不同的数据类型,代码的复用性与开发效率也会提高。这就要函数模板来实现了。add(x,y)时自动调用int add(int x,int y),add(c,d)时自动调用float(float x,float y)。1.重载函数——两个以上的函数取相同的函数名,但是函数形参的个数或者类型不同。

2024-11-15 13:52:13 140

原创 构造函数与析构函数(基础知识回顾)

构造函数也是一个成员函数,所以它可以直接访问类的所有数据成员,可以是内联函数,可以带有形参表,可以带默认的形参值,也可以重载,就是有若干个名字相同但形参个数或者类型不同的构造函数。自己声明了构造函数,系统就不会调用默认的了,而且可以自己在构造函数中进行一些初始化操作。析构函数是类的一个公有函数成员,它的名称是在类名前加“~”形成,没有返回值,也不能有任何形参。它在对象被创建的时候由系统自动调用,我们只需要使用默认的构造函数或者自己定义构造函数,而不用管系统怎么调用它。

2024-09-02 14:31:59 308

原创 函数的参数传递(基础知识回顾)

用引用调用后,形参就是实参的别名而已,对形参做的任何改变都会影响实参发生同样的改变。值调用就是调用函数时,给形参分配内存空间,将实参拷贝给形参,之后的函数执行中形参和实参就脱离了关系,谁都不影响谁。引用是一种特殊类型的变量,我们可以认为它是另一个变量的别名,利用引用名和原来的变量名访问变量的效果是一样的。值调用和引用调用的区别只是函数的形参写法不同,主调函数调用被调函数时的调用语句是一样的。x和y分别传值给a和b后,a跟b的值在Swap内怎样变化都影响不到x和y,所以两次输出x和y的值没有变化。

2024-08-30 16:47:54 323

原创 自定义数据类型(基础知识回顾)

编程时除了可以使用基本数据类型名和自定义的数据类型名以外还可以给一个已经存在的数据类型起个别名,这样做有几个好处,可以给已有的类型起一个有意义的名字,我们一看就知道它表示什么,提高可读性;还可以给较长的类型名另起一个短名。描述一件事情时只能取几个有限的值,比如,一周只有星期一、星期二...星期日七天,我们可以用0到6的整数表示星期一到星期日,7,8,9等都不是合法数据,如果我们用整数来表示星期几那就需要专门判断下是不是在0到6之间,但是如果用枚举类型定义就没有这种问题,因为枚举类型就那几个可能的值。

2024-08-30 14:38:42 972

原创 运算符与表达式(基础知识回顾)

右移是按照指定的位数将一个数的二进制值向右移位,右移后,移出的低位舍弃,如果是无符号数则高位补0,如果是有符号数,则高位补符号位或0,一般补符号位。比如,char型变量的值是-8,则它在内存中的二进制补码值是11111000,所以a>>2则需要将最右边两个0移出,最左边补两个1,因为符号位是1,则结果为11111110,对其再求补码就得到最终结果-2。=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|= ,优先级与=一致,如x*=y+3,x=x*y+3。~,按位取反,一元运算符。

2024-08-30 13:58:34 436

原创 HID设备调试有感

调试HID设备中遇到的问题

2024-08-29 16:48:46 171

原创 推荐几个超级好用的HID调试工具

介绍好用的HID调试工具

2024-08-29 16:27:45 3161 7

HID调试工具,用于调试HID设备,支持单条/字符串/文件发送 支持中断/控制/特征报告三种传输方式,支持自定义高亮显示数据

HID调试工具,用于调试HID设备,查找设备齐全,包括所有复合设备。支持单条/字符串/文件发送,支持无延时传输,对高速/全速设备友好。支持中断/控制/特征报告三种传输方式,支持首字节追加、解析为数据长度。支持自定义高亮显示数据。界面清晰,功能分区明显,

2024-09-13

空空如也

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

TA关注的人

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