自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 资源 (13)
  • 收藏
  • 关注

原创 CMake 脚本命令(Scripting Commands)之find_library

find_library 一般直接去查找依赖库文件,和find_package 不一样,find_package 找的是 .cmake 文件,而find_library 直接找 .so 或者 .a 文件。和find_path 一样,命令的执行结果会默认缓存到 CMakeCache.txt 中。

2024-03-14 23:27:25 382

原创 CMake 脚本命令(Scripting Commands)之find_package

知其然也要知其所以然,find_package对我们来说是一个黑盒子,那么它是具体通过什么方式来查找到我们依赖的库文件的路径的呢。由以上的例子可以看到,对于原生支持Cmake编译和安装的库通常会安装Config模式的配置文件到对应目录,这个配置文件直接配置了头文件库文件的路径以及各种cmake变量供find_package使用。(find_package的搜索路径是一系列的集合,而且在linux,windows,mac上都会有所区别,需要的可以参考官方文档。这两个文件来引入我们需要的库。

2024-03-14 23:18:44 1214

原创 解决Qtcreator搜狗输入法无法输入中文问题

注意:我只拷贝到了上述博客的路径1中了,并且我拷贝完成后依旧无法输入中文,可能原因是命令安装的fcitx版本只支持Qt4编写的QtCreator与目前主流的QtCreator不兼容(目前主流的QtCreator均使用Qt编写)一、尝试拷贝系统自带libfcitxplatforminputcontextplugin.so到Qt安装目录/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts/解压源码,创建编译目录build,然后执行cmake命令。

2024-03-05 00:27:52 1077

原创 C++ Lambda表达式基础用法

C++11标准lambda表达式的语法非常简单,定义如下,并且语法规定lambda表达式如果存在说明符,那么形参列表不能省略。标准还规定能捕获的变量必须是一个自动存储类型。简单来说就是非静态的局部变量、非全局变量。[ captures ] —— 捕获列表它可以捕获当前函数作用域的零个或多个变量,变量之间用逗号分隔。另外,捕获列表的捕获方式有两种:按值捕获和引用捕获。 捕获引用的语法与捕获值只有一个&的区别,要表达捕获引用我们只需要在捕获变量之前加上&,类似于取变量指针。只不过这里捕获的是引用而

2023-12-20 20:13:49 954

原创 C++中auto、decltype的用法

看到这里,我们感觉decltype好像没有什么用,但事实上decltype主要的用处在函数返回类型后置,库函数的编写者可能使用的更多。在C++11标准中,auto修饰静态成员变量时必须使用const修饰,这会导致成员变量常量化,为了解决这个问题,6. 通常情况下,decltype(e)所推导的类型会同步e的cv限定符,但是还有其他情况,,那么decltype是不是就没有存在的意义了,答案当然是否定的了,例如以下代码。如果并不存在这样的类型,或者e是一组重载函数,则无法进行推导。

2023-12-10 17:26:18 127

原创 linux内核常用数据结构之链表源码阅读

讲解linux内核链表基本用法

2023-07-24 23:53:35 297

原创 C/C++性能提升之cache分析

0方式的 cpu_core/L1-dcache-load-misses/ 是36,246 , cpu_core/L1-dcache-load/ 是848,148,941,命中率为0.999957265。1方式的 cpu_core/L1-dcache-load-misses/ 是38,540 , cpu_core/L1-dcache-load/ 是848,192,764,命中率为0.999954562。所以我们写代码时应该多注意对齐、以及cache这些问题,感兴趣的同学还可以多试试不以64对齐的情况。

2023-06-04 23:25:58 1345

原创 C++定位new用法及注意事项

虽然对象1及3的空间被回收,但对象1与3并未析构!2.在使用delete回收空间时,可以发现并未回收pc1与pc3,其原因在于pc1与pc3指向的对象位于内存缓冲区,该空间并不是定位new申请,而是常规new申请的,因此我们需要delete[]回收内存缓冲区,而不是delete pc1与delete pc3。显然,如果类动态地为其成员分配内存,这将引发问题!1.使用定位new创建的对象的地址与内存缓冲区地址一致,说明定位new并没有申请新空间,而构造函数的调用说明定位new的确调用了构造函数。

2023-02-12 14:19:43 879

原创 C++虚析构函数的用法

可以看到,第三种情况下执行的只有基类的构造函数,子类的构造函数并为执行,如果子类的析构函数中有释放堆的操作,那这样便有内存泄露了。一般用在有继承关系的情况下,比如多态。

2023-02-11 21:58:35 124

原创 C++中的强制类型转换

如果一条dynamic_cast语句的转换目标是指针类型并且失败了,则结果为0。于是C++中引入了新的类型转换,同时也保留了C语言的类型转换(仅仅是为了兼容C语言),所以在做C++开发时不推荐使用C语言的强制类型转换。数值问题:比如一个float类型的数据转换为short数据时,肯定会有精度损失(当被转换变量的值超过short的范围)将一个父类指针转换为子类指针,然后我们再操作时访问子类独有的成员时,这很有可能就会出错(比如段错误或者值不对)除此之外,比如没有内存检测(数字转化为地址类型)等。

2023-02-11 21:47:29 1087

原创 基于stm32h743+rtthread的开源项目——板载资源介绍(一)

目前硬件主要是我搭档(大学同学)绘制,软件部分是我,由于我们在使用的过程中会发现一些问题,所以硬件暂时不开源,有需要的同学私聊我

2021-12-11 13:33:18 3804 1

原创 推荐使用一个modbus调试助手

软件下载地址:链接:https://pan.baidu.com/s/1ffv0WHHqFORuSo4tVWl5QA提取码:2dl1打开软件,我们可以看到界面如下,包括常用的一些读写寄存器、线圈输入框我们找一个串口工具盒,将TX与RX连接,发送读写测试一下...

2021-11-22 14:46:34 1647

原创 排序算法(三) 快速排序

#include <stdio.h> int a[101],n;//定义全局变量,这两个变量需要在子函数中使用void quicksort(int left,int right){ int i,j,t,temp; if(left>right) return; temp=a[left]; //temp中存的就是基准数 i=left; j=right; while(i!=j) { //顺序很重要,要先从.

2021-10-24 23:28:26 1980

原创 排序算法(二) 冒泡排序

上一节讲述了最简单快速的排序算法——桶排序,桶排序算法有一个很要命的缺点是浪费空间,相反,它的时间复杂度为O(M+N),是一种空间换时间的策略关于桶排序算法参照博文:https://blog.csdn.net/qq_37120369/article/details/118916335上一节使用桶排序算法排序的是整数,如果现在需要排序的不再是整数而是一些小数,比如将 5.56789,2.12,1.1,3.123,4.1234 这五个数进行从小大排序又该怎么办呢?现在我们来学习另一种新的排序算法:冒

2021-07-22 01:28:41 129 1

翻译 排序算法(一) 最快最简单的排序算法——桶排序

在生活中,到处都存在排序,比如考试排名、价格排序等下面以成绩排序为例子学习桶排序算法1、问题描述现有5个同学,成绩分别是5分、3分、5分、2分、8分(满分10分),按照从大到小排序后是8 5 5 3 2,请用一段程序实现这个问题。2、解决思路首先我们需要申请一个大小为 11 的数组 int a[11]。OK ,现在你已经有了 11 个变量,编号从a[0]~a[10]。刚开始的时候,我们将 a[0]~a[10]都初始化为 0,表示这些分数还都没有人得过。例如 a[0]等于 0 就表示目前还

2021-07-20 00:27:23 612

原创 modbus rtu 485多节点设备调试经验

现象描述:气象站添加485传感器采集数据,单个传感器数据采集测试均正常,当总线上的传感器节点数量超过4个,部分传感器无法响应数据排查思路:1.从机设备的地址是否有冲突;通过RS485转USB集线器将传感器接在电脑的USB上,然后通过串口助手发送指定格式的报文去读取设备地址,最后一一核对是否有冲突的地址。2.485电路问题;a、先向485电路增加匹配电阻(120Ω),现象依旧如上述。b、去掉电容C45,现象依旧如上述。c、更改上下拉电阻,R63与R68为1.

2021-07-14 18:18:20 4931

翻译 RS485相关问题总结

如何诊断RS485总线通讯不稳定的现场问题通讯总线问题的现场诊断,是一件非常考验技术员对于相关协议理论与实践相结合能力的事情,这次说一说RS485总线通讯的问题。而对通讯的故障进行分析和诊断之前,需要对RS485总线的一些基本概念有所了解。一、RS485总线的基本特性根据RS485工业总线标准, RS485工业总线为特性阻抗120Ω的半双工通讯总线,根据485芯片的不同,其最大负载能力有几个级别:32台、128台和256台,但是理论上的标称往往实际上是达不到的,通讯距离越长、波特率越高、线径越细..

2021-07-07 18:27:46 1669

原创 C语言到C++的升级

一、变量定义的升级C++中所有变量均可以在使用的时候再定义;C语言中,所有变量必须先定义再使用(在作用域开始的位置定义)。例如:for(int i = 0;i < 10; i ++){ printf("%d\r\n",i);}在C++这种写法是合法的,而在C语言中编译时会报错二、register关键字升级register关键字是请求编译器将局部变量存储在寄存器中,从而提高效率(现代编译器优化已经做的很好了,所以实际工程中很难看到这个关键字)在C语言中,无法

2021-06-30 21:42:33 330 1

原创 C语言字符串典型问题

例程 1#include <stdio.h>int main(){ char buf[10] = {0}; char src[] = "hello %s"; /* snprintf(),函数原型为int snprintf(char *str, size_t size, const char *format, ...) 将可变参数 “…” 按照format的格式格式化为字符串,然后再将其拷贝至str中。 */ snprintf(buf,sizeof(b

2021-06-10 21:09:13 293 1

原创 C语言实现内存泄漏检测模块

实现检测模块/*文件 mleak.h*/#ifndef _MLEAK_H_#define _MLEAK_H_#include <stdio.h>#include <malloc.h>#define MALLOC(n) my_malloc(n,__FILE__,__LINE__)#define FREE(p) my_free(p)void * my_malloc(size_t n,const char* file,const int line);void m

2021-06-02 23:08:35 352 1

原创 C语言“#pragma”的那些事

#pragma用于指示编译器(预处理阶段)完成一些特定的动作,它有以下特性1、#pragma在不同的编译器间是不可移植的,预处理器会忽略它不认识的#pragma指令2、不同的编译器可能会以不同的方式解释同一条#pragma指令一般用法:#pragma 参数常见的参数有message once packmessage用法:用于在预处理时提供打印版本信息,大多数编译器都有相同的实现#if define(CPLUSPLUS17)#pragma message("C++ versi...

2021-06-02 00:11:51 818 10

原创 C程序中变量等内存布局(二)

之前写过几篇关于C语言内存相关的文章,现在对之前的知识点进行补充https://blog.csdn.net/qq_37120369/article/details/104349078https://blog.csdn.net/qq_37120369/article/details/109553140以Linux下的C程序为例,C程序用gcc编译器默认编译生成名为a.out可执行程序,当我们使用./a.out执行可执行程序时操作系统加载这个可执行程序,产生一个进程。图一为代码在可执行程序中

2021-04-11 11:39:10 183 1

原创 C语言野指针讲解

在实际工程开发中经常会听到“野指针”,那么问题来了,什么是野指针?野指针有什么危害?在介绍野指针之前,先了解一点,指针变量的本质是值,只不过这个值有点特殊,是一个内存地址值“野指针”指的是指针变量中的值是非法的内存地址,但“野指针”不是空指针(NULL),“野指针”指向的内存是不可用的,“野指针”往往会造成内存越界、段错误等问题补充:合法的内存地址包括定义的变量的地址、malloc函数申请堆内存返回的地址(但未使用free释放)介绍过“野指针”的概念后就该了解一下“野指针”的由来,这样.

2021-03-14 01:43:04 6312 3

原创 C语言作用域、生命周期及static关键字学习

很久以前写过一篇关于C语言程序内存分布的博客https://blog.csdn.net/qq_37120369/article/details/104349078现在,再对之前的一些知识进行补充一、作用域:全局变量的作用域有两种情况:1、全局作用域在程序的各个角落都可以访问到2、文件作用域只在当前代码文件中访问并使用局部变量的作用域只在对应“{}”内有效二、生命周期:全局数据区中变量的生命周期从程序运行开始到程序销毁栈空间中变量的生命周期从进入作用域开始到离开作用域销毁

2020-11-07 22:50:09 544 2

原创 C++的string与char* char[]相互转换

这俩天忙着调试一块AD芯片,突然想起今天是程序员日,嗯,也不知道写点什么,那就随笔写点这段时间看的C++吧C++与C语言中最常见的就是字符串了,因此,关于它们自己的转换什么就尤为最重要了首先C++中的string可以被看成是以字符为元素的一种容器一、string 转const char*string有2个函数:一个是.c_str(),一个是data成员函数。其中c_str()确保返回的字符串以‘\0‘结尾,而data不能确保二、string转char*可以用string的一个..

2020-10-24 22:47:48 4592 2

原创 解决MobaXterm使用串口打印中文字符异常

下图是我用串口助手打印stm32的RTC时间时出现的问题,其中格子部分是汉字修改配置后显示正常,步骤如下:1.右键点击左边405对话这个,选择编辑对话2.点击终端设置3.将默认的UTF-8编码改成西欧的编码标准4.重启软件...

2020-08-29 22:27:39 5617 1

原创 用AD19画stm32f103c8t6最小系统(初学经验),开源工程文件

其实一直有学习画板的想法,总是被各种事情耽误,最近抽了点时间学习了最基础的两层板,做为一个新手,迫切想要和大家交流学习经验。这个是我最小系统的原理图这个是3D效果这个是布线铺铜后的效果最后做一下总结 PCB绘制的流程如下: ...

2020-07-01 12:34:34 2968

原创 opencv中图像直方图常见操作之直方图反向投影(三)

直方图反向投影(Back Projection)的原理:参考https://blog.csdn.net/michaelhan3/article/details/73550643直方图反向投影作用:如果两幅图的反向投影矩阵相似或相同,那么我们就可以判定这两幅图这个特征是相同的,区别于判断相似度,相似度参考https://blog.csdn.net/qq_37120369/article/...

2020-03-12 18:15:25 277

原创 opencv中图像直方图常见操作之直方图比较(二)

图像直方图常见操作(一):https://blog.csdn.net/qq_37120369/article/details/1047924271.概述:对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间 然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进 而比较图像本身的相似程度。Opencv提供的比较方法有四种:Correlation 相关性比较...

2020-03-11 19:50:49 430

原创 opencv中图像直方图常见操作之直方图均衡化及直方图计算(一)

一、直方图均衡化1.直方图概念:图像直方图,是指对整个图像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图。2.特征:直方图反映了图像灰度的分布情况,是图像的统计学特征。3.图像均衡化:图像均衡化是一种提高图像对比度的方法,拉伸图像灰度值范围。4.API:equalizeHist(InputArray src,//输入图像...

2020-03-11 13:30:03 673 1

原创 opencv中像素重映射操作(remap函数的使用)

像素重映射:简单点说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像。API:cv::remapremap(InputArray src,// 输入图像OutputArray dst,// 输出图像InputArray map1,// x 映射表 CV_32FC1/CV_32FC2InputArray map2,// y 映...

2020-03-09 18:17:50 848 1

原创 opencv中关于像素的常见操作

一、获取图像像素指针Mat.ptr<uchar>(int i=0) 获取像素矩阵的指针,索引i表示第几行,从0开始计行数。例如:我们通过imread获取了一张图片的Mat对象myImage,获得当前行指针const uchar* current= myImage.ptr<uchar>(row);获取当前像素点P(row, col)的像素值 p(row, c...

2020-03-04 21:02:07 831

原创 opencv利用卷积实现自定义线性滤波

为了实现自定义滤波我们先了解一下卷积与算子卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作。 Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point),如下图把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。例如:Sum = 8x1+6x1+6x1+2x1+8x1+...

2020-02-29 17:38:47 270

原创 C程序中变量等内存布局(代码段,数据段等)

我们都知道一个c语言程序可能会包含.text(代码段)、 .data(数据段)、 .rodata(只读数据段)、 .bss(未初始化段)等,为了搞清楚不同变量的存放位置,我们做一些实验,最后再得出结论首先我们写一个简单的c语言测试程序,命名asm.c#include <stdio.h>#include <string.h>#define N 10int ...

2020-02-16 22:45:42 791

原创 opencv中Mat对象的使用

Mat对象OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分IplImage是从2001年OpenCV发布之后就一直存在,是C语言风格的数据结构,需要开发者自己分配与管理内存,对大的程序使用它容易导致内存泄漏问题Mat对象常用构造函数:Mat()Mat(int rows,int cols,int type...

2020-01-19 13:46:16 450

原创 opencv图像矩阵掩模

如上图所示,红色是中心像素,从上到下,从左到右对每个像素做同样的处理操作(上图的公式),得到最终结果就是对比度提高之后的输出图像Mat对象。Mat图像在opencv中的存储形式一般是二维向量(可以理解为二维数组),即从(0,0)到(rows-1,cols-1)。例如:RGB三通道彩色图的存储形式如下图:例如:单通道灰度图的存储形式如下图:那么我们在对像素点(row,co...

2020-01-15 18:09:22 432

原创 opencv图像加载、修改、保存

图像加载函数:imread函数原型:CV_EXPORTS_WMat imread(constString&filename,intflags=IMREAD_COLOR);返回值:Mat对象参数:第一个参数,文件名;第二个参数,表示加载的图像是什么类型,支持常见的三个参数值 IMREAD_UNCHANGED (<0) 表示加载原图,不做任何改变 IMREA...

2020-01-12 19:01:02 314

原创 Windows下 VS Code搭建C++和opencv开发环境

目前大部分人都是用VS开发opencv,只有少部分人用VS Code开发,我一直觉得VS Code是个神器,所以我就决定将它搭建成一个全能的IDE,能够完成python,java,c++,opencv,html等开发接下来就开始我们的搭建,搭建借鉴https://blog.csdn.net/zhaiax672/article/details/88971248(里面包括MinGW64,openc...

2020-01-09 14:08:54 12076 32

原创 采用make menuconfig配置Linux内核常用选项解读(一)

本文以Linux3.0内核为例进行讲述在内核源码根目录中采用make menuconfig命令后进入如下界面:第一项意思就是对物理-虚拟地址互相转换进行修改,该功能会根据内核在系统中的位置自动计算出相应地址。详细讲解可以参考https://blog.csdn.net/zhanzheng520/article/details/16120325第二项(常规安装选项)...

2020-01-01 20:37:30 2287 1

原创 嵌入式ARM中常用的汇编指令讲解

在介绍之前,先把ARM中常见的寄存器及其别名截图,如下:其中的r1,r2,r3常用作传递参数,r4至r11保存局部变量,r13常用作数据栈指针,别名sp;r14寄存器称作连接寄存器,别名lr,常用保存子程序返回地址;寄存器r15是程序计数器,别名pc(1)相对跳转指令:b、bl 这俩条指令的不同之处在于bl指令除了跳转之外,还将返回地址(bl的下一条指令的地址)保存...

2019-12-17 20:10:14 3100

MODBUS协议中文版.pdf

MODBUS协议中文版.pdf

2021-09-06

MQTT通信调试工具

MQTT通信CSDN教程中用到的调试工具 通信猫调试软件,希望对大家有所帮助

2018-09-30

ITOP4412 QT系统移植opencv

基于嵌入式板子ITOP4412 QT系统移植opencv,希望对大家有所帮助

2018-09-30

ITOP—4412裸机教程

基于ITOP—4412开发板的裸机教程,希望对大家有所帮助

2018-09-07

MQTT OneNet实现中文文档

MQTT OneNet实现中文文档,分章介绍,比较详细,对有基础的人大有益处

2018-08-30

嵌入式Linux C语言程序设计

嵌入式Linux C语言程序设计 这个是压缩包 里面内容分章进行介绍公有12个文档

2018-08-30

基于CCS环境下的CC3200创建工程中文教程

基于CCS环境下的CC3200创建工程中文教程 CCS版本为6.1.1

2018-08-30

FreeRTOS封装后的API函数

FreeRTOS封装后的API函数介绍,希望可以对学习RTOS的同学有所帮助

2018-08-30

普中STM32-PZ6806L开发板原理图

基于普中STM32-PZ6806L开发板的原理图,非常详细,包含所有模块

2018-04-15

CC3100和CC3200 UniFlash快速入门指南.pdf

基于TI公司的CC3100和CC3200 开发板软件UniFlash快速入门指南

2018-04-15

空空如也

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

TA关注的人

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