- 博客(48)
- 资源 (3)
- 收藏
- 关注
原创 C++的多态特性及private
显然一个一个写class很麻烦,使用多态的重要性就体现出来了,我设计一个shape类,圆柱圆锥作为shape的派生类,只需要重写计算体积的函数就行了。2、shape的材质、ID号(protect):不同的shape有不同的材质,需要派生的时候单独设置。成员允许派生类访问基类的内部实现细节,这是实现多态行为的基础,派生类可以直接访问基类的。:例如我想实现一个shape模块,shape目前有圆柱、圆锥、球、正方体,需要实现功能。1、shape的体积、表面积、弹性系数(public):提供外部接口,让我们访问。
2025-06-03 14:37:56
480
原创 enum的用法
是一种编程语言中的关键字,用于自定义枚举类型,枚举类型是一种特殊的数据类型,它允许为一组相关的值赋予固定的、有限的标识符。提高代码的可读性和安全性。它能有效避免命名污染和类型错误,尤其在大型项目中优势明显。:除非有兼容性需求,否则始终使用enum class。
2025-06-03 14:07:05
99
原创 C++函数指针与注册器实现
本文讲解了C++中单例模式和函数指针的应用。单例模式用于确保类仅有一个实例,适合全局对象管理。函数指针通过存储函数地址实现动态调用,可用typedef简化声明。文中展示了函数指针的定义、赋值、调用及作为参数传递的示例,并结合注册器实现案例,演示了如何通过函数指针注册键值对(如"test_type"映射到MyTestCreator函数),完成算子类型的动态创建功能。代码示例包括基本用法和typedef优化形式。
2025-05-29 10:25:20
165
原创 Windows和Linux编译环境及编译器总结
最近学习了一些linux和Windows不同平台的开源代码,碰到最头疼的问题就是环境配置问题,不同的操作系统下无论是编译方式还是编译器,设置的方法都不同,还有环境变量的配置也有差异,这里系统性的总结一下,防止日后遗忘。
2025-04-23 19:57:53
473
原创 CNN和LSTM的计算复杂度分析
今天做边缘计算的时候,在评估模型性能的时候发现NPU计算的大部分时间都花在了LSTM上,使用的是Bi-LSTM(耗时占比98%),CNN耗时很短,不禁会思考为什么LSTM会花费这么久时间。首先声明一下实验条件:这里。
2025-03-27 19:10:31
556
原创 浅谈神经网络模型保存格式
使用直接保存整个模型对象。:torch.save(model.state_dict(), 'model_state_dict.pth'),调用模型时需要手动初始化模型,结构必须和参数一致,否则会报错,优点是体积小(对于小模型两种格式大小差不多):ONNX(Open Neural Network Exchange)格式,便于跨平台使用。
2025-03-12 14:13:21
302
原创 Buildroot学习笔记
Buildroot 是一个工具, 它使用交叉编译, 可以简化和自动化为嵌入式系统构建一个完整 Linux 系统的过程。。Buildroot 可以独立应用于这些选项的任意组合(例如, 您可以使用现有的交叉编译工具链,通过 Buildroot 来单独构建根文件系统)。Buildroot 主要对使用嵌入式系统的用户有用。它们可以是 PowerPC 处理器、 MIPS 处理器、 ARM处理器等,
2025-02-26 13:27:47
877
原创 命令行参数解释
短选项字符(如'w':长选项字符串(如"width":指向存储解析结果的变量的指针。:选项的描述信息,用于帮助信息。NULL:通常为NULL,保留参数。最后两位一般是0,0:短选项字符(如'n':长选项字符串(如"name":指向存储解析结果的字符数组或字符串指针。:选项的描述信息,用于帮助信息。NULL:通常为NULL,保留参数。最后两位一般是0,0。
2025-02-17 19:08:38
324
原创 Cmake学习笔记
add_executable 同样也是一个命令,用于生成一个可执行文件, 在本例中传入了两个参数,第一个参数表示生成的可执行文件对应的文件名,第二个参数表示对应的源文件;add_library 命令用于生成库文件,在本例中我们传入了两个参数,第一个参数表示库文件的名字,需要注意的是,这个名字是不包含前缀和后缀的名字;cmake 仅仅只是根据不同平台生成对应的 Makefile,最终还是通过 make工具来编译工程源码,但是 cmake 却是跨平台的。,所以 cmake 是可以实现跨平台的编译工具。
2025-02-02 23:28:59
526
原创 Rk3588芯片介绍(含数据手册)
提供了硬件加速,RK3588支持H.265和VP9解码器通过8K@60fps, H.264解码器8K@30fps和AV1解码器4K@60fps,也支持H.264和H.265编码器通过8K@30fps,高质量的JPEG编码器/解码器,专门的图像预处理和后处理。RK3588是一款低功耗,高性能的处理器,适用于基于arm的PC和边缘计算设备,个人移动互联网设备和其他数字多媒体应用,集成了四核Cortex-A76和四核Cortex-A55以及单独的NEON协处理器。pwd=9fpc 提取码: 9fpc。
2025-01-31 20:32:26
2875
原创 基于机器学习的故障诊断(入门向)
EMD可以将信号分解为多个IMFs,每个IMF代表信号中的一个特定频率和幅度调制的成分。这使得EMD能够提供对信号的时频特征进行分析的能力特征提取用到的,是一种自适应的信号分解方法,通过将信号分解为若干个本征模态函数(Intrinsic Mode Functions, IMFs)。每个IMF代表信号在不同频率和幅度上的振动。EMD不需要预先选择基函数,而是根据信号自身的特征进行分解。可以获得信号的不同的频率成分,从高频到低频进行分解,直到无法继续分解后结束。
2025-01-08 13:38:03
1847
原创 信号的噪声处理及降噪方法
信噪比(Signal-to-noise ratio, SNR),指信号功率与噪声功率的比,也为幅度平方的比,信噪比是衡量降噪程度最直观的量,信噪比越大,信号中包含的噪声越少,降噪效果越明显。波形相似系数(Normalized Correlation Cofficient, NCC)反映去噪前后信号波形的整体相似度,不能表征波形震荡变化的细节,NCC越接近1,信号之间的相关性越高。
2025-01-07 10:37:20
3896
原创 QT故障诊断(SVM、CNN)进行数据分类(已实现)
列表推导式是从左到右进行嵌套的,按方框进行遍历,最后得到x,返回x*x,类似于C++std的遍历,形式比较简洁。1.调用SVM的C语言库:麻烦,要专门去找库,cmake可能方便一点,我的QT用的qmake,加起来比较麻烦。主要框架有一下几个部分:注意SVM模型的选择,我这里是非线性的选择的rbf。2.QT调用Python文件:简单,有现成的代码。后续就是进行训练SVM模型。一、QT实现SVM的方法。未完待续........二、python代码。
2025-01-06 22:24:28
647
原创 表达式的计算结果不是常数
产生错误:因为定义了一个变量,在数组初始化时使用变量初始化数组大小,产生报错。总结:std的标准库还是最好用的,都开始写c++了,肯定要发挥c++的特性。1.使用常量初始化数组。可以避免手动管理内存。
2025-01-06 10:22:17
294
原创 C++构造函数传入常量
常量的类型如下:基本数据类型常量:字符串常量:1.const关键字2.#define宏定义3.使用 关键字(编译调用)三、C++构造函数如何声明常量 (使用引用的方式传参).h文件.c文件
2024-12-28 12:22:08
315
原创 QT运行导入python(pytorch)程序进行深度学习(qmake)
Qt报错dependent ‘..\..\..\..\..\..\Qt\5.14.2\msvc2017\include\QtWidgets\QMainWindow‘ does not exist:pro文件添加QMAKE_PROJECT_DEPTH = 0。6.这里的python程序,就使用上文提到那篇文章的程序,打印hello,这里会显示打不开python文件,需要自己手动添加编译器路径。3.导入PYTHON环境,自己添加一个新的,参数和工作目录不变,执行挡选择你的含有pytorch的python环境。
2024-12-24 21:21:16
1101
原创 GC9A01驱动移植(HALL库)
最近在做LVGL的移植,用到的屏幕驱动时GC9A01的,记录一下学习历程,防止日后遗忘。SPI的协议主要有两个部分:CS和CLK拉低后即可通信,拉高结束通信。
2024-11-13 16:25:56
1006
原创 VDD、VBAT、VDDA、VREF+区别
为了提高转换的精确度,ADC使用一个独立的电源供电,过滤和屏蔽来自印刷电路板上的毛刺干扰,ADC的电源引脚为VDDA是ADC参考电压,VREF+通常在100pin以上的芯片会存在,100pin一下的芯片仅存在VDDA,实际上VDDA与VREF相连接。使用电池或其他电源连接到VBAT 脚上,当VDD 断电时,可以保存备份寄存器的内容和维持RTC的功能。
2023-05-16 10:59:56
4987
原创 按键的短按和长按检测
在中断服务函数中加一个比如10ms的延时函数,延时时间的长短取决于实际所用的按键特性,只要延时时间比抖动时间略大即可。原理很简单,加了延时就避开了抖动的这段时间,在延时之后判断引脚电平,如果为低电平就表示是按下。这个方法很简单,但是不好的地方是延时占用MCU资源。尤其是这里的BLE应用,在中断服务函数中执行时间长会引起蓝牙连接中断,所以这里不能这么用,我实际测试当按键按快一点就很容易引起蓝牙连接中断。需要注意的是:10ms定时器不是一个周期性的定时器,它是一次性的,即时间到了之后就停止计时了。
2023-05-15 10:17:47
2124
原创 STM32的功耗模式
有两种方式进入睡眠模式,它的进入方式决定了从睡眠唤醒的方式,分别是 WFI(wait for。在停止模式中可以选择电压调节器为开模式或低功耗模式,可选择内部 FLASH 工作在正常。区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新。:它除了关闭所有的时钟,还把 1.2V 区域的电源也完全关闭了,也就是说,从待机模。:仅关闭了内核时钟,内核停止运行,但其片上外设, CM4 核心的外设全都还照常。进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.2V。
2023-05-11 10:35:35
1180
原创 MPU6050详解(含源码)
前言:MPU6050是一款强大的六轴传感器,需要理解MPU6050首先得有IIC的基础,MPU6050 内部整合了 3 轴陀螺仪和 3 轴加速度传感器,并且含有一个第二 IIC 接口,可用于连接外部磁力传感器,内部有硬件算法支持.
2023-05-06 19:37:09
15591
4
原创 嵌入式C语言基础(STM32)
define是C语言的预处理命令,它用于宏定义,用来将一个标识符定义为一个字符串,该标识符称为宏名,被定义的字符串称为替换文本,采用宏定义的目的主要是方便程序编写。一般放在源文件的前面,称为预处理部分。这个仅仅只是程序文本进行替换,通常用于修改某个数据较为麻烦,使用#define。如果要重命名一个变量,正确操作应该是使用typedef。用法:#define [别名] [字符串]其中,字符串可以是常数、字符串和表达式等。例如:#define Temp 25。
2023-05-05 13:31:19
3256
2
原创 STM32下载电路和启动模式
其中SW使用CLK和SWDIO两个IO引脚分别为PA14和PA13,因此最小系统核心板只有四个引脚。常用的下载模式有两种JTAG(5针)和SW(2针),两种下载模式的引脚是通用的。设置boot0和boot1控制,分别为PB2和PB8,通常为flash启动。
2023-05-03 15:55:20
2310
原创 STM32CubeMX时钟树配置详解(F103)
学习时使用的是stm32f103系列芯片,文档的时钟树属实不适合新手阅读,STM32cube的功能很强大,时钟树清晰明了:首先我们要知道,芯片需要一个频率来进行工作,通常选用的是晶振来提供工作频率,很显然不在芯片内部,是。在上图中,我们仅需要关注蓝色框部分,这里我们(High Speed Extern--高速外部时钟),根据左边可知,输入频率设置为8Mhz。这里有同学可能会去想,为什么LSE时钟源是灰色的,因为在这里。
2023-05-03 10:22:34
7894
原创 串口信息打印规范(含打印技巧)
方法二中,若#define USER_MAIN_DEBUG,则使用user_main_printf();可以直接打印你所需的信息,而且自带\r\n,若未进行宏定义,使用对应函数则打印空白。在每一段串口打印的程序段中,加入#if Log和#endif,开启/屏蔽打印段仅需修改Log的值,为1/0-->打印/不打印信息。这里的串口打印使用printf函数,这里使用了printf重定向(借鉴的)日志级别:info(初始化)、debug(运行过程)、error(报错)[日志级别] 文件名 : 日志信息。
2023-05-02 15:02:10
3052
原创 Linux 触摸屏 (IIC驱动详解)
本文使用触摸屏iic驱动,驱动编写中要使用总线,设备,驱动分层的思想,IIC总线,触摸屏驱动,触摸屏设备,
2023-04-11 10:51:47
1988
原创 Platform虚拟总线(设备驱动分离详解)
platform_device是device的子类,设备数据类型为device,通过device_register向内核注册设备,注册设备时,名字相同时匹配成功,驱动与设备匹配以后驱动的probe函数就会执行。1、无设备树的时候,此时需要驱动开发人员编写设备注册文件,使用platform_device_register函数注册设备,最终执行probe函数。2、有设备树,修改设备树的设备节点即可,当设备与platform的驱动匹配以后,就会执行platform_driver->probe函数。
2023-04-11 10:08:31
431
原创 Linux学习记录(linux的概念及32内核介绍)
Cortex-M3是32位的内核,因此其PC指针可以指向2^32=4G的地址空间,也就是0x0000_0000——0xFFFF_FFFF这一大块空间。根据图中描述,Cortex-M3内核将0x0000_0000——0xFFFF_FFFF这块4G大小的空间分成8大块:代码、SRAM、外设、外部RAM、外部设备、专用外设总线-内部、专用外设总线-外部、特定厂商等。不同类型的STM32单片机的SRAM大小是不一样的,但起始地址都是0x2000 0000,终止地址都是0x2000 0000+其固定的容量大小。
2023-03-27 16:05:05
470
原创 图像边缘检测④( Sobel边缘算子,Prewitt边缘算子,Laplacian边缘算子,Canny边缘算子)
总结:Canny处理图像时,保留图像的细节会更多,适合对于需要细节的边缘检测,衣服褶皱可以检测出来。Prewitt去噪效果比较好,但是不会保留细节部分,保留的大部分是边缘轮廓,轮廓较宽,会有明显断点,不适合处理道路信息,Sobel较综合,图像不错。上述比较推荐的两种算法。
2022-03-02 18:57:55
7773
1
原创 电机驱动详解
从上图可以看出,电路是由四个NMOS管,一个motor,以及VCC,GND所构成的。可以控制栅极的电平高低,来控制NMOS管的开通与关闭,所以可以通过控制四个栅极的状态来控制MOS管的开通与关断,从而达到控制电机正反转的效果。
2022-03-02 18:30:21
26231
3
原创 图像处理MATLAB③(Roberts算子边缘检测,膨胀,滤波,腐蚀,开运算,闭运算使用方法)
Roberts算子是一种斜向偏差分的梯度计算方法,梯度的大小代表边缘的强度,梯度的方向与边缘走向垂直。Roberts算子边缘定位准,但是对噪声敏感。适用于边缘明显而且噪声较少的图像分割,在应用中经常用Roberts算子来提取道路(智能车摄像头采集信息)。
2022-02-28 12:55:38
7222
原创 如何使你的直流电机闭环?(PID讲解)
看了看很多大佬写的PID讲解很全面也很复杂,实在是不适合很多萌新入坑,所以想按自己的理解写一篇通俗易懂的PID算法讲解
2022-02-28 09:52:28
15018
9
stm32C8T6PCB和原理图
2023-05-04
学习原子的课程,找了很久安装包,亲测可用!!!
2023-03-08
基于MATLAB的人脸图像识别(带GUI,使用PCA和ORL)
2022-05-30
六足机器人3D打印模型 (solidworks和犀牛).zip
2021-06-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人