排序算法之堆排序 若干个元素序列{a1, a2, ……, an}满足则分别称为该序列{a1, a2, ……, an}为小根堆和大根堆从堆的定义可以看出,堆实质是满足如下性质的完全二叉树二叉树中任一非叶子结点均小于(大于)它的孩子结点。
Windows、Ubuntu虚拟机、开发板三ping测试设置以及uboot,系统镜像和设备树烧录 实现Windows、Ubuntu虚拟机和开发板三者之间的ping测试,其中涉及到uboot以及系统镜像的烧录。
虚拟机Ubuntu网络设置 注意:地址要和上一步桥接的网络ip处于同一个网段(就是前三个数一样,最后一个数不一样),子网掩码、网关和DNS要设置成完全一样(踩坑,DNS不一样一直通信不了)。找到网络设置,可以看见一个网络(下图是完全配置好的情况,正常第一次只有一个网络),点击网络名字后边的齿轮,打开设置。点击IPv4,将其改成手动模式,设置其地址、子网掩码、网关和DNS。打开网络设置,选择网卡1,连接方式选择桥接网卡,名称就是自己Windows的网络。1)右键开始菜单 ,选择运行,输入cmd,点击运行,打开window终端。
【ARM】链接脚本的编写以及踩坑记录 代码编译出来需要链接在指定的区域中,这些区域一般称为段。代码编译生成的文件一般都会包含四个段,分别是text段,data段,bss段,rodata段(下文会介绍各个段的内容),而链接脚本就是把所有编译出来的文件中的段放在对应的段中,下面是一个简单的链接脚本:
C++引用(常量引用、左值引用和右值引用) 引用为对象起了另外一个名字,引用类型为引用另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名:一般在初始化变量的时候,初始值会被拷贝到新建的对象中。然而定义引用的时候,程序把引用和它的初始值**绑定(bind)**在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。引用即别名引用并非对象,相反的,它只是为一个已经存在的对象所起的另外一个名字定义了一个引用之后,对其进行的所有操作都是在与之
高级定时器与霍尔传感器的接口——BLDC无刷直流电机 笔记:三个输入信号中的任意一个变化,异或门的结果都会发生变化,从而触发复位,计数器清零,捕获到的值存放在通道1的捕获寄存器中,因为计数器每次都是从0开始计数的,那么捕获寄存器中的值就是一次换向的时间,BLDC驱动用的是六步换向方波驱动,那么就可以算出电机的转速了。笔记:库中可以设置为软件更新(CCUS=0,然后在换向后用软件产生一个COM事件),也可以触发更新(CCUS=1,既可以软件产生COM事件更新高级定时器的参数,也可以触发输入TRGI的上升沿更新高级定时器的参数)
步进电机梯形加减速原理学习笔记 为了使得不出现丢步或者超步现象并且提高效率,需要使得步进电机先以固定的加速度达到目标速度,然后以这个速度运行,快到达目标步数时再减到最低速;整个过程是一个梯形的模型, 所以以它的数学模型命名的加减速算法。从模型中即可反映出算法的特点,数学模型中一共分为三个阶段,OA 加速部分、AB 匀速部分和 BC 减速部分。
定时器同步 TIMx定时器能够在多种模式下和一个外部的触发同步:复位模式、门控模式和触发模式。在STM32中,所有TIMx定时器在内部相连,用于定时器同步或链接。当一个定时器处于主模式时,它可以对另一个处于从模式的定时器的计数器进行复位、启动、停止或提供时钟等操作。
STM32的CAN通信的收发库函数解读 当需要使用CAN发送报文时,先定义一个上面发送类型的结构体,然后把报文的内容按成员赋值到该结构体中,最后调用库函数CAN_Transmit把这些内容写入到发送邮箱即可把报文发送出去。
基于STM32的CAN通讯的两种筛选模式 两种筛选模式用通俗的话来讲,标识列表模式就是把所有的ID放在一个表里,一个一个的去查,查到与标识的ID相同的报文选择接收,其他的报文不接受;(2) 掩码模式,它把可接收报文ID的某几位作为列表,这几位被称为掩码, 可以把它理解成关键字搜索,只要掩码(关键字)相同,就符合要求,报文就会被保存到接收FIFO。当掩码是1时,就表明要接收的报文ID就必须和存储的ID一致,当掩码是0是,就是不关心要筛选的ID这一位可以是0,也可以是1。筛选器的工作主要是筛选ID的长度和筛选模式决定的。
哈夫曼编码和解码 哈夫曼编码方法:1、统计字符集中每个字符在电文中出现的平均概率(概率越大,要求编码越短)。2、利用哈夫曼树的特点:权越大的叶子离根越近;将每个字符的概率值作为权值,构造哈夫曼树。则概率越大的结点,路径越短。3、在哈夫曼树的每个分支上标上0或1,结点的左分支标0,右分支标1,把从根到每个叶子的路径上的标号连接起来,作为该叶子代表的字符的编码。
构造哈夫曼树(结构数组存储) 哈夫曼树的构建过程:对于给定的一组权重,首先将它们作为单独的树进行处理;然后从集合中选择两个权重最小的树,将它们合并为一棵树;同时,将新产生的树的权重设定为其两个子树权重之和。重复执行这一过程,直到最后只剩下一棵树为止,这棵树就是哈夫曼树。
FreeRTOS的内存管理方案 因为不允许内存释放,就不会产生内存碎片而导致系统崩溃,但是也有缺点,那就是内存利用率不高,某段内存只能用于内存申请的地方,即使该内存只使用一次,也无法让系统回收重新利用。1、 用于从不删除任务、队列、信号量、互斥量等的应用程序(实际上大多数使用FreeRTOS 的应用程序都符合这个条件)。2. 如果我们的应用程序中的队列、任务、信号量、等工作在一个不可预料的顺序,这样子也有可能会导致内存碎片。1. 可以用在那些反复的删除任务、队列、信号量、等内核对象且不担心内存碎片的应用程序。2、 具有不确定性。