自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 C++智能指针用法及内存管理

其值为NULL(C)或nullptr(C++11 起)。

2025-05-28 18:25:16 294

原创 Windows和Linux编译环境及编译器总结

最近学习了一些linux和Windows不同平台的开源代码,碰到最头疼的问题就是环境配置问题,不同的操作系统下无论是编译方式还是编译器,设置的方法都不同,还有环境变量的配置也有差异,这里系统性的总结一下,防止日后遗忘。

2025-04-23 19:57:53 473

原创 Cudann和Cuda和Tensorrt的关系

最近在做边缘计算相关工作,Tensorrt作为常用的推理引擎,在环境部署的时候需要下载。

2025-04-23 17:12:34 435

原创 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

原创 QT交叉编译环境搭建(Cmake和qmake)

CMake 和qmake

2025-01-27 19:40:47 1272

原创 西储大学CWRU轴承数据集进行SVM分类

从头开始摸索,从完全没学过python和强化学习相关知识,到最终实现SVM分类的一路艰辛,记录一下!

2025-01-10 16:46:25 1271

原创 基于机器学习的故障诊断(入门向)

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

原创 玩转传感器----理解时序和数据采集(DHT11)

该文章以DHT11模块进行分析。

2023-05-04 20:38:29 1393

原创 CAN总线(HALL库使用)

1.闭环特点:速度快,距离短(40m)2.开环特点:速度慢,距离长(1000m)

2023-05-04 00:16:47 1751 1

原创 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

原创 基于Matlab的图像处理②(图像增强技术,中值滤波,均值滤波)

基于Matlab的图像处理②(图像增强技术,中值滤波,均值滤波)

2022-02-28 12:30:59 9204 3

原创 如何使你的直流电机闭环?(PID讲解)

看了看很多大佬写的PID讲解很全面也很复杂,实在是不适合很多萌新入坑,所以想按自己的理解写一篇通俗易懂的PID算法讲解

2022-02-28 09:52:28 15018 9

原创 基于MATLAB的图像处理①(图像导入,对比度调节,多图分区域显示)

基于MATLAB的图像处理(图像导入,对比度调节,多图分区域显示)新手向

2022-02-25 16:56:48 9178

stm32C8T6PCB和原理图

STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装。 ​ 具体参数为: 64K x 8bit的Flash 20K x 8bit的SRAM 37个GPIO,分别为PA0-PA15、PB0-PB15、PC13-PC15、PD0-PD1 2个12bit ADC合计12路通道,外部通道:PA0到PA7以及PB0到PB1。内部通道:温度传感器通道ADC_Channel_16和内部参考电压通道ADC_Channel_17 4个16bit定时器/计数器,分别为TIM1、TIM2、TIM3、TIM4 2个看门狗定时器(独立看门狗IWDG、窗口看门狗WWDG) 1个24bit向下计数的滴答定时器systick 2个IIC,2个SPI,3个USART,1个CAN 内部8MHz时钟HSI最高可倍频到64MHz,外部8MHz时钟HSE最高可倍频到72MHz

2023-05-04

学习原子的课程,找了很久安装包,亲测可用!!!

SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具。SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具。

2023-03-08

基于MATLAB的人脸图像识别(带GUI,使用PCA和ORL)

ORL 人脸库(Olivetti Research Laboratory 人脸数据库),诞生于英国剑桥,该库是目前使用最广泛的标准人脸数据库。PCA 的人脸识别算法的主要思想就是在原始的人脸空间中求出一组正交向量,然后利用 PCA 方法保留其中包含重要人脸信息的向量,由其构成一个新的人脸特征空间,称其为特征脸。后续将待识别人脸与特征脸进行比较 使用方法:使用matlab软件打开gui.m文件,运行即可。

2022-05-30

六足机器人3D打印模型 (solidworks和犀牛).zip

适用于想做六足机器人的朋友,本文件包含六足机器人的主体结构,六条足部的三个关节结构,适用于soildworks和犀牛两个软件打开。

2021-06-20

STM32_template.zip

本文档包含stm32f103系列C8T8,RCT6,ZET6的工程模板,还有芯片的数据手册!

2021-06-20

空空如也

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

TA关注的人

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