自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 数据结构和算法–静态链表

静态链表用数组描述的链表是静态链表,描述的方法是游标实现法。游标实现法:屁股指向头,头指向第一个没有数据的地方,头没有数据,通过游标找到数据找到下一个下标。#define MAXSIZE 1000typedef struct{ ElemType data; int cur;//游标}Component,StaticLinkList[MAXSIZE]...

2021-03-25 21:57:14 23

原创 单链表结构和顺序存储结构的优缺点

单链表结构和顺序存储结构的优缺点存储的分配方式顺序存储结构:需要用一串连续的空间存储,对内存比较要求比较苛刻链式存储结构:存储的空间不连续,十分灵活时间性能查找:顺序存储结构查找的时间复杂度为O(1)链式存储结构查找的时间复杂度为O(n)插入和删除:顺序存储结构插入和删除时间复杂度为O(n)链式存储结构插入和删除时间复杂度为O(1)空间性能顺序存储结构需要分配好空间,容易溢出或者浪费链式存储结构需不要分配好空间,不容易溢出或者浪费使用场合:对于不需要频繁插入和删除的

2021-03-24 16:11:10 30

原创 嵌入式Linux应用开发学习路线--自用

嵌入式Linux应用开发学习路线–自用嵌入式应用开发路线:对于实验室队员(有简单的ST32基础和AD基础的人比较合适)个人理解:先按照韦东山老师的思路,学下来,建议一个基本的框架,然后根据嵌入式Linux应用开发的基础学习,进行一两个项目的简单开发,然后深入下去就是下面的学习路线。韦东山老师的入门线路:入门以后可以按需求学习调试专题。下面是Linux学习路线:如果想要搞好(深入有一定的技术壁垒),下面的是必须的。特点:学习周期长,技术提升快。 第一阶段:C语言+数据结构数据结构和算法

2021-03-22 11:40:38 51 2

原创 数据结构和算法–单链表的整表创建

数据结构和算法–单链表的整表创建头插法从头开始插入,按顺序插入,优点是算法简单,缺点是插入的数据和内存的数据储存顺序不一样。头插法,就是后一个节点头指向前一个节点尾,因此新建的节点指向下一个节点的头。C代码void CreatListHead(LinkList *L,int n){ LinkList p; int i; srand(time(0));//初始化随机种子 *L=(LinkList)malloc(sizeof(Node));//创建头指针 (*L)->next=NU

2021-03-15 15:46:55 33

原创 数据结构和算法–单链表(1)

数据结构和算法–链表头指针与头节点的区别:头指针指向头节点,头节点指向下一个节点。头指针是必要的,不然找不到第一个节点,数据就会丢失。这个头节点不一定要有,也可以没有,头指针就指向NULL结构指针:typedef struct Node{ ElemType data;//数据域 struct Node *Next;//指针域 }Node;typedef struct Node *LinkList;单链表的读取,读取的时候,只需要从第一个节点,遍历到需要读取的第i个节点就好了。S

2021-03-15 14:21:18 8

原创 makefile--简单函数

makefile–简单函数函数makefile中的函数都会有一个返回值,通常是需要用到这个返回值的。函数格式函数名 参数1,参数2,参赛nwildcare函数获取目录下的文件函数,返回目录下的文件名,每个文件名以空格隔开格式:wildcare 传入文件wildcare 目录下的文件例子:wildcare ./*.c #当前目录下的全部.c文件下面两个句子等价obj=main.o f1.o f2.osrc=$(wildcare ./*.c)patsubst函数格式:pats

2021-03-13 22:18:49 9

原创 makefile---变量

makefile—变量自定义变量自定义变量,类似C语言中的#define语句的作用,也就是替换的作用,使用能够减少冗余。下面就会显地很冗余,使用自定义变量改变,针对第一个规则。格式:自定义变量名=字符串obj=main.o f1.o f2.oapp:main.o f1.o f2.o gcc main.o f1.o f2.o -o appmain.o:main.c gcc -c main.cf1.o:f1.c gcc -c f1.cf2.o:f

2021-03-13 11:12:54 15

原创 makefile最简单使用

makefile最简单使用makefile是一个项目管理工具,管理代码用。把命令放在makefile中,即可使用make指令管理代码。makefile命令makefile或者Makefile规则目标,依赖,命令目标生成的可执行文件,依赖,一般为源文件命令,目标与依赖格式目标:依赖文件(TAB缩进)命令vi编辑makefile文件,这里的源文件都是在同一目录下,不需要指定目录。makefile和make命令关系,make生成一个可执行文件,app,app由后面的文件有关,通过命

2021-03-13 09:41:08 20

原创 数据结构和算法–顺序线性表

线性表感性认知:类似一个长长的队伍,这个队伍排成一条线,有头有尾,这样形式的就是线性表。定义:由零个(空表)或者多个元素组成的有限序列,是有先后顺序的。一个元素前面的那个元素称为前驱,后面的一个元素称为后继,头元素无前驱,最后的一个元素无后继。...

2021-03-12 21:33:13 14

原创 数据结构和算法---数据类型与抽象数据类型

数据类型与抽象数据类型抽象,抽象的意思就是“不具体”,把具体的东西的特征提炼出来,从而在思考问题的时候,可以不去管具体的实现细节,只需要考虑其性质。数据类型数据类型,是一类数据定义的方式,例如C语言中的int,float,double型。分类:基础型:语言里面,已经定义好不可再分的最小的数据类型,比如C中的int,float构造类:通过一定的方法,能够把基础型的数据进行组合形成新的数据类型的方法,比如C中的数据与结构体。抽象数据类型(ADT)定义:一个数学模型以及定义在该模型上的一组操作。

2021-03-09 21:50:55 16

原创 gdb调试--调试命令

gdb调试–调试命令运行步骤运行run或者r:运行,调试前必须先运行,运行到第一个断点处strat:运行,停在函数的第一行执行一步next或者n:执行到下一个指令,n下面的数字,13,14,7是运行到多少行,还有改行的信息step或者s:执行到下一个指令,会进入到函数体的内部,使用的时候需要注意是否进入到例如printf的函数,这个没有调试信息,看不懂。执行多步continue+num:运行过程中忽略该断点num次,就是说在num+1次执行到该断点时才暂停程序的运行,不加参数运

2021-03-09 13:09:31 21

原创 gdb调试--断点设置

gdb调试在没有集成开发环境的情况下,使用gdb调试。gcc main.c f1.c f2.c -o app -g-g:给执行程序保留函数名和变量名启动gdb测试代码:#include"stdio.h"int main(int argc,char *argv[]){ int j=argc,i; printf("argc=%d\n",argc); for(i=0;i<j;i++) printf("arg...

2021-03-08 11:14:40 219

原创 数据结构和算法–时间复杂度和空间复杂度

数据结构和算法–时间复杂度继上一篇算法复杂度定义:一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称**O(f(n))**为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度。也就是同构导数判断算法时间的复杂度,关键也是看数量级,大概可以看上一篇的简要描述,数量级越小越好。描述算法复杂度用大O()表

2021-03-07 19:36:05 53

原创 数据结构和算法–效率的度量方法

算法效率度量方法事后统计方法简介: 类似利用计时器对不同的算法的运行时间进行比较,时间短的效率高。**优点:**容易理解,实现不难缺陷:测试程序需要提前编写,需要花费不少时间不同的设计环境的效果差别大前分析方法简介: 编写程序前,利用统计的方法对算法进行估计。影响时间效率取决与一下的几个因素算法采用的策略,方案(重点)编译器编译产生代码的质量问题的输入规模机器执行指令的效率将算法复杂度进行抽象:这个是分析算法时间一个重要的方法,只需要知道算法执行次数的数量级即可。数量级越

2021-03-07 18:33:29 22

原创 数据结构和算法--初识篇

数据结构和算法–初始篇程序设计=数据结构+算法数据结构和算法一般是紧密结合的,解决问题通常需要选择正确的数据结构和算法。例如:算法中经常需要对数据进行增加和删除用链表数据结构效率高,数组数据结构因为增加和删除需要移动数字每个元素所有效率低。数据结构是什么数据结构是什么:数据结构是数据与数据之间的关系有什么:数据结构:分为逻辑结构和物理结构逻辑结构:数据之间的关系物理结构:逻辑结构在真实物理内存中的存储形式。逻辑结构的四大结构集合结构:数据之间没有关系。线性结构:数据与数据之间一对一

2021-03-07 15:21:11 19

原创 专家PID仿真

专家PID仿真用Simulink中的S函数进行专家PID仿真传送们:编写简单的S函数专家PIDS函数代码#include "math.h"//********************************PID算法部分************************************//#define OUT_MIN -1000#define OUT_MAX 1000//积分限幅#define INERGRAL_MAX 200#define INERGRAL_MIN -

2021-03-04 14:02:19 141 6

原创 专家PID

专家PID专家控制专家控制是模拟人类专家控制的方式。它具有大量的专门知识和经验,和专家控制一样不需要知道对象的模型的情况下,对系统进行控制。专家控制的基本结构和人类专家控制一样,知识库越是丰富,推理机越是精确,控制效果也就越好。不同的知识库和推理机,控制效果也不经相同。这也是专家控制的一个特点,利用这个特点,可以设计属于自己的专家控制系统。专家控制的基本实现直接性专家控制专家控制器直接对执行机构进行控制。间接型专家控制专家控制通过控制算法,对控制器进行操作,由控制器对执行机构进行控制。

2021-03-02 15:48:51 100

原创 连续PID和离散PID与C语言实现的PID的区别

连续PID和离散PID与C语言实现的PID的区别连续PID公式:离散PID公式:离散化的目标是为了把连续性问题转化成计算机能够处理的离散性问题。处理方法:对连续PID公式用矩形法数值积分近似代替积分,用一阶后向差分近似代替微分,最后可以得到离散的 PID 表达式为:离散和模拟形式PID对比C语言实现PID控制对离散PID处理:比例系数:Kp,积分系数:KpT/Ti,可以用Ki表示;微分系数:KpTd/T,可以用Kd表示;则公式可以写成如下形式:总结:都是使用一些近似的方法,

2021-02-23 09:44:41 113

原创 串级PID调试simulink仿真

串级PID调试simulink仿真设计串级PID串级PID图解:在设计串级PID的时候,我们从图可以知道,主控制器的输出是副控制器的输入。主控制器输出可以是输出实际的物理量,也可以输出百分比。若是输出实际物理量的值,需要知道主控制器输出的物理量与负控制量的实际一些关系,显然是不够合适的。比如外环是位置,内环是速度,外环输出的值,外环PID控制的是距离,经过PID控制器,实际含义已经改变,难以知道这个含义和速度的关系。若是外环输出百分比,更加灵活,只需将百分比和负控制变量进行量化计算即可。实际输

2021-02-23 08:44:38 726 4

原创 积分分离PIDsimulink仿真

积分分离PIDsimulink仿真想使用积分分离PID在simulink中进行仿真,我们需要写S函数。关于如何写S函数构建灵活控制器,和写积分分离PID,可以看我往期博客。S函数简单使用PID各种算法搭建模型

2021-02-21 00:21:19 255 1

原创 PID的各种算法优缺点

PID的各种算法优缺点数字式位置式PID数字式增量式PID积分分离式PID变速积分PID不完全微分PID微分先行PIDb### 位置式PID

2021-02-20 14:39:29 1337

原创 PID控制器的优缺点和周期

PID控制器参数优缺点PID控制器简介PID控制器是非常经典的一种控制算法,是不需要知道系统的模型,仅仅根据期望与现状的偏差调节,使之能够到达期望的一种线性控制器。优点:使用简单,灵活,调节方便。由于不需要知道系统的模型,仅仅根据反馈量进行调节,新手能够很好地上手。根据反馈量的不同,可以设计出不同的PID控制器,控制的也是反馈量,也就是偏差,使之偏差为零,这个反馈,可以是速度,可以是位置等。调节参数也是只有三个,调节起来还算简单。缺点:调节精度不高,不够精准由于PID控制器是线性控制器,而现实

2021-02-18 11:01:14 984

原创 用C语言编写S函数在simulink实现仿真

C语言编写s函数S函数简单介绍为什么要编写S函数?因为MALTAB提供的模型不能满足用户需求。Simulink与一个C MEX S-Function之间的相互关系:是通过调用S-Function中的回调函数来实现的。说白了就是调用API函数的过程。Simulink S函数运行过程:初始化完成之后进入循环,直至结束。初始化设置输入输出参数,采样时间等。循环是更新状态,进行运算等。主要使用到的函数初始化设置使用到的两个函数:static void mdlInitializeSizes(SimSt

2021-02-18 09:23:28 234

原创 maltab调用C++/C语言

maltab调用C语言环境搭建接口函数分析例子常用函数注意事项搭建环境VS2015和Matlab2016a注意点:需要查看maltab的版本和vs的版本是否兼容,以及补丁接口函数分析主要函数void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){}这个函数是没有返回值的(void),是通过传递指针的方式改变maltab的值。其中的lhs(lhs-left hand side)是

2021-02-09 11:05:56 30

原创 PID自动调参simulink仿真

PID自动调参simulink仿真-----如何高效调参设计PID控制器系统识别APP识别传递函数Simulink搭建仿真控制系统使用Maltab自动调参工具PID Tuner调节PID参数设计PID控制器我们先看这张经典的PID控制器的图片,可以看e(t)与u(t)与c(t),会发现控制器是控制e(t),也就是反馈值的偏差来输出控制量(u(t))给执行机构的。也就是通过控制执行机构间接控制被控对象。所以,设计PID控制器的关键是找出反馈量,也就是你想要控制的对象。这个控制对象与执行机构

2021-02-06 23:06:45 706

原创 匿名上位机(V7)基于串口的简单使用

匿名上位机(V7)简单使用本文简介:本文主要介绍匿名上位机V7版本的一些基本的功能使用,以及基于匿名上位机协议写下位机代码。使用的下位机为STM32F103C8T6匿名上位机V7版本的选项简介,划线部分是比较基础的部分,对于智能车调试,波行分析比较好用。基本的功能是基本收发,类似串口精灵或者XCOM。连接设置通过连接设置(点击)可以设置通信方式,有串口通信和USB HID通信方式。本文主要介绍串口通信。连接设置好就可以打开连接了,下面是连接成功的状态。基本收发界面你发送的数据下面会有发

2021-01-28 22:34:38 625 5

原创 基于Arduino的循迹小车

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、选用的硬件二、程序电机控制代码循迹方案5路数字量循迹方案5路数字量循迹原理5路数字量循迹检测2路模拟量循迹检测:一2路灰度循迹检测2路模拟量循迹方案:二处理获取值PID算法控制速度算法中断函数处理数据中断函数处理程序总结前言Arduino程序简单,很多函数都封装好了,IDE设计也足够合理,非常适合新手入门Arduino,下面就用一个Arduino实现循迹小车。内容包括两路模拟量循迹小车,数字量循迹小车,PID控制。

2020-11-14 21:38:45 1777

原创 扫描目录函数与程序实战

扫描目录函数与程序实战扫描目录扫描目录概念目录流函数调用opendir函数调用:readdir函数调用:telldir函数调用:seekdir函数调用:closedir函数调用:扫描目录程序扫描目录理解opendir函数调用,readdir函数调用,telldir函数调用,seekdir函数调用,closedir函数调用。以及小的项目实践解构。扫描目录概念在特定确定目录下存放文件。在终端里面的命令就是:ls目录流目录流类似文件流,都是把文件的属性抽离出来,使之可以间接对文件进行操作。函数调用

2020-10-28 19:38:00 40

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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