暑假嵌入式自学笔记 Day2

    开个坑,我觉得我必须学习数据结构这一块的知识点,无论是未来工作还是以后读研做项目,这个都逃不开,打算跟着教材以及数据结构(全)-CSDN博客这篇文章慢慢把数据结构攻克下来

一. 数据结构(绪论篇)

数据结构的基本概念

首先解释一点概念,不难理解的。

数据(data)是描述客观事物的数和字符的集合。

数据元素(data element)是描述数据的基本单位。

数据项(data item)是具有独立含义的数据最小单位,也称为字段或域。

数据对象(data object)是指性质相同的数据元素的集合,它是数据的一个子集。

数据结构(data structure)是指所有数据元素以及数据元素之间的关系,可以看作是相互之间存在着某种特定关系的数据元素的集合

看到上面的抽象描述想必大家都要晕头转向了吧,毕竟我就是按照书本打上去的(笑)

按照我的理解我想了一个大概的比喻,希望各位读者也能够通过这个比喻,明白上面的概念的意思

假如我现在有一本厚厚的词典,词典里面记录着很多词语信息,那么这本词典包含的所有词语信息就是数据

那么对于这个词典的信息里,我也许会按照某种逻辑,将词语信息排列起来方便我们查找,我可能会通过读音的首字母来组在一起,a读音开头的一组,b读音开头一组等等,这样像是每个读音开头的一组数据就是我们的数据对象

那么每一组读音开头的词语的个体,比如b开头的“宝典”,它就可以看作数据元素,它是描述数据的基本单位,是有意义的。

而将这个“宝典”组成的字“宝”“典”,它们就是数据项,就是组成数据的最小单位,本身是没有意义的,但是能够通过组合在一起成为有意义的数据元素

数据结构的组成

数据结构 = 数据 + 结构

数据结构包含这几个方面:

逻辑结构:由数据间的逻辑结构组成

存储结构:数据元素及其关系在计算机存储器中的表示组成,也称为数据的物理结构

数据的运算:施加在数据上的操作

 这方面的我的理解就很简单了,逻辑结构就好比,12345这样的顺序结构,也可以是54321,各种逻辑上的都可以;存储结构就是我们怎么将客观的数据元素,存在我们电脑的存储器里面,怎么排列在一起,怎么调用,后面会讲讲;数据的运算,好比我想对数据的顺序调整一下,或者删除某个数据这样

对每个都大概的讲讲

逻辑结构

逻辑结构的表示

1. 图表法

直接采用表格或者图形直接描述数据的逻辑关系

2.二元组表示

这一个我看书本的解释很难理解,我是看后面的例子才了解了这个二元组表示是怎么回事,我觉得要理解这个必须把图表法和二元组法一一对应起来

首先讲讲这个二元组长啥样

B=(D, R)就是二元组的通用数据逻辑结构表示方式,由数据元素的集合D以及D上二元关系的集合R所组成(源自教材)

其中D是将元素整合在一起的,R是将关系整合在一起的,r是个体元素关系的分组集合,属于R的子集

我直接拿出一个例子应该就能明白了

这是我画的一个树状图,包括里面的元素a,b,c,d,e,f,g,h,i,j。

那么D={a, b ,c, d, e, f, g, h, i, j} 就是把元素都放在一起

R={r}

r = {<a,b>, <a,c>, <a,d>, <b,e>, <c,f>, <c,g>, <d,h>, <d,i>, <d,j>}

我们可以将r中的<a,b> 看成 a->b ,r就是通过这种方式将元素关系整合在一起的

逻辑结构分类

逻辑结构很多,但是主要有这几类

集合

线性结构

树形结构(上图就是树形结构)

图形结构

存储结构

数据逻辑结构在计算机存储器中的存储表示就是数据的存储结构

主要有四种

1. 顺序存储结构

我的理解就是:按照我们数据的逻辑结构排列,在数据存储的时候,也是按照逻辑结构的顺序排列在存储器里面。逻辑相邻的数据,存储器里面的位置也相邻

2. 链式存储结构

我的理解就是:我们数据存储在存储器里面,不用管怎么排列,但是它们有“地址”,我们将地址按照逻辑结构排列好就行了,使用指针域表示每个结点的逻辑关系。

3. 索引存储结构

4.哈希(或离散)存储结构

数据运算

数据运算是指对数据实施的操作

主要分两个层面:运算定义,运算实现

运算定义是基于逻辑结构的,运算实现是基于存储结构

 这怎么理解呢,我的认为是这样的,根据我们存储结构的不同,我们对数据的运算方式也不同,具体的实现方式也不同。如果我是想查找某个数据的信息,如果是顺序存储结构,我们可以直观得按照顺序知道我要查的数据在第几位;如果是链式存储结构,查找的方式就不一样了,可以是遍历我们的链表或者其他,这就是实现方式的不同

ps:打了好久,花了将近1个多小时,我感觉可以通俗点的,但是总想着把这些打上去,花了点时间,现在看来其他博主整理的文章真的质量很高,我还得精进一下。

二. STM32篇(如何输出PWM信号)

昨天我学习了PWM信号的原理,就是能够拟合模拟信号的数字信号。今天我看江科大的视频了解了一下stm32是怎么输出PWM信号的

首先在我们的stm32板上有一个外设TIM(定时器),定时器的功能就是计数,自动计数达到设定值以后就会触发中断,中断就可以去配置我们的中断事件

定时器有高级定时器,基本定时器,通用定时器,每个定时器的功能都差不多,也有一些区别。本文以通用定时器为例讲解原理

(上图源自江科大stm32的ppt) 

时基单元大概介绍

stm32输出依靠的是TIM的输出比较功能,那什么是输出比较功能呢?

又到了喜闻乐见的讲解概念的时候了,首先讲解咱STM32里面的TIM里面的时基单元

时基单元由

  PSC预分频器

  ARR自动重装器

  CNT计数器

这三个组成,包括在keil5软件里面也要单独拿出来配置

(图片源自江科大stm32PPT)

 它们的关系如上图

有关时基单元的每一个组成的功能还有用途的了解,我推荐keysking的这个视频,很通俗而且很到位

【STM32】第16集 动画告诉你, STM32的定时器到底怎么回事_哔哩哔哩_bilibili

这里我就讲讲我对这里面组件的大概理解(欢迎大家指正)

在这个时基单元之前会有输入信号,

输入信号首先到达PSC(预分频器),它的作用是能够将输入信号的频率进行分频,能达到怎样的效果呢,好比我们输入每一秒钟一次高电平的方波信号,通过预分频器以后,变成了每两秒或者每三秒一次高电平的方波信号。

 

CNT计数器,顾名思义就是计数的,计数1,2,3,4的

在PSC调整了这个输入信号的频率以后,能够让我们的CNT(计数器)计数得慢一点或者快一点

(我就是把CNT看作调整我们计数器的计数速度快慢的)

ARR自动重装值,它的功能就是一个设置一个值,当计数器达到这个值的时候,重新计数。

比如我设置ARR为10,那么CNT从1读10以后,CNT就调回1重新计数到10.

(我承认我的排版有点乱了)

TIM输出比较功能大概介绍

那么我们知道了时机单元的大概组成,现在开始讲讲TIM的输出比较功能是怎样运行的

上个图先,通用定时器的原理图:

输出比较功能的图在这里:

 

我们能看到上面的那一部分是我们的时基单元的组成,包括计数器,自动重装器。

同时在计数器下面有四个“捕获/比较寄存器”CCR连接着它们,它们有什么用呢?

大家可以认为它设定了一个值CCR,用来跟我们计数器的值CNT进行比较。通过这个比较的结果,来配置“输出控制”段的输出结果(输出高点平还是低电平,还是不输出)

(图片源自江科大stm32PPT)

比较常用的是PWM模式,我们可以通过CNT和CCR之间的比较,来配置高低电平(配置占空比),通过这种方式来输出我们的PWN信号。

 

以上便是我今天的学习了,感觉排版有些乱,写文章也花了很多时间,但总得找个法子记录一下,可能需要换个方法提高效率。 

  • 13
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夕止.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值