摩登3测速登陆_神了!UART/I2C/SPI/1-wire四大通信接口这么比喻秒懂!

1、 裘千丈轻功水上漂之UART 射雕英雄传中的裘千丈说,UART就是我的轻功水上漂过河。想从河上过(通信),提前布暗桩,行走时步伐按桩距固定(波特率提前确定),步幅太大或太小都会落水。为了不被二弟裘千仞识破,可以安排侍卫在对岸监视通知,没风险才开始表演(流控)。为了保证踩点准确,隔一段距离定个特殊标记的粗木桩。 UART 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通信双方接三根线,RX、TX和GND,TX用于发送数据,RX用于接受数据,双方收发交叉对接,支持全双工方式。 因为没有时钟控制,什么时机开始发数据,且保证对方正确接收? 如A发数据到B,平时空闲时A.TX 和 B.RX.保持1,当A.TX先发0作为起始位,告诉B请注意,我要发数据了。然后就开始发数据,数据位可配置,通常是5位,6位,7位,8位,一帧数据发完后,A.TX给个高电平告诉B.RX我发完了一帧。如果开启校验位,在发停止位之前发送个校验位,一般都不需要校验位了,短距离有线传输出错的概率非常小。如果还有数据,则重复前面的操作。 一般软件配置串口,有波特率,数据位、停止位、校验位、流控。分别表示传输速度,一帧数据的长度,以及发完告知停止,发完是否校验,是否进行发送控制。看起来参数很多,针对个人经验,一般都是固定8位数据位,1位停止位、无校验、无流控,只是配置波特率。 UART没有时钟控制数据捕获时机,依靠通信前就定义波特率,双方按定义的频率读写数据位,正如裘千丈的水上漂,一旦暗桩安装固定,就得按固定的步长行走,否则就会出错落水。 UART在水上漂项目可以,但是传输效率有限,一般高到921600,如果再高可能出现误码,继续加高,就是高空飞行,最后裘千丈就是期望在高空也行走自如,想攀上黄蓉乘坐的大雕逃命,不慎坠落,死于飞行事故。 2、叫你一声你敢答应吗之I2C 作为太上老君看银炉的童子,银角大王最懂I2C,万千人中我叫你一声,你答应了就倒霉(从机地址正确才能通信)。 IIC(Inter Integrated Circuit)两根线,一条时钟线SCL和一条数据线SDA,所以是半双工通信,主从模式,支持一对多,一个银角大王可以对付一群猴子,每个猴子名字不同(从设备的I2C地址不同),点名叫到谁,谁就被紫金葫芦带走。 假设主机A给从机B发数据(A.SCL接B.SCL,A.SDA接B.SDA),根据应用,A可以同时接B,C,D。空闲时SDA和SCL上的电平都为高电平。 起始和停止起始条件S:当SCL高电平时,SDA由高电平向低电平转换;停止条件P:当SCL高电平时,SDA由低电平向高电平转换。起始和停止条件一般由主机产生,总线在起始条件后处于busy的状态,在停止条件的某段时间后,总线才再次处于空闲状态。 空闲时SDA和SCL上的电平都为高电平。A先把SDA拉低,等SDA变为低电平后再把SCL拉低(以上两个动作构成了I2C的起始位),此时SDA就可以发送数据了,与此同时,SCL发送一定周期的脉冲,SDA发送数据和SCL发送脉冲的要符合的关系是:SDA必须在SCL是高电平时保持有效,在SCL是低电平时发送下一位(SCL会在上升沿对SDA进行采样)。 传输与响应一次传8位数据,8位数据传输结束后A释放SDA,SCL再发一个脉冲(这是第九个脉冲),触发B将SDA置为低电平表示确认(该低电平称为ACK)。最后SCL先变为高电平,SDA再变为高电平(以上两个动作称为结束标志),如果B没有将SDA置为0 ,则A停止发送下一帧数据.。 整体时序I2C总线上的每个设备都有唯一地址,数据包传输时先发送地址位,接着才是数据。一个地址字节由7个地址位(可以挂128个设备)和1个指示位组成(7位寻址模式),0表示写,1表示读。一般芯片手册I2C地址都是7位地址,有些与某个引脚的电平相关,主机控制最后读写位。 实际项目一般都是采用I2C库,有的库要求传入的是8位的写的地址,有的是7位,由接口函数再区分读写补位。当然,最愚蠢的办法是从0到255定时循环读某个寄存器地址,读到正确值时的地址就是正确的从机地址。 一般情况下使用I2C库,除了配置从机地址,其他的起始、结束等时序等其实不太关注,只需要配置时钟频率,一般看从机最大支持多少,以及主机的系统时钟,太高会偶尔出现错误,再没有时间要求的情况下,时钟越低越稳定。 3、慕容复斗转星移之SPI 天龙八部的慕容复:虽然我不如乔峰可以使出降龙十八掌,但是他对我出手,我也以彼之道还施彼身,对方输出时也会被反噬,互相伤害,他停止时钟我也无可奈何。正如SPI,主机开启了时钟发数据,从机也在同时输出,时钟停,大家都收手。 SPI 串行外设接口(Serial Peripheral Interface)主从模式,一种高速的,全双工同步的通信总线。标准SPI是4条线。SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选,有些也称为SS)。 SDO/MOSI – 主设备数据输出,从设备数据输入 ,master output slave input;SDI/MISO – 主设备数据输入,从设备数据输出,master input slave output;SCLK – 时钟信号,由主设备产生;CS/SS – 从设备使能信号,由主设备控制。当有多个从设备的时候,主设备通过片选引脚选择其中一个从设备进行通信。(I2C是通过软件协议实现多选一,SPI是通过硬件实现)。 当主机控制CS,开启时钟闸门,主从双方就可以开始放数据位或者取数据位进行交互了,但是在什么时机开始,就有标准了。根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置。   CPOL:时钟极性选择,为0时SPI总线空闲为低电平,为1时SPI总线空闲为高电平    CPHA:时钟相位选择,为0时在SCK第一个跳变沿采样,为1时在SCK第二个跳变沿采样 mode CPOL CPHA 0 0 0 1 0 1 2 1 0 3 1 1 这样就有四种模式。以模式1为例,空闲时为低,第一次时钟跳变采样,也就是上升沿读数采样,对着下降沿放数据。如果实在分不清,还有愚蠢的办法,四种模式全部尝试一次,就可知道正确模式。 SPI传输数据没有位数限制,只要定义收 发高位在前还是低位在前,可以持续高速传输。 正如前面,若是乔峰收手,慕容复就没法使出降龙十八掌的效果,但是他可以当面骂乔峰是契丹狗,乔峰一怒之下就发功,慕容复就奸计得逞。这契丹狗三字翻译为软件术语就是触发中断,从机发中断告知主机我有事来找我;主机定时查询也可实现,只是使用情况更少。 4、裘千尺的吐枣核绝技与1-wire 裘千丈的三妹裘千尺被囚地下,她以口喷射枣核钉打在枣树,树的摇晃就会掉下枣子充饥。这枣核钉是单向操作,用力过猛,枣核透过枣树,用力太轻或者射偏了,枣树没有反应,这样枣核用完了就悲剧了。可见这绝技,看起来简便,实则背后隐藏了精确控制,对时机、位置控制要完美,如1-wire通信,单线控制,时钟精准。 1-wire总线接口简单,一根线就可以,一般内部开漏输出,外部硬件上拉。 1-wire使用一条线来传送的四种信令组成,包括复位脉冲和在线应答脉冲的复位序列、写 0 时隙、写 1 时隙、读时隙。除在线应答脉冲以外,所有其它信号都由总线主机发出,并且发送的所有数据和命令都是字节的低位在前。主机与从机的数据通信是通过时隙完成的,在每个时隙只能传送一位数据。通过写时隙可把数据从主机传送给从机,通过读时隙可把数据由从器件传送给主机,将完成一位传输的时间称为一个时隙。 一般操作流程参考外设芯片手册,主要是不同平台的延时处理,需要软件实现1us延时的接口,否则数据通信异常。 5、秘籍功法 四种接口,每个都有合适的应用场景,对硬件端口的占用、对软件的控制要求、通信效率也不相同。尤其前3种属于常用协议,一般都支持硬件接口,厂家也一般提供hal库,对软件开发人员的要求逐渐降低。这也导致代码应用很溜,实际底层原理略微欠缺,一旦通信异常或者有特殊需求就无从下手。如使用GPIO模拟出UART,使用SPI实现AT功能。 武林人士一般都追求失传的武林秘籍,正如软件开发人员,有问题总是寄希望与其他人的经验总结,或者厂家的技术支持或源码,而不是创造新的功法。笑傲江湖的岳不群本是华山派掌门,精通紫霞神功,武功属于一流,但是没继续专研自家内功,为了辟邪剑谱自宫了,软件开发人员想重蹈覆辙么? 不论剑宗、气宗,先把功能跑通再反推代码原理和实现流程,还是先理清时序和原理再编码实现功能,短期内剑宗效率高,加工资快;气宗则可能被淘汰,尤其在势利的小公司,不注重新人培养。如果合二为一,项目紧急则拿来就用,空闲时专研总结,取长补短,则是完美开发人员的素质。 软件开发没有秘笈功法,全靠个人学习总结。 -END- | 整理文章为传播相关技术,版权归原作者所有 |  | 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3测速登录地址_白噪声和Chirp信号导航效果对比

在  十五届全国大学生智能汽车竞赛[1] 中安排后一个 声音信标导航[2] 竞赛组别。参赛同学反馈,声音信标发送的 Chirp信号[3] 在远处听起来会令人产生一种恐慌紧张的感觉,极大扰民。 如果将信标的声音改成同样宽带音频的白噪声信号,在听觉上与Chirp信号有很大区别,但在导航的效果上与Chirp信号相同。 下面是对比两种信号在声音导航效果的异同。 01 测试方式 通过 调频接收模块[4] 接收信标发送的调频信号,与麦克接收到的信号通过相关运算,获得声音时间延迟。将两个麦克的延迟时间和调频接收模块获得的信号强度显示在LCD上。 ▲ 车模上显示测试结果的液晶 1.显示屏显示说明: 第一行显示的是麦克风1到信标的距离,单位是3.14厘米,显示的6也就是距离: 第二行显示的是麦克风2到信标的距离,单位是3.14厘米,显示的11也就是距离: 第三行显示的FM的RSSI(信号强度)。 2.播放Chirp信号时的视频(附件1): 采用原始的chirp信号进行声音导航,从视频中每移动车模一段距离观察一次距离数据是否稳定,从视频中看出大概离信标3米多的时候代表距离的数据开始不稳定了。 ▲ 信标播放chirp信号时接收端的信号 黄色波形是麦克风接收到的波形 蓝色是FM收到的波形 3.播放随机白噪声时的视频(附件2): 采用matlab生成8192个随机白噪声数据,然后用单片机将随机数据按照40K的频率进行播放。8192个数据播放的时间为204.8毫秒。刚好与之前的chirp周期是一致的。 由于单片机的flash较小所以没有办法播放太长的序列。同样,视频中也采用每移动车模一段距离观察一次距离数据是否稳定,从视频中同样可以看出大概离信标3米多的时候代表距离的数据也开始不稳定了。 ▲ 信标播放白噪声信号时接收端的信号 黄色波形是麦克风接收到的波形 蓝色是FM收到的波形并对波形做了一个1MHz 的低通滤波,便于观看波形。 测试的时候车模端的程序是没有改变的, 也就是说测距算法不变的情况下,仅仅只改变信标的声源通过视频我们可以看到两者的效果是比较接近的。 02 结果分析 从测试结果来看,播放白噪声的确也可以实现测距,当然也可以实现声音定位,但从实际测试中也有以下疑问: 1.问题1: 从上面的白噪声波形看,如果由人直接判断接收到的波形,很难去分析当前接收到的波形质量是否可靠,因为信号源就是随机的白噪声,没有规律可循,从分析和写程序来说可能没有chirp信号那种波形能给人带来那么直观的感受。 ▲ 播放Chirp信号进行测量声音延迟 2.问题2: 相对于chirp信号来说,随机白噪声听起来会更容易让人产生一种心烦的情绪,对做这个组别的同学来说也挺头大的,但相对于之前的chirp信号来说,穿透力确实要弱一些,对于其他人的影响确实要小不少,但也能传比较远。 ▲ 播放噪声信号进行测量声音延迟 注:感谢逐飞科技范兵提供的测试报告参考资料 [1] 十五届全国大学生智能汽车竞赛: https://zhuoqing.blog.csdn.net/article/details/106581683 声音信标导航: https://zhuoqing.blog.csdn.net/article/details/104231420 作为工科学生的大学本科阶段,毕业设计(有的学校称之为综合论文训练)是最后一个重要的培养环节。在本阶段同学们在导师的指导下,完成综合专业知识的研究训练,是通向未来成长之路的重要环节。 对于电子信息类专业的同学,现在可以选择的各类可编程器件平台非常丰富。为此,热心电子教育的“电子森林”苏公雨老师准备在年底前制作各类开发板供即将毕业设计的同学们免费选用。下面的链接是对同学们需要哪些可编程器件开发平台做的调研。看看其中是否有你们打算使用的开发平台呢? https://appu1kfqmyl7963.h5.xiaoeknow.com/evaluation_wechat/customize_form/submit_info/form_CRGstmtktk2Hp0?entry=2&entry_type=2001 注:按动识别二维码,或者点按“阅读原文”,自动跳转到开发平台调查页面。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3测速代理_把握新时代,英飞凌以eSIM全力驱动物联网创新

出品 21ic中国电子网 蔡璐 网站:21ic.com 众所周知,SIM卡是移动通信中不可或缺的组成部分。但是,随着物联网时代的到来,智能终端的设备类型和应用场景越来越多,这种传统的插拔式SIM卡已经无法满足物联网各种极端条件下的通信要求了。在此背景下,eSIM技术应运而生,许多厂商都推出了全新一代的eSIM解决方案。 那么,eSIM具有哪些优势?这一技术又是如何推动物联网发展的?作为厂商,应该如何提升物联网应用能力?带着这些问题,21ic中国电子网记者采访了英飞凌科技数字安全解决方案事业部大中华区物联网安全产品线区域市场经理刘彤女士。 拥抱eSIM技术,引领新时代发展 或许大众消费者对eSIM还不太了解,下面先给大家科普一下什么是eSIM? eSIM是Embedded-SIM的缩写,即嵌入式SIM卡。简单来说,就是将传统的SIM卡直接嵌入到设备芯片上,而不是作为独立的可移除零部件加入设备中,用户无需插入物理SIM卡。这一做法在硬件上减少了卡槽空间,让产品的抗震性、耐高温和可靠性更强,因此eSIM卡具备低成本、更小体积、高稳定性、一号多终端、使用便捷与安全等诸多优势。 据刘彤介绍,作为全球最大的eSIM供应商,英飞凌在过去的几年里,针对物联网碎片化、场景化、定制化等特点,推出了全面而完整的解决方案组合,能够满足不同应用的需求,这里最值得一提的就是OPTIGA™ Connect eSIM解决方案。 该解决方案是一款面向移动消费终端的5G eSIM一站式解决方案,基于英飞凌成熟的SLC37安全芯片,支持主要移动运营商的配置文件,并且具备远程SIM卡配置功能,可提供最大至1.2 MB的可用内存,供用户存储运营商的配置文件、数据及其它应用。 图:英飞凌科技数字安全解决方案事业部 大中华区物联网安全产品线区域市场经理刘彤 在谈及产品亮点时,刘彤骄傲地说:“我们的OPTIGA™ Connect eSIM解决方案具有两大核心优势,首先在符合GSMA最新规范的同时,还支持最新的5G规范的产品,并且通过了业界最高标准CC EAL4+的安全认证。当然,封装也是非常小的,这是基本性的优势。”据悉,该解决方案超小型封装尺寸仅为2.9 mm x 2.5 mm x 0.4 mm,有助于实现崭新的设计,特别适用于印刷电路板空间非常敏感的终端。 “其次就是易用性,可以提供端到端硬件和软件统包的一站式解决方案,并且在IOT的解决方案预置初始码号。这是我们充分跟客户沟通,理解了市场上用户的需求和痛点,帮助客户切实解决的问题,这也是我们最大的优势。”刘彤谈道。 符合GSMA安全需求并通过CC EAL4+的测试,意味着这一解决方案配备了坚固耐用且值得信赖的安全保障,因而能够确保敏感数据和密钥的安全,防止欺诈;同时,全面支持从3G到5G的所有GSMA标准,可以安全地面向所签约的运营商网络进行登网鉴权。英飞凌通过将硬件和软件整合到一个易于集成的系统中,帮助制造商高效地开发产品设计,降低eSIM集成工作量,加快将产品推向市场。 市场增速明显,物联网将成主战场 如果说SIM是移动互联时代的物种,那么eSIM就是专门为万物互联时代量身打造的嵌入式集成芯片。在刘彤看来,物联网无疑是eSIM的重要应用市场之一。 对此,刘彤给出了进一步解释:“从物联网领域来看,这一应用可以细分成三大类,首先是车联网,比如车规级eSIM用于前装T-box,为车主提供方便的导航、紧急呼叫、OTA下载等功能。随着5G的发展,V2X车路协同等应用对于智能化、网联化提出了更高的要求。打个比方,将来的汽车可以想象成是四个轮子的智能手机。” “其次是工业物联网,比如能源管理、水电气三表、资产追踪等引用。第三是消费级物联网,比如可穿戴市场,今年疫情以来,大众对于健康越来越重视,很多智能手表都推出了健康监控功能(所谓手腕上的医生),还有运动手表的销量也越来越多,很多人跑步健身的时候都会带着有通话功能的运动手表,而不是手机,另外儿童手表也是重要的应用。” 随着物联网的风口越来越近,未来百亿级别物联设备的安全连接都要以eSIM作为基础。根据英国市场研究机构ABI Research此前发布的数据显示,2011-2014年,eSIM出货量分别达到460万、700万、1000万和1700万,呈现加速增长态势;与此同时,eSIM随着M2M设备的配售率也在逐年上升,2011-2014年分别为13%、17%、22%和28%。预计2020年,eSIM智能手机出货量将突破2.25亿大关。不难看出,eSIM技术在智能终端设备上的应用日渐增多。 另外,ABI Research还预测,到2024年的时候,内置eSIM的消费电子设备将达到6.44亿,其中智能手机约5亿;而在M2M、物联网领域,eSIM设备也有望达到2.32亿(年复合增长率18%),其中超过1亿来自汽车。可以预见,随着5G的到来,物联网行业面临的功耗高、带宽速度慢,以及成本高等阻碍也将得到有效解决。未来,eSIM卡将随着5G和物联网行业迎来爆发期。 深化战略合作,实现共赢新局面 鉴于eSIM巨大的市场潜力,英飞凌在推广eSIM类产品的大规模落地方面采取了一系列措施。 在采访中,刘彤表示:“我们看好eSIM在全球发展前景,同时中国在5G和物联网领域都处于世界领先地位,我们更加看好eSIM在中国的市场前景。目前,英飞凌的eSIM解决方案在中国已有落地,在主流车厂里面,大部分高端汽车前装T-BOX都会用到我们的车规级eSIM芯片,还有一些IoT设备、智能可穿戴设备,以及智能手机产品等也有采用英飞凌的eSIM芯片。” 此外,为了支持全球网络连接,英飞凌也一直在与全球大大小小的运营商进行深入合作。“比如,我们和印度运营商——塔塔通信进行合作。塔塔通信是全球领先的电信解决方案供应商,它也是非常看好eSIM市场,近年来不仅投资建立了MOVE™ eSIM Hub平台,还投入了大量资源和人力到这个领域。”刘彤介绍说。 据悉,英飞凌的解决方案预置了塔塔通信的MOVE™ eSIM辅助程序,可以支持制造商在全球范围内无缝、安全、可靠地采集、传输和管理物联网数据。目前,英飞凌OPTIGA™ Connect eSIM解决方案已在全球200多个国家和地区实现了预集成式网络覆盖。 此外,由于塔塔通信与全球640多个移动网络运营商(MNO)建立了合作关系,因此制造商无需与不同国家的移动网络运营商签订数以百计的本地连接协议,而是可以直接通过与塔塔通信的单一的全球连接协议实现设备联网。这极大简化了产品管理降低成本,并大幅加快了将产品推向市场的步伐。 总之,随着物联网设备的逐步兴起,越来越多的设备制造商、运营商、物联网企业和科技企业正在加入到eSIM生态中来。尤其是在5G时代,无论消费级应用,还是物联网应用,都迎来了全方位的爆发,因此eSIM更是大有用武之地。作为全球领先的半导体公司,英飞凌将以eSIM全力驱动物联网创新。  近期热度新闻 【1】剧透!围绕生态和体验,华为HMS亮出多款“杀手锏” 【2】周立功的公司也要上市了?拟募资约8.9亿 【3】AMD王炸!NVIDIA就这么被碾压了? 【1】初学不识“电容”意,看完这篇,电容高手非你莫属! 【2】必看!100个示波器基础知识问答 【3】 【1】终于整理齐了,电子工程师“设计锦囊”,你值得拥有! 【2】半导体行业的人都在关注这几个公众号 【3】 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3平台注册登录_星间链路”为什么重要?

星间链路,是指卫星与卫星之间的链路,当然也可以扩展为航天器与航天器之间的链路。星间链路具有星间通信、数据传输、星间测距和星间测控等功能。 星间链路 不同的空间系统,星间链路的作用是不同的。通信卫星星座的星间链路可以减小星地跳数和通信延迟;侦查编队系统的星间链路可以增大虚拟相机口径以提高分辨率;导航卫星星座的星间链路可以支持自主运行以提高定位精度;中继卫星系统的星间链路可以增加用户星的测控弧段。 星间链路使多颗卫星构成有机整体,形成星座系统,扩展单星工作的能力。在导航星座系统应用之前,星间链路早在通信星座、中继卫星以及卫星编队飞行中已经得到应用。 中继卫星系统 美国1983-1995年发射了由7颗跟踪与数据中继卫星 (TDRS) A~G组成的美国第一代中继卫星系统,卫星装载两副4.9m单址抛物面天线,为S及Ku频段共用,用于TDRS和用户星之间交换高速数据,最大返向传输速率为300Mb/s。 1997-2002年,美国发射第二代中继卫星,即TDRS-H、I、J,其上星间链路的功能有所改进:增强了S频段多址能力,传输速率可达800Mb/s或更高。自2007年开始,美国在研发第三代跟踪与数据中继卫星, 美国的铱星系统由66颗卫星构成,是当前世界上大型星座系统中唯一实现Ka频段星间链路的系统。铱星系统轨道高度为780km左右,共有6个极地轨道,每个轨道11颗卫星。星间通信采用Ka频段相控阵天线。每颗铱星同时建立4条星间链路,同轨道内部正向和后向,左右异轨道面侧向链路各一条。 星间最大数据传输速率为25Mb/s,工作频段为22.55~23.55GHz,星间采用半双工通信方式。铱星系统是极轨星座,相邻轨道间的卫星相对距离的变化,相对速度、方位角、俯仰角的变化量和变化率都比较小,星间拓扑简单,采用固定连接的拓扑结构。 区别于通信卫星,导航卫星需要持续收集更新各颗卫星的测量数指以支持精密定轨计算。在卫星导航系统日常运行中,地面站通过收集境内卫星的星地观测数据进行解算定轨,并实施星历的更新。 而对于境外卫星,由于无法建立起直接与地面站相连的星地链路,所以无法实现对境外卫星的定轨。星间链路架起了一座连接境外卫星与境内卫星测量和数传的桥梁,为境外卫星观测和数据回传提供了实现手段。 同时,星间链路搭建的无线电通道也便于卫星测控和运控数据传输,使原先必须等待卫星入境才能进行的操作变成随时可行的远程操作。更进一步的发展,是将简化的地面定轨算法配置在卫星计算机上,处理星间链路测量值,使卫星脱离地面站而自主生成卫星导航电文,提高星座的自主运行能力,简化地面的运行管理。 因此,星间链路的建立,能大幅提升导航卫星星座的管控能力和自主运行能力,意义重大,已经为各大卫星导航系统广泛研究和采用。 导航星座中实现星间链路 美国GPS系统是最先在导航星座中实现星间链路的系统。自Block IIR卫星开始,GPS卫星安装了具有自主导航功能的星间链路收发设备,实现了星间通信和星间测距功能,进而实现了全球导航卫星星座自主导航的功能。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册网址_祝贺!天通一号02星成功发射,覆盖一带一路广泛地区

据新华社报道,11 月 12 日 23 时 59 分,我国在西昌卫星发射中心用长征三号乙运载火箭,成功将天通一号 02 星送入预定轨道,发射任务获得圆满成功。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册网址_两个线程,两个互斥锁,怎么形成一个死循环?

粉丝的提问,必须安排。 两个线程,两个互斥锁如何形成死锁? 程序流程图如下: 程序流程图 如上图所示: t0时刻,主线程创建子线程,并初始化互斥锁mutex1、mutex2; t1时刻,主线程申请到了mutex1、子线程申请到了mutex2; t2时刻,主线程和子线程都sleep 1秒钟,防止优先获得时间片的线程直接申请到了另外1个互斥锁,导致程序直接退出; t3时刻,主线程和子线程都想获得对方手里的互斥锁,但是对方都来不及释放自己手里的锁; t4时刻,主线程和子线双双进入休眠。 【注意】为了保证主线程和子线程都能够分别获得锁mutex1、mutex2,各自获得锁后一定要先sleep 1秒钟,否则创建完子线程后,主线程还有一定的时间片,主线程会申请到锁mutex2,无法形成死锁。 死锁 源码如下 #include  #include  #include  #include      unsigned int value1, value2, count;pthread_mutex_t  mutex1,mutex2;void *function(void *arg);void  *function(void *arg){ pthread_mutex_lock(&mutex2); printf("new thread get mutex2\n");  sleep(1); pthread_mutex_lock(&mutex1);  printf("new thread get mutex1\n");    pthread_mutex_unlock(&mutex1); printf("new thread release mutex1\n"); pthread_mutex_unlock(&mutex2);  printf("new thread release mutex2\n");    return  NULL; }  int main(int argc,  char *argv[]){ pthread_t  a_thread;          if (pthread_mutex_init(&mutex1, NULL) < 0) {  perror("fail to mutex_init");  exit(-1); }  if (pthread_mutex_init(&mutex2, NULL) < 0) {  perror("fail to mutex_init");  exit(-1); }               if (pthread_create(&a_thread, NULL, function, NULL) < 0) {     perror("fail to pthread_create");       exit(-1); }    while ( 1 )    {        pthread_mutex_lock(&mutex1);  printf("main thread get mutex1\n");  sleep(1);        pthread_mutex_lock(&mutex2);    printf("main thread get mutex2\n");        pthread_mutex_unlock(&mutex2);  printf("main thread release mutex2\n");        pthread_mutex_unlock(&mutex1);  printf("main thread release mutex1\n");    }    return 0; }              编译运行 从执行结果可以判断,主线程和子线程分别获得了互斥锁mutex1、mutex2,sleep 1秒后,他们都想再分别申请mutex2、mutex1,而双方都不想释放自己手中的锁,锁已形成了死锁,程序就一直处于休眠状态。 查看下该进程的线程 查看进程ID,为4204查看该进程创建的线程id:4204、4205。 -THE END- 推荐阅读 【1】 SPI转can芯片CSM300详解、Linux驱动移植调试笔记 【2】 到底什么是Cortex、ARMv8、arm架构、ARM指令集、soc?一文帮你梳理基础概念【科普】 必读 【3】Linux面试题100道,看看会多少?必读 【4】Modbus协议概念最详细介绍 必读 【5】I2C基础知识入门  必读 本公众号全部原创干货已整理成一个目录,点击 想加入请加一口君微信 一口君有问必答 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册开户_Microchip推出最新一代汽车用700和1200V碳化硅(SiC)肖特基势垒二极管(SBD)

汽车电气化浪潮正席卷全球,电动汽车搭载的电机、车载充电器和DC/DC转换器等高压汽车系统都需要碳化硅(SiC)等创新电源技术。Microchip Technology Inc.(美国微芯科技公司)宣布推出最新通过认证的700和1200V碳化硅(SiC)肖特基势垒二极管(SBD)功率器件,为电动汽车(EV)系统设计人员提供了符合严苛汽车质量标准的解决方案,同时支持丰富的电压、电流和封装选项。 Microchip新推出的器件通过了AEC-Q101认证,对于需要在提高系统效率的同时保持高质量的电动汽车电源设计人员来说,可以最大限度地提高系统的可靠性和耐用性,实现稳定和持久的应用寿命。新器件卓越的雪崩整流性能使设计人员可以减少对外部保护电路的需求,降低系统成本和复杂性。 Microchip分立产品业务部副总裁Leon Gross表示:“作为汽车行业的长期供应商,Microchip持续拓展车用电源解决方案,引领汽车电气化领域的电源系统转型。我们一直专注于提供汽车解决方案,帮助客户轻松过渡到碳化硅(SiC),同时将质量、供应和支持挑战的风险降至最低。” Microchip作为汽车行业供应商的历史已经超过25年。公司拥有碳化硅(SiC)技术以及多个通过IATF 16949:2016认证的制造工厂,可通过灵活的制造方案提供高质量器件,帮助最大限度地降低供应链风险。 经过Microchip内部以及第三方测试,关键可靠性指标已经证明,与其他厂商生产的SiC器件相比,Microchip 的器件性能更加卓越。与其他在极端条件下出现性能下降的碳化硅( SiC) 器件不同,Microchip 器件性能保持稳定,有助于延长应用寿命。Microchip 碳化硅(SiC)解决方案的可靠性和耐用性在业界处于领先水平。其耐用性测试表明,Microchip 的碳化硅肖特基二极管(SiC SBD)在非箝位电感开关(UIS)中的能量承受能力提升20%,在高温下电流泄漏水平最低,从而可以延长系统寿命,实现更可靠的运行。 Microchip 的 SiC 汽车功率器件进一步拓展了其丰富的控制器、模拟和连接解决方案产品组合,为设计人员提供电动汽车和充电站的整体系统解决方案。Microchip还利用最新一代碳化硅(SiC)裸片,提供700、1200和1700V 碳化硅肖特基二极管(SiC SBD)和金属氧化物半导体场效应晶体管(MOSFET)功率模块的广泛产品组合。此外,Microchip推出的dsPIC®数字信号控制器可提供高性能、低功耗和灵活的外设。Microchip的AgileSwitch®系列数字可编程门驱动器进一步加快了从设计阶段到生产的进程。这些解决方案还可应用于可再生能源、电网、工业、交通、医疗、数据中心、航空航天和国防系统。 开发工具   关于世健 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3登录网站_京东方超高清AMQLED取得重大突破

近日,,这是继今年年初发布高分辨率QLED技术后,京东方在电致发光量子点领域取得的又一重大进展。 据了解,量子点发光二极管(QLED)被普遍认为是继主动矩阵有机发光二极管(AMOLED)之后更具颠覆性的下一代显示技术。 目前,量子点技术在显示产品中的应用主要包括光致发光量子点背光技术和主动式电致发光量子点二极管技术(AMQLED)。 与光致发光量子点背光技术不同,AMQLED显示无需背光源,注入电流即可使量子点发光,具有自发光、色域广、寿命长等优势,成为量子点显示的发展方向。 其中,大尺寸量子点打印技术和产品的研发是关键突破点,备受业界关注。 ,在大尺寸显示领域具有广阔的市场空间和应用前景。 在AMQLED领域,京东方电致发光量子点技术处于国际领先水平。早在2017年,京东方就推出5英寸、14英寸采用全喷墨打印工艺的AMQLED产品样机,并获得国际信息显示学会(SID)Best in Show奖高度评价。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3新闻554258:_华为晒凤凰引擎:或为自研GPU做准备!

日前,华为展示了一套图形关键引擎,代号为凤凰引擎。据悉,该引擎正在与网易Unity、Cocos等合作伙伴推进技术落地, 根据官方给出的细节,这个引擎包括渲染引擎渲染引擎、材质系统、动画引擎、物理引擎、后处理系统、GT图形加速层等一整套核心模块。 合作伙伴可使用Scene Kit的光线追踪、PBR、动画等特性,打造独特丰富的3D场景,带给用户沉浸式的体验。 华为凤凰引擎提供有自研多层BVH加速结构、多叉树Traversal算法,构筑了高效、Unbias的RT-Core算法底座,通过基于华为硬件平台的自研混合渲染管线实现了实时光线追踪技术在移动端的应用。 凤凰引擎能给手机3D应用以及游戏提供高性能、低功耗、高画质的图形体验。华为凤凰引擎的光线追踪技术围绕高真实感渲染,在离线与实时渲染领域实现了技术突破,把PC级别最先进顶级显卡的实时光线追踪效果带到手机上。 目前来说,华为 并没有给出凤凰引擎实际应用的时间节点。有媒体猜测,这套引擎或许是在为自研GPU做准备。 -END- | 整理文章为传播相关技术,版权归原作者所有 |  | 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3登录_让传感器数据更直观之LCD曲线显示

前阵子公司有一个基于毒品检测的项目需要做一个曲线显示的功能,由于这块是我的技能短板,因为我之前搞软件的应用,逻辑,框架,架构设计这块比较多,而我师弟在底层方面非常精通,所以把这一块核心的功能交给了我师弟,让他帮忙来实现基本的库,然后我基于他的库完成产品所需要的功能。 又恰好在项目之前,RT-Thread发起了一个基于RT-Thread Nano的Mini示波器DIY的活动,作为RT-Thread社区工作小组一员的我,有幸能看到这个项目从头到尾的制作过程,也从中学习了LCD曲线数据处理和显示的一些思想。 活动链接如下: 【DIY活动】一起来做一个基于RT-Thread Nano的Mini示波器吧! 完成曲线显示大致需要以下三个步骤: 1、数据采集 2、数据处理 3、数据显示 废话不多说,咱们先看下显示效果: 严格意义上来说,小熊派这种SPI屏其实不太适合用来刷曲线,首先分辨率太低了,还有就是SPI的速率也不高,如果曲线显示条件苛刻一点,很容易导致LCD显示闪屏现象,体验感非常不好,但是针对传感器数据显示我们还是有能力实现的。 于是,我们需要对屏驱动做一些最基本的优化: 1、优化LCD驱动 1、提升刷屏速度 由于要刷曲线,所以只能想办法尽量提升屏的刷新速度,于是在LCD手册里有这么一个寄存器,可以提升屏的刷新速度: 在LCD驱动初始化代码里,这个寄存器默认配置的是60Hz,也就是0x0F这个值 /* Frame Rate Control in Normal Mode */LCD_Write_Cmd(0xC6);// LCD_Write_Data(0x0F); //60HZLCD_Write_Data(0x01);  //111Hz 提升屏的刷新速度 本来设置为0x00为119Hz,但是设置完LCD就黑屏了,改为0x01就不会,目前没找到具体原因,可能这是屏固件的BUG,暂时将就着用吧;或者有朋友知道的,感谢在留言区分享给我。 2、改用寄存器发送 /** * @brief LCD底层SPI发送数据函数 * * @param   data 数据的起始地址 * @param   size 发送数据大小 * * @return  void */static void LCD_SPI_Send(uint8_t *data, uint16_t size){    for(int i = 0 ; i < size ; i++)    {        *((uint8_t*)&hspi2.Instance->DR) = data[i];        while(__HAL_SPI_GET_FLAG(&hspi2, SPI_FLAG_TXE) != 1) {}    }} HAL库的HAL_SPI_Transmit函数发送会慢一些,改用寄存器发送会更快。 2、曲线显示逻辑 要在LCD上显示曲线,大家可能就会有这样的疑问: 我的数据可能上千,几万这样,如何转换成对应屏分辨率的显示?到底从哪里开始显示?怎么显示? 有一种比较好的思路,就是定义一个固定长度的数组,每次往数组尾部不断的更新数据,然后该数据会不断的往前推,这其实就是我们说的fifo(环形缓冲)队列,然后定义一个新的备份缓冲区,在这个备份缓冲区里找到数据的最大值以及最小值,求出针对LCD分辨率的缩放系数,根据计算结果将备份缓冲区用于LCD显示,这就是根据实际情况进行的缩放,也叫做局部缩放。以下是这个例程的曲线数据结构: #define DATA_SIZE   240/*曲线显示区域,即相对于LCD的宽度,X轴*/#define PLOT_DISPLAY_AREA_X  51/*曲线显示区域,即相对于LCD的高度,Y轴*/#define PLOT_DISPLAY_AREA_Y  210#define LCD_X 240#define LCD_Y 240/*曲线处理*/typedef struct{  /*实时曲线数据*/    uint16_t rel_data_data[DATA_SIZE];  /*旧的曲线数据*/    uint16_t old_plot_data[DATA_SIZE];  /*新的曲线数据*/    uint16_t new_plot_data[DATA_SIZE];} plot_data_handler ;extern plot_data_handler plot_handler ; 由于要做到一次性更新避免闪屏,这里定义了三个缓冲区,rel_data_data用于更新实时数据,old_plot_data为旧的已经处理的显示数据,new_plot_data为刚刚处理的显示数据,相当于双缓冲效果。 3、曲线显示实现 3.1 数据采样部分 由于刚开始显示,曲线的数据缓存是空的,所以我们要做一下初始化,保证曲线能够直接显示出来: smoke_value = mq2_sensor_interface.get_smoke_value(&mq2_sensor_interface);for(int i = 0 ; i < DATA_SIZE ; i++)   plot_handler.rel_data_data[i] = smoke_value ;memcpy(plot_handler.new_plot_data, plot_handler.rel_data_data, sizeof(plot_handler.new_plot_data));memcpy(plot_handler.old_plot_data, plot_handler.new_plot_data, sizeof(plot_handler.new_plot_data)); 接下来就是显示逻辑上提到的,我们需要有一个环形缓冲,不断的追加数据: smoke_value = mq2_sensor_interface.get_smoke_value(&mq2_sensor_interface) ;/*更新数据到队列*/for(i = 0 ; i <= DATA_SIZE - 2 ; i++)   plot_handler.rel_data_data[i] = plot_handler.rel_data_data[i + 1];plot_handler.rel_data_data[DATA_SIZE - 1] = smoke_value ; 这样我们就完成了最基本的数据采样部分。 3.2 数据处理部分 数据处理我定义了以下函数来实现: void LCD_Plot_Remap(uint16_t *cur_data, uint16_t *backup_data, uint16_t cur_data_size) cur_data表示当前的实时数据包 backup_data表示备份数据包 cur_data_size表示数据包的长度 实时数据包就是没有经过处理的数据包,备份数据包就是经过处理的数据包。 在这个函数中主要完成了找实时数据包的最大、最小值、计算缩放系数: 最大值查找: value = 0 ;for(i = 0; i < cur_data_size; i++)  if(cur_data[i] > value)    value = cur_data[i];max = value ; 最小值查找: value = cur_data[0];for(i = 0; i < cur_data_size; i++) if(cur_data[i] < value)   value = cur_data[i];min = value ; 缩放系数的计算: max_min_diff = (float)(max - min);scale = (float)(max_min_diff / height); 将处理的结果拷贝到备份数据包中。 完整实现如下: /*cur_data:当前要显示的曲线数据包cur_data_size:当前要显示的曲线数据包的大小*/void LCD_Plot_Remap(uint16_t *cur_data, uint16_t *backup_data, uint16_t cur_data_size){  uint32_t i = 0 ;  float temp = 0;  /*数据包最大值*/    uint16_t max = 0;  /*数据包最小值*/    uint16_t min = 0;  float scale = 0.0;  uint16_t value = 0;  float max_min_diff = 0.0;  /*曲线显示的高度*/  float height = PLOT_DISPLAY_AREA_Y;  char display_rel_buf[20] = {0};    char display_max_buf[20] = {0};  char display_min_buf[20] = {0};  char display_sub_buf[20] = {0};  /*显示X坐标轴*/  for(uint8_t i = PLOT_DISPLAY_AREA_X-1 ; i < 240 ; i++)        LCD_Draw_ColorPoint(i, 239, RED);  /*显示Y坐标轴*/    for(uint8_t i = LCD_Y-PLOT_DISPLAY_AREA_Y ; i < 240 ; i++)        LCD_Draw_ColorPoint(PLOT_DISPLAY_AREA_X-1, i, RED);  value = 0 ;  for(i = 0; i < cur_data_size; i++)        if(cur_data[i] > value)            value = cur_data[i];  max = value ;  value = cur_data[0];  for(i = 0; i < cur_data_size; i++)        if(cur_data[i] < value)            value = cur_data[i];  min = value ;    sprintf(display_rel_buf,"%04d",cur_data[DATA_SIZE-1]);  sprintf(display_max_buf,"%04d",max);  sprintf(display_min_buf,"%04d",min);  sprintf(display_sub_buf,"%04d",max-min);    LCD_ShowString(5,LCD_Y-PLOT_DISPLAY_AREA_Y+10,LCD_X,16,16,"rel:");  LCD_ShowString(5,LCD_Y-PLOT_DISPLAY_AREA_Y+20+10,LCD_X, 16, 16, display_rel_buf);    LCD_ShowString(5,LCD_Y-PLOT_DISPLAY_AREA_Y+50+10,LCD_X,16,16,"max:");  LCD_ShowString(5,LCD_Y-PLOT_DISPLAY_AREA_Y+70+10,LCD_X, 16, 16, display_max_buf);    LCD_ShowString(5,LCD_Y-PLOT_DISPLAY_AREA_Y+100+10,LCD_X,16,16,"min:");  LCD_ShowString(5,LCD_Y-PLOT_DISPLAY_AREA_Y+120+10,LCD_X, 16, 16, display_min_buf);    LCD_ShowString(5,LCD_Y-PLOT_DISPLAY_AREA_Y+150+10,LCD_X,16,16,"sub:");  LCD_ShowString(5,LCD_Y-PLOT_DISPLAY_AREA_Y+170+10,LCD_X, 16, 16, display_sub_buf);      if(min > max)    return ;    max_min_diff = (float)(max - min);    scale = (float)(max_min_diff / height);    if(cur_data_size < DATA_SIZE)    return;    for(i = 0; i < DATA_SIZE; i ++)    {        temp = cur_data[i] - min;        backup_data[i] =  DATA_SIZE - (uint16_t)(temp / scale) - 1;    }} 3.3 数据显示部分 这部分应该是最激动人心的,但是它的实现却是最简单的,就是将数据处理部分得到的备份数据包里的每一个数据依次用线段连接起来即可,为了让驱动更快一些,以下的处理采用寄存器发送: /*显示曲线*/void LCD_Plot_Display(uint16_t *pData, uint32_t size, uint16_t color){    uint32_t i, j;    uint8_t color_L = (uint8_t) color;    uint8_t color_H = (uint8_t) (color >> 8);    if(size < DATA_SIZE) return ;    for (i = PLOT_DISPLAY_AREA_X; i < DATA_SIZE - 1; i++)    {        if (pData[i + 1] >= pData[i])        {            LCD_Address_Set(i, pData[i], i, pData[i + 1]);            LCD_DC(1);            for (j = pData[i]; j <= pData[i + 1]; j++)            {                *((uint8_t*) &hspi2.Instance->DR) = color_H;                while (__HAL_SPI_GET_FLAG(&hspi2, SPI_FLAG_TXE) != 1);                *((uint8_t*) &hspi2.Instance->DR) = color_L;                while (__HAL_SPI_GET_FLAG(&hspi2, SPI_FLAG_TXE) != 1);            }        }        else        {            LCD_Address_Set(i, pData[i + 1], i, pData[i]);            LCD_DC(1);            for (j = pData[i + 1]; j <= pData[i]; j++)            {                *((uint8_t*) &hspi2.Instance->DR) = color_H;                while (__HAL_SPI_GET_FLAG(&hspi2, SPI_FLAG_TXE) != 1);                *((uint8_t*) &hspi2.Instance->DR) = color_L;                while (__HAL_SPI_GET_FLAG(&hspi2, SPI_FLAG_TXE) != 1);            }        }    }} 4、传感器数据实时曲线显示 实现逻辑如下: while (1){  smoke_value = mq2_sensor_interface.get_smoke_value(&mq2_sensor_interface) ;  /*更新数据到队列*/  for(i = 0 ; i <= DATA_SIZE - 2 ; i++)    plot_handler.rel_data_data[i] = plot_handler.rel_data_data[i + 1];  plot_handler.rel_data_data[DATA_SIZE - 1] = smoke_value ;  /*先将背景刷黑*/  LCD_Plot_Display(plot_handler.old_plot_data, DATA_SIZE, BLACK);  /*传感器数据处理*/  LCD_Plot_Remap(plot_handler.rel_data_data,plot_handler.new_plot_data, DATA_SIZE);  /*传感器数据曲线显示*/  LCD_Plot_Display(plot_handler.new_plot_data, DATA_SIZE, GREEN);  /*将处理完成的备份数据区的数据拷贝到旧的备份数据区*/  memcpy(plot_handler.old_plot_data, plot_handler.new_plot_data, sizeof(plot_handler.new_plot_data));  HAL_Delay(10);} 本节代码已同步到码云的代码仓库中,获取方法如下: 1、新建一个文件夹 项目开源仓库: https://gitee.com/morixinguan/bear-pi 这里我给大家申请到了福利,本公众号读者购买小熊派开发板可享受9折优惠,有需要购买小熊派以及腾讯物联网开发板的朋友,淘宝搜索即可,跟客服说你是公众号: 的粉丝,立享9折优惠! 自己动手撸个简单的LCD驱动框架吧! 嵌入式软件解决ADC电量显示问题经验分享 有关版本等信息的重要性(以STM32产品开发为例) TencentOS tiny危险气体探测仪产品级开发重磅高质量更新 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!