• 什么是C语言常量?

    常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数据类型。

    17分钟前 7浏览
  • 多种MCU内存管理分配算法对比

    本文主要介绍内存的基本概念以及操作系统的内存管理算法。 内存的基本概念 内存是计算机系统中除了处理器以外最重要的资源,用于存储当前正在执行的程序和数据。 内存是相对于CPU来说的,CPU可以直接寻址的存储空间叫做内存,CPU需要通过驱动才能访问的叫做外存。 ROMRAM Flas 内存一般采用半导体存储单元,分为只读存储器(ROM,Read Only Memory)、随机存储器(RAM,Random Access Memory)ROM一般只能读取不能写入,掉电后其中的数据也不会丢失。RAM既可以从中读取也可以写入,但是掉电后其中的数据会丢失。内存一般指的就是RAM。 ROM在嵌入式系统中一般用于存储BootLoader以及操作系统或者程序代码或者直接当硬盘使用。近年来闪存(Flash)已经全面代替了ROM在嵌入式系统中的地位,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程的特性,而且断电也不会丢失数据,同时可以快速读取数据。 两类内存管理方式 内存管理模块管理系统的内存资源,它是操作系统的核心模块之一。主要包括内存的初始化、分配以及释放。 从分配内存是否连续,可以分为两大类。 连续内存管理: 为进程分配的内存空间是连续的,但这种分配方式容易形成内存碎片(碎片是难以利用的空闲内存,通常是小内存),降低内存利用率。连续内存管理主要分为单一连续内存管理和分区式内存管理两种。 非连续内存管理: 将进程分散到多个不连续的内存空间中,可以减少内存碎片,内存使用率更高。如果分配的基本单位是页,则称为分页内存管理;如果基本单位是段,则称为分段内存管理。 当前的操作系统,普遍采用非连续内存管理方式。不过因为分配粒度较大,对于内存较小的嵌入式系统,一般采用连续内存管理。本文主要对嵌入式系统中常用的连续内存管理的分区式内存管理进行介绍。 分区式内存管理 分区式内存管理分为固定分区和动态分区。 固定分区: 事先就把内存划分为若干个固定大小的区域。分区大小既可以相等也可以不等。固定分区易于实现,但是会造成分区内碎片浪费,而且分区总数固定,限制了可以并发执行的进程数量。 动态分区: 根据进程的实际需要,动态地给进程分配所需内存。 动态分区式内存管理 01运作机制 动态分区管理一般采用空闲链表法,即基于一个双向链表来保存空闲分区。对于初始状态,整个内存块都会被作为一个大的空闲分区加入到空闲链表中。 当进程申请内存时,将会从这个空闲链表中找到一个大小满足要求的空闲分区。如果分区大于所需内存,则从该分区中拆分出需求大小的内存交给进程,并将此拆分出的内存从空闲链表中移除,剩下的内存仍然是一个挂在空闲链表中的空闲分区。 02数据结构 空闲链表法有多种数据结构实现,这里介绍一种较为简单的数据结构。每个空闲分区的数据结构中包含分区的大小,以及指向前一个分区和后一个分区的指针,这样就能将各个空闲分区链接成一个双向链表。 03内存分配算法 First Fit (首次适应算法) First Fit要求空闲分区链表以地址从小到大的顺序连接。分配内存时,从链表的第一个空闲分区开始查找,将最先能够满足要求的空闲分区分配给进程。 Next Fit (循环首次适应算法) Next Fit由First Fit算法演变而来。分配内存时,从上一次刚分配过的空闲分区的下一个开始查找,直至找到能满足要求的空闲分区。查找时会采用循环查找的方式,即如果直到链表最后一个空闲分区都不能满足要求,则返回到第一个空闲分区开始查找。 Best Fit (最佳适应算法) 从所有空闲分区中找出能满足要求的、且大小最小的空闲分区。为了加快查找速度,Best Fit算法会把所有空闲分区按其容量从小到大的顺序链接起来,这样第一次找到的满足大小要求的内存必然是最小的空闲分区。 Worst Fit (最坏适应算法) 从所有空闲分区中找出能满足要求的、且大小最大的空闲分区。Worst Fit算法按其容量从大到小的顺序链接所有空闲分区。 Two LevelSegregated Fit (TLSF) 使用两层链表来管理空闲内存,将空闲分区大小进行分类,每一类用一个空闲链表表示,其中的空闲内存大小都在某个特定值或者某个范围内。 这样存在多个空闲链表,所以又用一个索引链表来管理这些空闲链表,该表的每一项都对应一种空闲链表,并记录该类空闲链表的表头指针。 图中,第一层链表将空闲内存块的大小根据2的幂进行分类。第二层链表是具体的每一类空闲内存块按照一定的范围进行线性分段。 比如25这一类,以23即8分为4个内存区间 【25,25+8), 【25+8,25+16), 【25+16,25+24), 【25+24,25+32); 216这一类,以214分为4个小区间 【216,216+214), 【216+214,216+2*214), 【216+2*214,216+3*214), 【216+3*214,216+4*214)。 同时为了快速检索到空闲块,每一层链表都有一个bitmap用于标记对应的链表中是否有空闲块,比如第一层bitmap后3位010,表示25这一类内存区间有空闲块。对应的第二层bitmap为0100表示【25+16,25+24)这个区间有空闲块,即下面的52Byte。 Buddysystems(伙伴算法) Segregated Fit算法的变种,具有更好的内存拆分和回收合并效率。伙伴算法有很多种类,比如BinaryBuddies,Fibonacci Buddies等。 Binary Buddies是最简单也是最流行的一种,将所有空闲分区根据分区的大小进行分类,每一类都是具有相同大小的空闲分区的集合,使用一个空闲双向链表表示。BinaryBuddies中所有的内存分区都是2的幂次方。 因为无论是已分配的或是空闲的分区,其大小均为 2 的幂次方,即使进程申请的内存小于分配给它的内存块,多余的内存也不会再拆分出来给其他进程使用,这样就容易造成内部碎片。 当进程申请一块大小为n的内存时的分配步骤为: 计算一个i值,使得2i-1

    17分钟前 7浏览
  • 为什么电动机要并联电容?

    我们来聊聊电机为什么要并联电容,小到玩具车马达,大到电动机,都可见电容的存在,看完本章,保证您有收获! 注:本文章不具体讨论电容特性,所以不用怕听不懂 功率的组成 想要解开这个未知的大门,我们首先需要了解一下功率是由啥组成的? 您可能会毫不犹豫说是 电压×电流 我们从宏观角度看,这确实是功率但不具体 让我们看一张图片 啤酒 看到啤酒是多少就叫视在功率 泡沫没用就叫无功功率 真正喝到的啤酒就叫有功功率 由此可知,视在功率等于无功功率和有功功率之和 电容 电容 这里需要提及到电容的特性‘电流超前电压90°’ 详细解释:电容没通电时,两块极板都没有电荷(也就是0V)这时通电的话,就相当于短路了,就会产生很大的电流;当电压最大值时,就不会有电流了(也就是充满了) 可以用一个例子来比喻 水杯倒水 ‘电压差’越大‘电流’就越大 ‘电压差’越小‘电流’就越小 当电源处于负半周期时,电容电压>电源电压,此时电容反向放电 当电源处于正半周期时,电容电压<电源电压,此时电容充电 电容波形 红色部分表示充电,蓝色部分表示放电 这样一充一放就好比吃苹果,吃进去又吐出来 吃苹果 电感 电感波形 电感的特性则是‘电压超前电流90°’ 详细解释:因为电感上的电流不能突变,当有电流变化时,电感就阻止电流通过,相当于断路,这时电压升高;当电流达到最大时,电压为0 当电源处于正半周期电感电压>电源电压,电感电压下降时,电流增加(充电) 当电源处于负半周期时,电感 电容和电感波形比较 以上得知,电容电流是超前电压90° 电感电流是滞后电压90° 那电容和电感就相差180° 电容放电,电感就充电;电感充电,电容就放电,互补(也可以看成是孪生兄弟) 现在就可以解释为什么要电机要并联电容了,因为电机都是电感类似的元件,所以需要电容互补 怎么理解无功功率 可以理解是电能转为磁场,然后磁场转为电能 如图所示 无功功率理解 总结 有功功率 其中功率因数是有功功率与视在功率之比 所以提高功率因数就能做更多有用的功,方法就是通过并联电容减少无功功率,以提高功率因数 拓展 从图中可以看出无功功率比有功功率还要多 只有有功功率才收费,无功功率不收费

    18分钟前 9浏览
  • 电源里的噪声和纹波是一回事吗?

    大家好,我是山羊君Goat。在进行电源信号的测试中,总是会看到电源信号上或多或少都有一些杂波,并且这些杂波看起来也不是很有规律,那么这些杂波到底是什么呢?

    昨天 47浏览
  • TL431、三极管搭建的几种常见恒流源电路

    恒流源电路在合理范围改变Rload的大小,流过Rload大小不会改变。有兴趣的可以自己搭建电路试试

    昨天 46浏览
  • DC-DC和LDO原理与区别

    ​LDO:LOW DROPOUT VOLTAGE LDO(是low dropout voltage regulator的缩写)低压差线性稳压器,顾名思义,为线性的稳压器,仅能使用在降压应用中。也就是输出电压必须小于输入电压。

    昨天 47浏览
  • 升压型DC/DC转换器的PCB布局技巧

    本文将探讨升压型DC/DC转换器的PCB布局中“接地”相关的内容。经常听到“接地很重要”、“需要加强接地设计”等说法。

    昨天 50浏览
  • 两个小妙招让运算放大器输出振荡

    首先看一下正常放大的仿真,下图是对一个方波进行放大的2倍同相比例放大器,输入信号为1V占空比为50%的方波,输出为2V占空比为50%的方波。以及对他进行瞬态分析的结果,可以看到输入信号为红色的方波,输出的信号为绿色方波。

    昨天 44浏览
  • 电流回路是分析电路图的基础,看懂电路先搞懂这些

    如果其中的某一环节出现断路(开路),那就不能构成供电电流回路,负载就得不到供电,负载也就不能开始工作。

    昨天 56浏览
  • 稳压二极管的工作原理及电路图

    稳压二极管概述稳压二极管又叫齐纳二极管。利用pn结反向击穿状态,其电流可在很大范围内变化而电压基本不变的现象,制成的起稳压作用的二极管。

    昨天 53浏览
正在努力加载更多...
广告