自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (5)
  • 收藏
  • 关注

原创 Keil 厂商DFP pack实现原理

直接复制别人的厂商文件夹到这里也是相同的效果,比如这里复制了一份ArteryTek的文件夹命名为ArteryTek2,打开Keil时会提示ArteryTek2相应的信息,说明Keil会扫描这个目录下的文件夹。在Keil中用鼠标选择芯片型号操作的原理是读取解析厂商文件夹下对应型号文件夹中的pdsc文件(pack description),这个文件写着芯片的介绍文字、外设功能库的路径、debug时寄存器文件的路径等等芯片相关的信息,Keil读取出这些信息后显示到Keil界面上供程序员鼠标点选。

2023-10-12 11:40:52 314

原创 串口硬件流控RTS、CTS

硬件流控机制:发送端在发送前需要检查自身的CTS,CTS低电平为可以发送。接收端RTS连接到发送端的CTS,接收端准备好接收后拉低自己的RTS即拉低发送R端的CTS。设置流控模式后,芯片内部自动完成以上机制,CTS为高时,即使程序运行发送函数,实际上并不会发送。当接收端的串口处理速度过低时,会丢失数据,因此考虑增加一种通知的机制来告诉发送端是否可以发送,即增加了RTS(Require To Send)和CTS(Clear To Send)信号线。

2023-10-11 14:01:21 1231

原创 MOS管各种概念(三个极、沟道、衬底、电流方向、箭头方向、耗尽型和增强型、寄生二极管、封装引脚)

MOS管各种概念(三个极、沟道、衬底、电流方向、箭头方向、耗尽型和增强型、寄生二极管)

2023-10-09 11:02:37 7235

原创 PLL锁相环倍频原理

锁相环倍频原理

2023-10-06 09:01:53 571

原创 Windows平台Qt6中UTF8与GBK文本编码互相转换、理解文本编码本质

Qt C++ UTF8与GBK文本编码互相转换

2023-09-20 21:22:05 1498

原创 WSL2中的ROS2与windows中的webots通信失败的问题

windows中在【控制面板\系统和安全\Windows Defender 防火墙\允许的应用】中,将webots-bin的专用和公用都勾选上,即可解决问题。

2023-06-14 00:04:41 218

原创 opencv 快速简单二值化的做法

大家在网上搜索opencv二进制,很多人会告诉你用threshold等函数。这类函数虽然支持自适应等功能,但是参数比较多,有点复杂。我们只要简单二值化的时候可以用以下做法:Mat img = imread("a.png", IMREAD_GRAYSCALE)<100;...

2022-03-06 16:34:40 3057

原创 [有/无]刷,[直/交]流,[同/异]步,各种电机概念区分

各种电机概念区分

2021-12-15 22:56:30 6208 7

原创 windows平台,mingw64编译环境下的socket使用

代码并不重要,主要看最后的编译命令://test.cpp#include <winsock2.h>#include <iostream>using namespace std;int main(){ WSADATA ws; WSAStartup(MAKEWORD(2, 2), &ws); SOCKET s = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; add

2021-07-05 14:18:01 2373

原创 windows平台,mingw64编译使用matplotlibcpp

编译以下代码://test.cpp#include "matplotlibcpp.h"namespace plt = matplotlibcpp;int main() { plt::plot({1,3,2,4}); plt::show();}编译命令:g++ test.cpp -DWITHOUT_NUMPY -ID:\application\miniconda3\include -LD:\application\miniconda3 -lpython38注意自行更改pytho

2021-07-05 13:44:38 304

原创 linux平台的三种动态库路径设置方法

方法一:LD_LIBRARY_PATHexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/path建议在~/.profile最后增加一行,写入上述命令。方法二:/etc/ld.so.conf用sudo权限在/etc/ld.so.conf文件最后新增一行动态库路径,比如写入/usr/local/lib。然后命令行运行sudo ldconfig。方法三:gcc添加编译选项-Wl,-rpath=/your/path:/your/path2比如gcc

2021-05-18 15:11:06 4047

原创 从零开始使用交叉编译开发树莓派驱动hello world

【以下命令没有特别说明,皆在上位机端运行(wsl不原生支持树莓派官方的32位编译器,自行查找资料折腾)。】1.交叉编译环境准备arm设备性能低,一般不在arm板上编译东西,所以使用交叉编译。此处上位机为linux pc。kernel源码:运行uname -r查看当前树莓派的内核版本。并下载相应版本的内核git clone git://github.com/raspberrypi/linux.git。compiler chain:git clone git://github.com/raspberr

2021-04-07 12:57:18 267

原创 【简洁清晰】使用ssh自带的反向代理功能,实现访问内网设备的任意端口,包括ssh、vnc等

机器A:内网设备机器B:中转设备,用来转发,最好有公网ip机器C:任意设备,客户端,用来访问机器A,就是你正在用的电脑0.自行配置好[机器A>>机器B]、[机器C>>机器A]、[机器C>>机器B]的ssh密码或密钥。1.配置机器B:将/etc/ssh/sshd_config中的GatewayPorts设置为yes,重启sshdsudo systemctl restart sshd.service2.配置机器A:机器A运行命令:ssh -fNR [中转

2021-03-14 19:31:42 679

原创 Windows使用mingw64编译安装opencv

准备(自行准备)1.1. opencv源码1.2. mingw641.3. cmake编译2.1. 生成makefile在opencv源码目录新建build文件夹,进入build文件夹,powershell运行cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX=D:/选择你想要安装到的路径 -D OPENCV_ALLOCATOR_STATS_COUNTER_TYPE=int64_t ..命令解释:生成mingw格式的makfile,指定op.

2020-12-06 16:28:50 853 1

原创 无需putty等第三方ssh软件,纯ssh通过转发X11到xming运行服务器的gui程序

【本地是linux平台】1. 本地是wsl等无gui的系统客户端依次运行:export DISPLAY=localhost:0.0如果不想每次都输入这个命令,要写在.bashrc(或.zshrc等)中,写在.profile不顶用。ssh -X [email protected]或者在~/.ssh/config中的主机参数里加上ForwardX11 yes,只需加这个服务器端设置服务器端无需设置,不要听网上其他乱七八糟的教程,sshd_config中关于X11的任何选项都不要动

2020-11-26 19:17:10 1022

原创 novnc无法连接realVNC服务端,浏览器code(1006)

解决方法:用超级权限进入realVNC的Options,将“Unix password”改为“VNC password”,然后重启电脑。感谢https://github.com/novnc/noVNC/issues/1438

2020-11-09 16:42:38 2229

原创 linux系统的ssh和sshd常用配置

由于本人记性极差,每次配置新系统的ssh都要去网上查,特此记录,方便以后查阅。服务器:生成一对ssh密钥命令:ssh-keygen。添加客户端的公钥:手动添加。服务器打开(没有此文件则新建),将客户端的 ~/.ssh/id_rsa.pub(没有则在客户端运行ssh-keygen新建)里的内容复制到服务器端的 ~/.ssh/authorized_keys文件里(没有这个文件则新建)。注意authorized_keys里每个公钥之间都要空一行,最后一行必须是空行。自动添加。客户端运行ssh-co

2020-11-05 20:26:20 267

原创 C++中的强制类型转换:static_cast、const_cast、reinterpret_cast、dynamic_cast

在C++中,用括号方式进行强制类型转换是旧式的,比如(int)1.666。现代的做法是用四种cast,static_cast、const_cast、reinterpret_cast、dynamic_cast,语法是cast-name(expression)。1. static_cast用于基础简单类之间的转换,比如int,double,char之间。也用于有血缘关系的类指针的转换,这意味着char* 于int* 无法转换。其他指针层级的转换请使用reinterpret_cast。2. const

2020-10-14 10:58:50 153

原创 gcc/g++ 生成、使用动态库/静态库

生成动态库:gcc -shared so.c -o libso.so有时候会报错提示加上-fPIC(-flag position-independent code,为了生成位置无关代码,用全局偏移的方式,一份动态库即可给多份主程序使用,细节自己网上查吧),加上就行了。libso.so文件注意lib前缀和.so后缀。动态库命名格式是规定好的,细节自己网上查。使用动态库:gcc main.c -L. -lso -Wl,-rpath=/home/me/test【-L】编译时动态库所在的目录。

2020-10-11 10:59:55 844

原创 c/c++ 数组名是指针吗?使用汇编分析

结论在前:数组名是纯地址值,不是指针。反汇编的方法分析:void fun(int *a,int *b){}int main(){ int a[]={1}; int bb=1; int *b=&bb; fun(a,b); fun(a,&bb);}使用g++ -g temp.cpp编译出二进制,并使用objdump -S a.out进行反汇编,以下为截取的部分汇编代码: int a[]={1}; 1177: c7 45 f4 01

2020-10-09 17:27:13 368 1

原创 C++ 通过类继承的多态实现原理以及虚函数表改写时机

class Parent{public: virtual void func() { cout << "Parent" << endl; }};class Child : public Parent{public: void func_child() { cout << "func_child" << endl; } void func() { cout << "Child" << endl; }};int

2020-10-06 16:10:58 281

原创 C++ 虚函数多态的意义

假设A是父类,里面有virtual fun()。B、C是public继承的子类,override了fun()。创建对象引用,多态有以下代码:B b;C c;A& n=b;A& m=c; n.fun();m.fun();我在想,多态有什么意义呢?为什么要把子类引用给父类呢?这不是多次一举吗?直接B& n=b; C& m=c; 他不香吗?反正都是两行代码,分配的内存空间也是一样大小的,性能也没有差别。说白了,多态的意义就在于写代码更通解,并能够减

2020-10-05 19:57:50 214

原创 termux 修改自定义字体

termux 运行chfont可修改预设的二十几种字体,接下来的操作可以添加自己的字体。将字体文件复制到~/.termux/fonts/里,再运行chfont就能看到自己的字体了。实际上,chfont命令运行的是.termux/fonts.sh,这个命令修改了.termux/font.ttf文件。...

2020-09-20 19:53:07 7167

原创 Clion+cpp+wsl优雅正统配置流程

目前用Clion编译wsl中的代码文件会出现找不到文件,有可能是斜杠和反斜杠的原因,我们使用的是wsl中的编译环境来编译win10中的代码文件。本文将用官方正统的方式来配置Clion2020.2搭配wsl工作。这里假设你已经安装好了Clion,wsl里的g++能够正常工作。1.准备工作A:wsl中运行sudo ssh-keygen -A用来创建host标识。 B:wsl中运行sudo vi /etc/ssh/sshd_config开放端口22和public认证。&nbsp

2020-09-19 16:48:56 406

原创 机器学习-个人理解信息熵、交叉熵、相对熵

交叉熵本身并不是衡量预测输出值和标签值的误差,相对熵才是。在神经网络中,标签值都是(1,0)分布的,所以标签的信息熵=0。而相对熵=交叉熵-信息熵。所以在神经网络中,虽然交叉熵和信息熵含义不一样,但是两者的值是一样的。公式参考:相对熵信息熵交叉熵...

2020-07-18 08:32:02 382

原创 vscode的tasks.json使用pkg-config的方法

以下是在命令行中使用pkg-config的方法g++ test.cpp `pkg-config --cflags --libs opencv`但是如果在tasks.json的编译选项中直接加入"`pkg-config --cflags --libs opencv`"会导致编译报错。解决办法:tasks.json里的编译参数要使用下面的写法"`pkg-config","--libs","--cflags","opencv`",...

2020-07-12 19:17:18 1662 3

原创 opencv使用pkg-config编译例程,出现undefined reference to videocapture

主要有三个需要注意的:1.g++ facedetect.cpp -o my.out `pkg-config --cflags --libs opencv`这里不是单引号啊!是键盘左上角那个一撇。2.g++ facedetect.cpp -o my.out `pkg-config --cflags --libs opencv`如果你是opencv4.0+ 这里改做pkg-config --cflags --libs opencv43.g++ facedetect.cpp -o my.out `pkg

2020-07-07 19:46:48 347

原创 win10 系统 U盘无法删除卷

我的一个U盘折腾来折腾去 ,现在用win10 自带分区磁盘管理的时候,右键U盘 删除卷,显示不支持该请求。解决办法:1.cmd中运行diskpart2.lisk disk3.sel disk 2 (这里2是我的U盘)3.clean这时候U盘分区就全部被删除光了,接下来该干啥就干啥了。...

2020-06-13 17:18:52 10745 13

原创 以优雅正统的方式将windows terminal添加到右键菜单

此片文章将windows terminal 简称为wt。我将wt设置为默认打开ubuntu。这里有两个目标:1.单独点击Windows terminal的时候,要默认进入到用户“~”目录。2.在文件夹中右键打开wt的时候,要默认进入此文件夹目录。步骤:1.在wt配置文件中添加"startingDirectory": "//wsl$/Ubuntu/home/<你的用户名>"2.修改注册表将wt添加到右键里(1)在桌面新建temp.reg,写入以下内容:Windows Regi

2020-06-13 12:07:56 471

原创 修改ubuntu ls 显示的目录底色

绿色底色很烦,看不清文件夹的名字在.bashrc里加一行,LS_COLORS=$LS_COLORS:'ow=1;32:'这样即可取消有些文件夹的绿色底色。其中ow的意思是OTHER_WRITABLE1的意思是粗体,32的意思是绿色前景参考:编码 颜色/动作 0 重新设置属性到缺省设置 1 设置粗体 2 设置一半亮度(模拟彩色显示器的颜色) 4 设置下划线(模拟彩色显示器的颜色) 5 设置闪烁 7 设置反

2020-06-13 11:43:20 884

原创 关于在conda环境下,pip已安装好包,但是python import错误的解决方法

1.pip uninstall [那个包]2.conda install [那个包]即可原因: 由于conda 环境,python未能识别pip 安装的包的路径。

2020-04-23 13:43:51 5507

原创 numpy矩阵几种乘法 易错点

在numpy中,要分清楚数组和矩阵,这个很重要,不同的乘法符号用在数组和用在矩阵上结果会不同。这个创建的是数组a=np.array([1,2,3]) 这个创建的是矩阵a=np.matrix([1,2,3])#或者a=np.array([[1,2,3]])1.星号*a * b用在数组上,是对应元素相乘。用在矩阵上,是标准的矩阵相乘。2.@ 和 dot() 和 mat...

2020-04-08 19:27:28 507

原创 【勘智K210】 下载程序的过程原理 探索

堪智k210 下载程序的过程原理 探索

2020-04-04 19:37:24 3146 4

原创 在云服务器上搭建Aria网盘服务以及离线下载

本文搜刮了网上的教程,排除了网上教程的坑,亲测可行正在使用1. 安装dockersudo apt install docker.io2. 用docker安装Mysql(❤坑)【1号坑,此处网上教程忘了加-v那两段】sudo docker run -d -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=filerun -e MYSQL_USE...

2020-02-02 17:41:43 948 4

原创 斐讯T1电视盒子刷机指南,已排大坑

步骤简单清晰,分为三步1. 准备刷写工具、降级img、新系统img2. 刷写boot recovery bootloader三区3. 刷写新系统img

2020-01-22 18:27:17 18095

原创 nrf52在未配对的情况下使用白名单广播,指定安卓手机允许连接

众所周知,安卓手机的蓝牙类型是随机可解析类型,即安卓蓝牙地址发在空中都是随机的。这个特性是为了保护安卓手机蓝牙的隐私性。当nrf52与安卓手机配对上之后,nrf52能够获得安卓手机的解析地址的key(IRK),以后就可以解析空中的随机地址了。我们要想要在未配对时,通过白名单广播方式指定安卓手机才可连接,就要手动添加IRK。在蓝牙协议中,IRK与安卓手机的真实地址(在手机设置中可以看到)是这么个...

2019-02-14 16:47:21 2146 2

原创 ubuntu18.04 使用systemd方式添加开机运行sh脚本

1.准备好你的sh脚本文件内容略过,就假设路径是/usr/local/my/my.sh吧。别忘了chmod +x。2.创建一个service文件进入/etc/systemd/system/,创建一个my.service文件,内容如下:[Unit]Description=just for test 这里填简介After=BBB.service XXX...

2019-02-12 16:02:12 20620 2

原创 nrf5 sdk调用softdevice函数代码的方式

刚开始用nrf5 sdk的时候,好奇app程序是如何调用softdevice函数的。工程里没有静态库,也没有源代码,只有一个hex。跟着ble的函数走下去,发现走到了一个SVCALL函数就走不下去了,再往下走就是softdevice真正的函数了,可惜nordic将其直接做成了hex,看不到源码,也无法追踪。SVCALL使用了arm的svc指令,经过以下几步,就实现了调用softdevice函数...

2018-12-19 20:28:29 687

原创 c++ string类的字符在内存的储存位置

以下数据均在ubuntu 64位系统,g++ c++11情况下测试1. 数据&amp;amp;amp;lt;=16字节,在当前栈区#include &amp;amp;amp;lt;iostream&amp;amp;amp;gt;#include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt;#include &amp;amp;amp;lt;stdlib.h&amp;amp;amp;gt;using n

2018-11-29 11:19:21 3464 2

原创 markdown如何写出空行和tab

空行回车   &amp;amp;nbsp;//把封号换成英文的tab回车   &amp;amp;emsp;//把封号换成英文的

2018-11-28 18:47:23 3819

opencv.zip

已经在windows,mingw64编译好的opencv4.5.0的编译结果。自行添加环境变量后,可直接使用。里面包括所有零散的dll和dll合集--opencv_world

2020-12-06

libopencv_world450.dll.a

已经在windows,mingw64编译好的opencv4.5.0所有静态库合集,使用时只需指定这个动态库,并添加所在文件夹到path环境变量即可。

2020-12-06

libopencv_world450.dll

已经在windows,mingw64编译好的opencv4.5.0所有动态库合集,使用时只需指定这个动态库,并添加所在文件夹到path环境变量即可。

2020-12-06

STM32F103C8T6最小系统--原理图

淘宝上的STM32F103C8T6--原理图,最小系统,有24c02 -

2015-12-08

stm32DMPmpu6050

stm32f103 用DMP读取mpu6050,keil4编译

2015-10-29

空空如也

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

TA关注的人

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