• Arm推出Arm®v9架构,面向人工智能、安全和专用计算的未来

    新闻重点: · 全新的Armv9架构将会成为未来3,000亿颗基于Arm架构芯片的先驱 · 基于通用计算具备的经济性、设计自由度和可及性的优势,Arm v9架构进一步推进专用计算处理 · 提供更高的性能、增强的安全性以及数字信号处理和机器学习功能 (2021年3月31日)Arm今日宣布推出Arm®v9架构,以满足全球对功能日益强大的安全、人工智能(AI)和无处不在的专用处理的需求。Armv9立足于Armv8的成功基础,是这十年来最新的Arm架构。Armv8正在当今需要计算的领域中驱动最佳的每瓦性能表现。 Arm首席执行官Simon Segars表示,“在展望由AI定义的未来时,我们必须夯实先进的计算基础,以应对未来的独特挑战。Armv9就是我们给出的答案。在通用计算所具备的经济性、设计自由度和可及性的基础上,市场需要普适专用、安全而强大的处理能力,这将驱动下一个3,000亿个基于Arm架构的芯片发展,而Armv9就是这些芯片的技术先驱。” 基于Arm架构的芯片出货量在持续加速,过去五年基于Arm架构的设备出货量超过1,000亿。按照目前的速度,无论是在终端、数据网络还是云端,全球100% 的共享数据很快将会通过Arm技术进行处理。如此广泛的应用让Arm肩负更多的责任和使命,为此,Arm在Armv9中提供更多的安全性和性能,顺应AI、物联网和5G在全球范围内的强劲发展,加速每个产业应用从通用计算转向专用计算。 安全:计算的最大挑战 为了解决当今最大的技术挑战——保护全球数据安全,Armv9架构路线图引入了Arm机密计算架构(Confidential Compute Architecture, CCA)。机密计算通过打造基于硬件的安全运行环境来执行计算,保护部分代码和数据,免于被存取或修改,甚至不受特权软件的影响。 Arm CCA将引入动态创建机密领域(Realms)的概念,机密领域面向所有应用,运行在独立于安全或非安全环境之外的环境中,以实现保护数据安全的目的。例如,在商业应用中,机密领域可以保护系统中商用机密数据和代码,无论它们正被使用、闲置或正在传输中。事实上,在最近一项针对企业高管的Pulse调查中,超过九成的受访者相信,机密计算可以帮助降低企业在安全方面投入的成本,如此一来,他们可以转而大量的投入工程创新。 微软Azure Edge和平台部门企业副总裁兼首席技术官Henry Sanders表示,“随着从边缘到云的用例越来越复杂,我们已经不能用一个放之四海而皆准的方案来解决所有用例。因此,异构计算正变得越来越普遍,这需要硬件和软件开发商之间加强协同。Arm与微软密切合作开发的Armv9机密计算功能就是硬件和软件之间协同的一个很好的范例。Arm处于独一无二的位置,可以在生态系统的核心加速异构计算,在驱动数十亿设备的计算架构上促进开放创新。” 无处不在的AI:呼唤专用、可扩展的解决方案 AI工作负载的普遍性和广泛性需要更多样化和专用的解决方案。据估计,到21世纪20年代中期,全球将有超过80亿台搭载AI语音辅助的设备[i]。且90% 或更多设备上的应用程序将包含AI元素以及基于AI的界面,如视觉或语音[ii]。 为了满足这一需求,Arm与富士通合作开发了可伸缩矢量扩展(Scalable Vector Extension, SVE)技术,并驱动了世界上最快的超级计算机“富岳”。在此基础上,Arm为Armv9开发了SVE2,以便在更广泛的应用中实现增强的机器学习和数字信号处理能力。 SVE2增强了对在CPU上本地运行的5G系统、虚拟和增强现实以及ML工作负载的处理能力,例如图像处理和智能家居应用。在未来几年,Arm将进一步扩展其技术的AI能力,除了在其Mali™ GPU和Ethos™ NPU中持续进行AI创新外,还将大幅增强CPU内的矩阵乘法。 通过系统设计实现性能最大化 在过去的五年,Arm技术每年都以超过业界的速度提升CPU性能 。Arm在新一代架构Armv9上将保持这个速度,预计未来两代移动和基础设施CPU的性能提升将超过30%。 然而,随着行业从通用计算向普遍的专用处理发展,每年两位数的CPU性能提升是不够的。除了增强专用处理能力,Arm的 全面计算(Total Compute)设计方法将通过集中的系统级硬件和软件优化以及用例性能的提高,加速总体计算性能。 通过将全面计算的设计原则应用在包含汽车、客户端、基础设施和物联网解决方案的整个IP组合中,Armv9系统级技术将遍及整个IP解决方案,并改善个别IP。此外,Arm还在开发多项技术以提高频率、带宽、缓存,并降低内存延迟,从而最大限度地提升基于Armv9的CPU性能。 下一个计算十年的愿景 Arm高级副总裁、首席架构师兼技术院士Richard Grisenthwaite表示,“更复杂的基于AI的工作负载需求,正在推动更安全和专用处理的发展,这将是打开新市场、抓住新机遇的关键。Armv9将赋能开发者通过弥合软硬件之间的关键差距,构建和编程未来的可信计算平台,同时实现标准化,帮助我们的合作伙伴在更快的上市时间和成本控制之间取得平衡,同时能够创建自己独特的解决方案。” 欲了解更多Arm对下一个计算十年的愿景,请访问Arm 官网: · Simon Segars讲述公司实现基于Armv9的下一代专用计算的历程,探讨Arm不断发展的生态网络和发展愿景。 · Richard Grisenthwaite和技术领导团队展望Arm架构的未来。 · Simon Segars和微软总裁Brad Smith高峰对话。 · Arm与谷歌、富士康、微软、NVIDIA、恩智浦、Unity、大众、Zoom等Arm生态合作伙伴进行前瞻性专题讨论。

    Arm ARM 人工智能 AI

  • 被坑了10万!竞业协议到底有多少坑?

    前段时间看到某厂员工因为违反竞业协议,被要求赔偿97万,还要返还期间发放的补偿金;实不相瞒,我也被竞业协议坑过,间接损失十多万,所以我感觉,无论是职场萌新,还是资深打工人,都有必要了解一下竞业协议,这样才能规避一些不必要的损失。 在这里,我罗列几个问题,具体如下所示; 什么是竞业限制? 竞业协议必须要签吗? 竞业限制的范围和赔偿? 竞业限制的激活条件 1 什么是竞业限制? 首先我们要了解下什么是竞业限制,所谓竞业限制,就是用人单位对负有保守用人单位商业秘密的劳动者,在劳动合同、知识产权权利归属协议或技术保密协议中约定的竞业限制条款。 通俗地说就是公司会限制掌握公司重要信息的打工人,离职后,如果跳槽当相关行业的公司,会遭到原公司的成吨的伤害。 至于限制哪些公司,哪些岗位,限制时间的长短,以及违反协议的处罚,都会在竞业协议中提及。 这看起来确实是个霸王条款啊!却也不是,只要不存在滥用的情况,公司还是可以需要保护自己的核心技术或者机密。劳动合同法里规定的是有三类人适用于竞业协议: 高级管理人员; 高级技术人员; 其他负有保密义务的人员; 即使如此,不过现在签订竞业协议也是一刀切的,有的公司基本上100%覆盖了。 竞业限制可以写在劳动合同或者保密协议里,也可以单独制作成竞业限制协议单独签署,一般在入职时签署。 2 竞业协议必须要签吗? 当然不是必须的,入职的时候你可以拒绝,但是到手的offer,你忍心看它就这样飞掉吗? 对于拒签竞业协议的人,公司也可以拒绝你入职。 站在公司的角度,为了最大化降低风险,基本都是一刀切的操作; “宁可错杀一千,不可放过一个”,因此在入职的时候,一般需要员工签署竞业协议,至于员工离职的时候,是否要激活竞业限制协议,那主动权就在公司手中了; 我可以让你赚,但我永远不亏。不过我想搞你的时候,我确实就能搞你! 目前竞业限制协议基本已经泛滥了,作为卑微的打工人,感觉被命运无情地掐住了喉咙,感到窒息。 不过,这是一个法制的社会,法官面前是讲法的,大家也不必太过于悲观。 3 竞业限制的范围和赔偿 明文规定,在竞业范围上,包括两个方面: 不得入职与本单位生产或者经营同类产品、从事同类业务的有竞争关系的其他用人单位; 不得自己开业生产或者经营同类产品、从事同类业务; 也就是说即不能去竞争对手那工作,也不能自己创业做跟原单位同类业务。 除此以外,不在竞业范围之内的,即使在协议中约定了,也属无效约定,可以不必遵守。 具体如何还得看协议里怎么写的,会限制你去相应的行业和公司,当然是要给赔偿的; 如果是大佬级别的人物,公司应该会找你谈的,然后约定相应的赔偿的; 因为通常来说,竞业限制的期限是两年, 如果两年之内不能去一些心仪公司,会错失很多机会,或者行业圈子很小,一竞业好像哪儿都去不了,那岂不是只能转行,要回家种田了吗? 关于补偿金的标准:《劳动合同法》中只规定了在竞业限制期限内按月给予劳动者经济补偿, 但没有具体规定经济补偿金的支付标准和具体金额; 因此具体还是得看我们和公司在竞业协议中约定好的赔偿金额; 一般情况下竞业限制补偿金的支付标准: 是劳动者前十二个月平均工资的30%——60%; 具体定多少就要看双方的约定了,但是不能低于当地的最低工资标准; 如果约定的补偿标准较低,劳动者可申请劳动仲裁要求提高补偿标准; 所以从这一点来看,如果按照常规的标准,赔偿金其实并不高,因为前面提到了,某厂程序员,拿到的赔偿金只有十几万,但被原公司竞业了,罚款却高达97万,这简直就是不平等条约嘛! 4 竞业限制的激活条件 这是比较关键的一点了,激活条件就是在离职后的三个月内收到补偿金。 明文规定如下:当事人在劳动合同或者保密协议中约定了竞业限制和经济补偿,劳动合同解除或者终止后,因用人单位的原因导致三个月未支付经济补偿,劳动者请求解除竞业限制约定的,人民法院应予支持。 所以但凡原来公司想要搞我们,那真的是轻而易举,整整三个月; 一种比较极端的情况,离职后,我入职了一家相关行业的公司,前两个月,并没有发生什么事情,但是第三个月的时候,老东家,往我的银行卡里转入了一笔补偿金,然后敬业协议就被激活了; 如果我们这时候又违反竞业限制,那么会有什么后果呢? 应该会很惨!是一笔巨额的违约金。 根据《劳动合同法》中的规定:如果劳动者违反竞业限制约定的,应当按照约定向用人单位支付违约金; 如果给用人单位造成损失的,还要承担赔偿责任; 向用人单位支付违约金后,用人单位要求劳动者按照约定继续履行竞业限制义务的,仍需遵守。 可见真的是赔了夫人又折兵,不仅要支付违约金,还要丢掉工作,还要受到竞业协议的限制。 随着行业内卷越来越严重,蛋糕就这么大,公司之间的竞争就是人才的竞争,相应的竞业限制情况也会不断出现,作为职场人的我们,要学会用法律武装自己,避免不必要的麻烦和损失,尤其是从事高科技相关的行业,在跳槽的时候要慎重,尽量不要犯险触碰竞业雷区,否则后果会十分严重。 目前罗列的都是比价极端的情况,我们也不用太过于悲观,对于竞业限制协议,要做到心中有底。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    小麦大叔 竞业协议

  • 为什么李彦宏的这封信会刷屏朋友圈:看完终于明白了

    编者按: 3月23日,百度在香港二次上市。李彦宏用一封长信,回顾一路走来的21年。 用一句很俗的话说:读完,内心久久不能平静。 世人皆知,顺水推舟易,逆水行舟难,但决定一个船长到底能把一艘巨轮开多远开多久的,却是逆水行舟的本领。一位企业家带领一家企业,也是如此。 改革开放以来,中国经济这部电梯太强大、太有力,是企业家们的大幸事,但大幸之中也藏着不幸。所谓温室培养不出顽强的生命力,习惯了坐电梯、打顺风球,往往容易忽视自身的能力建设,更难言练就穿越逆境和风暴的能力。 于是,最近这几年,当电梯难坐,企业家们开始群体焦虑。 高增长向高质量的换道阵痛,各行各业竞争的加剧,正让诸多创业者、企业家和管理者,从顺水走到逆水之中,甚至被甩出电梯。百度曾经的“有昨天,有明天,唯独没有今天”,在今天的中国企业界,怕是许多人都正感同身受。 李彦宏穿越险滩,打逆风球的历程与修炼,在当下,可谓弥足珍贵。 世上没有永远一帆风顺的航程,一个人、一家企业的成功,不是看他有没有站上过顶峰,而是看他能否在顶峰跌落之后反弹,再攀高峰。无论你现在是顺风顺水,还是逆风而行,他的这封信,都值得好好读。 以下是李彦宏致股东信全文: 尊敬的投资者: 您好!感谢您对百度的关注和支持。 从创建百度的第一天起,我对它的期待始终没变:专注技术,信仰技术,相信技术可以改变世界。我认为,每一家企业都生而不同,也应该创造不同。 今天,在百度香港上市之际,我希望通过这封信,让大家了解百度——一家技术派的公司,它的梦想,它的坚持,它的价值和创造,它的明天和将来。 01 技术的百度 百度是一家技术公司。这句话听起来平淡无奇,在互联网领域,谁不是呢? 但当你看到,2020年百度核心业务研发投入占到收入的21.4%时,你可能会觉得有点不同了。因为这样的研发强度,在全球大型科技互联网公司中都是凤毛麟角的;当你去翻一翻各大互联网公司CTO的履历时,可能会发现他们中许多人都曾经在百度工作过,经历过百度技术文化的历练;当你看到一个个自动驾驶创业公司的CEO出自百度时,你甚至会为百度能否保持自动驾驶技术的领先性感到担忧。 但这就是我所说的,百度是一家技术公司的另一层含义:我们培养技术人才,我们输出技术文化,让更多企业看到技术的价值并重视对技术的投入,搭建起中国互联网的技术骨架,这是一件意义非凡的事情。 21年前,当我从美国硅谷回到北京创立百度时,我曾希望像在硅谷一样,招有5年左右工作经验的工程师加入我们的初始团队,因为小公司没有时间和金钱从头培养人。但最终我们招的几乎是清一色的应届毕业生,因为那时候还没有公司在中国培养出能为互联网所用的技术人才。由此开端,百度逐渐形成了独特的技术人才培养“熔炉机制”。我们让平凡人做不平凡的事,从实习生到顶尖科学家,培养了一批又一批具有“务实、自驱、负责到底”品格的人才。 百度创立之前,互联网的发展还比较早期,那时候用户在搜索框输入一个词,3秒钟之内不出结果,大家觉得很正常。但是,我要求百度搜索必须一秒内出结果。这种对技术的极致要求,让我们成为最受网民欢迎的中文搜索引擎,每天响应来自全球100多个国家的数十亿次搜索请求。始终把用户放在第一位,让产品简单易用,高效执行、追求完美,这样的技术文化塑造了今天的百度。 10年前,我们意识到,人工智能技术可能已经成熟到可以解决搜索问题,以及搜索以外的很多问题,我们开始大举投入人工智能技术的研发,期待用技术让复杂的世界更简单。这样做,当然不是没有代价的。这10年,是移动互联网发展最快的阶段,商业模式的创新层出不穷。我们发现,自己喜欢和擅长的技术似乎不灵了,这让我们看起来有点措手不及。前几年有人说,百度拥有昨天,也拥有明天,唯独没有今天。 当下,“明天”正在变成“今天”。过去10年,我们打基础、建生态,在人工智能大潮奔涌而来的今天,百度成为了领先的AI生态型公司。集百度通用AI能力之大成的百度大脑,已对外开放了270多项AI能力,日调用量突破1万亿次,服务于千行百业的智能化升级。飞桨是中国自主研发的第一个深度学习框架,是AI时代的操作系统,凝聚了265万开发者、服务了10万家企业。最近三年,在中国人工智能专利申请和授权方面,百度始终排名第一。在云、AI、互联网融合发展的大趋势下,百度形成了移动生态、百度智能云、智能交通、智能驾驶及更多人工智能领域前沿布局的多引擎增长新格局,积蓄起支撑未来发展的强大势能。 这个过程是艰难的。三年前,我们年度总收入刚刚突破1000亿人民币,而过去10年,我们的研发支出就超过了1000亿元。但是,我们选择了技术战略,就必须抵御住短期机会的诱惑,能坚定面对长周期投入的挑战。长期价值和短期利益之间的选择,最考验一家公司的战略定力。百度有定力,有耐心。因为我们深知,最前沿的技术浪潮是等不来的,你必须提前10年、20年去布局。 在百度最初的10年,我们专注于搜索引擎技术的投入,让我们得以服务10亿互联网用户,并演化出语音、图像、知识图谱、自然语言处理等人工智能技术;最近10年,我们在深度学习、对话式人工智能操作系统、自动驾驶、AI芯片等前沿领域投资,让我们成为一个拥有强大的互联网用户基础的AI生态型公司。 建生态,开放还是封闭,是两种完全不同的模式和路径。百度毫不犹豫地选择了开放。开放是百度与生俱来的基因,搜索引擎天生就建立在开放的互联网基础上。百度做AI,无论是阿波罗自动驾驶,还是小度助手、飞桨深度学习框架,我们都坚定地推动开源开放,为的是让大家都少走弯路,让整个赛道更宽广,让技术发展更快,让应用普及更快。 过去的21年中,每当百度徘徊在十字路口,我都会问自己,什么能够让你真正制胜未来?我认为就是两方面:一是你信仰什么,What do you really believe in;一是你有多大的决心,your determination。从过去到现在,我们的信仰没有变,我们相信技术可以改变世界。我们也有决心,有耐心。我们熬得过万丈孤独,藏得下星辰大海。 02 文化的百度 百度这个词是我创造出来的,源于宋词中的“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”。“百度”之前不是一个词,没有任何既有的含义。我认为,这样的词才是一个好的品牌词,它的所有寓意都由我们书写。那个时候,很多公司起名字喜欢用英文,最好能让人觉得是个国际公司,而百度的英文从一开始用的就是汉语拼音。到今天,百度公司所有的会议室都用词牌命名,这代表了我们这一代人对中国文化的自信。 文化的核心是价值观。什么是百度的文化价值观?简单可依赖,这是公司创立之初就定下的,从未改变。 “简单”,意味着我们的产品要做到简便易用;也意味着公司的人际关系简单,没有办公室政治,说话直来直去。“可依赖”,意味着每个人都有担当,很靠谱,做事让人放心,总是把最好的结果传递到下一个环节。今天,我们看到越来越多的科技公司把“简单”作为文化价值观的关键原则。“简单“成为一种共识,这是我们乐于见到的。 简单可依赖,常常意味着我们要“反路径依赖”。我们很容易发现一个现象,按照计算机科学的说法就是“贪心算法”——现在能得到收益就做,现在得不到收益或者负收益就不做。在百度,每天有数亿人来寻求知识、信息和服务,这构成了我们发展AI的良好基础。有什么新想法,快速开发出来,做个小流量实验,效果好就推全,效果不好就改进或放弃,这几乎成了百度人的肌肉记忆。但这样的做法,很容易满足于局部最优,从而与全局最优失之交臂。 如何避免贪心算法?简单说就是用理念来指挥,用数据来验证。任何一个产品实验,都要在背后有一个清晰的理念来指挥,有价值观做准绳:做这个事情是为了啥,为了谁,提供了什么价值,对社会有什么贡献。数据是用来验证理念,而不是指挥理念的。数据代表的是过去,一个趋势一旦从数据上反应出来,就已经晚了,做事要理念先行。产品理念高于数据算法,降低门槛、保持简单、引人向上,这是我们坚持的产品价值观。 如何找到全局最优?这些年的经验和教训告诉我们,就是要敢于走出舒适区,离开局部的最优点。要冒险,但是要冒算过账的风险,而不是用蛮力。要看趋势,一件事情向前看1~2年,一定是红海一片;看3~5年就没有那么大的竞争压力了;向前看7年以上,你就可以尽情挥洒、从容布局,找到适合自己的最优解。 简单可依赖,还意味着,你要心无旁骛,认准了就去做,不跟风不动摇,你甚至要特立独行。当移动互联网的风口多在商业模式创新和大规模补贴教育用户习惯的时候,我们的投入重点转向了AI。关于AI,我们的做法也与众不同:当全世界都痴迷于无屏智能音箱的时候,我们重点发展了小度智能屏,这让我们在全球带屏音箱中位居第一;当全世界都在追逐无人驾驶的单车智能路线时,我们坚定地投入到了车路协同的技术路线;当主流的云厂商都在竞争CDN、IaaS领域的市场份额时,我们把目光投向了深度学习框架和高端AI芯片,提供基于人工智能算法和算力的云智一体的服务。 这些做法至今仍然没有得到多数人的认同,但我们生而不同,干嘛要活成别人的样子? 03 未来的百度 推动人类社会发展的核心,是能量和信息,这是第一性原理,也是我们最底层的思考和判断。今天电动车正在取代燃油车,是能源技术革命的必然;而真实世界的数字化、网络化、智能化,则是信息技术突破的必然。未来,信息和能量两条线的融合创新,将带来颠覆性变革,给全球经济带来长期持续的增长,给全人类带来福祉——消灭贫困、延长寿命、实现碳中和,让地球更加生机勃勃,让生活更美好。 作为一家科技公司,百度最初的10年,是用技术让信息的分发变得更高效。百度最初的使命,是“让人们平等便捷地获取信息,找到所求”。到人工智能时代,我们让汽车变得智能,让家居变得智能,让城市变得智能,让万物智能,同样源于我们新的使命:“用科技让复杂的世界更简单”。 理解了我们新的使命,就能理解百度一以贯之的技术战略。就是看长远,为未来投资。 我们认为,在未来十年人工智能领域将有八项关键技术,会实现从量变到质变,将给经济、社会、甚至文化带来深远的影响。它们包括自动驾驶、数字城市运营、机器翻译、生物计算、深度学习框架、知识管理、AI芯片和个人智能助手。这其中,有的我们已经布局多年,开始迎来收获,比如自动驾驶、智能助手。有的刚刚开始,比如生物计算、AI芯片。 得益于我们长远的布局和创新的路径选择,百度可能是全球唯一贯穿了智能驾驶系统、汽车智能化赋能、整车制造、无人车运营、车路协同、数字城市管理等几乎智能交通所有环节的参与者,这将使我们率先和最大程度从产业的高速发展中受益。 在自动驾驶领域,阿波罗已经成为中国最领先的自动驾驶开放平台,我们拥有中国最高的自动驾驶测试里程数和最多的测试牌照数;我们的汽车智能化解决方案已经开始向10家全球和中国的汽车厂商赋能;我们的智能交通已经在近20座城市落地实践。我们的无人车已经服务超过21万人次;我们最近还成立了独立的造车公司集度。 8年前,当我们决定投资智能驾驶技术的时候,我们认为它是人工智能最顶级的工程,将彻底改变我们的出行和生活。我们看到,智能驾驶技术正在极速演进,每更新一代,成本大约会下降30%~50%。当成本下降到一个阈值,将触发无人车规模化运营;另一方面,车路协同将大大提升无人车的安全性,使得大规模商用成为可能。 我们还希望推动数字城市的运营。过去40年,中国经历了世界历史上规模最大、速度最快的城镇化进程。今天,几乎所有的大城市都被拥堵困扰,不得不通过限购限行来解决。数字城市运营商模式,会是一种很好的解决方案。我们在保定和长沙试验的数字城市运营,已经显示出巨大的社会价值和商业潜力。一项测算发现,智能交通能提升15%~30%的通行效率,而这将为GDP每年贡献2.4%~4.8%的绝对增长。随着这一模式的铺开落地,中国一线城市将不再需要限购限行,我们争取用十年的时间,基本解决拥堵问题。当然,这个模式在中国以外也适用,解决拥堵、提升通行效率、减少碳排放、降低交通事故死亡率,将惠及全球每一个人。 在人工智能的加持下,生物计算将在靶点发现、化合物合成、化合物筛选、晶型预测等方面大显身手。新药研发的速度将大大加快,过去十年磨一药,未来可能两三年就能完成一个新药研发周期。而疾病筛查、精准医疗等也会因为AI而得到完全改观。更值得期待的成果可能是,个性化定制药物,你接受的每一种治疗,每一种药物都是专门为你设计的,这将是前所未有的预防性医疗保健方向,让更多人可以安享百岁人生。 AI芯片是高技术门槛和高风险的投资,但是百度希望在AI芯片领域有所突破,我们组建了自己的AI芯片公司,因为它与平台能力密切相关,而且能充分利用我们在深度学习框架领域的优势。百度昆仑I芯片已经替代了相当一部分百度搜索引擎的推理能力,即将量产的昆仑II将在昆仑I的基础上大幅度提升效率,降低成本,并应用到更多的人工智能训练和推理场景中。从长远看,AI芯片将为云计算平台和智能驾驶系统创造出额外的能力和效率提升。 作为对话式人工智能系统的一个载体,小度智能音箱已经走进千家万户,在很多家庭里已经被当作一个家庭成员看待,尤其是老人和小孩,对它非常喜欢和依赖。在中国的一些社区,我们的小度助手,正在帮助老年人获取信息、购物、实现健康管理。未来,我认为在医疗、教育、金融等任何一个大家熟悉的领域,都可能会出现专用的智能助手。每个人都需要、都能拥有自己专属的个人智能助手。 正如雨果所说,“已经创造出来的东西,比起有待创造的东西来说,是微不足道的”。科技创新的前沿永无止境,对于一个技术信仰者,还有什么比这样的时代机遇,更加让人激动人心的呢?所以,我们要坚持创新,不拘一格地创新。 我们会通过创新的产品,给用户惊喜;我们会继续坚持高强度的研发投入,在“两基一底”,即基础研究、基础技术和底层创新上进行投资,去达成我们的愿景——“成为最懂用户,并能帮助人们成长的全球顶级高科技公司”! 我们始终相信,科技为更好。我们相信,技术的开放共享,让再微小的企业,都可以享受技术的红利,在创新面前机会平等;让再弱小的个人,都可以分享创新的果实,实现结果平等。我们相信创新和创造,我们相信良知、善行,将让这个世界走向阳光地带,走向星辰大海。 李彦宏 百度董事长兼CEO 2021年3月23日

    嵌入式ARM 百度 李彦宏

  • Linux 30岁,这些年经历了什么?

    来源 | CSDN 整理 | Carol 3月19日,Linux基金会在Twitter上发布推文宣布,其小企鹅的标志“Tux”已经30周岁了,还为其设计了一系列的庆祝海报,以便大家转发分享。 虽然离Linux的生日还有一段时间,但是今年Linux基金会已经提前先帮小企鹅“Tux”过生日了。 在今年4月,Linux还会在其线上商店推出30周年纪念周边。 Tux是Linux的吉祥物,也是Linux和开源社群的象征,想必大家对这个形象不会陌生,据说英国 Linux 用户组 (British LUG) 甚至在当地的动物园认养了几只企鹅。而Tux的形象在这期间也改版过好几次: 不过,虽然推文上是祝Tux生日快乐,但实际上Tux真正确定、并对外公布是在1996年,真正30岁的是Linux(1991年诞生)。 不知不觉,Linux“出道”已经30年了,作为自由软件和开放源代码软件发展中最具代表性的例子,你对它的了解到底有多少? 今天我们就一起回首一下,Linux的起源和30年来的重要事件。 1. Linux的诞生 说到Linux,就不得不提到Linux之父——Linus Torvalds。 用美国《时代》周刊的评价来说,那就是:“有些人生来就具有统帅百万人的领导风范;另一些人则是为写出颠覆世界的软件而生。唯一一个能同时做到这两者的人,就是Linus Torvalds。” 相信大部分读者也都会觉得,这已经是一个非常高的评价了。但在Linus这句话说出来之后,《时代》周刊的评价未免显得太保守了。Linus是这样评价自己的:“我的名字叫Linus,我是你的上帝(My name is Linus,and I am your God)。” 1969年末,Linus出生在芬兰赫尔辛基,早年父母离异,Linus大部分时间是跟着母亲生活。他的外公是个统计学教授,因此家里有一台用于工作的CommodoreVIC-20计算机。这玩意儿在当时的欧洲很流行,外公经常让年幼的Linus玩这台电脑,还经常口述程序让他敲入到电脑里。 这台电脑是Linus童年最亲密的玩伴,他对这种输入-输出的游戏十分痴迷。他还用这台电脑学会了Basic语言。到了大学时他已经有了丰富的编程经验。 在这里不得不提一位同样是传奇的人物:Andrew Tanenbaum。Andrew Tanenbaum是阿姆斯特丹自由大学计算机科学系教授,由于Unix不再免费向学校提供源代码,他为了能在课堂上更好地演示操作系统的细节,决定在不查看任何Unix源代码的情况下,自行开发一套与Unix兼容的操作系统,这套系统全部代码只有12,000行,可运行在286的英特尔芯片上,取名为Minix,即Mini-Unix。 Minix发布于1987年,作为Andrew教授《操作系统:设计与实现》一书的参考范例。这个系统虽然很迷你,但凭借低廉的价格和简易的操作,在大学中大行其道,一时风头无两。 但Andrew教授当时肯定想不到,在1000多公里外的北欧,一位刚刚服完兵役的少年,被他这本719页的大部头改写了命运。这个少年正是Linus。用Linus的话说:“这本书把我推上了生命的高峰”,看了这本书以后,操作系统、Unix和C语言成为了年少的Linus心中的维纳斯、阿波罗和雅典娜。 2. 个人爱好一不小心改变了世界 1991年1月,Linus花了3500美元分期付款购买了一台杂牌组装电脑。这台电脑的内存只有4兆、CPU 33兆赫,配有一台14英寸的显示器。然后他又用16张磁盘把Minix系统装进了电脑旁。Linux的初始版本就是在这台电脑上诞生的。 刚安装完Minix系统的Linus用了一个多月的时间把这个系统的里里外外研究了一遍,发现这个系统虽好,但也存在很多缺陷,比如内核问题、文件系统问题,但最要命的是这个系统缺少一个登陆学校Unix服务器的终端。于是Linus决定抛开Minix,重新设计一个终端仿真器,也就是说他需要在硬件层面重新开发一套新系统! 两个月之后,终端仿真器完成,这是Linux操作系统的第一步。之后,Linus又开始添加磁盘驱动和文件系统。在那段时间,Linus除了参加每周三晚上的同学聚会之外,大部分时间都穿着睡衣坐在计算机前不知疲倦的敲打着键盘。 家门外彼得盖坦街的白雪融化了他不知道,现在是三月还是四月他也不知道。他的窗帘把窗户遮盖的严严实实,把阳光和外面的世界一同和自己区隔开来。 1991年9月17日,Linus把完成的新操作系统上传到了赫尔辛基工程学院的FTP 服务器上,并准备用「Freax」作为操作系统的最终代号,结果遭到了激烈的反对。要知道发布一个操作系统可是开天辟地的大事,应该用自己的名字命名才对,把Linus一改,改成Linux就顺眼多了。可Linus却担心这个名字显得自己太自恋。最终还是「民意」占了上风。 由于Linux的开放,早年参与开发的黑客都具有很高的水平,直到今天,Linux社区里内核的开发才被程序员们认为是「真正的编程」。 3. Linux 不得不知的重要节点 1991年:Linus 向全世界介绍Linux Linus Torvalds 在1991年 8 月 25 日向 Minix Usenet 新闻组发邮件告知自己正在研发操作系统的消息,他在邮件中写道:”我做这个系统只是出于我的个人爱好,不会像 GNU 那样成为 386(486) AT 克隆的那样大而专业的系统。" 1992 年:Linux 迎来首战 操作系统大师、Unix 的教育操作系统版本 Minix 的创造者 Andrew Tannenbaum 宣称 “Linux 已经过时了”,Linux 面临的第一次操作系统战争开始了。在由此引发的讨论中,Linus Torvalds 对 Linux 的愿景做了一个很有说服力的评论,直到今天,这个评论依然是正确的,“ 如果 GNU 内核(另一个创建类似 Unix 的自由操作系统的项目)在去年春天就已经准备好了,我甚至不会费心去启动我的项目。然而事实是,它没有,现在仍然没有。Linux 在现在可用的点上赢得了很大的优势。" 1993 年:Slackware Linux 发行 Linux 在早期有一些发行版,如 MCC 和 Yggdrasil Linux,但 Patrick Volkerding 的 Slackware 是第一个广泛成功的 Linux 发行版,它至今仍在更新和使用。 1993 年 :Debian Linux 诞生 Debian Linux是一个非常受欢迎的Linux社区版。即使在今天,它也依然是Mint、Ubuntu和许多其它流行Linux发行版的基础。 1994 年:红帽公司成立 Marc Ewing创建了Red Hat Linux,Bob Young收购了Ewing的公司,并将其与自己的公司合并,并成立了Red Hat,这是迄今为止最成功的Linux公司。 1995 年:首届 Linux 博览会开幕 1995 年,Linux 举行了首个博览会 Linux Expo,之后,诞生了更多的展会。今天,仅在美国就有十多个主要的地区性和全国性的 Linux 贸易展。 1996 年:KDE 诞生 这一年,Matthias Ettrich 为方便使用,创作了 Linux 第一个桌面界面,KDE。“K” 表示 “Kool” 的意思。这个名字也是 Unix 的通用桌面环境(CDE)的一个近似变换。 1996 年:SUSE Linux 发布 同样在 1996 年,在 Slackware 和红帽 Linux 合作后,欧洲顶级商用 Linux 厂商 SUSE 发布了其首款独立 Linux 发行版。如今 SUSE 依然是 Linux 和云计算领域的重要厂商。 1997 年:GNOME问世 Miguel de Icaza 和 Federico Mena 开始着手开发一个新的 Linux 桌面,GNOME 桌面。该桌面完全基于自由软件构建,GNOME 与 KDE 一起将成为 Linux 最重要的两个桌面之一。 1998 年:微软的“万圣节文件” 微软开始瞄准 Linux,早期的 Linux 和开放源代码负责人 Eric S. Raymond 透露了一份来自微软内部的万圣节文件,该文件表明微软正认真对待 Linux 所带来的市场威胁,并开始制定其反开放源代码和Linux运动。然而十年后,微软改变了自己的腔调。 Corel 发布了第一个主流 Linux 桌面。虽未成功,但它将为其他流行的 Linux 桌面发行版铺平了道路,例如后来 Ubuntu 。 1999 年:Linux 与 Windows 首次正面对决 Linux 首次在文件服务方面与 Windows NT 进行了基准测试。Linux胜出。Linux 与 Windows 服务器的操作系统大战正式开始。Linux 最终获胜。如今,Linux 在Web服务器和云空间都占据着主导位置。 2000 年:IBM 向 Linux 投资 10 亿美元 这一年,IBM 打破了与 Linux 的企业市场僵局,并向 Linux 投资 10 亿美元,事实证明,这是 IBM 迄今为止最好的投资。 2001 年:Linux 2.4 版本发布 虽然有所延迟,但 Linux 2.4 版本的到来,让 Linux 在 Solaris 和其他高端服务器操作系统方面变得更具竞争力。 2003:SCO 与 Linux 开战 SCO 是由旧的 SCO Unix 和 Caldera Linux 业务组成,但它抛弃了 Linux 的历史,起诉 IBM 和其他公司,并试图证明 Linux 是 Unix 的副本。最终以失败告终,但它的 FUD 却在相当一段时间里阻扰了Linux 的商业接受度。 2004 年:新成员 Ubuntu 来了 建立在 Debian Linux之上的 Ubuntu 正式到来,其成了非常流行的 Linux 桌面操作系统,并且也是所有云 Linux 发行版中最重要的一个。 2004 年:Linux 统治超级计算机 全球一半以上最快的计算机都运行在 Linux 之上。2017年,会是所有超级计算机。 2005 年:Linux 成功商业化 Linus Torvalds 首次出现在了《商业周刊》的封面上,打破了人们对 Linux 成为主要商业参与者的任何怀疑。广告语是什么?Linux Inc. 今天,你很难找到任何不在 Linux 上运行的大型企业。 2007 年:Android 系统诞生 包括谷歌和众多硬件厂商在内的开放手机联盟宣布推出 Android 系统。它将成为最受欢迎的移动端用户操作系统,因为它在超过 10 亿部智能手机上运行。 2008 年:股票交易系统转向 Linux 纽约证券交易所改用 Linux 作为核心操作系统,这一举措很快就被世界上许多其他主要证券交易所效仿。Linux 并没有成为大生意,Linux 本身就是大生意。 2011 年:Watson 赢了 Jeopardy IBM 的 Watson 计算机运行在 Linux 上,赢得了 Jeopardy 智力挑战,为智能专家系统订立了新的标准。 2011年:Chromebook 兴起 谷歌发布了第一台 Chromebook:CR-48。它运行着基于 Gentoo-Linux 的 ChromeOS。到 2015,Chromebook 的销售额已经超过了运行着 Windows 的笔记本。 2012 年:云运行在 Linux 上 IT 基础设施从服务器和数据中心移动到了云端,而云运行在 Linux 上。即使是在微软 Azure 上,2016 年的时候超过 1/3 的虚拟机运行在 Linux 上。 2012 年:Red Hat 营收首次达到 10 亿美金 Red Hat 成为第一家年收入达 10 亿美金的开源公司。而在 2016,它成为首家达到 20 亿美金的 Linux 公司。 2014 年:微软 “示爱” Linux 微软新任 CEO Satya Nadella 宣称,“ 微软热爱 Linux ”。随后,微软通过在云端和内部部署支持 Linux 和开源软件来证明这一点,逐渐走上拥抱开源之路。 2018 年:微软开源其专利组合 这有可能是微软有史以来支持开源的最激进举动,微软将其整个专利组合向开放发明网络(OIN)开源专利联盟的成员开放。OIN 是为 Linux 的所有专利进行辩护的非营利组织。 2019 年:微软为 Win 10 用户推出 Linux 微软紧接着为 Windows 10 用户推出了自己的原生 Linux —— Windows Subsystem for Linux 2.0。有了它,人们可以将 Linux 与 Windows 同时运行。 2019 年:IBM 收购红帽 红帽被 IBM 以 340 亿美元收购,成为有史以来最大的软件收购案。从 IBM 的这一举动不难看出Linux 如今在科技界的主导地位。 2020 年:Linux 统治云天下 现在全球云市场每年超过 1000 亿美元。其中 90% 运行在 Linux 上。即使在 Microsoft Azure 上,也有一半以上的 VM 是 Linux。 Linux用10年名扬天下,20年统治服务器。Linux的源代码完全公开,让如今的编程人员都可以加入建设、从中受益。也许正如《时代》周刊所说的,Linus是天生的领导者和开创者,Linux也成为了带领一代人走进编程世界的明灯。 在Linux 30周年之际,一起祝它生日快乐吧!

    strongerHuang Linux Linux基金会

  • 人生就像画PCB一样

    来源 | 记得城 1、要先布局,后走线;走线再细致,布局失败,也是白搭。 人生也是一样,要有理想和长远的规划。 2、如果只图早期走得舒服,后面绕来绕去都是死路。 人生也是一样:能吃苦,吃苦半辈子,怕吃苦,吃苦一辈子。 3、建立一定的规则,避免情况复杂之后,全无章法的乱绕线。 人生也是一样:自由和约束是相辅相成的。 4、优质的走线区域留给重要的信号和器件。 人生也是一样:重要的时间留给重要的事情,你的精力分配决定你的层次。 5、敏感信号,远离强干扰源。 人生也是一样:近朱者赤近墨者黑。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    strongerHuang PCB 干扰源

  • 嵌入式产品研发的具体流程

    来源 | 技术让梦想更伟大 嵌入式产品,与普通电子产品一样,开发过程都需要遵循一些基本的流程,都是一个从需求分析到总体设计,详细设计到最后产品完成的过程。 但是,与普通电子产品相比,嵌入式产品的开发流程又有其特殊之处。它包含嵌入式软件和嵌入式硬件两大部分,针对嵌入式硬件和软件的开发,在普通的电子产品开发过程中,是不需要涉及的。 嵌入式产品的研发流程具体如下图: 下面,针对嵌入式产品的开发过程中的各个阶段,我们进行详细探讨。 阶段1:产品需求 在这一个阶段,我们需要弄清楚的是产品的需求从何而来,一个成功的产品,我们需要满足哪些需求。只有需求明确了,我们的产品开发目标才能明确。在产品需求分析阶段,我们可以通过以下这些途径获取产品需求: 1)市场分析与调研,主要是看市场有什么需求,还有就是前沿的技术是什么(站在做一款产品的角度); 2)客户调研和用户定位,从市场广大客户那获取最准确的产品需求(要注意分析市场,产品生命周期,升级是否方便); 3)利润导向(成本预算); 4)如果是外包项目,则需要我们的客户提供产品的需求(直接从客户那获取,让客户签协议); 当一个项目做完的时候,如果客户突然又增加需求,增加功能,将导致你的项目周期严重拖延,成本剧烈上升,并且测试好的产品可能要全部重新测试,原本的设计可能将不会满足当前的要求,所以做项目之前,最好要跟客户把需求确定下来,并且签定一份协议,否则,你辛苦多少个日日夜夜,得到的将是一个无法收拾的烂摊子! 阶段2:产品规格说明 在前一个阶段,我们搜集了产品的所有需求。那么在产品规格说明阶段,我们的任务是将所有的需求,细化成产品的具体的规格,就比如一个简单的USB转串口线,我们需要确定产品的规格,包括: 产品的外观; 产品支持的操作系统; 产品的接口形式和支持的规范; 等等诸如此类,切记,在形成了产品的规格说明后,在后续的开发过程中,我们必须严格的遵守,没有200%的理由,不能随意更改产品的需求。否则,产品的开发过程必将是一个反复无期的过程。 《产品规格说明》主要从以下方面进行考虑: 考虑该产品需要哪些硬件接口; 产品用在哪些环境下,要做多大,耗电量如何。如果是消费类产品,还跟设计美观,产品是否便于携带,以确定板子大小的需求,是否防水; 产品成本要求; 产品性能参数的说明(例如交换机,如果是百兆的速率,用于家庭和一般公司;如果是用于整个省的交换,那设计的速率肯定数十万兆以上了)所以说,产品性能参数的不同,就会影响到我们设计考虑的不同,那么产品的规格自然就不同了; 需要适应和符合的国家标准,国际标准,或行业标准; 阶段3:产品总体设计方案 在完成了产品规格说明以后,我们需要针对这一产品,了解当前有哪些可行的方案,通过几个方案进行对比,包括从成本、性能、开发周期、开发难度等多方面进行考虑,最终选择一个最适合自己的产品总体设计方案。 在这一阶段,我们除了确定具体实现的方案外,我们还需要综合考虑,产品开发周期,多少人月的工作量,需要哪些资源或者外部协助,以及开发过程中可能遇到的风险及应对措施,形成整个项目的项目计划,指导我们的整个开发过程。 阶段4:产品概要设计 产品概要设计主要是在总体设计方案的基础上进一步的细化,具体从硬件和软件两方面入手: 硬件模块概要设计 硬件模块概要设计,主要从硬件的角度出发,确认整个系统的架构,并按功能来划分各个模块,确定各个模块的的大概实现。首先要依据我们到底要哪些外围功能以及产品要完成的工作,来进行CPU选型(注意:CPU一旦确定,那么你的周围硬件电路,就要参考该CPU厂家提供的方案电路来设计)。然后再根据产品的功能需求选芯片,比如是外接AD还是用片内AD,采用什么样的通讯方式,有什么外部接口,还有最重要的是要考虑电磁兼容。 一般一款CPU 的生存周期是5-8年,你考虑选型的时候要注意,不要选用快停产的CPU,以免出现这样的结局:产品辛辛苦苦开发了1到2 年,刚开发出来,还没赚钱,CPU又停产了,又得要重新开发。很多公司就死在这个上面。 软件模块概要设计 软件模块概要设计阶段,主要是依据系统的要求,将整个系统按功能进行模块划分,定义好各个功能模块之间的接口,以及模块内主要的数据结构等。 阶段5:产品详细设计 硬件模块详细设计 主要是具体的电路图和一些具体要求,包括 PCB和外壳相互设计,尺寸这些参数。接下来,我们就需要依据硬件模块详细设计文档的指导,完成整个硬件的设计。包括原理图、PCB的绘制。 软件模块详细设计 功能函数接口定义,该函数功能接口完成功能,数据结构,全局变量,完成任务时各个功能函数接口调用流程。在完成了软件模块详细设计以后,就进入具体的编码阶段,在软件模块详细设计的指导下 ,完成整个系统的软件编码。 一定要注意需要先完成模块详细设计文档以后,软件才进入实际的编码阶段,硬件进入具体的原理图、PCB实现阶段,这样才能尽量在设计之初就考虑周全,避免在设计过程中反复修改。提高开发效率,不要为了图一时之快,没有完成详细设计,就开始实际的设计步骤。 阶段6&7:产品调试与验证 该阶段主要是调整硬件或代码,修正其中存在的问题和BUG,使之能正常运行,并尽量使产品的功能达到产品需求规格说明要求。 硬件部分: 目测加工会得PCB板是否存在短路,器件是否焊错,或漏焊接; 测试各电源对地电阻是否正常; 上电,测试电源是否正常; 分模块调试硬件模块,可借助示波器、逻辑分析仪等根据。 软件部分: 验证软件单个功能是否实现,验证软件整个产品功能是否实现。 阶段8:测试 功能测试(测试不通过,可能是有BUG); 压力测试(测试不通过,可能是有BUG或哪里参数设计不合理); 性能测试(产品性能参数要提炼出来,供将来客户参考,这个就是你的产品特征的一部分); 其他专业测试:包括工业级的测试,例如含抗干扰测试,产品寿命测试,防潮湿测试,高温和低温测试(有的产品有很高的温度或很低的温度工作不正常,甚至停止工作)。 有的设备电子元器件在特殊温度下,参数就会异常,导致整个产品出现故障或失灵现象的出现;有的设备,零下几十度的情况下,根本就启动不了,开不了机;有的设备在高温下,电容或电阻值就会产生物理的变化,这些都会影响到产品的质量。这里要引出一个话题,工业级产品与消费类产品有什么区别呢?工业级的产品就要避免这些异常和特殊问题,有的产品是在很深的海里工作,或者在严寒的山洞工作,或者火热沙漠工作,或者颠簸的设备上,比如汽车;或者是需要防止雷击;所以这就是工业级产品跟消费类产品的区别,消费类的产品就不需要做这么多的测试。 阶段9:产品 通过上一阶段完整测试验证,在此阶段,即得到我们开发成功的产品。在此阶段,可以比较实际的产品和最初的形成的产品规格说明,看经过一个完整的开发过程,是否产品完全符合最初的产品规格说明,又或者,中途发现产品规格说明存在问题,对它进行了多少修改呢?

    strongerHuang 嵌入式 嵌入式产品 产品研发

  • 科普 | 什么是贴片电阻?

    来源 | DF创客社区 电阻在我们的工作中比较常见,别小看这不起眼的电阻,里面有很多学问。 贴片电阻(SMD Resistor),又名片式固定电阻器,是一种设计为贴片安装的电阻器。 这些SMD电阻器通常比传统的电阻器小得多,因此在电路板上占用的空间也小得多。 贴片电阻中的SMD部分是指表面贴装器件,可以使用 “表面贴装技术”(SMT)直接安装到PCB电路板上。 表面贴装技术的发明,既缩小了元器件的尺寸,又大大缩短了制造电路的时间。 SMD 电阻器通常只在专业制造的 PCB 中使用。 对于大多数自制电路,用到是比较经典的 “通孔 “技术电阻。 使用通孔电阻的原因是,通孔电阻的安装更加方便,不需要像贴片电阻那样需要专门的设备。 贴片电阻计算器 如果你想快速找出你的SMD电阻值,可以利用贴片电阻计算器。 贴片电阻代码 当看到一个SMD电阻时,你会注意到的第一件事是,它们没有像 “通孔 “电阻器那样利用色带系统。 原因是在较小的SMD电阻封装上没有足够的空间来印刷色带代码。 为了应对这种情况,提出了三种新的代码系统,两种是根据IEC 60062:2016标准定义的,一种是四位数系统,一种是三位数系统。 第三种是早在2011年就停止运营的电子工业联盟指定的名为 “EIA-96 “的编号系统。 下面将一步一步地介绍如何利用这些系统。 三位数SMD电阻码系统 在这个系统中,前两个数字定义了电阻的值。在这个数字系统中,第三位也是最后一位数字代表大于10欧姆的电阻值的乘数。 当一个SMD电阻低于10欧姆时,”R “字母用来定义小数点的位置。例如,一个8R3的贴片电阻定义了 “8.3 “欧姆的电阻值。 与色码系统的乘数不同,这个数字系统的乘数表示该数字的十次方。例如,一个273的电阻,表示的是数学27×10^3。 如何计算出三位数的SMD代码的例子 在这个例子中,假设有四个带有三位数代码的贴片电阻。一个901,一个3R4,一个313,一个R34。 例1 – 901 对于第一个贴片电阻901,取前两位数字作为电阻的基值。取前两位数字使我们的电阻器基值为 “90”。 然后,将这个基数乘以10到1的幂(代码中的最后一位数字)。 R = 31 x 10 ^ 3 R = 31,000 可以计算出该电阻的实际电阻是31000欧姆或31K欧姆。 例4–R34 现在是第四个也是最后一个电阻(R34)。 这个SMD电阻与我们第二个例子类似,但把小数点的位置移到了前面。 R = 95R21 R = 95.21 由此,可以得出,电阻值是95.21欧姆。 总结 同三位数SMD电阻码系统 EIA-96系统 第三种也是最后一种用于计算SMD电阻器的电阻值的系统是EIA-96系统。它采用三位数系统,前两位数字代表E96系列电阻器的一个值。 我们有一个表格,显示了E96系列96个可能的代码中每个代码的对应值。可以在下面找到这个表格。 在EIA-96系统中,第三个数字总是一个字母,代表乘数。您可以利用我们下面的表格来匹配字母和乘数值。 EIA-96乘数表 我们可以利用此表快速计算出使用EIA-96系统的SMD电阻的倍率。 我们需要做的就是查找最后的字母,然后将数值乘以与字母匹配的倍数。 Code Multiplier Z 0.001 Y / R 0.01 X / S 0.1 A 1 B / H 10 C 100 D 1,000 E 10,000 F 100,000 EIA-96代码值表 由于EA-96的编号系统依赖于E96系列的数值,我们必须利用这样的表格来找到实际的基本电阻值。 使用下表查找我们的EIA-96 SMD电阻器的前两位数字,来找到它的基本电阻值。 EIA-96贴片电阻的计算实例 计算出EIA-96贴片电阻的电阻值,比三四位数的电阻要稍微复杂一些。 为了帮助大家了解如何计算基于EIA-96的SMD电阻器的电阻值,我们将展示三个不同的电阻器示例。 这些EIA-96电阻值的例子是33A、11Y、67C。 例1 – 33A 要研究的第一个电阻实例是33A EIA-96贴片电阻。 首先,应该做的是计算出基础电阻值。要做到这一点,必须取电阻的前两位数。 在这个例子中,数值是33.在上面的表格中查找这个代码,可以计算出它的阻值是215。 接下来,需要计算出乘数。同样,在上面的乘法表中查找A的值来完成。利用该表,可以计算出乘数是1。 由于乘法器为1,例子33A EIA-96贴片电阻的阻值只是215。 例2–11Y 第二个例子的电阻稍微复杂一些,因为使用的是一个乘法器,并不是将数值乘以1那么简单。 这第二个例子的贴片电阻值是11Y。 首先,需要计算出前两位数字的数值。 在表格中查找,可以看到,11对应的基础电阻是127。 现在知道贴片电阻的基础电阻是127,可以继续计算出倍数。 查阅乘法表,可以看到,字母Y表示需要将这个数字乘以0.01。这个乘数值相当于数字除以100。 现在知道了乘数,可以继续计算出11Y电阻的实际电阻,将127乘以0.01。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    strongerHuang 电阻 贴片电阻

  • 硬核开源项目『电压电流校准仪』

    编排 | strongerHuang 微信公众号 | 嵌入式专栏 这次分享的作品可以自己DIY,对喜欢捣鼓这类DIY的读者来说非常具有实用价值。 嵌入式专栏 1 主要参数 输出电压:±10V 单步调节:20uV 电流:0至40mA 单步调节:100nA 嵌入式专栏 2 详细介绍 1、基准电压的选择 这是该电路中最关键的地方,如果我们需要±10uV的10.00000V基准电压,在现实世界中,它很难达到。电压基准本身就是一门科学,网络上有数十篇文章和专家讨论此主题,比如噪声,线性度,在短期和长期内的温飘等。 在测试了三个电压基准(LTC6655,ADR445,MAX6350ESA)之后,选择了Maxim的MAX6350ESA,发现它具有5V输出,随时间推移会更加稳定。AD8676(双路低噪声,低失调漂移电压运算放大器)内部都装有运算放大器,可产生+ 10.48V和-10.48V。AD8676周围的电阻R16,R17,R18,R19,R20是低温漂移电阻(优于2ppm /°C)。 2、DAC选择 所选的DAC是AD5791,具有20位和1ppm的线性度。此线性功能简化了校准:仅需要调整0V点和10V点。具有15ppm线性度的20位DAC1220需要校正表,因此没有选择它。AD5791周围的原理图使用了ADI评估板上的元件。DAC接收+ 10.48V和-10.48V的基准电压,产生大约20uV的阶跃。 3、精密电流源 精密电流源的四个主要组件是AD8276仪表放大器,PZT1222和AD8677。 4、老化测试 作为任何基准电压源,必须对其进行老化以提高长期稳定性。选择在室温下放置1000个小时。经过41天(1000小时)后,参考电压稳定在4.99994V,两个参考电压10.50050和-10.49867稳定在+/- 10uV。

    strongerHuang 基准电压 校准仪 DIY

  • 实践 | 基于Linux的AP3216三合一整合型光感测器实验分享

    嵌入式大杂烩 Linux 光感测器 AP3216

  • 初学者宝典:C语言入门基础知识大全

    初学者宝典:C语言入门基础知识大全

    01 C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使小伙伴对c语言有个初步认识。 例1:计算两个整数之和的c程序: #include main() { int a,b,sum; a=20; /*定义变量a,b,sum为整型变量*/ b=15; /*把整数20赋值给整型变量a*/ sum=a+b; /*把整数15赋值给整型变量b*/ printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); /*把两个数之和赋值给整型变量sum*/ } 重点说明 — 1、任何一个c语言程序都必须包括以下格式:main() { }——这是c语言的基本结构,任何一个程序都必须包含这个结构。括号内可以不写任何内容,那么该程序将不执行任何结果。 2、main()——在c语言中称之为“主函数”,一个c程序有且仅有一个main函数,任何一个c程序总是从main函数开始执行,main函数后面的一对圆括号不能省略。 3、被大括号{ }括起来的内容称为main函数的函数体,这部分内容就是计算机要执行的内容。 4、在{ }里面每一句话后面都有一个分号(;),在c语言中,我们把以一个分号结尾的一句话叫做一个c语言的语句,分号是语句结束的标志。 5、printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); ——通过执行这条c语言系统提供给我们直接使用的屏幕输出函数,用户即可看到运行结果,本程序运行后,将在显示器上显示如下结果:a=20,b=15,sum=35。 6、#include——注意:以#号开头。不以分号结尾 这一行没有分号,所以不是语句,在c语言中称之为命令行,或者叫做“预编译处理命令”。 7、程序中以 /*开头并且以*/结尾的部分表示程序的注释部分,注释可以添加在程序的任何位置,为了提高程序的可读性而添加,但计算机在执行主函数内容时完全忽略注释部分,换而言之就是计算机当做注释部分不存在于主函数中。 02 C程序的生成过程 C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件。 源程序的扩展名为 .c ,目标程序的扩展名为 .obj , 可执行程序的扩展名为 .exe 。 03 标识符 在编写程序时,必须为函数、变量等命名,这个名字称为标识符。C语言中标识符的命名规则如下: 标识符只能由字母、数字、下划线组成; 标识符的第一个字母必须是字母和下划线; 标识符区分大小写字母,如If和if是两个完全不同的标识符。 合法标识符如下:A6, b_3 , _mn 非法的标识符如下:ab#12 , 8m , tr3:4 , yes no 标识符不能与程序中具有特殊意义的关键字相同,不能与用户编制的函数名、C语言库函数相同,在程序中各种标识符尽量不要重复,以便区分。选择变量名和其他标识符时,应注意做到 “见名知义”。 标识符分为如下三类 — 1、关键字 关键字是具有特定含义的,专门用来说明c语言特定成分的一类标识符,不能用作用户的标识符。 2、预定义标识符 预定义标识符在c语言中也有特定的含义,但可以用作用户标识符,预定义标识符分为两类: 1)、库函数名字,比如printf,scanf,sin,isdigit等 2)、编译处理命令名,比如define,include 3、用户标识符 用户根据需要自己定义的标识符称为用户标识符。无论如何自定义标识符,都必须符合标识符的三条命名规则。 04 常量 在程序运行中,其值不能被改变的量称为常量。常量有5种类型:整型常量、实型常量、字符常量、字符串常量和符号常量。 4.1 数值转换 — 数值的四种表现形式: ①:二进制:所有数字由0,1构成,逢二进一,二进制数中不会出现2。 ②:八进制:以数字0(注意不是以字母O,o)开头,所有数字由0~7构成,逢八进一,八进制数中不会出现8。例:0112,0123,077等 ③:十进制:所有数字由0~9构成,逢十进一,十进制数中不会出现10。例:0,12,-15等 ④:十六进制:以0x或者0X(数字0加字母x)开头,所有数字由0~9,A~F(或者a~f)构成,逢十六进一(其中A、B、C、D、E、F分别代表10、11、12、13、14、15) 例:0x4A、0X14c7等 在计算机内部,数字均以二进制形式表示和存放,用户输入的普通十进制数字都要被计算机转换成二进制才能在计算机内部存储,同样计算机的运算结果也为二进制,一般要将其转换成十进制数再输出给用户阅读,这种转换通常由计算机自动实现。 1)将十进制转换二进制、八进制和十六进制 除法:将十进制数除以2,记录余数,得到的商继续除以2,直到商为0,然后将各次相处所得的余数从后往前逆序排列,所得余数数字序列就是该十进制数对应的二进制数。八进制和十六进制转换方法同上。 例:十进制数13转换成二进制数的值为1101,转换八进制为015,转换成十六进制为D. 2)将二进制、八进制和十六进制转换成十进制 乘积求和:将二进制的每一位从低位到高位(右边为低位,左边为高位)分别乘以20,21,22。。。。,然后将这些值求和。 3)二进制与八进制、十六进制数之间的相互转换 ①:二进制转八进制:从右往左每三位一组转换成十进制数,将所得数据组合就是对应的八进制数(注意:高位不足三位补零)。例:(010 110 111)2=(267)8 ②:二进制转十六进制:从右往左每四位一组转换成十进制数,将所得数据组合就是对应的十六进制数(注意:高位不足四位补零)。例:(0101 1011)2=(5B)16 ③:八进制转化二进制:每一位数字转换为三位二进制数字 例:(13)8=(001 011)2= (注意:去掉前面的两个00,因为0在高位没有意义) ④:十六进制转化二进制:每一位数字转换为四位二进制数字 例:(E3)16=(1110 0011)2 4.2 数形常量 — 整型常量有3种形式:十进制整型常量、八进制整型常量和十六进制整型常量。 (注意:c语言中没有直接表示二进制的整型常量,在c语言源程序中不会出现二进制。) 书写方式如下: 十进制整型常量:123 , 0 ,-24 , 85L(长整型常量) 等 八进制整型常量:051 ,-026 ,0773 等 十六进制整型常量:0x55 , 0x1101 , 0x , 0x5AC0 , -0xFF。其中L为长整型。 4.3 实型常量 — 实型常量有两种表示形式:小数形式和指数形式。 小数形式:5.4 0.074 -23.0 指数形式:5.4e0 4.3e-3 -3.3e4 1)小数部分为0的实型常量,可以写为453.0 或453。 2)用小数表示时,小数点的两边必须有数,不能写成“ .453“和“453.“,而应该写成“0.453“和“453.0“。 3)用指数写法时,e前必须有数字,e后面的指数必须为整数(注意:整数阶码可以是正数,负数,也可以是八进制数、十六进制数,但必须为整数)。 4.4 字符常量 — 字符常量的标志是一对单引号‘ ’,c语言中的字符常量有两类: 1)由一对单引号括起来的一个字符,如‘a ’, ‘r’ ,‘#’。注意: ′a′ 和 ′A′ 是两个不同的字符常量。 2)由一对单引号括起来,以反斜杠\开头,后跟若干数字或者字母,比如‘\n’,其中“\“是转义的意思,后面跟不同的字符表示不同的意思,这类字符常量叫转义字符。 4.5 字符串常量 — C语言中,以双引号括起来的,由若干个字符组成的序列即为字符串常量。 例:“ni hao” “happy”等等。 4.6 符号常量 — 符号常量是由宏定义“#define“定义的常量,在C程序中可用标识符代表一个常量。 例:计算圆的面积的c程序。 #include #define PI 3. main() { float r,s; r=12.5; S=PI *r*r; printf(“s= %f ”,s); } 说明: #define 是宏定义,此程序中所有出现PI的地方都代表3.,同时PI称为符号常量。习惯上我们用大写字母来表示符号常量,小写字母表示变量,这样比较容易区别。 05 变量 变量就是其值可以改变的量。变量要有变量名,在内存中占据一定的存储单元,存储单元里存放的是该变量的值。不同类型的变量其存储单元的大小不同,变量在使用前必须定义。 5.1 整型变量 — 整型变量分为4种:基本型(int)、短整型(short int 或short)、长整型(long int 或 long)和无符号型(unsigned int ,unsigned short,unsigned long)。 不同的编译系统对上述四种整型数据所占用的位数和数值范围有不同的规定。 类型说明符 单词signed来说明“有符号”(即有正负数之分),不写signed也隐含说明为有符号,unsigned用来说明“无符号”(只表示正数)。 5.2 实型变量 — C语言中,实型变量分为单精度类型( float )和双精度类型( double )两种。 如:float a , b ; double m ; 在vc中,float 型数据在内存中占4个字节(32位),double型数据占8个字节。单精度实数提供7位有效数字,双精度实数提供15~16位有效数字。实型常量不分float型和double型,一个实型常量可以赋给一个float 型或double型变量,但变量根据其类型截取实型常量中相应的有效数字。 注意:实型变量只能存放实型值,不能用整型变量存放实型值,也不能用实型变量存放整型值。 5.3 字符变量 — 字符变量用来存放字符常量,定义形式: char 变量名; 其中关键字char定义字符型数据类型,占用一个字节的存储单元。 例:char cr1,cr2; cr1= ‘A’ , cr2=‘B’ ; 将一个字符赋给一个字符变量时,并不是将该字符本身存储到内存中,而是将该字符对应的ASCII码存储到内存单元中。 由于在内存中字符以ASCII码存放,它的存储形式和整数的存储形式类似,所以C语言中字符型数据与整型数据之间可以通用,一个字符能用字符的形式输出,也能用整数的形式输出,字符数据也能进行算术运算,此时相当于对它们的ASCII码进行运算。 06 类型的自动转换和强制转换 当同一表达式中各数据的类型不同时,编译程序会自动把它们转变成同一类型后再进行计算。转换优先级为:char < int < float < double 即左边级别“低“的类型向右边转换。 具体地说,若在表达式中优先级最高的数据是double型,则此表达式中的其他数据均被转换成double型,且计算结果也是double型;若在表达式中优先级最高的数据是float型,则此表达式中的其他数据均被转换成float型,且计算结果也是float型。 在做赋值运算时,若赋值号左右两边的类型不同,则赋值号右边的类型向左边的类型转换;当右边的类型高于左边的类型时,则在转换时对右边的数据进行截取。 除自动转换外,还有强制转换,表示形式是:( 类型 )(表达式); 例:(int)(a+b) 讨论:当a值赋值为3.4,b值赋值为2.7,(int)(a+b)和(int)a+b的值分别为多少? 07 C运算符认识 C语言的运算符范围很广,可分为以下几类: 1、算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(%)、自增(++)、自减(--)共七种。 2、赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。<="" span=""> 3、逗号运算符:用于把若干表达式组合成一个表达式(,)。 4、关系运算符:用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(="">=)、小于等于(<=)和不等于(!=)六种。<="" span=""> 5、逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 6、条件运算符:这是一个三目运算符,用于条件求值(?:)。 7、位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。 8、指针运算符:用于取内容(*)和取地址(&)二种运算。 9、求字节数运算符:用于计算数据类型所占的字节数(sizeof)。 10、特殊运算符:有括号(),下标[],成员(→,.)等几种。 另外,按参与运算的对象个数,C语言运算符可分为:单目运算符 (如 !)、双目运算符 (如+,- )和三目运算符 (如 ? :)。 08 算术运算符和算术表达式 8.1 基本的算数运算符 — (1)+(加法运算符或正值运算符,如2+5)。 (2)-(减法运算符或负值运算符,如4-2)。 (3)*(乘法运算符,如3*8)。 (4)/(除法运算符,如11/5)。 /的运算分为两种情况: a、“除”的左右两边都为整数时,所得结果必然是整数(注意:仅取整数部分,不是四舍五入)比如:5/2的值为2,不是2.5,1/2的值为0。 b、“除”的左右两边至少有一个是实型数据(即小数)时,所得结果为实型数据。比如:5/2.0的值为2.5,7.0/2.0的值为3.5. (5)%(模运算符或称求余运算符,%两侧均应为整型数据,如9%7的值为2)。 需要说明的是:当运算对象为负数时,所得结果随编译器不同而不同,在vc中,结果的符号与被除数相同,比如:13%-2值为1,而-15%2值为-1。 8.2 算术表达式和运算符的优先级与结合性 — 算术表达式是用算术运算符和括号将运算量(也称操作数)连接起来的、符合C语言语法规则的表达式。运算对象包括函数、常量和变量等。 在计算机语言中,算术表达式的求值规律与数学中的四则运算的规律类似,其运算规则和要求如下。 (1)在算术表达式中,可使用多层圆括号,但括号必须配对。运算时从内层圆括号开始,由内向外依次计算各表达式的值。 (2)在算术表达式中,对于不同优先级的运算符,可按运算符的优先级由高到低进行运算,若表达式中运算符的优先级相同,则按运算符的结合方向进行运算。 (3)如果一个运算符两侧的操作数类型不同,则先利用自动转换或强制类型转换,使两者具有相同类型,然后进行运算。 8.3 自增自减运算符 — 作用:使变量的值增1或减1。 如:++i,--i (在使用i之前,先使i的值加1、减1)。i++,i-- (在使用i之后,使i的值加1、减1)。 (1)只有变量才能用自增运算符 (++)和自减运算符(--),而常量或表达式不能用,如10++或(x+y)++都是不合法的。 (2)++和--的结合方向是“自右向左“,如 -i++ ,i的左边是负号运算符,右边是自增运算符,负号运算和自增运算都是 “自右向左“结合的,相当于 -(i++)。 在循环语句中常用到自增(减)运算符,在指针中也常用到该运算符,考生要弄清楚“i++”和“++i”及“i--”和“--i”的区别,特别弄清楚表达式的值和变量的值。 09 赋值运算符与赋值表达式 9.1 赋值运算符与赋值表达式 — 赋值符号 “=“就是赋值运算符,作用是将一个数据赋给一个变量或将一个变量的值赋给另一个变量,由赋值运算符组成的表达式称为赋值表达式。一般形式为:变量名 = 表达式。 在程序中可以多次给一个变量赋值,每赋一次值,与它相应的存储单元中的数据就被更新一次,内存中当前的数据就是最后一次所赋值的那个数据。 例:a=12; 此表达式读作“将10的值赋值给变量a”。 a、如果赋值号两边的运算对象类型不一致,系统会自动进行类型转换,转换的规则:将赋值号右边表达式的值的类型转换成赋值号左边变量的类型, 例:int y=3.5;在变量y中最终存储的是整数3。 b、 可以将复制表达式的值再赋值给变量,形成连续赋值。 例如:x=y=25 是一个连续赋值表达式,x=y=25 等价于x=(y=25),所以表达式x=y=25 最终的值为25 。 9.2 复合的赋值运算符 — 在赋值运算符之前加上其他运算符可以构成复合赋值运算符。其中与算术运算有关的复合运算符是:+=,-=,*=,/=,%= 。 两个符号之间不可以有空格,复合赋值运算符的优先级与赋值运算符的相同。表达式n+=1等价于n=n+1,作用是取变量n中的值增1再赋给变量n,其他复合的赋值运算符的运算规则依次类推。 如求表达a+=a-=a*a 的值,其中a的初值为12 。 步骤: 先进行“a-=a*a“运算,相当于a=a-a*a=12-144=-132 。(2)再进行“a+=-132“运算,相当于 a=a+(-132)==-264 。 9.3 逗号运算符和逗号表达式 — 在c语言中,逗号除了作为分隔符,还可以用作一种运算符----逗号运算符,用逗号运算符将几个表达式连接起来,例如a=b+c,a=b*c等称为逗号表达式。 一般形式为: 表达式1 ,表达式2 ,表达式3 , …,表达式n 例:x=2,y=3,z=4 逗号表达式具有从左至右的结合性,即先求解表达式1,然后依次求解表达式2,直到表达式n的值。表达式n的值就是整个逗号表达式的值。上述的逗号表达式的值就是表达式z=4的值4.需要注意的是,逗号运算符是所有运算符中级别最低的。 例:有如下程序段: main() { int a=2,b=4,c=6,x,y; y=(x=a+b),(b+c); printf("y=%d,x=%d",y,x); } 程序显示结果为:y=6,x=6 讨论:将y=(x=a+b),(b+c);改为y=((x=a+b),b+c) 的程序结果? 10 关系运算符和关系表达式 10.1 C语言中的逻辑值 — C语言中的逻辑值只有两个:真(true)和假(flase)。用非零代表真,用零代表假。因此,对于任意一个表达式,如果它的值为零,就代表一个假值,如果它的值为非零,就代表一个真值。只要值不是零,不管是正数,负数,整数,实数,都代表一个真值。例如-5的逻辑值为真。 10.2 逗号运算符和逗号表达式 — “&&”和“||”的运算对象有两个,故它们都是双目运算符,而!的运算对象只有一个,因此它是单目运算符。逻辑运算举例如下: (1)a&&b: 当&&两边都为“真”时,表达式a&&b的值才是真。 值得注意的是:在数学中,关系式0 (2)a||b: 当||两边有一个为“真”时,表达式a||b的值就是真。 (3)!a: 表示取反,如果a为真,则!A为假,反之亦然。例如!-5的值就为0。 在C语言中,由&&或||组成的逻辑表达式,在某些特定情况下会产生“短路“现象。 (1)x && y && z ,只有当x为真(非0)时,才需要判别y的值;只有x和y都为真时,才需要去判别z的值;只要x为假就不必判别y和z,整个表达式的值为0。口诀:“一假必假”。 例: (!5==1)&&(++i==0) (!5==1)表达式的值为0,所以计算机运行中就跳过(++i==0)此表达式,(!5==1)&&(++i==0)表达式的值为0。 (2)x||y||z ,只要x的值为真(非零),就不必判别y和z的值 ,整个表达式的值为1,只有x的值为假,才需要判别y的值,只有x和y的值同时为假才需要判别z的值,口诀:“一真必真”。 11 位运算 11.1 位运算符 — 在计算机中,数据都是以二进制数形式存放的,位运算就是指对存储单元中二进制位的运算。C语言提供6种位运算符。 11.2 位运算 — 位运算符 & |~<< >> ∧ 按优先级从高到低排列的顺序是: 位运算符中求反运算“~“优先级最高,而左移和右移相同,居于第二,接下来的顺序是按位与 “&“、按位异或 “∧“和按位或 “|“。顺序为~ << >> & ∧ | 。 例1:左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。="" <="" span=""> 例如:a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00(十进制48)。 例2:右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。 例如:设 a=15, a>>2 表示把右移为十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。 例3:设二进制数a是00 ,若通过异或运算a∧b 使a的高4位取反,低4位不变,则二进制数b是。 解析:异或运算常用来使特定位翻转,只要使需翻转的位与1进行异或操作就可以了,因为原数中值为1的位与1进行异或运算得0 ,原数中值为0的位与1进行异或运算结果得1。而与0进行异或的位将保持原值。异或运算还可用来交换两个值,不用临时变量。 C语言在全世界普及推广,无论在中国还是世界各国,C语言都是高等学校一门基本的计算机课程,C语言也在计算机领域发挥重要的作用。

    嵌入式ARM C语言 标识符 关键字

  • 嵌入式怎么入行:工程师的自我修养

    前言 这篇文章总结了我做嵌入式工程师这几年的一些经验,分享给刚入行或准备入行的新手们! 首先我想说的是不问出身,做嵌入式的同学,基本都是计算机科学、电子信息、通信类专业。刚毕业的本科生,就学到的知识,名校与非名校在起点上相差不多,大家在校园里学的都是那几科,看的书也都差不多,如果不是很小就接触计算机写代码,那毕业时的代码量也都差不多。 而对于工程作业来说,对学术能力的要求没那么高,只要有一定的学习能力,技术是很容易掌握的,大可不必对自己的学历不够自信。 对于嵌入式软件工程师,一般是分成两类,嵌入式Linux、嵌入式单片机,我这里只讲单片机的部分,Linux的部分有机会再聊。 一. 认知的四个阶段 1. 不知不知 在刚工作的第一年,基本是一个学习的过程,很难有有效的产出,这个阶段是完成从一个生涩毕业生到企业员工的身份转换,如果校园里接触过比较多的代码,看过类似Linux源码那种级别的代码,对你快速学习还是很有用的。 这时你写的代码,也能正确的点亮一个led灯,能实现老板的需求,可日后来看,肯定是惨不忍睹的,说难听点,就是“像屎一样”。但这时你还不知道这些,你甚至“不知道自己不知道”,你觉得自己表现的还不错,可能偶尔会冒出“这个代码这样写会不会更好”之类的念头。 每个人都可能冒出这样的念头,不同的是,有的人念头一过就去干别的了,刷刷剧玩玩手机也是一天;有些人,没有让念头溜走,顺着念头走了下去,去找“这个代码换一种写法会不会更好”的答案。 2. 知道不知 找答案无非3个方式:问其他人(包括搜索引擎)、看书、看源码。 你当然可以问其他人,但你不能总问其他人,而且其他人不一定什么都能解决。 你开始看源码,你会发现,源码看不懂,随便打开个开源项目,一行都看不懂。 你一定会吓到,你想找本书来压压惊,随便翻一翻,竟然发现自己“这个也不知道”,“那个也不知道”。 这也是好事,至少你已经“知道自己不知道”了。 问人是最快最具体的;看源码不能一蹴而就,大师的代码我等凡人刚开始都是看不懂的,没关系慢慢来,多看几遍;看书是最系统的,如果你能带着问题去看书中的具体章节当然就更好啦。 现在,你有了学习的动力,你要做的,是开始填补知识空白,还等什么,快开始吧! 3. 知道己知 上面列举的三种方式,最系统也最有效的,当属看书了,我这里推荐几本书。 对于语言层面,当然最多用的是C语言,学校学的教材比如谭本《C程序设计》只介绍语法不说,还有很多误导,坚决不要看了。我推荐你读K&R版本的《C程序设计语言》,Bryant,R.E.的《深入理解计算机系统》,接着就是Andrew Koenig的《C陷阱与缺陷》、KennethA.Reek的《c和指针》、LinDen,P.V.D的《C专家编程》,对于C语言基础,这些已经够了。 看完这些,你最起码了解了计算机程序到底是怎么一步步生成的,对语言、对系统又有了进一步更详细的认识。 与此同时,可以看些实用性强的书,W. Richard Stevens的《UNIX环境高级编程》、《UNIX网络编程》,把语言上的所学的进行实践,了解编译器编译流程、Linux的基础命令,固件的交叉编译。注意,这2本书都很厚,不用强迫自己全看。 下一步,开始看你的专业相关,你所在公司总有一个具体的方向,音视频、图像处理、家电等等,我从事物联网安全行业,当然最关注的是嵌入式软硬件、网络、安全技术,那就要针对这3个方面找书了。 3.1 软硬件 做软件工程师也应该知道些硬件知识,模电、数电的基础还是要了解的。 硬件架构,用arm比较多,推荐看Joseph Yiu的《ARM Cortex-M3与Cortex-M4权威指南》,然后就是各个芯片的芯片手册了,我还记得第一次看芯片手册的感受,“天书!” 写的都是啥,全然看不懂——后来我发现所有的芯片手册竟然都是一个套路,只要看完一个手册,再看其他的就很快了。 我还推荐你学习些FPGA的知识,用Verilog尝试做些简单的硬件设计,会让你更深入的了解硬件的工作原理。 操作系统是一切软件的地基,对于嵌入式操作系统的学习,推荐左忠凯的《FreeRTOS源码详解与应用开发》和FreeRTOS、RT-Thread的源码。 3.2 网络 先扫一遍《TCP/IP详解卷1》,这些本科课程学过就扫一遍,没学过就仔细看看了。 接着可以看实现,我用lwip比较多,推荐看朱升林的《嵌入式网络那些事》,配合lwip源码一起看。这本书看完,可以看看《TCP/IP详解卷2》和《TCP/IP详解卷3》,这2本也都是神级科学家W. Richard Stevens的著作,超级厚,还是那样不要强迫自己全读完,有选择的看。 3.3 安全技术(换成你自己的领域) 我这里只推荐一本密码学入门,结城浩的《图解密码技术》,写的通俗易懂,又不是特别深入,适合初学者,其他就要去找更加具体的资料了,读者们从事各个领域,自然知道要找什么书来看。 对于这些书,我希望你能带着问题看,解决问题就合上,只看你感兴趣的部分,其他的章节偶尔翻翻混个眼熟就好; 很多书都是翻译过来的,有些表述并不准确,读起来不是那么容易,我也没有什么好办法,只能劝你静下心来慢慢看,反复看,多看几遍; 希望你能边看边实践,确认书中说的是对的,实践了才能内化成自己的。 为什么要“混个眼熟”?就是你要知道这本书还讲了什么,以后有类似的问题,就可以来有目的的翻阅了。 我认为,真正学的学会一样东西,有以下3个阶段,这3个阶段可能不是线性的,尤其第三个,可能是你很久以后恍然大悟才能达到。 3.4 真正知道的三个阶段 3.4.1 会用 比如那些网络接口函数,硬件驱动接口,你可以利用它们写出没有bug的代码,完成了项目任务,那就是会用了。 3.4.2 了解怎么实现 会用之后就是学习它背后是怎么实现的,这时你就要去查深入些的资料,看深入些的代码了,幸运的是,我们目前所能接触到的问题,大部分在互联网上都有答案,很容易就能找到,那些热爱求知的前辈们早已经为我们准备好了答案。 了解了实现,你就可以对之前写的代码进行优化了,你之前只能保证写出的代码没有bug,现在你知道它为什么没有bug了,遇到难搞的问题,你的思路会很开阔,马上找到问题点。 3.4.3 明白为什么这么实现 第三个阶段,就是你不单单要知道它怎么实现,你还要探求它为什么这么实现。 比如TCP/IP,为什么要分那么多层,还有没有其他的网络协议栈,几种协议栈不同之处在哪里,为什么其他协议栈就没这么普及呢? 比如各类嵌入式操作系统,为什么都宣称自己又快又小,他们的性能怎么评估,技术上实现的不同点在哪里,各个系统的作者为什么要那么实现? 当你能「评估」一类方案/技术的几种实现形式,说出各个形式的好坏差别,你就能做到融会贯通,在项目层面,你就知道如何取舍选择了。 以上是认知的第三个阶段,即不断的学习,真正的学会。这个阶段应当是贯穿整个职业生涯的始末,别人问一个问题,你第一时间的反应是”知道自己知道“,然后脑子里搜索答案。 4. 不知已知 买过很多书,看过很多书,你就形成了买书的习惯,看到一本新书,发现一本你没看过的书,你就想买来看。 买来新书,抱着学习的激情翻看目录,扫一遍,找到你感兴趣的章节开始读,边读边发现,咦,这说的不就是xxx原理吗,在xxx那本书中介绍过啊,这作者怎么换了个说法又讲一遍,这书真是买的多余。这时你其实不用怪作者,而是应该恭喜自己,恭喜你来到认知的第四个境界“不知道自己知道”。 你已经不需要再过多的看基础技术图书了,遇到一个问题,你自然有自己的解法,你不知不觉将之前从很多书中吸收的知识融汇贯通,任意组合,付与实践,而这些都是自然而然的事,你在解决问题时,不知道自己已经在用那些曾经学习到的知识了! 对于嵌入式领域的认知,我引入一个简单的问题,这是我认为的嵌入式技术里的终极问题,这一个问题能知道你处于上面哪个状态,这一个问题也足够让你“学海无涯苦作舟”了,如果能把这个问题详详细细说的明明白白,你的嵌入式能力已经炉火纯青,至少不会遇到技术层面无法解决的问题了。 “有2个嵌入式设备A、B,通过网络连通可交互数据,其中A有外接按键,B有小显示屏,2个设备实现这样的程序:A键盘上按下某个按键,B显示屏将按键值显示出来。 请问:从A按下按键那一刻起,到B显示屏看到按键值,”按键值“这个数据是怎么从A的按键传输到B的显示屏的? 二. 升级打怪 写了这么多,是不是学完这些就可以独步天下了? 当然不是!这只是万里长征的小小一步,这小小的一步在我看来,一般需要5-10年左右的时间,有些人只是有着一个念头但从没有抬起脚。 这一步什么时候迈都不晚,最难的是你有勇气抬起脚。 迈过来后什么什么样的世界呢?我引用吴军博士的五级工程师划分来说明你的职业规划。 如图,吴军博士在他的很多书里提到这个五级工程师的划分,我们刚刚说的,完成那些学习与解决问题后,基本可以说,你已经站在这个金字塔的最底层了。五级工程师,你好,你看这塔,一点也不高。 这个时候你该做的,不单单只是一心沉浸在技术的海洋知识的海洋里了,因为我们毕竟是工程师,而非科学家,要开始运用知识,解决实际问题,再解决更大的实际问题了。 解决更大的实际问题就要向着四级工程师迈进,这时你不单单要自己懂技术,还要想办法尽快把你的”鱼“和”渔“授给其他人。 你还要学习管理知识,掌握与上、下级沟通的技巧,如何推动自身和团队快速进步是你的挑战。 对于三级工程师,除了具备4级工程师的能力,还需要能够紧跟时代,预判市场,懂得营销,不单单做得出产品,还能卖得出产品。 二级工程师是指能做出先前没有的东西,世界会因为这多少有点不同,吴军博士举了这两人作为例子:北极光风投的创始人邓锋、Google云计算的发明人迪恩(Jeff Dean)。我见识有限,所知甚少,嵌入式领域我能想到的人包括大疆的汪滔,柔宇的刘自鸿,这里大胆激进的把他们放在第二级。 第一级是开创一个产业的人,包括爱迪生、福特、贝尔等人。 各位应该好奇我处于第几级呢,我给自己定在4.5级,目前可以独立完成老板交代的任务,也在努力学习提高自己团队的整体效率,产出更具创造性的成果。 三. 一点点建议 由于实际经验有限,我也在探索如何爬这个塔,不敢妄加定义,引人入歧途,下面只说一些个人看法,权当抛砖。 3.1 博览群书 计算机专业的同学不要只专研技术,也要看看经济、政治、生物、天文、地理、艺术、医学、历史等等,要知道,计算机这门学问,诞生不过几十年,放在人类历史长河中,比前面那些学科简直就是沧海一粟。 看杂书多的人理解力要比看的少的人强,看的多了,就会有一种「类比」的能力。 比如对于“面向对象”,如果在学习面向对象之前,你了解过亚里士多德的唯实论和他对「共相」的阐述,你就会理解的很快,根本不用老师教思想,只用学学语法就行了,而且你免不了会在心里嘀咕,面向对象的设计者是否正是受亚里士多德「共相」启发而设计出了这样的软件开发方法? 3.2 慢慢的爬,聪明的爬 爬金字塔呢,就是攒的过程,很多人浮躁,学知识只学一半;有些人自以为聪明,总想找捷径;有些人勤奋刻苦,但不得其法。 文章一开始我说过,工程作业不比科学家,是不是名校,成绩好不好都不是大问题,想想你本科接受的教育也才4年,况且4年只是有那么一丁点基础知识,而工作是一场人生马拉松,可不单单要跑4年的。 只要一个人有学习能力,就可以解决大部分遇到的问题,区别无非学的快慢、攒的快与慢。 有些攒的快些,N年后,他们被称为「神」,这个比例是1%; 有些人攒的慢些,N年后,他们被称为「牛」,这个比例是9%; 有些人基本没攒什么,N年后,他们仍是「农」,这个比例有90%。 N ≥ 20 不好意思,上面这个比例是我杜撰的,我故意把「农」的比例增大,目的是警惕自身,也希望读者能警惕不要成为那90%。 进入那9%的「捷径」就是慢慢积累,我们普通人只要坚持学习积累,就一定能达到。 进入那1%可能就比较有挑战了,据我所知,好的工程师年薪会到百万美金以上(股票+奖金),注意这仅仅是工程师,这个层次能达到最好,达不到也不要强求。 3.3 多重构 总结是使人加速进步、聪明进步的很好的手段,对程序员来说,对代码最好的总结就是重构。 重构代码能带来至少两个好处,一个是对公司的,优化代码,易于维护,日后有其他人接手会更快上手;另一个就是对个人了,谁重构谁获益,这是学习的最佳手段,如果你写了10个项目,没有重构过一次,那你第11个项目用的数据结构、模块划分方式可能和第1个项目是还是一样的。 而如果你但凡重构过哪怕一次,当你写下一个项目时会更加得心应手高屋建瓴。 重构,不单单是为了优化过去,更大的好处是指引未来。 这就是爬金字塔的方法,不断的重复:学习-->实践-->总结,这个闭环。 全文完,希望你能从文中得到或多或少的启发。

    嵌入式ARM 工程师 嵌入式

  • 实用 | 程序运行时,是怎么找到动态库的?

    转载请注明以下内容: 来源:公众号【编程珠玑】 作者:守望先生 ID:shouwangxiansheng 我们随便开发一个C/C++程序,都很大程度不可避免的需要用到动态库: #include int main() { printf("hello,编程珠玑\n"); return 0; } 编译并查看使用到的动态库: $ gcc -o main main.c $ ldd main linux-vdso.so.1 (0x00007ffdf8fdf000)     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1f8535e000)     /lib64/ld-linux-x86-64.so.2 (0x00007f1f85951000) 从ldd命令的结果我们可以看到main程序依赖了哪些动态库,并且在哪个路径。那么你有没有想过,动态库的路径是怎么找到的,查找顺序又是怎样的呢? 准备动态库 在此之前如果你还没有对动态库有一个基本的了解的话,建议你阅读《浅谈静态库和动态库》或其他相关资料。为了说明后面的问题,这里我们先创建一个简单的动态库,你也可以参考《手把手教你制作动态库》: // test.c #include #include "test.h" #include "test1.h" void test() { printf("I am test;hello,编程珠玑\n");     test1(); } // test.h void test(); //test1.c #include #include "test1.h" void test1() { printf("test1,needed by test\n"); } // test1.h void test1(); 分别制作动态库libtest.so和libtest1.so,这在后面的示例中会用到: $ gcc test1.c -fPIC -shared -o libtest1.so $ gcc test.c -fPIC -shared -o libtest.so -L. -ltest1 这样你在当前目录下就会看到有一个libtest.so和libtest1.so文件生成了,其中litest.so依赖libtest.so 注意,由于libtest.so依赖libtest1.so,这里用-L指定了要链接的test1的路径,因此我们看到: $ ldd libtest.so     linux-vdso.so.1 (0x00007ffd1bbca000)     libtest1.so => not found     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9f1d0ae000)     /lib64/ld-linux-x86-64.so.2 (0x00007f9f1d6a1000) 从这里可以看出libtest是依赖libtest1库的,但是特别注意到,libtest1.so指向的是not found,这会有什么影响吗?我们后面就会看到。 链接时查找路径 我们都知道,在编译成可执行文件前,链接器链接动态库也是需要查找动态库路径的,否则怎么链接上指定的动态库呢?那么这个顺序又是怎样的呢? 首先会查找的会是编译时链接的路径。修改前面的main.c,让它调用libtest.so中的test函数: // #include #include "test.h" int main() {     test(); // 调用libtest.so中的test函数 return 0; } 编译链接: $ gcc -o main main.c -I ./ -L./ -ltest -ltest1 完美编译过。除此之外,如果我们把libtest.so和libtest1.so都移到/usr/lib下面,我们发现,即便不用-L也能编译过了: $ gcc -o main main.c -I ./  -ltest -ltest1 这里需要说明的是,我们通过-L./来指定搜索库的路径,由于libtest.so依赖libtest1.so,因此在编译链接时,也需要链接上test1。 小结 从上面的内容可以看到,在链接时,我们通过-L参数搜索要链接的库路径,但是这个路径信息不会写到ELF文件中,因此你会通过ldd命令看到not found,而通过-rpath可以指定链接时的搜索路径,这个信息会写入到ELF文件中,最终看到的结果是,由于libtest.so依赖libtest1.so,所以其他程序依赖libtest.so时,会自动从写入ELF的rpath中搜索它依赖的其他库,因此只需要链接libtest即可,例如: 在制作库libtest1.so时,加上-rpath-link选项: $ gcc test.c -fPIC -shared -o libtest.so -L. -ltest1 -Wl,-rpath-link $(pwd) 在编译main的时候,就不需要特意指定链接libtest1.so $ gcc -o main main.c -L ./ -ltest 只需要链接libtest.so,其依赖的libtest1.so也链接进来了。 当然了,如果-L指定的路径没有呢,它还会去查找其他地方,否则依赖的系统库怎么找到呢?总结大致顺序如下: -L指定链接路径 对于依赖库中依赖的搜索顺序通过-rpath-link或-rpath选项查找(后面会提到) gcc默认链接路径(gcc --print-search-dir | grep libraries 查看) 链接器配置的查找路径(ld -verbose | grep SEARCH_DIR查看) 针对具体的系统或链接器,可能有些差异,但是大致如此。 运行时查找路径 虽然前面编译成功了,但是我们运行看看,发现运行失败了。 $ ./main ./main: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory 其实我们用ldd命令看一下也能看到: linux-vdso.so.1 (0x00007ffcd566e000)     libtest.so => not found     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f356d1f6000)     /lib64/ld-linux-x86-64.so.2 (0x00007f356d7e9000) LD_PRELOAD环境变量 这个环境变量在介绍《性能优化-使用高效内存分配器》中的时候,也有提到,用来做测试非常方便,同样的,这种方式也最好仅仅只是用于测试,因为它的优先级非常高,并且影响全局。使用也很简单: $ export LD_PRELOAD=./libtest.so $ ./main 为了避免影响后面的验证,这里取消设置该环境变量: unset LD_PREALOD 查找rpath路径 上面的情况是找不到动态库,那么它首先会去rpath指定路径去查找,这需要在编译时指定: $ gcc test.c -fPIC -shared -o libtest.so -L. -ltest1 -Wl,-rpath $(pwd) $ gcc -o main main.c -L . -ltest -Wl,-rpath $(pwd) $ ./main I am test;hello,编程珠玑 test1,needed by test 也就是说,如果我们编译时指定了路径,就可以找到了,但是这些信息被写入到了ELF文件中。 LD_LIBRARY_PATH环境变量 另外也可以通过这个环境变量来设置要搜索库的路径。 $ gcc -o main main.c -L . -ltest $ export LD_LIBRARY_PATH=./ $ ./main 这样运行也是没有问题的。 同样,为了避免对后面测试产生影响,取消设置该环境变量: unset LD_LIBRARY_PATH /etc/ld.so.conf中的路径 我的机器上这个文件的内容如下: $ cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf $ ls /etc/ld.so.conf.d/ fakeroot-x86_64-linux-gnu.conf  libc.conf  x86_64-linux-gnu.conf 所以它实际指的是/etc/ld.so.conf.d/目录下所有conf路径包含路径,打开其中一个libc.conf,它里面包含的路径为: $ /usr/local/lib 既然如此,我们把前面的libtest.so复制到该目录下(可能需要sudo权限): $ sudo cp libtest.so /usr/local/lib $ sudo ldconfig $ ./main I am test;hello,编程珠玑 test1,needed by test 注意,这里拷贝完成后,需要执行ldconfig,它会更新相应的共享库,以便可执行程序能够找到。实际上,执行完成后,你确实就能在/etc/ld.so.cache文件中找到: $ grep -a libtest.so /etc/ld.so.cache 同样,为了影响后面测试,记得删除: rm /usr/local/lib/libtest.so 实际上这里是先从/etc/ld.so.cache中的路径查找,然后再从ld.so.conf的路径中查找。后面我们可以通过命令看到。 /usr/lib,/lib/ 当然了,如果以上路径都没有,最终还会在lib或/usr/lib下找,为了验证,我们将库拷贝到/lib目录下 $ cp libtest.so /lib $ ./main I am test;hello,编程珠玑 test1,needed by test 同样能正常运行。 小结 小结一下,动态库的搜索顺序如下: LD_PRELOAD环境变量指定库路径 -rpath链接时指定路径 LD_LIBRARY_PATH环境变量设置路径 /etc/ld.so.conf配置文件指定路径 默认共享库路径,/usr/lib,lib 以上这些查找路径你很容易来验证它们的优先级,简单的做法就是这几个位置分别放置同名不同作用的库,来看看它到底先使用哪个路径下的库,可自行尝试。 LD_DEBUG 这个环境通常用来调试。例如,查看整个装载过程: $ LD_DEBUG=files ./main 或者查看依赖的库的查找过程: $ LD_DEBUG=libs ./main 3557:    find library=libtest.so [0]; searching 3557:     search cache=/etc/ld.so.cache 3557:      trying file=/usr/local/lib/libtest.so 另外还可以显示符号的查找过程: $ LD_DEBUG=symbols ./main 总结 了解动态库的搜索路径,可以在开发中很好的帮助你定位找不到库的问题,同时LD_DEBUG环境变量也能够很好的帮助你调试,例如查看库搜索的路径,显示符号的查找过程等等。 虽然程序运行能够有多种途径获取动态库路径,但是并不是每种方式都合适,有的方式甚至完全不该用,但这超出了本文的讨论范围了。有兴趣的也可以点击阅文原文,查看《Why LD_LIBRARY_PATH is bad》 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    嵌入式大杂烩 动态库 C

  • 学习笔记 | DAC基础内容及常见问题

    DAC,Digital-to-Analog Converter(数模转换器),DA转换和AD转换有着同样重要的作用,在许多场合都能看到DAC的应用。 DA转换器是把数字量转变成模拟量的器件,按模拟量输出类型通常分为:电流和电压输出类型。常见的DAC是电压输出型,在STM32中集成的DAC转换模块为电压输出型数模转换器。 嵌入式专栏 1 STM32 DAC 基础内容 STM32内部集成的DAC输出通道和功能与型号有关,一般有1到3个 通道 。 下面结合STM32F4描述一下DAC基本的参数信息: 1. DAC分辨率 分辨率决定了DAC的转换精度,目前STM32内部集成的DAC分辨率为12位。 对于大部分应用来说,12位分辨率的DAC已经足够了,同时还可通过软件配置成 8 位分辨率。 2. DAC参考电压 参考电压是DA转换输出电压的参考基准,STM32大部分芯片具有DAC和ADC共用的参考电压引脚VREF+、VREF-。没有参考电压引脚的芯片使用VDDA作为参考电压。 STM32参考电压要求:1.8V ≤ 参考电压 ≤ 3.6V,而且参考电压≤VDDA。不同系列不同型号参考电压范围有差异,具体请参看数据手册。 3. DAC对齐格式 STM32数据位数可配置为12位或者8位,对齐格式分为左对齐和右对齐。在单通道和双通道模式下的对齐格式如下图: 4.DAC触发选择 STM32触发DAC转换有多种选择,外部引脚、定时器、软件触发等,可根据实际情况选择。 放一张STM32F4的DAC框图和引脚让大家更加直观了解DAC: STM32 DAC的功能可能不同型号之间略有差异,具体细节内容可查阅芯片对应的手册。 嵌入式专栏 2 STM32 DAC 参数配置 使用STM32的DAC功能只需要很简单的配置即可,不管是使用STM32CubeMX配置,还是使用标准外设库配置都很简单。 1.STM32CubeMX配置 使用STM32CubeMX工具可“一键”配置相关的参数:使能Buffer、 触发源选择、 使能三角波形等。 想要在项目中快速使用STM32 DAC功能,建议使用STM32CubeMX工具“一键”配置,避免遗漏配置,或者错误配置引起的不必要麻烦。 2.标准外设库配置 STM32部分系列提供标准外设库,对于DAC来说,包含:DAC时钟、引脚、使能Buffer、 触发源选择、 使能三角波形等一些最基础的参数。 void DAC_Configuration(void){ DAC_InitTypeDef DAC_InitStructure; DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software; DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0; DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; DAC_Init(DAC_Channel_1, &DAC_InitStructure); DAC_Cmd(DAC_Channel_1, ENABLE);} 这是最基础的配置参数,如果还使用了定时器触发、DMA等功能,就需要配置对应的内容。 嵌入式专栏 3 STM32 DAC 常见问题 STM32的DAC功能比较简单,往往容易忽视一些细节问题,换一个硬件环境可能问题就暴露出来了。 问题一:DAC转换触发源选择和配置问题 触发DAC转化的方式有多种,选择了对应的触发源就需要进行相关的配置,有不少人配置都遗漏一些相关配置,从而导致无输出电压,或者电压输出不同步等问题。 比如:选择了定时器触发,但定时器没有配置成对应触发源。 TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); 还比如:定时器参数不对,导致定时触发频率不对。 TIM_TimeBaseStructure.TIM_PrescalerTIM_TimeBaseStructure.TIM_Perio 解决办法:参考官方例程,不遗漏配置、不把参数配错。或者使用STM32CubeMX工具配置。 问题二:DAC输出电压不稳定问题 STM32部分型号没有参考电压引脚,就使用VDDA模拟电源作为参考电压。 在实际应用中,系统的电压受到负载的影响比较常见,如果STM32数字电源、模拟电源和参考电压共用一个电源,就会存在参考电压不稳定的情况,从而导致DAC输出电压不稳定的情况。 解决办法:增加电源输出功率、使用独立VDDA模拟电源、更换使用有参考电压引脚的芯片等。 问题三:DAC无法输出0V问题 相信有不少人都遇到过这样的问题:DAC无法输出0V。 引起这个问题有可能是因为使能了Buffer(输出缓冲器),STM32的DAC输出缓冲器,与常人思维的理解可能有点不同。 输出缓冲器作用是减小输出阻抗,可用来降低输出阻抗并在不增加外部运算放大器的情况下直接驱动外部负载。 在数据手册中还有一点说明:使能缓冲器之后,输出电压下限为0.2V。(同时,上限电压为VDDA - 0.2)。 解决办法:关闭输出缓冲器。(关闭之后,驱动能力会减弱,建议添加电压跟随器或运放电路) DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable; 复盘一下

    strongerHuang 数模转换器 DAC

  • 专家分析 | 半导体芯片短缺不会很快结束

    编译 | THE FINANCIAL 微信公众号 | 嵌入式专栏 如今芯片短缺问题,不只是中国才有,全球都出现了缺芯的局面。毫不夸张地说,我们日常生活中大部分东西都是所依赖这些被称为半导体的晶圆状电路芯片驱动的。 据估计,汽车的40%与电子产品有关。这使得这一关键部分的短缺与美国经济息息相关,以至于拜登总统在2月24日签署了一项行政命令,授权对美国经济的六个部门进行长期供应链审查,并对半导体及其制造所需的材料进行短期审查。 根据宾夕法尼亚大学的说法,为了了解短缺的范围、先例,以及短缺是否会很快结束,沃顿商学院松下制造与物流教授Morris A.Cohen解释了目前的情况。 半导体是什么?它为哪些典型的东西提供能量或者是必需的? 现在,几乎所有的东西。你的电话、电视、家用电器、汽车——你能想到的都有。我们使用半导体芯片来控制和修改过程,作为消费者和个人,我们拥有和使用。我们也在工业设备、飞机、汽车上使用它们——它们无处不在。 媒体的话题似乎集中在汽车上。为什么? 汽车正面临着芯片短缺危机。芯片供应不足导致他们在世界各地关闭工厂、减产和裁员。原因是,生产商没有芯片,很多人都没有想过这一点,其实我们今天的车里有很多芯片。你可以把汽车看作一台移动的电脑。每辆车都有各种各样的系统,包括暖气、空调、娱乐、发动机,它们都由电子芯片控制和监控。在制造业,你很清楚,当制造商缺少一个零件时,不管它有多小,你都无法完成装配或装运产品。顺便说一下,这以前也发生过。 所以这是有先例的? 对。2011年,日本福岛发生了著名的地震,其后果是有一家名为Renasas的主要为汽车行业,也为其他行业生产芯片的公司受到了地震影响。这家离福岛不远的工厂是全球汽车芯片的主要供应商。由于海啸和地震,工厂被关闭了。因此,全球产能大幅下降,降幅约为25%——非常明显。世界各地的工厂不得不削减产量,关闭日本、德国和中国的制造商。当时,所有这些制造商都在安装组装所需的模块,称为“组件”,即娱乐系统、燃油监控系统或气候控制系统。所有这些模块,由不同的供应商生产,然后组装到汽车上。如今,许多组件和组件使用了大量芯片。事实证明,对于世界各地的许多制造商来说,这家工厂是主要的供应来源。所以,当它倒下时,所有人都被打乱了。有趣的是,大多数公司甚至不知道这家工厂是他们供应商的供应商。这就是供应链的本质。它们不仅包括第一级供应商,而且要求第一级以下的所有级别也满足需求。这就形成了我们称之为“菱形”的供应链,也就是说,有一个完美的瓶颈。所有的物流都必须经过这一点,当物流中断时,整个系统就会停止。 这种情况发生在2011年,主要制造商花了好几个月的时间才恢复生产水平。是4个月还是6个月恢复生产,这取决于制造商。每个人都说,“我们吸取了教训,知道自己的弱点在哪里。这种事肯定不会再发生了。” 它再次发生,听起来像是纸牌屋。 现在不仅仅是日本,丰田和三星也是汽车行业芯片的主要供应商。这并不是说他们被打乱了,只是因为巨大的需求变化,他们没有足够的产能。这种情况不仅存在于汽车行业,而且存在于所有消费电子产品制造商,它们使用的芯片比汽车行业多得多。考虑一下去年由于大流行而发生的情况。我们在家里看电视,使用我们的设备,人们购买更多,消费电子产品和其他设备的需求已经上升。此外,(2020年)前两个季度,汽车需求大幅下降。人们不买车了。因此,所有的制造商都认为他们将不得不缩减规模,他们没有订购更多的库存。他们是有效的;这就是所谓的“即时”库存管理或“精益”制造。因此,他们没有订购额外的库存。 去年下半年,汽车需求激增,人们突然开始买车。当制造商去订购更多的芯片时,他们发现产能不足,因为产能已经分配给了其他行业,比如消费电子行业。 这只是疫情造成的吗? 疫情是根本原因。它极大地扰乱了需求模式,企业对这种需求冲击的反应方式或未能预料到这种冲击,导致了一个问题。制造商应该能够管理这些东西,这就是我们在供应链管理课程中教授的内容:如何将风险降至最低,并使供需相匹配。不幸的是,他们在这个地方摔倒了。你可以指指点点,说他们做了错误的决定,做出了各种事后解释,但这主要是由前所未有的需求变化造成的。消费类电子产品需求爆炸,导致汽车工业崩溃。 有没有在美国制造芯片的趋势? 联邦政府已经提出了一个名为“美国芯片”(CHIPS for America)的计划,旨在促进美国制造业。现在我们所有人都知道供应链的中断。我研究这个课题好几年了,没人知道我在做什么。如果我们在美国有更多的芯片制造工厂,我们就不会那么依赖外国供应商,在生产中断时也不会那么脆弱。这倒是真的。因此,美国政府现在正在推出激励措施,试图从本质上把美国的半导体制造业带回美国,这被称为“回流”。美国过去在芯片生产方面占据主导地位,现在已降至全球产能的12%,这一比例相当可观,但过去这个比例要高得多。半导体是一个重要的产业,它不仅对国内经济至关重要,对国防也是如此。这些芯片在航空航天和军事系统中被大量使用。 这就是论证。但是,建造一家半导体代工厂——一家生产芯片的工厂——现在的价格是40亿到50亿美元。组装一座工厂需要数年的时间,甚至一旦投产,也需要长达一年的时间来调整过程,使产量达到可行的水平。在前6到9个月,他们还需要测试和修改。你不能按下开关就把工厂带回家。 那可能也是一份技巧性的工作,对吧? 这些工厂是完全自动化的。你可能会看到奇怪的人,但不会太多。我们有一个主要的半导体设备行业,为芯片工厂生产硬件。他们每年销售数十亿美元。其中最大的一个是应用材料。芯片生产成本的主要组成部分是设备,它是高度自动化的。组装设备需要大量的熟练工人,运营工厂也需要一定数量的熟练工人。维护也是一个大问题,因为如果一台机器停机,工厂就会停机并停止生产,而这种中断可能会造成每小时10万美元的损失。 这是一个资本密集型、复杂的行业。能力也受到巨大的技术变革的影响。每两年或三年,制造商就会改变技术,因为他们会提出更好的芯片或设备设计。因此,这个行业受到摩尔定律的控制,即每18个月生产一个芯片的成本就会下降一半。这种情况已经持续了40年。正因为如此,我们拥有了令人惊叹的廉价电子产品。 但生产这些产品的技术一直在不断改进和更新。我花了很多时间在这个行业。这是一个充满挑战的行业。像COVID - 19这样的中断导致主要客户的需求像这样来回波动,将会有中断。确实有。 这个问题怎么解决? 我认为它不会很快消失。你不可能在一夜之间创造产能,所以我们将不得不承受后果。 公司现在可以做出决定,实现弹性,从而减轻未来的风险,这也是他们都在努力做的事情。这可能基于寻找其他供应商或重新设计产品和流程,或建立零部件库存。这些都在尽可能地进行。而这也会产生一定的效果。类比卫生纸,当危机开始时,你去超市看到的是空荡荡的货架。但正如我之前所说,这并不是因为产能不足,卫生纸的制造量足以满足需求。我不是专家,但我认为消费不会有那么大的变化。所以,这是个问题,"卫生纸都去哪儿了?一半以上的卫生纸都是以大卷纸的形式生产的,这些大卷纸都是给机构用户的,比如学校和工厂。而它们都被关闭了。你不能为家庭购买大卷纸,它不适合。所以,你必须重新包装生产。这需要时间,但不是几年或几个月--几个星期就能重新调整机器。因为这基本上是同样的产品。他们还必须重新分配可用的供应,以动态地重新平衡供应和需求。他们做了所有这些事情,结果一个月后,商店的货架上有很多卫生纸。这个问题就解决了。 你可以尝试在半导体上做同样的事情,但不会有那么好的效果。你不能只是重新包装它们。 汽车中使用的芯片对于汽车的设计也是高度专业化的。你不能把雪佛兰Bolt芯片用在特斯拉上。因此,你不能集中供应和重新分配。你可以用卫生纸做到这一点,因为它是一种商品。但这些芯片是高度专业化的,这就限制了集中供应以缓解这一危机的能力。

    strongerHuang 半导体 芯片

  • 新闻 | 华为官宣开收5G专利费

    来源 | 网络 3月16日,华为技术有限公司在深圳总部举行新闻发布会,公布对5G手机的收费标准,单台手机专利许可费上限2.5美元,从2021年开始。 “我们太忙了,发展太快了,没时间收取专利费,当我们不忙的时候,闲下来的时候,即使要专利费,也不会像高通一样要那么多。”任正非在2019年6月曾幽默表态。 3年知识产权收入预计超12亿美元 华为3月16日发布创新和知识产权白皮书2020,展示了该公司在知识产权方面的“家底”。据悉,截至2020年底, 华为全球共持有有效授权专利4万余族(超10万件) ,其中90%以上专利为发明专利。 根据德国专利信息分析组织IPlytics发布报告,截至去年10月, 华为公司的5G专利申请量排名世界第一 ,为6372件,高通、三星分获二、三名,分别为4590件和4052件。 华为知识产权部部长丁建新公布了华为对5G多模手机的收费标准: 华为对遵循5G标准的单台手机专利许可费上限为2.5美元,并提供适用于手机售价的百分比费率。 华为首席法务官宋柳平在深圳总部召开的“知识产权:保护科技创新的前进引擎”论坛上说:“我们希望通过今天发布的2020版白皮书,展示华为公司30年来技术创新发展的历程及公司对知识产权一贯的尊重、保护和贡献。希望它能够更加透明地让大家看见华为是如何一步步走到今天。” 据悉,华为公司2008年首次在世界知识产权组织PCT专利申请排名第一。2019年,华为在欧洲专利授权数量排名第二位,在美国排名第十位。 华为公司预计2019-2021三年的知识产权收入在12亿-13亿美元之间。 “华为发布5G标准必要专利(SEP)费率,将推动业界广泛采用和使用旨在确保可操作性、可靠性和透明竞争的标准,同时为其研发投资提供公平的回报。”世界知识产权组织(WIPO)前总干事弗朗西斯·高锐(Francis Gurry)评价道。 华为要开始通过专利创收吗? 对于华为而言,现在的时机收专利费,一方面是应对美国制裁的组合拳之一,另一方面强化5G产业,能收取专利费,也是从侧面反映配套的5G发展将进入比较成熟的阶段,5G应用正在崛起,华为此前就表示2021年将是5G大规模商用的元年。 对于华为开始收取5G专利费,外界一大疑问是“华为要开始通过专利创收吗?” 宋柳平对此表示, 知识产权并不是华为的主要收入来源 。他称:“华为主要还是经营产品的公司,主要收入来源还是产品和服务,产品是我们长期收入的主要来源,对比华为整体收入,知识产权方面,我们并没有作为主要收入来源。4G和5G华为投入的金额和时间是有区别的,标准的贡献也不一样,根据这些变化会去调整对外许可的费率和情况。” 华为专利费2.5美元价格并不高 众所周知,高通手握众多3G、4G、5G通信专利,而其净利润的半壁江山来自于专利费用。 据了解,在2017年底,高通就公布了5G收费标准,使用高通的核心专利,只支持5G的手机,将会收取2.275%的专利费用;使用高通核心专利,支持3G/4G/5G的手机,将会收取3.25%的专利费用;使用高通核心专利加非核心专利,只支持5G的手机,将会收取4%的专利费用;使用高通核心专利加非核心专利,支持3G/4G/5G的手机,将会收取5%的专利费用。 可以看出, 高通的专利费比较高,占整机价格的2%~5% 。该公司要收取专利费的封顶手机净售价为400美元。 爱立信 在2017年公布标准,当时的5G专利许可费标准是,高端手持设备,许可费为5美元/部,低端手持设备,许可费最低2.5美元/部。而华为和中兴因为有5G相关专利,可以相互交叉授权一部分。 诺基亚 则在2018年公布收费标准,固定单台许可费,每部手机不超过3欧元。 值得一提的是, 华为与高通在专利费上有交叉授权 ,但也有争议,去年华为在复杂背景下,给与高通几年的专利费,即18亿美元专利费。 相比高通、爱立信等来看,仅仅从数据上看,华为的2.5美元在价格上并不高。 华为将与苹果、三星商议5G专利使用权 据媒体报道称,华为技术有限公司副总裁、首席法务官宋柳平称:“华为将与苹果、三星谈判5G专利使用费。” 这条消息一度登上新浪微博热搜,对此消息,网友纷纷表示:“华为牛!!未来可期,未来可赚!”“牛气,挣外国人的钱!”...... (新浪微博截图) 另外,华为的表态第一时间引起彭博社、美国消费者新闻与商业频道(CNBC)等外媒注意。 (外媒报道截图) 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    strongerHuang 华为 5G 专利费

发布文章