标签目录:摩登3代理1980

摩登3登录_百度给国产x86处理器发证明!

国产CPU处理器除了要满足日常办公、娱乐使用之外,还会抢占商业市场。日前上海兆芯宣布通过了百度飞浆AI框架的认证,旗下多款CPU表现都不错,可以满足需求。 从官方公布的结果来看,百度飞桨(PaddlePaddle)指出,兆芯科技的ZX-C、ZX-C+、KX-5000、KX-6000、KH-2000、KH-3000系列处理器和CentOS操作系统软件V7平台上,功能、性能、兼容性、可靠性、稳定性可满足用户需求。 兆芯表示,开先KX-6000、开胜KH-30000等系列国产处理器平台上功能、性能、兼容性、可靠性、稳定性等满足用户应用需求的互认证明,将有效推动双方进一步技术合作,为AI开发者提供基于国产化环境的深度学习平台,促进双方产品竞争力提升和AI应用的创新发展。 这里面提到的KX-6000是兆芯的最新产品,采用16nm工艺,单芯片集成8个处理器核心,主频最高可达3.0GHz,支持双通道DDR4-3200内存,支持PCIe3.0、SATA3.2、USB3.1等高速外设接口,同时集成显卡支持3D图形加速引擎、高清流媒体编解码器以及HDMI2.0、DP1.2、VGA等显示接口,支持H.264、H.265等格式的4K视频硬件解码。 在性能方面,开先KX-6000系列处理器较上一代产品提升多达50%,且功耗显著降低,应用体验大幅改善。

摩登3咨询:_华为5G禁令在这国重新生效!

当地时间12月16日,斯德哥尔摩上诉法院裁决 斯德哥尔摩行政法院颁布的临时禁止令被停止,但华为有权上诉瑞典电信监管局(PTS)。 瑞典电信监管局表示,将要联系参与拍卖的各方,这意味着拍卖不会在12月进行。 瑞典原定11月10日开始5G频谱拍卖。10月20日,瑞典电信监管局公布了运营商参与竞拍的附加条件,排除华为及中兴设备,并要求现有设备在2025年前移除。 华为瑞典于11月5日就拍卖附加条件向瑞典斯德哥尔摩行政法院提起上诉,法院于11月9日颁发临时禁止令,叫停附加条件。瑞典电信监管局随即决定延迟拍卖,并于11月16日针对临时禁止令向上诉法院提出上诉。 ▲截图自瑞典电信监管局(PTS) ▲ 截图自上诉法院 对此华为声明如下: 上诉法院肯定了华为的主张,瑞典电信监管局关于5G频谱的附加条件可以被诉,其决定对华为有重大影响,华为有权上诉,否定了瑞典电信监管局的上诉理由。该裁决清楚地表明, 瑞典电信监管局没有遵守正当程序,没有在5G频谱的附加条件决定前,将华为作为相关方征询意见。 上诉法院同时指出,该案的最终结果存在不确定性。这意味着, 华为起诉瑞典电信监管局案件的最终判决结果,有可能导致瑞典电信监管局撤销或重新评估5G频谱的附加条件。因此我们敦促,为保护瑞典ICT产业各方利益,频谱拍卖只有在瑞典电信监管局与所有利益相关方充分沟通并达成一致意见的前提下才能进行。 上诉法院停止了11月9日斯德哥尔摩行政法院颁布的临时禁令,瑞典斯德哥尔摩行政法院将继续对华为起诉瑞典电信监管局的案件进行审理。 END 来源:央视新闻客户端 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3平台首页_资深工程师分享7种常见二极管应用电路解析

许多初学者对二极管很“熟悉”,提起二极管的特性可以脱口而出它的单向导电特性,说到它在电路中的应用第一反应是整流,对二极管的其他特性和应用了解不多,认识上也认为掌握了二极管的单向导电特性,就能分析二极管参与的各种电路,实际上这样的想法是错误的,而且在某种程度上是害了自己,因为这种定向思维影响了对各种二极管电路工作原理的分析,许多二极管电路无法用单向导电特性来解释其工作原理。 二极管除单向导电特性外,还有许多特性,很多的电路中并不是利用单向导电特性就能分析二极管所构成电路的工作原理,而需要掌握二极管更多的特性才能正确分析这些电路,例如二极管构成的简易直流稳压电路,二极管构成的温度补偿电路等。 1 二极管简易直流稳压电路及故障处理 二极管简易稳压电路主要用于一些局部的直流电压供给电路中,由于电路简单,成本低,所以应用比较广泛。 二极管简易稳压电路中主要利用二极管的管压降基本不变特性。 二极管的管压降特性:二极管导通后其管压降基本不变,对硅二极管而言这一管压降是0.6V左右,对锗二极管而言是0.2V左右。 如图9-40所示是由普通3只二极管构成的简易直流稳压电路。电路中的VD1、VD2和VD3是普通二极管,它们串联起来后构成一个简易直流电压稳压电路。 图9-40 3只普通二极管构成的简易直流稳压电路 1.电路分析思路说明 分析一个从没有见过的电路工作原理是困难的,对基础知识不全面的初学者而言就更加困难了。 关于这一电路的分析思路主要说明如下。 1)从电路中可以看出3只二极管串联,根据串联电路特性可知,这3只二极管如果导通会同时导通,如果截止会同时截止。 2)根据二极管是否导通的判断原则分析,在二极管的正极接有比负极高得多的电压,无论是直流还是交流的电压,此时二极管均处于导通状态。从电路中可以看出,在VD1正极通过电阻R1接电路中的直流工作电压+V,VD3的负极接地,这样在3只串联二极管上加有足够大的正向直流电压。由此分析可知,3只二极管VD1、VD2和VD3是在直流工作电压+V作用下导通的。 3)从电路中还可以看出,3只二极管上没有加入交流信号电压,因为在VD1正极即电路中的A点与地之间接有大容量电容C1,将A点的任何交流电压旁路到地端。 2.二极管能够稳定直流电压原理说明 电路中,3只二极管在直流工作电压的正向偏置作用下导通,导通后对这一电路的作用是稳定了电路中A点的直流电压。 众所周知,二极管内部是一个PN结的结构,PN结除单向导电特性之外还有许多特性,其中之一是二极管导通后其管压降基本不变,对于常用的硅二极管而言导通后正极与负极之间的电压降为0.6V。 根据二极管的这一特性,可以很方便地分析由普通二极管构成的简易直流稳压电路工作原理。3只二极管导通之后,每只二极管的管压降是0.6V,那么3只串联之后的直流电压降是0.6×3=1.8V。 3.故障检测方法 检测这一电路中的3只二极管最为有效的方法是测量二极管上的直流电压,如图9-41所示是测量时接线示意图。如果测量直流电压结果是1.8V左右,说明3只二极管工作正常;如果测量直流电压结果是0V,要测量直流工作电压+V是否正常和电阻R1是否开路,与3只二极管无关,因为3只二极管同时击穿的可能性较小;如果测量直流电压结果大于1.8V,检查3只二极管中有一只开路故障。 图9-41 测量二极管上直流电压接线示意图 4.电路故障分析 如表9-40所示是这一二极管电路故障分析: 表9-40 二极管电路故障分析 5.电路分析细节说明 关于上述二极管简易直流电压稳压电路分析细节说明如下。 1)在电路分析中,利用二极管的单向导电性可以知道二极管处于导通状态,但是并不能说明这几只二极管导通后对电路有什么具体作用,所以只利用单向导电特性还不能够正确分析电路工作原理。 2)二极管众多的特性中只有导通后管压降基本不变这一特性能够最为合理地解释这一电路的作用,所以依据这一点可以确定这一电路是为了稳定电路中A点的直流工作电压。 3)电路中有多只元器件时,一定要设法搞清楚实现电路功能的主要元器件,然后围绕它进行展开分析。分析中运用该元器件主要特性,进行合理解释。 2 二极管温度补偿电路及故障处理 众所周知,PN结导通后有一个约为0.6V(指硅材料PN结)的压降,同时PN结还有一个与温度相关的特性:PN结导通后的压降基本不变,但不是不变,PN结两端的压降随温度升高而略有下降,温度愈高其下降的量愈多,当然PN结两端电压下降量的绝对值对于0.6V而言相当小,利用这一特性可以构成温度补偿电路。如图9-42所示是利用二极管温度特性构成的温度补偿电路。 图9-42 二极管温度补偿电路 对于初学者来讲,看不懂电路中VT1等元器件构成的是一种放大器,这对分析这一电路工作原理不利。 在电路分析中,熟悉VT1等元器件所构成的单元电路功能,对分析VD1工作原理有着积极意义。了解了单元电路的功能,一切电路分析就可以围绕它进行展开,做到有的放矢、事半功倍。 1.需要了解的深层次电路工作原理 分析这一电路工作原理需要了解下列两个深层次的电路原理。 1)VT1等构成一种放大器电路,对于放大器而言要求它的工作稳定性好,其中有一条就是温度高低变化时三极管的静态电流不能改变,即VT1基极电流不能随温度变化而改变,否则就是工作稳定性不好。了解放大器的这一温度特性,对理解VD1构成的温度补偿电路工作原理非常重要。 2)三极管VT1有一个与温度相关的不良特性,即温度升高时,三极管VT1基极电流会增大,温度愈高基极电流愈大,反之则小,显然三极管VT1的温度稳定性能不好。由此可知,放大器的温度稳定性能不良是由于三极管温度特性造成的。 2.三极管偏置电路分析 电路中,三极管VT1工作在放大状态时要给它一定的直流偏置电压,这由偏置电路来完成。电路中的R1、VD1和R2构成分压式偏置电路,为三极管VT1基极提供直流工作电压,基极电压的大小决定了VT1基极电流的大小。如果不考虑温度的影响,而且直流工作电压+V的大小不变,那么VT1基极直流电压是稳定的,则三极管VT1的基极直流电流是不变的,三极管可以稳定工作。 在分析二极管VD1工作原理时还要搞清楚一点:VT1是NPN型三极管,其基极直流电压高,则基极电流大;反之则小。 3.二极管VD1温度补偿电路分析 根据二极管VD1在电路中的位置,对它的工作原理分析思路主要说明下列几点: 1)VD1的正极通过R1与直流工作电压+V相连,而它的负极通过R2与地线相连,这样VD1在直流工作电压+V的作用下处于导通状态。理解二极管导通的要点是:正极上电压高于负极上电压。 2)利用二极管导通后有一个0.6V管压降来解释电路中VD1的作用是行不通的,因为通过调整R1和R2的阻值大小可以达到VT1基极所需要的直流工作电压,根本没有必要通过串入二极管VD1来调整VT1基极电压大小。 3)利用二极管的管压降温度特性可以正确解释VD1在电路中的作用。假设温度升高,根据三极管特性可知,VT1的基极电流会增大一些。当温度升高时,二极管VD1的管压降会下降一些,VD1管压降的下降导致VT1基极电压下降一些,结果使VT1基极电流下降。由上述分析可知,加入二极管VD1后,原来温度升高使VT1基极电流增大的,现在通过VD1电路可以使VT1基极电流减小一些,这样起到稳定三极管VT1基极电流的作用,所以VD1可以起温度补偿的作用。 4)三极管的温度稳定性能不良还表现为温度下降的过程中。在温度降低时,三极管VT1基极电流要减小,这也是温度稳定性能不好的表现。接入二极管VD1后,温度下降时,它的管压降稍有升高,使VT1基极直流工作电压升高,结果VT1基极电流增大,这样也能补偿三极管VT1温度下降时的不稳定。 4.电路分析细节说明 电路分析的细节说明如下。 1)在电路分析中,若能运用元器件的某一特性去合理地解释它在电路中的作用,说明电路分析很可能是正确的。例如,在上述电路分析中,只能用二极管的温度特性才能合理解释电路中VD1的作用。 2)温度补偿电路的温度补偿是双向的,即能够补偿由于温度升高或降低而引起的电路工作的不稳定性。 3)分析温度补偿电路工作原理时,要假设温度的升高或降低变化,然后分析电路中的反应过程,得到正确的电路反馈结果。在实际电路分析中,可以只设温度升高进行电路补偿的分析,不必再分析温度降低时电路补偿的情况,因为温度降低的电路分析思路、过程是相似的,只是电路分析的每一步变化相反。 4)在上述电路分析中,VT1基极与发射极之间PN结(发射结)的温度特性与VD1温度特性相似,因为它们都是PN结的结构,所以温度补偿的结果比较好。 5)在上述电路中的二极管VD1,对直流工作电压+V的大小波动无稳定作用,所以不能补偿由直流工作电压+V大小波动造成的VT1管基极直流工作电流的不稳定性。 5.故障检测方法和电路故障分析 这一电路中的二极管VD1故障检测方法比较简单,可以用万用表欧姆档在路测量VD1正向和反向电阻大小的方法。 当VD1出现开路故障时,三极管VT1基极直流偏置电压升高许多,导致VT1管进入饱和状态,VT1可能会发烧,严重时会烧坏VT1。如果VD1出现击穿故障,会导致VT1管基极直流偏置电压下降0.6V,三极管VT1直流工作电流减小,VT1管放大能力减小或进入截止状态。 3 二极管控制电路及故障处理 二极管导通之后,它的正向电阻大小随电流大小变化而有微小改变,正向电流愈大,正向电阻愈小;反之则大。 利用二极管正向电流与正向电阻之间的特性,可以构成一些自动控制电路。如图9-43所示是一种由二极管构成的自动控制电路,又称ALC电路(自动电平控制电路),它在磁性录音设备中(如卡座)的录音电路中经常应用。 图9-43 二极管构成的自动控制电路 1.电路分析准备知识说明 二极管的单向导电特性只是说明了正向电阻小、反向电阻大,没有说明二极管导通后还有哪些具体的特性。 二极管正向导通之后,它的正向电阻大小还与流过二极管的正向电流大小相关。尽管二极管正向导通后的正向电阻比较小(相对反向电阻而言),但是如果增加正向电流,二极管导通后的正向电阻还会进一步下降,即正向电流愈大,正向电阻愈小,反之则大。 不熟悉电路功能对电路工作原理很不利,在了解电路功能的背景下能有的放矢地分析电路工作原理或电路中某元器件的作用。 ALC电路在录音机、卡座的录音卡中,录音时要对录音信号的大小幅度进行控制,了解下列几点具体的控制要求有助于分析二极管VD1自动控制电路。 1)在录音信号幅度较小时,不控制录音信号的幅度。 2)当录音信号的幅度大到一定程度后,开始对录音信号幅度进行控制,即对信号幅度进行衰减,对录音信号幅度控制的电路就是ALC电路。 3)ALC电路进入控制状态后,要求录音信号愈大,对信号的衰减量愈大。 通过上述说明可知,电路分析中要求自己有比较全面的知识面,这需要在不断的学习中日积月累。 2.电路工作原理分析思路说明 关于这一电路工作原理的分析思路主要说明下列几点: 1)如果没有VD1这一支路,从第一级录音放大器输出的录音信号全部加到第二级录音放大器中。但是,有了VD1这一支路之后,从第一级录音放大器输出的录音信号有可能会经过C1和导通的VD1流到地端,形成对录音信号的分流衰减。 2)电路分析的第二个关键是VD1这一支路对第一级录音放大器输出信号的对地分流衰减的具体情况。显然,支路中的电容C1是一只容量较大的电容(C1电路符号中标出极性,说明C1是电解电容,而电解电容的容量较大),所以C1对录音信号呈通路,说明这一支路中VD1是对录音信号进行分流衰减的关键元器件。 3)从分流支路电路分析中要明白一点:从第一级录音放大器输出的信号,如果从VD1支路分流得多,那么流入第二级录音放大器的录音信号就小,反之则大。 4)VD1存在导通与截止两种情况,在VD1截止时对录音信号无分流作用,在导通时则对录音信号进行分流。 5)在VD1正极上接有电阻R1,它给VD1一个控制电压,显然这个电压控制着VD1导通或截止。所以,R1送来的电压是分析VD1导通、截止的关键所在。 分析这个电路最大的困难是在VD1导通后,利用了二极管导通后其正向电阻与导通电流之间的关系特性进行电路分析,即二极管的正向电流愈大,其正向电阻愈小,流过VD1的电流愈大,其正极与负极之间的电阻愈小,反之则大。 3.控制电路的一般分析方法说明 对于控制电路的分析通常要分成多种情况,例如将控制信号分成大、中、小等几种情况。就这一电路而言,控制电压Ui对二极管VD1的控制要分成下列几种情况。 1)电路中没有录音信号时,直流控制电压Ui为0,二极管VD1截止,VD1对电路工作无影响,第一级录音放大器输出的信号可以全部加到第二级录音放大器中。 2)当电路中的录音信号较小时,直流控制电压Ui较小,没有大于二极管VD1的导通电压,所以不足以使二极管VD1导通,此时二极管VD1对第一级录音放大器输出的信号也没有分流作用。 3)当电路中的录音信号比较大时,直流控制电压Ui较大,使二极管VD1导通,录音信号愈大,直流控制电压Ui愈大,VD1导通程度愈深,VD1的内阻愈小。 4)VD1导通后,VD1的内阻下降,第一级录音放大器输出的录音信号中的一部分通过电容C1和导通的二极管VD1被分流到地端,VD1导通愈深,它的内阻愈小,对第一级录音放大器输出信号的对地分流量愈大,实现自动电平控制。 5)二极管VD1的导通程度受直流控制电压Ui控制,而直流控制电压Ui随着电路中录音信号大小的变化而变化,所以二极管VD1的内阻变化实际上受录音信号大小控制。 4.故障检测方法和电路故障分析 对于这一电路中的二极管故障检测最好的方法是进行代替检查,因为二极管如果性能不好也会影响到电路的控制效果。 当二极管VD1开路时,不存在控制作用,这时大信号录音时会出现声音一会儿大一会儿小的起伏状失真,在录音信号很小时录音能够正常。 当二极管VD1击穿时,也不存在控制作用,这时录音声音很小,因为录音信号被击穿的二极管VD1分流到地了。 4 二极管限幅电路及故障处理 二极管最基本的工作状态是导通和截止两种,利用这一特性可以构成限幅电路。所谓限幅电路就是限制电路中某一点的信号幅度大小,让信号幅度大到一定程度时,不让信号的幅度再增大,当信号的幅度没有达到限制的幅度时,限幅电路不工作,具有这种功能的电路称为限幅电路,利用二极管来完成这一功能的电路称为二极管限幅电路。 如图9-44所示是二极管限幅电路。在电路中,A1是集成电路(一种常用元器件),VT1和VT2是三极管(一种常用元器件),R1和R2是电阻器,VD1~VD6是二极管。 图9-44 二极管限幅电路 1.电路分析思路说明 对电路中VD1和VD2作用分析的思路主要说明下列几点: 1)从电路中可以看出,VD1、VD2、VD3和VD4、VD5、VD6两组二极管的电路结构一样,这两组二极管在这一电路中所起的作用是相同的,所以只要分析其中一组二极管电路工作原理即可。 2)集成电路A1的①脚通过电阻R1与三极管VT1基极相连,显然R1是信号传输电阻,将①脚上输出信号通过R1加到VT1基极,由于在集成电路A1的①脚与三极管VT1基极之间没有隔直电容,根据这一电路结构可以判断:集成电路A1的①脚是输出信号引脚,而且输出直流和交流的复合信号。确定集成电路A1的①脚是信号输出引脚的目的是为了判断二极管VD1在电路中的具体作用。 3)集成电路的①脚输出的直流电压显然不是很高,没有高到让外接的二极管处于导通状态,理由是:如果集成电路A1的①脚输出的直流电压足够高,那么VD1、VD2和VD3导通,其导通后的内阻很小,这样会将集成电路A1的①脚输出的交流信号分流到地,对信号造成衰减,显然这一电路中不需要对信号进行这样的衰减,所以从这个角度分析得到的结论是:集成电路A1的①脚输出的直流电压不会高到让VD1、VD2和VD3导通的程度。 4)从集成电路A1的①脚输出的是直流和交流叠加信号,通过电阻R1与三极管VT1基极,VT1是NPN型三极管,如果加到VT1基极的正半周交流信号幅度出现很大的现象,会使VT1的基极电压很大而有烧坏VT1的危险。加到VT1基极的交流信号负半周信号幅度很大时,对VT1没有烧坏的影响,因为VT1基极上负极性信号使VT1基极电流减小。 5)通过上述电路分析思路可以初步判断,电路中的VD1、VD2、VD3是限幅保护二极管电路,防止集成电路A1的①脚输出的交流信号正半周幅度太大而烧坏VT1。 从上述思路出发对VD1、VD2、VD3二极管电路进一步分析,分析如果符合逻辑,可以说明上述电路分析思路是正确的。 2.二极管限幅电路 分析各种限幅电路工作是有方法的,将信号的幅度分两种情况: 1)信号幅度比较小时的电路工作状态,即信号幅度没有大到让限幅电路动作的程度,这时限幅电路不工作。 2)信号幅度比较大时的电路工作状态,即信号幅度大到让限幅度电路动作的程度,这时限幅电路工作,将信号幅度进行限制。 用画出信号波形的方法分析电路工作原理有时相当管用,用于分析限幅电路尤其有效,如图9-45所示是电路中集成电路A1的①脚上信号波形示意图。 图9-45 集成电路A1的①脚上信号波形示意图 图中,U1是集成电路A1的①脚输出信号中的直流电压,①脚输出信号中的交流电压是“骑”在这一直流电压上的。U2是限幅电压值。 结合上述信号波形来分析这个二极管限幅电路,当集成电路A1的①脚输出信号中的交流电压比较小时,交流信号的正半周加上直流输出电压U1也没有达到VD1、VD2和VD3导通的程度,所以各二极管全部截止,对①脚输出的交流信号没有影响,交流信号通过R1加到VT1中。 假设集成电路A1的①脚输出的交流信号其正半周幅度在某期间很大,见图8-12中的信号波形,由于此时交流信号的正半周幅度加上直流电压已超过二极管VD1、VD2和VD3正向导通的电压值,如果每只二极管的导通电压是0.7V,那么3只二极管的导通电压是2.1V。由于3只二极管导通后的管压降基本不变,即集  成电路A1的①脚最大为2.1V,所以交流信号正半周超出部分被去掉(限制),其超出部分信号其实降在了集成电路A1的①脚内电路中的电阻上(图中未画出)。…

摩登3主管554258:_面试必备!常见的C语言字符串操作

#字符串倒序输出 实现逻辑,通过strlen获取字符串长度,然后通过 len/2 进行交叉赋值,这里需要注意,不需要考虑len是奇数还是偶数的问题。 如果len是奇数,最后一个字符就不需要倒序,如果是偶数,最后两个字符就倒序。 #include "stdio.h"void rechange_str(char *str){ int i, len; char tmp; if (NULL == str) {  return ; } len = strlen(str); for (i = 0; i < len/2; i ++) {  tmp = str[i];  str[i] = str[len-i-1];  str[len-i-1] = tmp; }}int main(void){ char str[20] = "hello,world"; printf("%s\n",str); rechange_str(str); printf("%s\n",str); return (0);}  程序输出 hello,worlddlrow,olleh--------------------------------Process exited after 0.02841 seconds with return value 0请按任意键继续. . . #整型转字符串 实现逻辑,每个整数看其转换进制,从个位到十位百位都可以通过%操作加上/操作获得,再用一个字符数组保存0-F。 用个位数对应值转为字符,注意转换出的字符串是反向的,还要考虑传入的若是负数如何处理,再用翻转字符串完成最后整个操作 下面这段代码需要好好研究一下,最好自己运行试试。 #include "stdio.h"char *sky_itoa(int value, char *str, unsigned int radix){ char list[] = "0123456789ABCDEF"; unsigned int tmp_value; int i, j, k; if (NULL == str) {  return NULL; } if (2 != radix && 8 != radix && 10 != radix && 16 != radix) {  return NULL; } i = 0; k = 0; if (radix == 10 && value < 0) {  tmp_value = (unsigned int)(0 - value);  str[i++] = '-';  k = 1; } else {  tmp_value = (unsigned int)value; } do {  str[i++] = list[tmp_value%radix];  tmp_value /= radix; } while(tmp_value); str[i] = '\0'; //翻转 char tmp; for (j = k; j < (i+k)/2; j++) {  tmp = str[j];  str[j] = str[i+k-j-1];  str[i+k-j-1] = tmp; } return str;}int main(void){ int a = 1254545; char str[100] ={0}; printf("%s\n",sky_itoa(a,str,2)); printf("%s\n",sky_itoa(a,str,8)); printf("%s\n",sky_itoa(a,str,10)); printf("%s\n",sky_itoa(a,str,16)); return (0);}  程序输出 10011001001001001000146222211254545132491--------------------------------Process exited after 0.02963 seconds with return value 0请按任意键继续. . . #字符串复制 实现逻辑,逐个赋值直到遇到’\0’停止即可 #include "stdio.h"char *sky_strcpy(char *dst, const char *str){ if (NULL == dst ||  NULL == str) {  return NULL; } char *ret = dst; while (*str != '\0') {  *dst ++ = *str ++; } return ret; } int main(void){ char str_1[100] = "hello,world"; char str[100] ={0}; sky_strcpy(str,str_1); printf("str_1:%s\n",str_1); printf("str:%s\n",str); return (0);}  程序输出 str_1:hello,worldstr:hello,world--------------------------------Process exited after 0.03334 seconds with return value 0请按任意键继续. . . #字符串比较 1、正常比较是否相同 实现逻辑,判断字符串长度是否相同,若相同逐个比较字符是否相同 #include "stdio.h"int sky_strcmp(char *dst, char *str){ int i, len; if (NULL == dst || NULL == str) {  return 0; } if (strlen(dst) != strlen(str)) {  return 0; } len = strlen(dst); for (i = 0; i < len; i++) {  if (*dst++ != *str++) {   return 0;  } } return 1;} int main(void){ char str_1[100] = "hello,world"; char str_2[100] = "hello,world"; char str[100] = "adfs";  printf("%d\n",sky_strcmp(str_1,str)); printf("%d\n",sky_strcmp(str_1,str_2)); return (0);}  程序输出 01--------------------------------Process exited after 0.02802 seconds with return value 0请按任意键继续. . . 2、忽略大小写字符串比较 实现逻辑,在比较字符时可以将其统一转换为大写或小写,然后再进行比对即可,和正常对比无其他不同  #include "stdio.h"  #define CONVERT(c) (((c) >= 'A' && (c) <= 'Z') ? ((c) - 'A' + 'a') : (c)) int sky_strcmp(char *dst, char *str) {  int i, len;  if (NULL == dst || NULL == str) {   return 0;  }  if (strlen(dst) != strlen(str)) {   return 0;  }  len = strlen(dst);  for (i = 0; i < len; i++) {   if (CONVERT(*dst) != CONVERT(*str)) {    return 0;   }   dst ++;   str ++;  }  return 1; }   int main(void) {  char str_1[100] = "heLlo,world";  char str_2[100] = "hello,world";  char str[100] = "adfs";    printf("%d\n",sky_strcmp(str_1,str));  printf("%d\n",sky_strcmp(str_1,str_2));  return (0); }  程序输出 01--------------------------------Process exited after 0.04624 seconds with return value 0请按任意键继续. . . #memcpy函数实现 实现逻辑,主要就是逐个赋值即可完成  1、不考虑拷贝覆盖问题 #include "stdio.h"#include "string.h"void *sky_memecpy(void *dst, const void *str, int n){ if (NULL == dst || NULL == str || n <= 0) {  return NULL; } char *pdst = (char *)dst; char *pstr = (char *)str; while (n --) {  *pdst ++ = *pstr ++; } return dst;}int main(void){ char str_1[100] = "heLlo,world"; char str_2[100] = "sdfsdfs"; sky_memecpy(str_2,str_1,strlen(str_1)); printf("%s\n",str_2); return (0);}  程序输出 heLlo,world--------------------------------Process exited after 0.02516 seconds with return value 0请按任意键继续. . . 2、考虑拷贝覆盖问题 拷贝覆盖是我们在拷贝字符串的时候需要注意的一个问题,我下面的示例程序,使用第一个函数的时候,就出现了问题,使用第二个函数就没有出现问题。 原因是,我们源字符串和目的字符串的地址都是一样的,我们希望把字符串往后移动一个位置,但是实际上出现了问题。  #include "stdio.h" #include "string.h"  void *sky_memecpy_1(void *dst, const void *str, int n) {  if (NULL == dst || NULL == str || n <= 0) {   return NULL;  }  char *pdst = (char *)dst;  char *pstr = (char *)str;  while (n --) {   *pdst ++ = *pstr ++;  }  return dst; }  void *sky_memecpy(void *dst, const void *str, int n) {  if (NULL == dst || NULL == str || n <= 0) {   return NULL;  }  char *pdst = (char *)dst;  char *pstr = (char *)str;     if (pdst > pstr && pdst < pstr + n) {   pdst = pdst + n - 1;   pstr = pstr + n - 1;   while (n --) {    *pdst -- = *pstr --;   }  } else {   while (n --) {    *pdst ++ = *pstr ++;   }  }  return dst; }  int main(void) {  char str_1[100] = "heLlo,world";  char str_2[100] = "heLlo,world";  sky_memecpy_1(str_1+1,str_1,strlen(str_1));  printf("%s\n",str_1);    sky_memecpy(str_2+1,str_2,strlen(str_2));  printf("%s\n",str_2);  return (0); }  程序输出 hhhhhhhhhhhhhheLlo,world--------------------------------Process exited after 0.02773 seconds with return value 0请按任意键继续. . . 针对上面的拷贝覆盖问题,单独写了一个测试程序 #include "stdio.h"#include "string.h"void *sky_memecpy(void *dst, const void *str, int n){ if (NULL == dst || NULL == str || n <= 0) {  return NULL; } char *pdst = (char *)dst; char *pstr = (char *)str; while (n --) {  printf("dst:%c--->str:%c\n",*pdst,*pstr);  *pdst ++ = *pstr ++; } return dst;}int main(void){ char str_1[100] = "heLlo,world"; sky_memecpy(str_1+1,str_1,strlen(str_1)); printf("%s\n",str_1); return (0);}  程序输出 dst:e--->str:hdst:L--->str:hdst:l--->str:hdst:o--->str:hdst:,--->str:hdst:w--->str:hdst:o--->str:hdst:r--->str:hdst:l--->str:hdst:d--->str:hdst: --->str:hhhhhhhhhhhhh--------------------------------Process exited after 0.02575 seconds with return value 0请按任意键继续. . . 初始的时候,dst指向 e 字符,str 指向h 字符,然后每次都是dst先移动,str再移动,就出现了dst被h字符所覆盖。 好了,就这些内容,希望大家好好消化,这些代码对面试很有帮助。 END 来源:嵌入式Linux 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3测速登录地址_干货!protobuf-c之嵌入式平台使用

什么是protobuf-c 之前的文章:《Protobuf:一种更小、更快、更高效的协议》详细介绍了protobuf及protobuf-c。这里再简单提一下: Protocol Buffers,是Google公司开发的一种数据格式,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。protobuf支持一些主流的语言,唯独没有支持C,所以诞生了第三方的protobuf-c。 之前文章介绍了protobuf、protobuf-c在PC平台上的安装及使用,本篇笔记我们来把它用在我们的嵌入式ARM平台。 交叉编译protobuf-c 之前的文章中我们已经把protobuf、protobuf-c安装在我们的PC环境中了: 我们简单回顾一下我们上一篇文章的大致内容: 从中我们知道,这里的protobuf的主要作用是生成了protoc工具,而protoc工具的作用是把.proto文件生成对应的C源、头文件,这个过程是与平台无关的,所以这里我们可以接着用。 而protobuf-c生成了编译需要用到的动态库,此处我们需要编译ARM架构的动态库。即我们本篇笔记需要做的事情是: (1)交叉编译protobuf-c 首先在protobuf-c目录下使用make clean命令清除我们之前编译得到的东西: 输入如下命令生成交叉编译的Makefile文件: 左右滑动查看全部代码>>> ./configure --host=arm-linux-gnueabihf CC=/home/book/ToolChain/gcc-arm-linux-gnueabihf-6.2.1/bin/arm-linux-gnueabihf-gcc CXX=/home/book/ToolChain/gcc-arm-linux-gnueabihf-6.2.1/bin/arm-linux-gnueabihf-g++ --disable-protoc --prefix=$PWD/tmp 这个命令似乎很长,但并不难,只是加了几个配置参数。这些配置参数怎么看?我们可以输入./configure --help命令来查看支持的配置: 下面我们依次来分析上面那个很长的命令: –host=arm-linux-gnueabihf:表明了我们最终可执行文件运行的环境。 CC=/home/book/ToolChain/gcc-arm-linux-gnueabihf-6.2.1/bin/arm-linux-gnueabihf-gcc:这是指定我们的交叉编译工具arm-linux-gnueabihf-gcc,这里直接给出绝对路径。 CXX=/home/book/ToolChain/gcc-arm-linux-gnueabihf-6.2.1/bin/arm-linux-gnueabihf-g++:这是指定我们的交叉编译工具arm-linux-gnueabihf-g++,这里直接给出绝对路径。 –disable-protoc:不使用protoc,前面我们也说了protoc工具把.proto文件生成对应的C源、头文件的过程是与平台无关的,所以这里不需要使用,除非我们想在我们的开发板上使用protoc,但这反而增加麻烦,不推荐直接在开发板上用。 –prefix=$PWD/tmp:指定安装的路径。表明安装路径在当前路径下的tmp文件夹中。 执行完这个命令之后就得到了交叉编译的Makefile文件,然后依次输入如下命令进行编译、安装: makemake install 此时就在当前目录的tmp文件夹下生成了arm版本的相关库文件: 其中我们比较重要的就是libprotobuf-c.so这个动态库了,我们可以使用file或者readelf工具查看其是不是arm格式的: 很显然,这就是我们ARM平台的动态库。关于readelf的使用相关文章:《简单认识认识ELF文件》 下面开始我们的demo演示: (2)protobuf-c实例演示 我们自定义一个.proto来创建我们的协议数据,然后使用protoc-c工具编译生成C代码,有两个文件:一个头文件、一个源文件。 例如我们创建一个student.proto文件: syntax = "proto2"; message Student{    required string name    = 1;    required uint32 num     = 2;    required uint32 c_score = 3;} 使用protoc-c工具工具编译student.proto文件: protoc --c_out=. student.proto 编写我们的student.c测试demo: 左右滑动查看全部代码>>> #include  #include  #include  #include "student.pb-c.h" int main(void){    Student pack_stu = {0};    uint8_t buffer[512] = {0};    Student *unpack_stu = NULL;    size_t len = 0;     student__init(&pack_stu);     /* 组包 */    pack_stu.name = "ZhengN";    pack_stu.num = 88;    pack_stu.c_score = 90;    len = student__pack(&pack_stu, buffer);    printf("len = %ld\n",len);     /* 解包 */    unpack_stu = student__unpack(NULL, len, buffer);    printf("unpack_stu.name = %s\n", unpack_stu->name);    printf("unpack_stu.num = %d\n", unpack_stu->num);    printf("unpack_stu.c_score = %d\n", unpack_stu->c_score);     student__free_unpacked(unpack_stu, NULL);    return 0;} demo很简单,组包就是构造一个协议数据结构体,调用pack组包接口往buffer中扔数据;解包正好是反过来,从buffer中拿数据放到结构体里。 此时我们工程的文件有: 交叉编译: 左右滑动查看全部代码>>> arm-linux-gnueabihf-gcc student.c student.pb-c.c -o student -I /home/book/git_clone/protobuf-c/tmp/include -L /home/book/git_clone/protobuf-c/tmp/lib -lprotobuf-c 这个命令似乎也很长,其实也很简单: arm-linux-gnueabihf-gcc:交叉编译器。 student.c student.pb-c.c:输入的源文件。 student:生成的可执行文件。 -I /home/book/git_clone/protobuf-c/tmp/include:指定头文件路径。 -L /home/book/git_clone/protobuf-c/tmp/lib:指定库路径。 -lprotobuf-c:链接动态库libprotobuf-c.so。 这里需要重点提的就是我们可以把我们上面编译得到的tmp/include里的文件复制到我们交叉编译器头文件搜索路径下、把tmp/lib里的文件复制到交叉编译器库文件搜索路径下,这样我们就不需要指定这么长的一串路径了。 但是这里我为了保持我的交叉编译器的一个原始性,我就不往里加东西了。关于这些链接、动态库更详细的内容可以阅读往期文章:《静态链接与动态链接补充(Linux)》、《什么是动态链接与静态链接?》 编译没问题的话就可以生成我们的可执行文件student: 同样的,我们可以看一下student可执行文件的运行环境: 可见,是可运行在我们的arm开发板的。 下面把student拷贝到我们的开发板上运行,我这里用的是韦东山老师的IMX6ULL开发板。 运行出现如下错误: 这是因为不能找到共享库文件libprotobuf-c.so1,加载失败,这个问题我们已经在《静态链接与动态链接补充(Linux)》一文中做了详细解释。 解决方法有两种:第一种就是把这个库文件拷贝至系统库默认搜索路径下;第一种就是把当前路径增加为动态库的搜索路径。 这里我们选择第二种方法:我们把libprotobuf-c.so、libprotobuf-c.so1也传到板子上,放在student同目录下。然后输入如下命令把当前路径增加为动态库的搜索路径: export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH 然后运行: 运行成功! 以上就是咱们介绍的protobuf-c在嵌入式Linux平台上的使用(如果是正在学单片机的朋友,也可以尝试着移植使用。),如有错误,欢迎指出,谢谢。 按照以上两篇文章的步骤,大概率是可以成功的,关键是有耐心。 心得分享:在Linux的学习中,很多时候会被开发环境阻碍我们。常常按照别人的方法、步骤来做,却做不出来,很容易心态崩,这都是很正常的。因为环境不同,有时候还需要各种依赖。但我们要有足够的耐心,见招拆招! 在此之前,我也遇到了很多问题,也搜索了很多博客文章,要么行不通,要么写得太乱。所以趁此学习、写一篇。 这一篇大概是全网第一篇关于protobuf-c在嵌入式Linux平台上的交叉编译、使用步骤最全、解释最多的文章了。如果文章对你有帮助,麻烦帮忙转发,谢谢大家。 最后 以上就是本次的分享,如果觉得文章不错,转发、在看,也是我们继续更新的动力。 猜你喜欢: Linux 的启动流程 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3平台首页_熊猫股份多个项目列入江苏省科技奖拟获奖公示名单

近日,江苏省科技厅公布了省科学技术奖综合评审拟获奖项目公示名单,熊猫股份三个项目榜上有名。其中,熊猫制造的《超高时空分辨率认知型显示关键技术及应用》拟获一等奖,熊猫股份的《5G异构无线接入网融合组网关键技术与应用》拟获二等奖,熊猫装备的《平板显示智能制造系统与维护创新项目》拟获三等奖,正式获奖通知预计于明年1月公布。此次获奖是“熊猫”继2014年获得“江苏省企业科技创新奖”综合奖项后的又一重要突破,标志着公司科研水平又获得了新提升。 《超高时空分辨率认知型显示关键技术及应用》是熊猫制造与东南大学通过产学研互动合作模式共同开发完成的,在研发过程中进一步巩固了公司基础技术建设,培养了科研人才创新意识。该项目取得了超高分辨率时空混色显示技术、全域高动态范围显示关键技术等多项技术创新,为公司创造了可观的经济效益。 《5G异构无线接入网融合组网关键技术与应用》立足世界高新技术前沿,发力新基建,突破融合组网关键技术,实现了5G异构无线多接入网络深度融合、高效组网。该项目可在运营商网络、地铁、校园、工业互联网、消防等多个领域进行大规模应用,实现了经济效益与社会效益双赢。 《平板显示智能制造系统与维护创新项目》展现出公司陆峻技能大师工作室在高世代平板显示智能制造系统装备的国产化中的技术创新,攻克了多项技术难点,确保实现高世代平板显示智能制造装备达到国际先进水平。该项目广泛应用于国内大型液晶面板制造企业建设工程,累计创造经济效益超千万元。 江苏省科学技术奖是江苏省科技领域的最高奖项,此次获奖再一次肯定了“熊猫”的创新研发能力,对公司未来进一步提升市场竞争力起到重要激励作用。技术创新是企业发展的新动能,近年来,公司不断加大科研力度,促进产业转型升级,增强以科技创新为核心的企业竞争力,为公司做大做优做强实现高质量发展发挥更加重要的作用。

摩登3平台开户_突发!58家中国企业被列入“军事最终用户”清单

当地时间21日,美国商务部工业和安全局(BIS)宣布将修改出口管理条例(EAR),并且增加新的“军事最终用户”(MEU)清单,同时公布了最新被加入MEU清单的103个实体,其中包括58家中国公司和45家俄罗斯公司。 美国政府已将这些公司确定为EAR中的“军事最终用户”控制目的的“军事最终用户”,该控制适用于对中国、俄罗斯、委内瑞拉和此类物品运往禁止的“军事最终用户”。 美国商务部长威尔伯·罗斯说:“此举建立了一种新的程序,可以在MEU名单上指定军事最终用户,以协助出口商筛选其军事最终用户的客户。” “ MEU清单将通知美国出口商,再出口商和转让人,将指定的项目出口,再出口或转让(在国内)到所列实体之前,将需要先申请获得许可证。美国政府表示,在中国,俄罗斯或委内瑞拉,这些被列入MEU名单的实体构成在“军事最终用途”或“军事最终用户”中使用或转移到“军事最终用途”或“军事最终用户”的风险,这是不可接受的。 58家将被添加到MEU清单中的中国公司如下: 1、Academy of Aerospace Solid Propulsion Technology (AASPT)(航天动力技术研究院); 2、中国航空发动机集团有限公司(AECC)及下属的八个机构: AECC Aero Science & Technology Co. Ltd.(中国航发航空科技股份有限公司);  AECC Aviation Power Co. Ltd.(中国航发动力股份有限公司);  AECC Beijing Institute of Aeronautical. Materials(北京航空材料研究院); AECC China Gas Turbine Establishment(中国航发燃气轮机有限公司);  AECC Commercial Aircraft Engine Co. Ltd.(中国航发商用航空发动机有限责任公司);  AECC Harbin Dongan Engine Co., Ltd.(中国航发哈尔滨东安发动机有限公司); AECC Shenyang Liming Aero Engine Co., Ltd.(中国航发沈阳黎明航空科技有限公司);  AECC South Industry Company Limited(中国航发湖南南方宇航工业有限公司); 3、Anhui Yingliu Hangyuan Power(安徽应流航源动力科技有限公司); 4、 中国航空工业集团有限公司(Aviation Industry Corporation of China)及下属七个机构: AVIC Aircraft Co. Ltd.(中航飞机股份有限公司);  AVIC Chengdu Aircraft Industrial (GROUP) Co., Ltd.(成都飞机工业(集团)有限责任公司);  AVIC Flight Automatic Control Research Institute (FACRI)(中国航空工业集团公司西安飞行自动控制研究所);  AVIC General Aircraft Huanan Industry Co. Ltd.(中航通飞华南飞机工业有限公司);  AVIC General Aircraft Zhejiang Institute Co., Ltd.(浙江中航通飞研究院有限公司);  AVIC International Holding Corporation(中航国际控股有限公司);  AVIC Leihua Electronic Technology Research Institute (LETRI)(中国航空工业集团公司雷华电子技术研究所); 5、Baimtec Material Co., Ltd.(北京百慕航材高科技股份有限公司); 6、Beijing Ander Tech.…

摩登三1960_高通5G技术拓展至更多领域 不局限于5G基带和手机芯片

作为领先的无线通信技术及半导体厂商,高通一直在积极引领着5G之路。很多消费者对高通5G技术的认知,都是从全球第一款5G基带——高通骁龙X50开始的。早在2018年高通公司便联合小米、OPPO、vivo、一加等共同打造了“5G领航计划”。优秀的国产手机厂商基于高通5G基带骁龙X50及完整的高通5G解决方案,率先开展了在全球5G手机市场的“布局谋篇”。 2019年作为5G元年,是5G终端爆发的一年。这一年,不仅第二代高通5G基带——骁龙X55顺利推出,而且为了进一步加速5G发展,高通将5G解决方案也覆盖到除旗舰之外的其他层级,以满足不同消费者群体对5G终端的需求,同时,也促进了5G手机终端的进一步普及。 2020年是5G规模化拓展之年,也是高通第三代5G基带骁龙X60发布之年。这款基带凭借5nm的制程以及在5G连接方面诸多优良特性,在发布伊始就在业内引发了广泛关注。最近大热的高通骁龙888 5G芯片就集成了骁龙X60 5G基带,无论是连接性还是功耗发热控制方面,高通 5G基带骁龙X60都会带来体验的进一步提升。目前,包括小米、OPPO、vivo、realme、魅族、黑鲨等手机厂商,均表示会陆续推出搭载高通骁龙888 5G芯片的旗舰机型,来年的5G手机市场又会呈现精彩纷呈的景观。 或许是因为我们大多数人接触5G都是从智能手机开始的,所以,大家都认为5G就是关于手机的技术。实际上并非如此,不同于前几代通信技术,5G通信打破了固有的壁垒,拥有更为广泛的应用空间。疫情期间我们可能体会的更为深刻——视频直播、视频监控、在线医疗、远程教育甚至物联网、汽车领域等方方面面都会涉及到5G应用,这也使得大家对5G的未来充满好奇与期待。 高通公司不仅在5G基带方面取得了令人瞩目的成绩,而且高通还将自身在5G连接技术领域的专长不断拓展至其他领域,其中就包括汽车行业。早在2019世界移动通讯大会(MWC)上,高通就推出了全新的高通骁龙汽车5G平台。该平台是高通5G技术在汽车行业的全新应用方案,该方案能够提供超低的时延、数千兆比特云连接、车道级导航精度和完整的集成式C-V2X解决方案,不仅可以提供丰富的车载体验、提高汽车和交通基础设施的安全性,而且还将推动网联汽车进入全新的5G时代。 据不完全统计,在全球最大的26家汽车品牌中,目前已有包括奔驰、奥迪、保时捷等在内的超过20家与高通在5G网联汽车、数字座舱等领域开展合作。 虽然我们对高通的认知更多来源于其5G基带和5G手机芯片产品,但是高通在5G技术方面的实力绝不仅仅局限于5G基带和手机芯片领域,高通也一直努力将5G扩展至工业应用、零售、能源、制造业等领域,并积极开展与产业界的生态合作。高通非常愿意配合产业伙伴,让5G技术惠及更多消费者,让更多人从不同“维度”感受到5G带来的美好体验。

摩登3测速代理_一个轻量级事件驱动嵌入式系统应用框架Quantum Platform

QP(Quantum Platform)是一个轻量级的、开源的、基于状态机的、事件驱动型应用程序框架。这个框架包括四部分: 事件处理器(QEP); 轻量级的事件驱动框架(QF); 任务调度微内核(QV、QK、QXK); 实时跟踪调试器(QS)。 (1)QEP Quantum Event Processor是一个通用的,可移植的,可重用的状态机引擎。 QEP允许你直接把UML样式的状态图映射为代码。 QEP提供了传统的简单平面状态机和层次式状态机。QEP可以直接操作事队列和事件分发机制。 (2)QF QF是一个通用的,事件驱动的应用框架,是一个实时框架,面向嵌入式系统。 QF被设计成和QEP,RTOS协同工作。 QF包含了事件队列,活动对象,事件遍历等。 (3)QK QK是一个轻量级可抢占型实时内核 QK是一个极小的,按RTC习惯的,执行独立任务的内核。 QK必须和QF版本相匹配。 (4)QS 一个强大的调试工具 事件处理器,也可以理解为一个状态机引擎,当有事件需要处理时,调用当前状态的状态函数处理这个事件,并处理调用状态函数的返回值,根据返回值进行相应的状态变换(如转移到父状态)。而且状态引擎也处理某状态的进入(ENTER)、退出(EXIT)、初始伪状态(INIT)。 QF是轻量级的、事件驱动、active objects框架。这个框架的主要任务是保证每个active object的线程安全,运行-到-完成(run-to-completion )的事件处理。它包含了直接的事件传送,发布-订阅(publish-subscribe)的事件转发,事件队列,时间事件(延时传送时间事件)。 协作内核(Vanilla内核),它只在time to completion的时候处理event,并在处理所有event后,对active object执行基于priority-based的调度器。它是隐式合作(implicitly-cooperative),因为活跃定时器不需要明确的放弃CPU。代替的是在完成事件处理后,简单的return到QV调度器中。 QK是一个超快速的抢占式,基于优先级的,单stack,实时内核专门为执行active objects而设计的。它总是会处理event queued中的高优先级的active objects,但它将event当作一次性的函数来调用(而不是像传统内核那样的endless循环)。尽管如此,如果新的事件优先级比当前处理的事件优先级高,QK内核依然提供了抢占式的一次性的event处理功能(像抢占式中断处理器允许中断彼此抢占)。这意味着,QK可以使用单stack来保存所有active objects的context。 QXK是一个简单的抢占,基于优先级的,阻塞,实时内核专门为传统的阻塞代码的主动对象,如商用中间件(TCP / IP协议栈,UDP协议栈,嵌入式文件系统等)或遗留代码混合设计。 QS是软件追踪系统,使开发人员能够以最少的系统资源监控目标,并没有停止或显著放缓代码直播事件驱动QP的应用程序。QS是用于测试,故障排除和优化QP应用的理想工具。QS甚至可以用于支持产品制造验收测试。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3内部554258_从零造单片机需要哪些知识?

来来来,让我们一起,左手右手一个慢动作。 每一个方向都值得一个人用一生去钻研,每一个步骤都有其自身的魅力。 第一步,做出实体芯片。 单片机一般理解为MCU(Microcontroller Unit,微控制单元),包含定时器、ALU(Arithmetic Logic Unit,算术逻辑单元)、内存、寄存器、总线等部分。而普通的意义的单片机还包含GPIO、串口(UART)、DMA、协处理器、AD\DA等等。 看懂如下图 前置:计算机组成原理,微机原理。 流水线 前置:数字逻辑电路,集成电路设计及其EDA技术,verilog把各个模块细分为寄存器级,比如移位运算器、节拍器、译码器、存储器等 module minicpu(clk, reset, run, in, cs, pcout, irout, qtop, abus, dbus, out); input clk,reset,run; input [15:0] in; output [1:0] cs; output [15:0] irout, qtop, dbus, out; output [11:0] pcout, abus; wire [15:0] qnext, ramout, aluout; reg [11:0] abus; reg halt, jump, pcinc, push, pop, thru, qthru, dbus2qtop, dbus2ram, dbus2obuf, ir2dbus, qtop2dbus, alu2dbus, ram2dbus, in2dbus; reg pop2, ir2abus, qtop2abus, qnext2abus; reg [11:0] pcout, pcnext; reg [15:0] out; statef statef0(.clk(clk),.reset(reset),.run(run),.halt(halt),.cs(cs)); stackm stackm0(.clk(clk),.reset(reset),.load(dbus2qtop),.push(push),.pop(pop),.pop2(pop2),.thru(qthru),.d(dbus),.dthru(ramout),.qtop(qtop),.qnext(qnext)); alu alu0(.a(qtop),.b(qnext),.f(irout[4:0]),.s(aluout)); dpram #(16,10,1024) dpram0(.clk(clk),.load1(dbus2ram),.addr1(abus),.addr2(pcnext),.d1(dbus),.q1(ramout),.q2(irout)); 物理上是这样的 然后会调试BUG,看时序。前置:时序用MODELSIM,综合用QUARTUS II 等等 然后此时才刚刚开始。继续生成电路网表,时序收敛,如果不对继续返回上述流程继续调试。前置:Synopsys 回顾一下 此时应该生成版图文件,然后根据制造厂商提供的物理器件库进行最后的各种设计规则检查。 前置:集成电路版图设计,软件有Cadence:Virtuoso Layout Editor 送到代工厂, 还要懂元器件 前置:半导体物理,半导体器件物理,固体物理,电介质物理,量子力学,热力学与数理统计。 根据得到的图表设计版图和工艺流程,大概是这样前置:集成电路制造 然后进行电气测试,电磁测试,最后封装。前置:集成电路封装技术 最后不能忘记出片的时候焚香沐浴更衣,朝南拜三拜,祈祷不会有大问题。 第二步,设计系统驱动。 终于得到了物理上的片子我们开始写汇编器,编译器。本质上烧写进ROM的是这样的机器码。 汇编器(把汇编语言变成机器码)前置:perl #!/usr/bin/perl -W//*****************//print "*** LABEL LIST ***\n";foreach $l (sort(keys(%label))){ printf "%-8s%03X\n",$l,$label{$l};}$addr=0;print "\n*** MACHINE PROGRAM ***\n";foreach (@source){…

51La