- 博客(135)
- 资源 (3)
- 收藏
- 关注
原创 cubemx生成rtt-nano+usb的问题
cubemx配置rtt系统和usb,出现死机问题,调试发现,cubemx使用的usb驱动中有很多调用HAL_Delay()函数的地方,而cubemx配置的工程中默认是使用systick作为延时定时器,当引入操作系统后,systick被也被操作系统作为系统时钟占用。解决办法:配置cubemx时使用其他定时器作为延时定时器。或者完全使用系统的延时函数代替HAL_Delay()函数。此外应当注意,HAL_Delay()函数是死等的,完成外设初始化后,在主线程的循环中不要在使用该函数。...
2021-04-16 14:36:39
597
转载 void与void*
void与void *void关键字的使用规则:1. 如果函数没有返回值,那么应声明为void类型2. 如果函数无参数,那么应声明其参数为void3. 如果函数的参数可以是任意类型指针,那么应声明其参数为void *4. void不能代表一个真实的变量void真正发挥的作用在于:对函数返回的限定 对函数参数的限定规则一:如果函数没有返回值,那么应声明为void类型我们在编写C/C++程序时,对于任何函数都必须一个不漏地指定其类型。如果函数没有返回值,一定要声明为...
2021-04-14 09:22:59
440
转载 ISP、IAP、DFU和bootloader
这是嵌入式开发中常用的几个专业术语,其诞生的背景和其具体作用大概如下在很久很久以前,那是8051单片机流行的时代,做单片机开发都需要一个专用工具,就是单片机的编程器,或者叫烧写器。说“烧”写一点不为过,当年的经典芯片AT89C51在编程时需要十几伏的高电压,加在一个特定的引脚上,才能进入编程。对于某款芯片的编程,都有一个特定的时序,这个时序通常在芯片的datasheet里进行描述并以硬件实现。另外在编程器里的也有一个MCU,这其中使用软件产生这个时序,从而对目标芯片进行编程。电脑通过串口把程序发到编程器
2020-12-21 14:07:08
978
转载 秒懂MOS管选型技巧
目录MOS管选型技巧首先是确定N、P沟道的选择第二步是确定电压第三步为确定电流第四步是确定热要求第五步是确定开关性能第六步为封装因素考量第七步要选择好品牌总结MOS管选型表MOS管选型技巧选择到一款正确的MOS管,可以很好地控制生产制造成本,最为重要的是,为产品匹配了一款最恰当的元器件,这在产品未来的使用过程中,将会充分发挥其“螺丝钉”的作用,确保设备得到最高效、最稳定、最持久的应用效果。那么面对市面上琳琅满目的MOS管,该如何选择呢?下面,我们就分7个步骤来
2020-12-18 18:25:42
2993
3
原创 【STM32】条件编译不起作用是什么原因
在工程中定义了几个条件编译,用来适应不同的硬件设备,但是好像不起作用似的。这种情况可能是在多个文件中使用了条件编译,但是编译工程的时候又只是编译了部分文件,即使有部分使用了条件编译的文件没有被重新编译。解决办法:1.把所有使用了条件编译的文档全部编译一遍;2.把工程全部编译一遍。...
2020-12-18 09:41:33
881
转载 SVN快速上手【转载】
选择SVN客户端TortoiseSVN也叫乌龟SVN,Windows上最流行的SVN客户端,安装后你的右键就会多了几个SVN相关的菜单,非常方便Eclipse插件在Eclipse中集成SVN插件,适合使用Eclipse开发的用户,查看使用教程CornerStoneMac上最流行的SVN客户端之一,查看使用教程Versions:Mac上最流行的SVN客户端之一以下教程以TortoiseSVN为例如需视频教程,请访问:视频教程Checkout同步代码项目详情-
2020-12-10 11:10:33
185
原创 【数据结构】二叉树的构造
所谓构造是指能唯一确定一颗二叉树。任何n(n>0)个不同节点的二叉树,都可由它的(中序序列和先序序列)或(中序序列和后序序列)唯一地确定。先序序列:AB D G C E F中序序列:D G BAE C F后序序列:G D B E F CA我们要知道,中序序列的任何一个节点的左子树和右子树也都是中序序列;前序序列的任何一个节点的左子树和右子树也都是前序序列;后序序列的任何一个节点的左子树和右子树也都是后序序列。为什么必须要有中序序列才能构造二叉树呢?看一下这个过程:...
2020-12-03 11:09:25
2185
原创 有没有简单的PCB设计软件?Altium Designer的替代方案来了!
AD是收费的大型软件,有时候会有版权问题,KiCad是一个开源的EDA软件,且功能强大,简单易用,码上。我为什么将KiCad作为主力EDA软件。PCB设计不要再用AD了,KiCAD更好用。下载链接:这里。新手指引(英文):这里。KiCad介绍 - 跟我学KiCad(免费开源的PCB设计工具)1...
2020-12-02 18:51:06
5021
转载 Java vs. Python:你应该选择哪一个?
This article is how I compare thetwo most popular and powerful programming languages in the world: Java and Python! Both languages have huge community support and libraries to perform almost any programming task, although selecting a programming language .
2020-12-02 17:17:36
231
原创 【数据结构】二叉树基本概念与代码
目录基本概念树基本术语树的性质二叉树二叉树的性质代码基本概念树基本术语节点的度与树的度:树中一个节点的子树的个数称为该节点的度。树中各节点的度的最大值称为树的度,通常将度为m的树称为m次树或者m叉树。分支节点与叶节点:度不为零的节点称为非终端节点,又叫分支节点。度为零的节点称为终端节点或叶节点(或叶子节点)。孩子节点、双亲节点和兄弟节点:在一棵树中,每个节点的后继节点,被称作该机诶单的孩子节点。响应地,该节点被称作孩子节点的双亲节点(父母节点)。具
2020-12-01 14:20:18
418
转载 【二次转载】C++前置声明的应用与缺陷
前置声明的使用 有一定C++开发经验的朋友可能会遇到这样的场景:两个类A与B是强耦合关系,类A要引用B的对象,类B也要引用类A的对象。好的,不难,我的第一直觉让我写出这样的代码:// A.h#include "B.h"class A{ B b;public: A(void); virtual ~A(void);}; //A.cpp#include "A.h"A::A(void){} A::~A(void){} // B.h#includ.
2020-11-26 10:13:37
339
原创 【笔记】python序列化和反序列化-JSON模块
要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式。JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。dumps()方法返回一个str,内容就是标准的JSONimport jsond = {'name':'forest','age':23,'score':88}d = dict(name='forest',age=23,score=88)# second method for creating dicta = json.dumps(d)p
2020-11-25 18:13:51
179
原创 【一天从C到C++】高级篇
目录1.文件和流2.异常处理3.动态内存分配4.命名空间5.模板6.预处理器7.信号处理1.文件和流在头文件<fstream>中打开文件:void open(const char *filename, ios::openmode mode); 其中打开模式如下:模式标志 描述 ios::app 追加模式。所有写入都追加到文件末尾。 ios::ate 文件打开后定位到文件末尾。 ios::in 打开文件用于读取。..
2020-11-23 18:07:29
221
原创 【一天从C到C++】基础篇
快速入门Hello C++C++标准程序库中的所有标识符都被定义于一个名为std的namespace中,因此要使用using namespace std;输出使用cout#include <iostream>using namespace std;int main(){ cout << "hello C++" << endl; return 0;}输入用cin#include <iostream>using na.
2020-11-23 15:59:39
236
转载 【转载】C++ 多态的实现及原理
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数 1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。 2:存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。 3:多态性是一个接口多种实现,是面向对象的核心,分为类的多态...
2020-11-23 15:02:53
142
原创 git&github全解
目录本地仓库版本追踪回退版本远程仓库添加秘钥SSH添加远程仓库分支管理标签管理其他git原理:本地包含三个部分:工作区、缓存区、版本库。工作区就是我们操作的文件,修改后的文件add到缓存取,也就是将修改保存到缓存区,缓存区确认无误的话可以commi到版本库,成为一个新的版本。不过这个版本是保存在本地的,怎么协同工作呢?还需要一个远程仓库,可以将本地仓库的内容push到远程仓库,也可以从远程仓库获取,fetch和clone命令拉取到本地仓库,pull命令直接
2020-11-21 21:23:21
296
原创 ubuntu中MySql环境配置
检查是否有MySQl:sudo netstat -tap | grep mysql安装:sudo apt-get install mysql-server mysql-client安装后是什么什么都没有的,启动和关闭需要通过一下命令来执行:# 启动MySQL$ sudo service mysql start# 关闭MySQL$ sudo service mysql stop# 重启MySQL$ sudo service mysql restart怎么确定打开或者关闭
2020-11-21 15:52:35
136
原创 ubuntu下python环境搭建
1.安装python环境ubuntu一般是自带python的输入python或python3看有没有相关信息,其中python是python2的版本。有时候可能不是我们想要的版本,我们需要更新一下python版本在 Ubuntu 终端执行以下两条命令即可更新 Python 版本:$sudo apt-get update$sudo apt-get install python3.8对命令的说明:第一条命令用来指定更新 /etc/apt/sources.list 和 /etc/
2020-11-21 14:56:04
1885
转载 【二次转载】ubuntu快捷键
Ubuntu下常用的快捷键Ubuntu中的许多操作在终端(Terminal)中十分的快捷,记住一些快捷键的操作更得心应手。在Ubuntu中打开终端的快捷键是Ctrl+Alt+T。其他的一些常用的快捷键如下:快捷键 功能 Tab 自动补全 Ctrl+a 光标移动到开始位置 Ctrl+e 光标移动到最末尾 Ctrl+k 删除此处至末尾的所有内容 Ctrl+u 删除此处至开始的所有内容 Ctrl+d 删除当前字符 Ctrl+h
2020-11-21 13:18:15
310
原创 ubuntu常用设置
0.设置界面1.中文输入法下载安装一个搜狗输入法即可,官网下载后有教程,或者搜其他教程也行。2.安装git安装:sudo apt-get install git配置信息:git config --global user.name "Your Name"git config --global user.email "your Email Address"3.显示隐藏文件 ctrl+h4.截图4.1系统自带截图打开但是系统自带的有个问题就是不能编辑.
2020-11-21 13:15:37
302
原创 【笔记】了解python的Web开发
在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP。Chrome提供了一套完整地调试工具,非常适合Web开发:更多工具->开发者工具;快捷键ctrl+shift+i。Elements显示网页的结构,Network显示浏览器和服务器的通信(红灯亮着)。HTTP格式POST请求格式POST /path HTTP/1.1Header1: Value1Header2: Value2Heade
2020-11-20 20:25:08
137
原创 控制台输python却打开windows store:修改windows环境变量或重装
解决办法此电脑->属性->左上侧的高级系统设置->高级->环境变量
2020-11-20 17:23:37
287
原创 【数据结构】稀疏矩阵的压缩存储
目录关于矩阵稀疏矩阵行优先和列优先稀疏矩阵的压缩存储关于矩阵稀疏矩阵在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。如这个稀疏矩阵,这个矩阵占用了6*7的元素类型大小,但是里边有大量的0,,即有用信息很有限,因此我们可以只提取其有用信息来对其进行压缩。得到一个坐标及其元素值的表行优先和列优先举例说明:这里有一个数组行优先排列是这样的
2020-11-20 15:07:57
1422
原创 C/C++函数传递二维数组
目录函数参数传递二维数组的问题解决方案1.传递第二维和更高维的大小2.根据数组的存储原理把二位数组当作一维数组来操作(降维处理)函数参数传递二维数组的问题将二维数组当作参数的时候,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小,这是由编译器原理限制的。在学编译原理的时候知道编译器是这样处理数组的:对于数组 int p[m][n];如果要取p[i][j]的值(i>=0 && i<m && 0<=j &a
2020-11-20 10:38:31
10229
原创 【数据结构】带动画显示过程的递归求解迷宫问题
采用递归算法求解迷宫问题,输出从入口到出口的所有路径。递归求解我真的也不是理解的很透,但是明显感觉到递归和栈、队列求解很像,都是树形的搜索过程。void f(){ //由外到内 f();//递归体 //由内到外}为了直观地观察过程,补充了一个动画过程,可以用来观察算法的搜索过程。从(1,1)走到(8,8),实心圆是不允许走的,空心圆是可以走的部分,星星是走过的路径。#include <stdio.h>#include <stdlib.h>#.
2020-11-19 18:16:58
434
原创 【数据结构】单链表的递归算法
设计递归算法的方法主要是求递归模型,递归模型的求解类似于(其实就是)数学中的归纳法。递归模型中应该包含递归体和递归出口两部分。代码如下:#include <stdio.h>#define NUM 8int A[NUM] = { 102,102,32,44,202,32,61,56 };int min(int a,int b){ if (a < b)return a; else return b;}int F(int A[], int
2020-11-19 14:59:32
2638
原创 【数据结构】递归和尾递归
目录概念递归什么时候用递归递归和尾递归一般递归尾递归概念递归在定义一个过程或函数时,直接或者间接调用自己的成分,称为(直接/间接)递归。直接递归就不用说了,间接递归如下。间接递归都可以转化为直接递归,因此一般只研究直接递归。什么时候用递归1.定义是递归的许多数学公式、数列的定义是递归的,例如阶乘、Fibonacci数列。2.数据结构是递归的比如不带头结点的单链表3.问题的求解方法是递归的比如Hanoi问题递归和尾递归一般递归
2020-11-19 11:30:56
438
原创 【数据结构】串的模式匹配-KMP算法
目录概念简述KMP算法原理代码计算next数组KMP算法测试概念简述从s中匹配t串,在BF算法中,通过指针回溯不断进行匹配,其思想是穷举。效率很低,但有些串有一定的规律,不需要回溯s串的指针,这就是KMP算法。比如 s:aaaaaab t: aaab在进行比较时,如果按照BF算法,需要进行最后一次才能匹配成功。但是我们发现s和t串前几位是相同的,不需要重复比较。当然,计算机不会像人这么敏感,但是能否设计出一种算法,提高类似这种模式匹配的...
2020-11-18 19:35:27
725
原创 一语道破KMP算法计算next数组中k=next[k]的理解
先上定义:主串和模式串免得后面的沟通理解有出入。首先,要理解KMP算法的核心思想:为什么要算next[]数组?数组中每个元素表示什么意思?核心思想就是模式串的某个元素(设为t[i])前的k个元素和该串开头k个元素分别相同,因此如果在模式串的t[i]处匹配失败,模式串的指针没必要完全回溯,只需要回溯到t[k]即可,这样一来主串指针也不用回溯了。而我们用数组就是要记录t[i]位置对应的k值,next数组中每个元素就表示模式串对应位置的前面有k个元素与开头元素分别相等。如果理解了上边这个(.
2020-11-18 18:18:12
926
原创 顺序队列求解迷宫问题
队头指针:走队尾走过的路——一个一个指向队里的点。队尾指针:探队头四周的可走的路——将队头指向的点的附近的可走的点全部入队。对头指针的作用——保证入队的点的四周都会被扫描一遍。队尾指针——将可走的点入队。他们相辅相成,可以将所有的点都扫描一遍。下代码中,####部分是队头指向一个待扫描四周的点,****部分是队尾扫描四周并将可走的点入队。 /*###############################################################*/ whi
2020-11-16 11:13:13
480
原创 顺序栈求解迷宫问题
下图所示的迷宫,从(1,1)走到(8,8)int mg[10][10] = { //迷宫 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 0, 0, 1, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 0, 0, 1, 1, 0, 0, 1}, {1, 0, 1, 1, 1, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 1,.
2020-11-12 21:05:52
1348
1
原创 【数据结构】循环链表实现环形队列
概念循环链表写循环队列,只用一个队尾指针就够了,因为循环链表中队尾节点的下一个节点就是队首节点。队空条件:队满条件:不考虑进队操作:将新的节点插入到队尾,称为队尾节点,然后队尾指针指向这个新的节点。出队操作:将队尾节点的下一个节点数据取出,并绕过该节点。代码#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define ERROR 0#define OK 1typ
2020-11-12 17:00:15
512
原创 【数据结构】单链表实现线性队列
概念队空条件:fron=rear=NULL队满条件:不考虑进队操作:将新的节点插入到链表尾。出队操作:删除链表第一个节点。代码注意出队和入队操作入队操作要考虑到两种情况:1入队前,队为空时,队首和队尾指针都指向新的节点。2.入队后,队不为空,只动队尾指针就行。出队操作要考虑三种情况:1.原队为空,则返回异常。2.原队为只有一个节点,则删除节点后,都指向NULL;3.其他情况,则只操作队尾就行。#include <stdio.h>.
2020-11-12 15:17:56
129
原创 【数据结构】非循环队列-顺序存储
队列概念队列是对头出、队尾入的先进先出线性表。需要两个指针front和rear分别来指向队头和队尾。front指向队头元素的前一个位置,rear总是指向队尾元素。进队:rear+1出队:front+1队空条件:front=rear队满条件:rear = MaxSize - 1代码#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define E...
2020-11-12 13:49:21
597
原创 【数据结构】环形队列/循环队列-顺序存储
队列是对头出、队尾入的先进先出线性表。需要两个指针front和rear分别来指向队头和队尾。front指向队头的前一个位置,rear总是指向队尾元素。队空条件:front=rear队满条件:rear = MaxSize - 1进队:rear+1出队:front+1...
2020-11-12 11:19:46
1539
原创 【数据结构】入栈出栈代码-栈的链式存储
基本概念使用带头结点的单链表表示栈,头结点指向的即为栈顶,也就是说入栈就是所谓的头插法入栈,出栈也是从头结点的下一个节点出。空栈条件s->next==NULL栈满条件:由于链表的内存是随时申请和释放的,所以在内存允许的范围内是没有栈满条件的。进栈:将包含数据的节点插入到头结点之后。退栈:将头节点之后的节点删除,并释放其所占内存。代码stack.c/*********************栈的链式存储结构******************************
2020-11-11 19:53:49
2396
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人