- 博客(29)
- 资源 (2)
- 收藏
- 关注
原创 图论之邻接表
本文介绍了图的邻接表存储方法,使用邻接表存储图要稍微复杂一些,但能够提高空间利用率。本文给出了两种实现方法,一种是链式前向星,另一种是链表实现,链式前向星是利用数组来模拟链表,并且在最后给出了邻接表的一种打印方法。
2022-12-24 17:47:53 4695 1
原创 图论之邻接矩阵
图的邻接矩阵表示的优点: 非常直观,并且容易实现,编写算法也较简便,因而应用较广; 根据矩阵元素Aij=1或0,便于判定两个顶点之间是否有边(弧)相连; 计算顶点的度数,或有向图的入度、出度方便; 计算图的边数算法简单等。
2022-12-22 23:14:58 21598
原创 图论基础介绍
图论在现实生活中有着广泛应用,很多问题都可以转化成为图论问题,如交通网络、计算机网络、神经网络、电路供应网络等等。当然我们重点讨论的路径规划也可以转化为图论问题。在图论算法的这部分,我们将讨论图在计算机中的两种存储方式,接着讨论图的遍历方式,以及常用的图论算法是如何解决路径规划问题的。
2022-12-22 20:55:14 1242 1
原创 路径规划算法综述
本文介绍了路径规划算法,包括传统路径规划算法和智能算法,传统算法与智能算法目前都有一定的优缺点和应用场景。目前来看,算法主要问题仍然在于算法收敛速度和容易陷入局部最优化等问题,针对各种算法, 许多学者也都进行了改进,以扩大算法的应用面。相信随着研究的深入,将会有越来越多的算法被提出以及现有算法将会得到更好的改善。
2022-12-21 15:13:44 18191
原创 半天光速入门Python(下)
文章目录面向对象创建类、声明对象初始化对象回收对象类变量与对象变量继承输入/输出异常其他方法面向对象Python是一种完全面向对象的语言,即使是数据类型也被当做对象。定义在类中的函数被称为方法。创建类、声明对象使用class关键字来声明一个类,即class className: method variable obj = className() # declaer a objection初始化对象在Python中使用 init(self,objvariable1,objv
2022-03-31 22:52:21 698
原创 半天光速入门Python(上)
文章目录写在前面一、Python环境Python解释器与编辑器WinDows用户Linux用户二、基础概念、运算符与表达式常量数类型字符串变量与标识符对象逻辑行与物理行缩进运算符三、三种程序结构四、函数五、模块六、数据结构七、面向对象八、文件操作九、异常写在前面时隔4个月后,再次回到这里,因为一直忙于比赛(虽然现在也在还忙~~~)和学习,所以很少有时间再写博客。难得因为购买的元件还没到,项目没法推进,空出来一天时间,所以就想写点东西,一方面是想打发时间,另外也当做学习笔记,将一些要点记录下来。本片博
2022-03-19 22:48:23 1820 1
原创 W4-数学形态学找区域边界
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------前言这次作业多少有点让人头疼,找边界执行的操作相对来说比较多,和课上学的有点脱钩。。。。诶。。。。。 这
2021-11-18 15:35:05 721 4
原创 W3-图像几何变换
疏漏错误在所难免,有问题请一定向我反馈。疏漏错误在所难免,有问题请一定向我反馈疏漏错误在所难免,有问题请一定向我反馈图像放缩src = imread('tape.png');S=size(src);figure;imshow(src);title('原图');k=0.6;imag1 = imresize(src,[S(1) S(2)]*k);figure;imshow(imag1);title('图像缩小为原来0.6倍');k1=0.6;k2=0.4;imag2=imre.
2021-10-29 12:05:56 335 4
原创 W2-图像增强
线性变换imag = imread('sherlock.jpg');gray = rgb2gray(imag);figure; subplot(2,2,1);imshow(gray);title('原图');subplot(2,2,2);imhist(gray);title('原图灰度直方图');a1=20;b1=255;a=50;b=155;image1=a1+(b1-a1)/(b-a)*(gray-a);subplot(2,2,3);imshow(image1);tit
2021-10-23 11:18:03 3758 1
原创 W1-Trackbar
W1-TrackbarcreateTrackbar简介大多数时候,图像处理的效果与其输入参数是密不可分的,当输入参数较多时,我们不可能通过一次次修改源代码来达到预期效果,所以OpenCV提供了一个很方便的函数createTrackbar。createTrackbar可以在图像显示窗口上创建一个滑块,通过改变滑块的位置来改变图像处理参数,进而直观调整图像处理效果。createTrackbar函数应用分析函数定义如下CV_EXPORTS int createTrackbar(const Str
2021-10-01 12:30:50 340
原创 OpenCV环境搭建
OpenCV环境搭建VS2017安装具体安装过程参考下面链接:https://mp.weixin.qq.com/s/NrrHFAXm57QblOf5CPUVmw组件可以参考以下选项:OpenCV安装+如果还没有安装OpenCV这里提供一个连接,下载完成后直接解压就可以使用。 链接:https://pan.baidu.com/s/18sedYEJNiP7bIxKL6Uy56g 提取码:1111解压完成后OpenCV目录如下安装完上面的VS和OpenCV后,下面就可以配
2021-09-20 21:10:57 3000 4
原创 FreeRTOS-内存管理-完结篇
FreeRTOS-内存管理无论是创建任务、队列、信号量还是其他的东西,都需要为其分配一定空间,前面我们都是运用动态内存申请的方法来申请空间,并且我们所使用的的动态内存申请函数都是FreeRTOS自己提供的,而不是使用C标准库中的malloc()和free()这两个函数,主要是因为以下原因:内存动态管理效率低线程不安全不确定性高,每次执行时间不同导致内存碎片使链接器配置变得复杂所以FreeRTOS为我们提供了5种内存管理方法,这5中内存管理方法各有不同 ,分别存放在heap_1、hea
2021-09-10 20:04:12 930
原创 FreeRTOS-空闲任务及钩子函数
FreeRTOS-空闲任务及钩子函数FreeRTOS中空闲任务是开启任务调度器自动创建的一个任务,这样可以保证系统中有任务可以运行,这个任务优先级是最低的,如果有其他任务处于就绪态,那么空闲任务就会主动让出CPU使用权给其他任务。那么空闲任务只是为了保证系统中有任务可以运行吗?其实不是,空闲任务其实有两个重要功能,其一,如果某任务调用了vTaskDelete()将自身删除了,那么这个任务的任务控制块和任务堆栈不会同时释放,而是在空闲任务中释放掉,所以空闲任务可以理解为清理垃圾的。其二,由于不是所有的RT
2021-09-10 19:27:03 2905 1
原创 FreeRTOS-Tickless模式
FreeRTOS-Tickless模式很多场合中对功耗要求很严格,并且很多MCU都带有低功耗模式,合理地使用这些低功耗模式可以降低系统的功耗。同时,FreeRTOS也提供了Tickless功耗模式,这样软件和硬件相结合,可以更进一步降低系统功耗,并且配置也很简单。STM32低功耗模式STM32本身支持低功耗模式,它有休眠、停止、待机三种低功耗模式,相比来说,待机模式功耗最低,休眠模式功耗最高,但是相应地,睡眠模式唤醒延迟最低。下表给出三种模式的对比。模式开启方式唤醒方式对1.2
2021-09-10 18:23:28 869
原创 FreeRTOS-任务通知
FreeRTOS-任务通知前几章我们介绍了信号量、消息队列、事件标志组等用于任务之间同步或通信的工具,当信号量、消息队列等创建完成后所有任务都能访问这些资源。实际上,在应用过程中,很多时候任务通信或同步是一对一的,这时就可以使用任务通知来代替上面的功能,并且使用任务通知效率高,占用的RAM也小。在使用任务通知前,需要将configUSE_TASK_NOTIFICATIONS置为1。FreeRTOS中每个任务都有32位的通知值,当某个任务要等待任务通知值进入阻塞状态的时候,向该任务发送任务通知就可
2021-09-10 12:00:58 441
原创 FreeRTOS-事件标志组
FreeRTOS-事件标志组在前面我们已经学习了信号量,我们知道信号量可以用来做任务同步,但是这种任务同步有一个缺点,就是只能在两个任务之间进行同步,所以为了解决这个问题,FreeRTOS提供了事件标志组,使得多任务之间进行同步。事件标志组表示方法事件标志组由若干个事件标志位组成,每个事件标志位表示某个事件是否发生。事件标志组的数据类型为EventBits_t,具体定义如下typedef TickType_t EventBits_t;#if( configUSE_16_BIT_TICKS
2021-09-09 19:26:51 551
原创 FreeRTOS-软件定时器
FreeRTOS-软件定时器一般来说,每个MCU都会有定时器,这些都属于硬件定时器,但是有些时候硬件定时器可能会不够用,FreeRTOS提供了软件定时器,并且当内存足够的时候,软件定时器可以设置很多歌,当然,相比于硬件定时器,软件定时器精度和功能上都会稍差些,但是在一些对精度等条件要求不高的场合中足够了。在使用软件定时器时,可以设置一段时间,经过一段时间后,系统就会自动调用软件定时器所对应的回调函数,但是要注意的是,因为软件定时器回调函数是在定时器服务任务中执行的(当做任务主体的一部分),所以在软件定
2021-09-09 18:42:13 418
原创 FreeRTOS-信号量
FreeRTOS-信号量信号量其实就是队列的一种应用,信号量的各种操作都是在队列的基础上建立起来的。那么既然是在队列的基础上建立的,信号量一定具有和队列相同的属性。因此信号量也是为任务和任务、任务和中断之间通信做准备的,但是信号量一般用来进行资源管理和任务同步。因为信号量是一种共享资源,当它被创建之后,系统中所有任务和中断都能对信号量进行访问。同时也可以进行任务同步,即在一个任务(或中断)中告诉另一个任务它所等待的事件发生了,等到发生任务调度的时候,再切换到相应任务中,执行该事件发生的相关处理。Free
2021-09-09 17:12:18 6660
原创 FreeRTOS-队列
FreeRTOS-队列在FreeRTOS中,队列是为了任务与任务或任务与中断之间通信而专门准备的,它是任务与任务、任务与中断间传递消息的重要手段,所以我们也称之为消息队列。并且队列也是后面章节中信号量实现的基础,所以有必要深入了解队列及其源码。我们在前面讲述过FreeRTOS中的列表和列表项,我们发现FreeRTOS中的列表更像是我们所说的数据结构中的链表,FreeRTOS中所使用的的链表为双向循环链表。同样地,FreeRTOS中的队列的队列与平时数据结构中所说的队列大同小异,只不过在FreeRTOS
2021-09-08 17:30:51 1386 1
原创 FreeRTOS-延时函数与系统时钟节拍
FreeRTOS-延时函数与系统时钟节拍FreeRTOS中的延时函数是一个很重要的部分,几乎每个任务中都会调用延时函数,在任务中调用延时函数相当于该函数进入阻塞状态,从而会产生任务调度,让CPU处理其他任务。将FreeRTOS提供了两种延时函数可以使用,一种是相对延时函数,另一种是绝对延时函数。本章深入分析这两种函数的延时源码以及如何产生任务调度的。系统时钟节拍FreeRTOS中有一个系统时钟节拍SysTicks,这个系统时钟犹如心脏一样维持系统的运行,通过xTickCount时刻反应当前是什么
2021-09-06 18:00:26 1643
原创 FreeRTOS-内核控制函数
FreeRTOS-内核控制函数FreeRTOS中有一些内核函数,一般来说这些内核函数在应用层不会使用,但是内核控制函数是理解FreeRTOS中断的基础。接下来我们逐一分析这些内核函数。taskYIELD()该函数的作用是进行任务切换,这是一个宏定义,实际上调用了portYIELD()。portYIELD函数定义如下:#define portYIELD() \{ \ /* Set a PendSV to request a
2021-09-06 14:43:16 2751
原创 FreeRTOS-任务信息查询
FreeRTOS-任务信息查询FreeRTOS中提供了很多函数可以用来获取相应的任务信息,这里我们会深入分析vTaskGetInfo()、uxTaskGetSystemState()和vTaskList()这三个函数以及它们之间的一些联系。FreeRTOS中的任务信息查询函数列举如下:函数名描述uxTaskPriorityGet()获取某任务优先级vTaskPrioritySet()改变某任务优先级uxTaskGetSystemState()获取系统中所有任务状
2021-09-05 13:54:09 3974
原创 FreeRTOS-深入分析列表与列表项
FreeRTOS-深入分析列表与列表项列表和列表项是FreeRTOS中的一个数据结构,FreeRTOS源码中大量使用了列表项,所以有必要深入学习一下列表和列表项,以便为后续学习做铺垫。一、列表项与列表结构体定义既然列表和列表项是一个数据结构,那么我们有必要看一下它们的结构体定义,在list.h文件中我们找到了定义的结构体。先看列表项结构体定义struct xLIST_ITEM{ listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set t
2021-08-24 21:28:48 669
原创 FreeRTOS-任务操作
FreeRTOS–任务操作有了前两节系统配置和任务基础了,接下来我们就使用FreeRTOS提供的一些API完成简单的任务操作。一、任务创建和删除(静态方法)在创建静态任务前,我们需要明确以下几点。FreeRTOS是一个轻量级操作系统,在运行操作系统的时候,我们需要为该操作系统分配一定空间,我们称为系统总堆。FreeRTOS每个任务都相当于一个函数,所以任务函数也需要有函数名、函数类型、形参。由于每个任务都需要有自己独立的堆栈,所以需要从系统总堆中为其分配任务堆栈,堆栈大小由用户来指定。每
2021-08-23 21:51:12 1511
原创 FreeRTOS-任务基础
FreeRTOS-任务基础大多数时候,使用RTOS就是使用其多任务处理功能。所谓多任务处理,其实并不是我们移植了RTOS系统后,CPU就可以同时处理多个任务,而是CPU会有一定选择性的去处理当前最紧急的事,处理完最紧急的事再去处理其他事,单核CPU永远只处理一件事。FreeRTOS任务系统在不使用操作系统编程的时候,一般都是在主函数中放一个while大循环,依次调用相应函数循环处理所有任务,这就是单任务系统。单任务系统也被称为前后台系统,因为大多数时候我们会使用中断完成一些任务,中断服务函数就
2021-08-23 18:38:27 2503
原创 FreeRTOS-系统配置与裁剪
FreeRTOS-系统配置与裁剪在使用FreeRTOS的时候,我们可以根据自己的需要来配置和裁剪FreeRTOS。我们在FreeRTOSConfig.h文件中完成对FreeRTOS系统的裁剪,通过裁剪来减少系统占用RAM和ROM的大小。所谓裁剪其实就是对FreeRTOS中的函数和一些变量、结构体等选择性的定义。FreeRTOS裁剪原理FreeRTOS裁剪主要就是用到了条件编译的方法,其实不仅仅是FreeRTOS是这样,很多RTOS系统都是采用这样的方法。所谓条件编译就是当该部分满足条件的时候
2021-08-22 18:32:38 4340
原创 STM32-CAN通信协议
STM32------CAN通讯协议CAN协议简述物理层数据链路层数据格式时序及同步方法STM32-bxCAN简述bxCAN特点发送信箱及接收FIFObxCAN工作模式bxCAN测试模式bxCAN时序bxCAN部分寄存器STM32-CAN驱动程序GPIO配置CAN模式配置过滤器配置CAN中断主函数...
2021-08-20 19:10:57 4642
基于stm32f103系列芯 CAN通信实验
2021-08-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人