华清远见嵌入式

  • 2020-06-09
  • 发表了主题帖: 带有开源软件的嵌入式系统的设计

    软件开发具有挑战性。针对最新设备的嵌入式开发更具挑战性。该技术领域面临的其他障碍主要归因于部署在设备内部的快速升级的代码行,如果要获得商业成功,这些代码必须为常规的PC用户界面提供更加统一的外观。 考虑到典型部署场景中可能遇到的障碍的广度,嵌入式空间内软件系统设计的复杂性会迅速升级。由于该软件处于设备内部的部署后阶段,因此其“锁定”性质使该领域的软件编程架构建模给传统的基于PC或服务器的开发环境所面临的挑战带来了更多挑战。 在探索开源软件(OSS)在嵌入式设备开发中的潜力之前,您需要问自己为什么选择这种方法而不是使用任何专有平台或工具集。 测试OSS的健壮性 您是否选择嵌入式OSS来尝试并节省成本–如果是,您是否在必要时考虑了提供支持和服务的全部成本?它是否可以与最先进的开源产品一起使用,这些产品可能会提供复杂嵌入式部署所需的更大功能和灵活性?如果是这样,所讨论的代码是否已得到增强和发展,足以提供一定程度的健壮性? 专有二进制文件 您需要记住的是,与台式机系统相比,嵌入式软件在硬件上的集成要困难得多,因为硬件本身的种类繁多。我们在这里谈论的是您需要为驱动程序进行的配置以及软件堆栈中更高级别的注意事项。 如果您有二进制驱动程序的集合,它们可能不一定起作用。要解决此问题,您需要重新安装驱动程序的源代码,以使其在您的硬件上工作。即使您在一个硬件配置上具有可用的专有驱动程序,在更高版本上也可能无法使用。使用开源软件,您将有机会解决这些问题。但是对于专有二进制文件,您需要要求供应商解决此问题,这可能会大大延迟您的项目。这也适用于完整的软件堆栈,包括UI层。 哪种开发方法最有效? 大多数行业评论家都不建议采用“敏捷”或“极限”编程方法对嵌入式空间最为有效,因为这些模型通常在重量较轻的应用中更为有效。在这种情况下,随着项目向最终游戏的进行,迭代开发模型的使用可以提供更快的系统构建,即缩短上市时间。 嵌入式GUI有所不同 嵌入式GUI可能根本看起来不像桌面应用程序。嵌入式应用程序通常通过简化的输入机制(通过触摸屏或有限的键盘)进行任务驱动。屏幕尺寸通常比台式机小得多,而您没有台式机鼠标。这改变了整个用户体验,影响了应用程序的整体设计。 您很可能会在PC上运行应用程序开发,以模拟嵌入式设备。如果您决定使用Qt之类的应用程序框架,则在PC上运行该应用程序也可能会正常工作。但是您应该为手头的任务计划和设计应用程序,从而使用户在使用触摸屏或有限键盘的较小屏幕上获得良好的体验。 嵌入式的三个支柱 如果要认识和接受嵌入式系统开发的三个支柱,那么可能是以下三个原则:集成,创新和工业化。现在,这些规则已不再是刻板的,它们甚至不是事实上的标准,它们是该领域发展一次又一次地面临的共同挑战。 集成挑战: 与外部合作伙伴和软件开发人员进行协调将不可避免地成为您整个项目的一部分。在这个高度“精确的”开发环境中,要有效地管理此过程,必须提供一定程度的所谓“战略业务计划”,以与您自己的开发团队的工作并行进行。 开源开发在这里有所帮助的地方是,从本质上讲,存在着一个开发者生态系统,形成了开源社区。有时也称为“贡献模型”,这种由社会和技术整合的个人(在某些情况下是团队)的集合具有相同的交流和交换理念。在这种环境下,集成自然更加流畅。 如果您只能将项目带到目前为止,而找不到已经需要的缺失组件和代码块,那么“询问”其他人来帮助您弥补缺失的空白的选项并不罕见。毕竟,部分开源社区会随时寻找将创意发挥作用的下一个方向。 文章推荐: 基于WiFi的SOC开发-ESP8266网络编程上 http://www.makeru.com.cn/live/1758_1146.html?s=136257 基于WiFi的SOC开发-ESP8266网络编程下 http://www.makeru.com.cn/live/1758_1153.html?s=136257 基于WiFi的SOC开发-ESP8266智能硬件开发 http://www.makeru.com.cn/live/1758_1154.html?s=136257 基于WiFi的SOC开发-ESP8266智能家居项目集成 http://www.makeru.com.cn/live/1758_1155.html?s=136257 PCB电路设计之PADS_LOGIC原理图设计 http://www.makeru.com.cn/live/1758_1053.html?s=136257 PCB电路设计之PADS_LAYOUT原理图设计 http://www.makeru.com.cn/live/1758_1072.html?s=136257

  • 发表了主题帖: 保护嵌入式802.11 Wi-Fi设备时应考虑的10件事

    随着无线技术的普及,对无线技术用户的风险已经增加。黑客变得越来越老练,因此无线设备制造商正确保护其设备非常重要。  从无线身份验证协议到设备部署的环境,保护嵌入式802.11设备时需要考虑许多因素。  保护嵌入式802.11设备的十大注意事项包括: 1.考虑部署应用程序的环境 一个。这很容易忘记,但对应用程序的安全性至关重要。嵌入式系统已部署在现实世界中。对于这些系统而言,物理安全性是一个大问题,因为攻击者通常可以通过物理访问更轻松地破坏设备。此外,同一区域内其他应用程序(尤其是使用相同无线电频段的应用程序)所产生的噪声可能会严重破坏通信-简单的微波炉可以成为有效的拒绝服务武器。 2.无线网络本质上不如有线网络安全。 一个。在无线网络中,您一直在向拥有接收器的任何人不断广播信息。在有线网络中,数据沿电缆定向,因此获取数据要困难得多。当然,攻击者可以使用感应传感器来测量数据,但这是一种更专门的攻击,您始终可以将电缆包裹在法拉第笼中,然后将其埋在混凝土中。使用无线,您没有任何选择。 图1.无线通信不如有线安全 3.不要使用WEP 一个。WEP(用于有线等效保密)是保护802.11网络安全的最初尝试。不幸的是,该协议几乎从发布之初就被破坏了,现在可以通过免费提供的软件实用程序在几秒钟内破坏该协议。话虽这么说,但迄今为止,大量设备已通过WEP部署,并且仍在使用。想一想通过WEP进行连接,如果确实如此,请确保您正在使用其他身份验证和加密方法(请参阅#6)。 4. WPA-TKIP也可能不是一个好主意。 一个。WPA是为应对WEP损坏而开发的,旨在与相同的硬件一起使用。不幸的是,它显示出可能也应该删除它的迹象。它的破坏程度不及WEP,但新的攻击表明它很弱,很可能很快会加入WEP。幸运的是,WPA2被开发为完全(非硬件兼容)替代产品。如果您使用的是Wi-Fi加密,则应始终选择WPA2。 5. Wi-Fi加密(WPA,WPA2等)还不够–您需要TLS或类似的加密技术 一个。使用Wi-Fi加密协议的一个主要警告是,它们仅在设备和Wi-Fi接入点之间传输数据时保护数据,一旦数据到达接入点,则将其解密并传递而没有任何保护措施。在私有公司网络上这可能没问题,但是如果您的设备已连接到Internet,则最好只关闭WPA2 –此时没有安全性。因此,建议使用更高级别的安全协议,例如传输层安全性(TLS)或安全外壳(SSH)协议。这些协议对从设备到数据目的地的所有内容进行加密,无论数据在哪个网络上传输。 6.您需要企业认证吗? 一个。身份验证是安全性中一个容易被忽视的方面,它与加密同样重要。未经身份验证,攻击者可能会直接从您的设备冒充合法的信息接收者。可以通过要求简单的密码,预共享密钥,使用TLS或类似协议的内置身份验证,或使用需要专用身份验证服务器来保证所有设备身份的成熟企业身份验证来提供身份验证。身份验证最常见的方法是EAP-TLS和PEAP。企业身份验证是一个复杂的主题,需要花费一些时间才能弄清楚,但是对于某些应用程序没有其他选择。 图2.企业WiFi身份验证 7.您如何部署和管理证书和密钥? 一个。无论您使用身份验证方法还是仅使用预共享密钥,都需要管理密钥和/或数字证书(证书用于企业身份验证和TLS)。如果要获得最佳安全性,每个设备都应具有唯一的证书或密钥。您可以将相同的密钥分发给所有设备,但是如果其中一台设备遭到破坏,则整个系统也会被破坏。由于身份验证机制会将证书与设备的地址匹配,因此在每个设备上使用相同的证书会有点困难。无论如何,您都需要开发一种分发密钥和证书并根据需要进行更新的方法(建议对密钥进行频繁更新以提高安全性)。 文章来源:(无人机飞行器设计 http://www.makeru.com.cn/course/details/2986?s=136257) (很实用的设计程序http://www.makeru.com.cn/course/details/2963?s=136257)  

  • 2020-06-02
  • 发表了主题帖: 如何规范嵌入式软件开发

    键盘的诱惑一直是所有太多嵌入式开发的失败。编写代码很有趣。很好 我们觉得我们正在该项目上取得进展。我们的老板通常不擅长构建固件的细微差别,他们赞成批准,微笑着,因为我们显然正在做有价值的事情。 作为从事基于汇编语言的系统的年轻开发人员,我学会了期待很长时间的调试会议。编写一些代码,然后花几个月的时间使它起作用。调试是艰苦的工作,因此我学会了预算50%的项目时间来解决问题。 多年后,在制造和销售仿真器的过程中,我几乎在与我合作的每个公司中都不断看到这种模式。实际上,这种构建固件的方法是工具公司的天赐之物,这些公司都因开发人员的不良做法以及由此产生的大量错误而兴旺发达。如果没有错误,调试器供应商就会兜售铅笔。 在我自己的第一个功能失调的开发项目完成四分之一世纪之后,在我向嵌入式开发工程师讲课的旅途中,我发现这种模式仍然保持不变。急于编写代码淹没了所有常识。 过度使用的“过程”一词(注意仅使用了过度的词;在固件界却被忽略了)本身已经引起了足够的关注,以至于一些嵌入式开发工程师声称已经合理化了一种合理的方式来创建软件。然而,在严谨的质疑下,这些人中的大多数人承认以偶然的方式适用其规则。 当压力变大时(最需要紧贴系统的时候),大多数人会屈从于放弃系统并只编写代码的诱惑。 任何愚蠢的人都可以编写代码 在对程序员工作效率的研究中,汤姆·德马可(Tom DeMarco)和提姆·李斯特(Tim Lister)(《Peopleware》的作者)发现,在所有方面都是平等的,只有6个月经验的程序员的表现通常与一年,十年,或者更多。 随着我们开发人员年龄的增长,我们会获得更多的经验,但通常都是相同的经验,一次又一次地重复。随着我们事业的发展,我们以不断增长的智慧和效率来证明我们不断提高的薪水是合理的。然而,数据表明,经验的价值是神话。 除非我们准备寻找新的更好的固件创建方法,并且在我们实施这些改进的方法之前,我们只比住在Jolt和Twinkies时令人惊讶的野生目瞪口呆的十几岁宗师高出一个台阶大量的代码。 任何白痴都可以创建代码;专业人员找到了在预算内按时一致地创建高质量软件的方法。 固件是宇宙中最昂贵的东西 洛克希德·马丁公司前首席执行官诺曼·奥古斯丁(Norman Augustine)讲述了一个有关国防界遇到的问题的生动故事。高性能战斗机是需求冲突的微妙平衡:燃油范围与性能,速度与重量。 看来到1970年代后期,战斗机的重量已经达到了以往的水平。总是追求更大利润的承包商,徒劳地寻找可以增加很多成本的东西,但是却无济于事。 答案:固件。无限成本,零质量。航空电子设备现在占战斗机成本的40%以上。 二十年后,除了固件价格更加昂贵之外,没有任何改变。 固件成本是多少? 贝尔实验室发现,要实现每1000行代码1-2个缺陷,他们每月会产生150-300行。根据薪水和开销,这相当于每行代码约25至50美元的成本。 尽管有很多不公平的负面报道,IBM的航天飞机控制软件还是非常无错误的,并且可能代表有史以来最好的固件。成本?每条语句1000美元,每10,000行不超过一个缺陷。 对嵌入式系统的研究很少。在索要固件的每行成本后,我通常会遇到空白,然后数字低得离谱。“我想每条线2美元”很常见。但是,还有其他几个问题(有多少人?从成立到发货需要多长时间?)揭示的数字要高出一个数量级。 轶事证据(针对现实情况进行了粗略的调整)表明,如果您认为自己的代码成本为每行5美元,则说明您在撒谎,或者代码很垃圾。每行$ 100,您正在编写的软件几乎都符合DOD标准。大多数嵌入式项目的价格介于20-40美元/线之间。 那里有一些大师总是能产生比这便宜得多的质量代码,但是它们处于钟形曲线的1%渐近线上。 如果您认为自己属于该选择组(我们都愿意),则可以收集一两年的数据。然后,测量从开始到完成(已修复所有错误)在项目上花费的时间,然后除以程序的大小。 应用您已加载的薪水数字(通常是薪水存根上数字的两倍)。 您会感到惊讶。 只要免费,质量就很好刚刚描述的成本数据与质量水平相关。由于很少有嵌入式人员可以测量错误率,因此几乎不可能将质量度量添加到轶事成本中。但是质量确实有代价。 如果没有定义质量,我们就无法谈论质量。我们的直觉认为无错误的程序是高质量的程序,这是完全错误的。除非您使用Netscape“免费赠送并批量生产”模型,否则我们编写固件的原因仅在于:利润。没有利润,工程预算就会减少。没有利润,业务最终将失败,我们正在寻找工作。 快乐的客户为成功的产品和业务做出了贡献。客户对我们产品的满意是最终且唯一重要的质量衡量标准。 因此:产品的质量恰好是客户所说的。 明显的软件错误肯定意味着质量很差。糟糕的用户界面等同于质量差。如果产品不能完全满足买方的需求,则表明产品存在缺陷。 无论我们的代码是易碎的还是市场承诺过高的,还是产品的规格没有达到要求,都无关紧要。由于质量问题,公司面临风险,因此我们都必须采取措施解决问题。 无过错离婚和无过错保险承认跨千年人寿的严峻现实。我们还需要一种无懈可击的质量管理方法,以认识到无论问题来自何处,我们都必须采取措施纠正缺陷并取悦客户。 这意味着,在交付新要求的一周前进行营销时,工程学的成熟回应就不会让人觉得s昧。也许只是营销有道理。我们会犯错误(并在调试工具上投入大量资金来修复错误)。市场营销和销售也是如此。 将对提议的变更更改为诅咒的评估。质量不是免费的。如果产品不能满足设计要求,或者直到发货一周前这些事实才变得显而易见,那么让市场和其他部门知道对成本和进度的影响。 文章来源:http://emb.hqyj.com/Column/20209556.html

  • 发表了主题帖: 调整C / C ++编译器以在多核应用程序中获得最佳并行性能:第二部分

    下面的图5.10 描述了此过程,该过程包括四个步骤: 1.表征应用程序。 2.优先进行编译器优化。 3.选择基准。 4.评估编译器优化的性能。 图5.10:编译器优化过程 使用编译器的优化始于 对应用程序的表征。此步骤的目标是确定可能优先使用一种优化而不是另一种优化的代码属性,并帮助确定要尝试的优化的优先级。 如果应用程序很大,则可能会受益于高速缓存的优化。如果应用程序包含浮点计算,则自动矢量化可能会带来好处。下表5.4 总结了要考虑的问题和根据答案得出的结论示例。 表5.4:应用程序特征 第二步是 基于对哪些优化可能会带来有益的性能提升的了解来确定编译器优化设置的测试优先级。性能运行需要花费时间和精力,因此至关重要的是优先考虑可能会提高性能的优化,并预见在应用这些优化过程中可能遇到的任何挑战。 例如,某些高级优化需要更改构建环境。如果要衡量这些高级优化的性能,则必须愿意花时间进行这些更改。至少,所需的努力可能会降低优先级。另一个例子是更高的优化对调试信息的影响。 通常,更高的优化会降低调试信息的质量。因此,除了评估过程中评估性能外,还应考虑对其他软件开发要求的影响。如果调试信息降级到不可接受的水平,则可以决定不使用高级优化,也可以研究可以改善调试信息的编译器选项。 第三步,选择基准,包括为您的应用程序选择一个小的输入集,以便可以比较使用不同优化设置编译的应用程序的性能。选择基准时,应牢记以下几点: 1) 基准测试运行应具有可重复性,例如,每次运行的时间不会有显着差异。 2) 基准测试应在短时间内运行,以允许运行许多性能实验;但是,执行时间不能太短,以至于使用相同优化的运行时间差异很大。 3) 基准应该代表您的客户通常的经营状况。 最后一步是使用所需的优化来构建应用程序,运行测试并评估性能。测试应至少进行3次。我的建议是放弃最慢和最快的时间,并以中间时间为代表。 我还建议您在获得结果时检查结果,看看实际结果是否符合您的期望。如果执行性能测试的时间很长,则您可以在其他地方分析和验证收集的运行结果,并尽早发现任何错误或遗漏的假设。 最后,如果测得的性能满足您的性能目标,那么是时候将构建更改投入生产了。如果性能未达到您的目标,则应考虑使用性能分析工具(例如Intel VTune Performance Analyzer)。 通过阅读本系列的第1部分,您应该记住一个关键点:让编译器为您完成工作。 有许多书籍向您展示如何手动执行优化,例如源代码中的展开循环。现在,编译器技术已经到了可以在大多数情况下确定何时进行循环展开的时间。 在开发人员有知识的情况下,编译器无法确定特定的代码段,通常会有一些指令或编译指示可以在其中为编译器提供缺少的信息。 要查看此过程的工作情况,请下载案例研究的PDF,以了解如何将其与MySQL开放源数据库一起使用。 C / C ++编译器的可用性 在开始进行并行化之前,需要改进的另一个领域是嵌入式C和C ++编译器的可用性。由于以下原因,开发环境(尤其是嵌入式C和C ++编译器)的性能可提高开发人员的性能: 1)更高的标准合规性和诊断能力可以减少编程错误。 2)更快的编译时间导致每天更多的构建。 3)较小的应用程序代码大小可以使应用程序提供更多功能。 4)代码覆盖率工具可帮助构建强大的测试套件。 生成代码的性能是编译器的关键属性。但是,还有其他一些属性归为可用性属性,这些属性在确定易用性以及最终开发成功方面起着关键作用。 接下来的几节从以下方面描述了增加编译器使用的技术:1) 诊断,2) 兼容性,3) 编译时间,4) 代码大小和5) 代码覆盖率。如果正确采用这些技术,则可以在嵌入式项目的开发阶段提高开发人员的效率并节省相关的成本。 诊断。 用于嵌入式软件开发的两种广泛使用的语言是C和C ++。这些语言中的每一种都已由各种组织标准化。例如,ISO C一致性是编译器遵守ISO C标准的程度。当前,市场上常见两种ISO C标准:C89 [4] 和C99 [5] 。 C89当前是C应用程序的事实上的标准。但是,C99的使用正在增加。ISO C ++标准[6]于1998年获得批准。C++语言是从C89派生的,并且与C89在很大程度上兼容。两种语言之间的差异总结在ISO C ++标准的附录C中。 由于许多异常神秘的功能(例如异常规范和导出模板),很少有C ++编译器提供100%的C ++标准一致性。大多数编译器提供了一个选项来指定更严格的ISO一致性程度。 使用选项来强制执行ISO一致性可以帮助可能对将其应用程序移植到多个编译器环境中的开发人员感兴趣。 编译器诊断程序也有助于移植和开发。许多编译器提供了一个选项来诊断代码中的潜在问题,这些问题可能导致难以调试运行时问题。在代码开发过程中使用此选项可以减少调试时间。 另一项有用的诊断功能是任意诊断。任意诊断程序具有与之相关的编号,该编号允许在停止编译错误消息,警告消息,备注或无诊断之间升级或降级诊断。下表5.8说明 了适用于Linux的英特尔C ++编译器中提供的选项,这些选项提供了上述功能。 表5.8:诊断选项说明 某些编译器包括一个配置文件,该文件允许在编译期间放置其他选项,并且可以作为进行其他任意诊断的有用位置。 例如,为了 将所有C编译的警告#1011提升为错误, 在配置文件中放置-we1011无需手动将选项添加到每个编译命令行。有关诊断功能(包括可用性和语法)的完整信息,请参见编译器的参考手册。 兼容性。 嵌入式软件开发中的一个挑战是将针对一种架构设计和优化的软件移植到同一系列中的新升级架构上。 一个示例是将运行您的应用程序的系统从基于Intel Pentium III处理器的系统升级到基于Intel Pentium 4处理器的系统。在这种情况下,您可能需要重新编译软件并针对新架构及其性能功能进行优化。 一种备受重视的编译器功能是能够针对新架构进行优化,同时保持与旧架构的兼容性。处理器调度技术解决了升级架构的问题,同时保持了与现场部署的传统硬件的兼容性。 英特尔已经发布了许多指令集扩展,例如MMX技术(多媒体扩展)和流SIMD扩展(SSE,SSE2和SSE3)。例如,Intel Pentium 4处理器支持所有这些指令集扩展,但是较旧的处理器(例如Pentium III微处理器)仅支持这些指令的一部分。 当应用程序在奔腾4处理器上执行时,处理器分派技术允许使用这些新指令;当应用程序在不支持指令的处理器上执行时,处理器分派技术指定备用代码路径。 可以使用三种主要技术使开发人员根据执行体系结构调度代码: 1)丘比特的显式编码:程序员可以向标识执行处理器的函数添加运行时调用,并根据结果调用不同版本的代码。 2)编译器手动处理器分派: 语言支持,用于为每个感兴趣的处理器指定不同版本的代码。下面的图5.11 是一个手动处理器分发示例,该示例在Pentium III处理器上执行时指定一个代码路径,而在其他处理器上执行时指定一个代码路径。 3)自动处理器分派: 编译器确定使用新指令的收益,并为每个感兴趣的处理器自动创建多个版本的代码。 编译器插入代码,以将调用分派到该函数的版本,该版本取决于当时正在执行应用程序的处理器。这些处理器调度技术可帮助开发人员利用较新处理器的功能,同时保持与较旧处理器的向后兼容性。 使用这些技术的缺点是您的应用程序中的代码大小增加。同一例程有多个副本,只有一个副本将在特定平台上使用。提醒开发人员注意代码大小的影响,并考虑仅将技术应用于应用程序中的关键区域。 文章来源:http://emb.hqyj.com/Column/20209550.html  

  • 2020-06-01
  • 发表了主题帖: 实用的嵌入式编码技巧:第五部分

    AC编译器是大多数嵌入式开发工程师的基本工具。它是将应用程序中的思想和算法(表示为C源代码)转换为目标处理器可执行的机器代码的工具。 在很大程度上,C编译器确定应用程序的可执行代码将有多大。编译器对程序执行许多转换,以便生成最佳的代码。 此类转换的示例包括将值存储在寄存器中而不是内存中,删除无用的代码,以更有效的顺序对计算进行重新排序以及用更便宜的运算代替算术运算。 C语言为编译器提供了很大的自由度,使其可以在目标系统上精确实现每个C操作。这种自由度是为什么通常可以非常高效地编译C的重要因素,但是程序员为了编写健壮的代码,需要意识到编译器的自由度。 对于大多数嵌入式开发工程师来说,程序不太 适合可用内存的情况是一种常见现象。用汇编语言重新编写应用程序的部分或放弃功能似乎是唯一的选择,而解决方案可能像以更易于编译的方式重写C代码一样简单。 为了编写对编译器友好的代码,您需要对编译器有一定的了解。对程序进行一些简单的更改(例如更改经常访问的变量的数据类型)可能会对代码大小产生很大影响,而其他更改则完全无效。对编译器可以做什么和不可以做什么的想法使这种优化工作大有作为更轻松。 组装程序指定执行计算的方式,方式和精确顺序。另一方面,AC程序仅指定应执行的计算。在某些限制下,用于实现计算的顺序和技术取决于编译器。 编译器将查看代码并尝试了解正在计算的内容。给定已设法获取的信息,它会在单个语句中本地生成并在整个函数甚至整个程序中生成最佳代码。 编译器的结构 通常,在现代编译器中,程序是通过六个主要步骤处理的(并非所有编译器都完全遵循此蓝图,但从概念上来说,这是足够的): 解析器。 从C源代码到中间语言的转换。 高级优化。 优化中间代码。 代码生成。 从中间代码生成目标机器代码。 低级优化。 机器代码上的优化。 部件。 可以从目标机器代码链接的目标文件的生成。 连结中。 将程序的所有代码链接到可执行文件或可下载文件中。 如果在源代码中发现语法错误,则解析器将解析C源代码,检查语法并生成错误消息。如果未发现错误,则解析器然后生成中间代码(已解析代码的内部表示形式),并通过第一遍优化进行编译过程。 高级优化器将代码转换为更好的代码。优化器具有大量可用于改进代码的转换,并将执行它认为与手头程序相关的转换。请注意,我们使用的是“转换”一词,而不是“优化”。 “优化”有点用词不当。它传达出这样的直觉,即更改总是会改进程序,我们实际上会找到最佳解决方案,而事实上,最佳解决方案非常昂贵,甚至找不到(在计算机科学术语中无法确定)。为了确保合理的编译时间和终止编译过程,编译器必须使用启发式方法(“好的猜测”)。 对程序进行转换是高度非线性的活动,其中不同的转换顺序将产生不同的结果,并且某些转换实际上可能会使代码更糟。叠加更多的“优化”并不一定会产生更好的代码。 完成高级优化程序后,代码生成器会将中间代码转换为目标处理器指令集。该阶段是对优化器的中间代码逐段执行的,编译器将尝试在单个表达式或语句的级别上执行智能操作,但不要跨多个语句执行。 代码生成器还必须考虑C语言和目标处理器之间的任何差异。例如,对于一个小型嵌入式目标(例如Intel 8051,Motorola 68HC08,SamsungSAM8或Microchip PIC),必须将32位算术分解为8位算术。 代码生成的一个非常重要的部分是将寄存器分配给变量。目标是在寄存器中保留尽可能多的值,因为基于寄存器的操作通常比基于内存的操作更快且更小。 代码生成器完成后,进行优化的另一个阶段,即对目标代码进行转换。低级优化器将在代码生成器之后清理(有时会做出次优的编码决策),并执行更多的转换。 文章来源:http://emb.hqyj.com/Column/20209513.html  

  • 2020-05-29
  • 发表了主题帖: 实用的嵌入式编码技巧:第四部分

    详细的结构模式分析甚至确定了系统将如何振动,从而避免了残酷的发射阶段引起的破坏性共振。尽管他们创建的产品可以在恶劣且经常未知的环境中工作,但他们的详细计算却描述了系统的运行方式。 想想土木工程师。今天,没有人不做数学就架起一座桥梁。支撑薄薄的舞蹈之路的那条细腻的电缆只是在起作用。期。计算证明了承包商开始浇筑混凝土的时间。 飞机设计师还使用定量方法来预测性能。您最后一次听说不会飞的新飞机设计是什么时候?然而,机翼的形状很复杂,并且极难采用分析方法。在缺乏适当理论的情况下,工程师们依赖于数十年来风洞实验获得的大量表格。在弯曲金属之前,工程师仍然可以理解其产品的工作原理。 将此与我们的领域进行比较。尽管进行了数十年的研究,但是证明软件正确性的形式方法对于实际系统仍然不切实际。我们的嵌入式工程师在构建并测试之后,并没有真正的证据证明我们的产品能够正常工作。当我们选择一个CPU,时钟速度,内存大小时,我们押注我们的即席猜测就足够了,一年后,我们开始测试100,000多行代码。 经验在正确解决资源需求方面起着重要作用。通常,运气更加重要。但是,希望是我们的主要工具,而有了足够的英雄学知识,我们通常就能克服大多数挑战。 在我作为嵌入式工程师的职位上,研究了成千上万个项目,我认为仅由于使用不足的资源而造成的总失败率为10“ 15%。8051根本无法处理这些数据。PowerPC部分是一个不错的选择,但是该程序增长了两倍,是可用Flash的大小,并且采用新的成本模型,该产品不可行。 最近,我已经看到很多关于使我们的嵌入式系统更可预测的方法的文章,以确保它们对外部刺激足够快地做出反应,以确保过程按时完成。不知所措,没有实际有用的方法来计算可预测性。在大多数情况下,如果系统运行速度太慢,我们会构建系统并开始更改内容。 与航空航天和土木工程师相比,我们在黑暗中工作。异步活动改变程序流程时,很难预测行为。多任务处理和中断都会导致无法分析的问题。 USENET上的最新主题以及嵌入式系统大会上的一些讨论都建议完全禁止中断!艾格斯(Iguess)认为,这确实导致了一个更易于分析的系统,但是这个解决方案使我感到非常激进。我已经建立了轮询系统。 更糟糕的是,必须在不使用多任务的情况下或多或少地并发处理几种不同的事情。两种情况下的软件始终都是一团糟。 大约20年前,我天真地建造了没有RTOS的钢测厚仪,后来又不得不穿上鞋拔钉子。发生了太多的异步事情,内联代码变得异常复杂。我仍在设法弄清楚向圣保罗解释那个特殊的罪过 彼得 一个特别令人烦恼的问题是确保系统将及时响应外部输入。我们如何保证中断能够被足够快地识别和处理以保持系统的可靠性? 让我们详细了解第一个要求:及时识别中断。看起来很简单。翻阅处理器的数据手册,您会发现一个称为“延迟”的规范,该规范始终以亚微秒级别列出(请参见下面的图9.3)。毫无疑问,脚注将延迟定义为发生中断与CPU暂停当前处理上下文之间的最长时间。这似乎是中断响应时间,但实际上并非如此。 图9.3:延迟是从中断信号出现直到ISR开始的时间 CPU供应商定义的等待时间从零(处理器准备好立即处理中断)到指定的最大时间不等,它是正在执行哪种指令的乘积。显然,在执行指令的中间更改上下文是个坏主意,因此处理器通常要等到当前指令完成后才能对中断输入进行采样。 现在,如果它正在执行一个简单的寄存器到寄存器的移动(可能只是一个时钟周期),则零等待状态的20 MHz处理器仅需50 ns。完全没有延迟。 其他说明要慢得多。乘法可能需要数十个时钟。读-修改-写指令(例如“增量存储器”)本质上也是关键。最大延迟数来自于这些最慢的指令。 许多CPU包含循环结构,这些结构可能要花费数百毫秒的时间。例如,由一条指令启动的块内存到内存传输可能会运行很长时间,从而使等待时间变得不明显。 我知道的所有处理器都将在这些长循环中间接受一个中断,以使中断响应合理。块移动将被挂起,但是将保留足够的上下文,以允许在ISR(中断服务程序)完成时恢复传输。 因此,数据表中的等待时间数据告诉我们处理器不能处理中断的最长时间。该编号对于固件工程师完全没有用。好的,如果您要构建一个极端周期计数,纳秒级的,灰白头发诱人的系统,那么也许300 ns的延迟时间确实是系统性能的关键部分。 对于我们其他人来说,真正的延迟(即中断响应的99%组成部分)不是来自CPU的工作,而是来自我们自己的软件设计。而且,我的朋友,在设计时很难预测。没有正式的方法,我们需要经验方法来管理延迟。 如果延迟是从获取中断到进入ISR之间的时间,那么肯定会发生大多数,因为我们已禁用了中断!这是因为我们编写了织补代码。即使中断几条C语句,中断也可能长达数百微秒,远远超过CPU供应商所引用的那几纳秒。 无论您多么仔细地构建应用程序,您都将经常关闭中断。实际上,即使是从不发出“ disableinterrupt”指令的代码也确实经常禁用它们。因为,每次硬件事件发出中断请求时,处理器本身都会执行自动禁用,直到您在ISR内部显式重新启用它们后,该禁用才会生效。结果,暴涨的等待时间就可以指望了。 当然,在许多处理器上,我们不会像更改优先级那样将中断关闭。在第5级收到68 K的中断将禁止该级别及更低级别的所有中断,直到我们的代码在ISR中明确启用它们为止。优先级较高的设备仍然可以运行,但是所有1到5级设备的等待时间都是无限的,直到代码执行该操作为止。 文章来源:http://emb.hqyj.com/Column/20209512.html

  • 2020-05-28
  • 发表了主题帖: 使用基于Eclipse的IDE进行嵌入式设计

    Eclipse开源运动已成为软件行业的主要因素,这在很大程度上是因为它为嵌入式开发工程师提供了免费的综合集成开发环境(IDE),并能够利用大量免费或廉价的外接式生产力工具。 得益于Eclipse框架的广泛规定,有可能以符合开源哲学的价格创建针对嵌入式优化的Eclipse IDE。 通过将Eclipse,GNU C / C ++工具链和以主机为目标的调试探针组合在一个完整的,集成的且受商业支持的软件包中,Express Logic提供了BenchX,BenchX是一种增强的,嵌入式优化的,基于Eclipse的IDE,可以将其进行开发。每个开发人员席位仅需许可$ 1,000。 如下图1所示,此IDE在一个完整的,集成的,受商业支持的软件包中结合了嵌入式优化的Eclipse IDE,GNU C / C ++编译器和工具链以及一个主机目标调试探针。 图1.将Eclipse与GNU和主机调试探针相结合 为了简化Eclipse / CDT中的多个透视图,一个“嵌入式透视图”提供了与嵌入式系统开发相关的所有必要视图窗口。这大大降低了将Eclipse用于嵌入式系统的复杂性。 BenchX透视 图BenchX透视图提供对创建,编辑,组装,编译,链接,定位,执行和调试嵌入式应用程序所需的所有视图和工具的访问。下面的图2显示了BenchX Embedded透视图。 图2. Eclipse for Bemch X透视图 在此示例中,简化了Eclipse构建过程,以反映嵌入式开发的需求和嵌入式开发人员的偏好。许多未在嵌入式开发中使用的构建按钮,菜单,对话框和其他选项已被消除,取消激活(“变灰”)或降级为较低级别的菜单,以防止它们使嵌入式的更典型的使用模式复杂化IDE。 另外,Eclipse调试器接口已被修改,使其更适合嵌入式开发,在调试开发中的程序时,通常将建立远程目标连接。下面的图3显示了运行中的调试器。 文章来源:http://emb.hqyj.com/Column/20209492.htm  

  • 2020-05-27
  • 发表了主题帖: 嵌入式设计中扩展串口的入门

    串行端口在硬件和软件集成的初始阶段易于调试。即使在USB出现后,许多外部设备仍然连接到串行端口。蓝牙模块,GPS模块,医疗设备通过使用串行端口进行数据传输而相互连接。 在大多数嵌入式系统中,至少提供了两个串行端口。但是,某些系统还需要更多。因此,这需要某种方式来扩展串行端口的数量。设计人员可以选择的一些选项包括USB到串行端口,I2C到串行端口,地址/数据总线到串行端口(UART控制器)。 串行端口入门 从硬件的角度来看,串行端口至少具有三个引脚-发送器,接收器和接地。附加引脚用于硬件流量控制,可以使用也可以不使用。在典型的嵌入式系统中,仅使用三个引脚,并且没有硬件流控制。 传统的串行端口使用DB9连接器。这9个引脚中的引脚如下表1所示。 表1:具有DB9连接器的串行端口 RS-232信号电平的典型电压电平为+ 12V和“ 12V”。电压电平“ 12V表示逻辑高电平或1,而+ 12V电压电平表示逻辑零或0。 嵌入式系统中的串行端口 几乎所有嵌入式系统都提供两个或多个串行端口,并且通常支持TTL逻辑电平。嵌入式系统可能需要与两种外部设备接口,一种在TTL级别进行通信,另一种在RS232级别进行通信。 如果设备以TTL级别通信, 则嵌入式系统与外部设备之间的连接会很直接。但是,如果设备需要RS232级别的信号,我们将不得不在处理器和设备之间插入RS-232Line驱动器/接收器。 当今大多数设备仅需要三根导线即可传输数据,接收数据和信号地线。没有使用硬件流控制。这简化了硬件连接以及软件设计。 典型的嵌入式系统下 图1显示了使用4个串行端口的典型嵌入式系统。嵌入式系统的端口1用于引导加载程序和调试目的。此端口需要RS232 LineDriver,因为它将连接到台式机和/或笔记本电脑以进行调试。通常,如果PCB板空间受到限制,则可在板初次旋转后移除此端口。 端口2已用于与蓝牙通信。由于蓝牙设备不需要RS232级别的信令,因此它已直接连接到嵌入式系统。 端口3已用于连接GPS(全球定位系统)设备。该设备通常不需要RS232级别的信令,因此,它已直接连接到嵌入式系统。 端口4已用于连接通用外部设备。例如,外部RFID扫描仪。让我们假设该设备需要RS232级别的信令。我们将在嵌入式处理器和RFID扫描器之间使用RS232线路驱动器。 图1:具有4个串行端口的典型嵌入式系统。 根据应用的不同,嵌入式系统可能需要四个以上的串行端口。其中一些将需要TTL电平信令,而另一些将需要RS232电平信令。 在嵌入式 系统中扩展串行端口由于大多数嵌入式系统提供的串行端口数量少于要求的数量,因此主板设计人员必须找到某种方法来扩展串行端口的数量。幸运的是,存在许多选择,并且选择将取决于设计人员对硬件设计的舒适程度以及附加软件支持的数量。 USB转串口。如果处理器具有USB主机,这将是最佳选择。例如,设计人员可以将4端口USB集线器添加到现有USB主机。这将提供4个USB端口。USB集线器的一个例子是Genesys Logic的GL850A IC。 例如,设计人员可以将这四个端口之一用于USB,而另外三个可以用于扩展串行端口。USB串行端口桥可用于扩展串行端口。USB至串行端口桥接的一个示例是Prolific的PL-2303 IC。下面的图2 显示了一个示例实现。 图2:使用USB集线器和USB转串口桥接器扩展串口 Prolific的PL-2303提供TTL逻辑电平。如果需要RS232电平,则应在Prolific的PL-2303 IC之后使用RS-232线路驱动器/接收器。 通常,提供USB集线器以及USB到串行端口IC的驱动程序,因此几乎没有软件/硬件集成问题。 I2C到串行端口。在通常不提供USB端口的小型微控制器中,最佳选择是I2C到串行端口转换器。飞利浦SC16IS752IPW是I2C到串行端口转换器的示例。下面的图3显示了如何从I2C端口扩展4个串行端口。 图3:使用I2C扩展串行端口到串行端口网桥 但是,在这些实现中存在速度限制。由于I2C总线方面的限制,因此没有非常快的串行端口。因此,仅当所需的串行端口连接到不需要出色性能的应用程序时,此实现才有效。 还值得注意的是,此实现需要在软件方面进行驱动程序开发。总的来说,这是用于小型微控制器以及某些大型微处理器实现的商品方案。 地址/数据总线到串行端口(UART控制器)。无论嵌入式系统的性质如何,几乎始终可用的是到串行端口(UART控制器)的地址/数据总线。它几乎总是可以用在任何具有地址/数据总线支持的处理器系统中。 在停机现场,与此处讨论的其他一些替代方案相比,其提供的功能需要更多的电路板空间,但是,无论在什么平台上,它几乎始终具有驱动程序支持。例如,飞利浦半导体的SC16C652IB48 UART控制器提供了两个串行端口。 添加一个小型微控制器。如果除了串行端口还需要提供其他功能,我们还可以添加一个小型微控制器。设计一个小型的微控制器可能会很有用,它将提供许多可用于许多项目的通用功能。 您应该找到一个可以在不牺牲可用串行端口的情况下连接到主处理器的微控制器。例如,使用SPI和小型微控制器连接的主处理器提供了两个串行端口。 需要注意的一些事情 设计人员在设计完完整的系统后,不应该依赖扩展串行端口。如果需要更多的串行端口,则应尝试选择不提供任何附加电路即可提供所需数量的串行端口的处理器。例如,Atmel的ATMEGA640V-16AU IC提供4个串行端口,属于小型微控制器类别。 同样,请注意以下事实:在大多数成熟的处理器中,第一个串行端口通常用于引导加载程序,设计人员应尝试将其保留用于调试目的。在应用程序中使用第一个串行端口会给设计人员带来额外的困难。

  • 2020-05-26
  • 发表了主题帖: 从C过渡到C ++的3个理由

    几十年来,嵌入式软件工程师之间一直在争论他们应该使用C还是C ++。根据2020年嵌入式市场调查,在大多数情况下,微控制器制造商提供的软件都以C语言提供,实际上,有56%的嵌入式软件是用C语言编写的。但是,C ++逐渐流行起来,大约23%的新嵌入式软件项目是用C ++编写的。用C接近其50 个周年,它可能是时间开始转换从C到C ++。这是开发人员应考虑进行更改的三个原因。 原因1:改进的架构实施 C编程语言确实通过函数指针为开发人员提供了封装和一些基本的多态性功能。但是,C确实是一种过程语言,并且无需付出额外的努力就不会提供诸如继承或组合之类的机制。这会使系统的整体体系结构设计不太理想,从而影响软件的重用和维护方式,甚至限制其灵活性。 C ++为开发人员提供了实现真正的面向对象设计模式,开发真正的抽象以及实现设计模式的能力,这些设计模式不仅可以在一个应用程序中重复使用,而且可以提高体系结构的灵活性。这允许软件被重用,进而可以带来更快的产品开发,更短的客户应用定制时间以及许多其他优点。 原因2:C ++是一种不断发展的现代语言 在当今复杂而创新的开发环境中,开发人员不仅需要尖端的硬件解决方案,还需要尖端的软件和语言解决方案。这意味着用于编写软件的语言必须是最新的,以便为开发人员提供实施其系统所需的最新工具。C语言的最后一次更新是在2018年,听起来好像最近已经更新了。但是,如果您查看该标准,则不会添加任何新功能,唯一的更改就是要修复2011年以前的发行版中的问题!是的,花了七年的时间才制定出修订的标准,以解决最后一个标准中的问题! 纵观C ++,标准委员会致力于每三年更新一次标准!下一个修订版预计于今年2020年发布,最新版本将于2017年发布。与C语言不同,新修订版不仅是错误修复,还为该语言添加了新的特性和功能,从而使它可以是最新的并提供与其他语言(例如Python)竞争所必需的工具。新标准甚至删除了不推荐使用的功能,例如三字母组合。 原因3:C ++是一种更丰富的语言 我为微控制器编写的大多数嵌入式软件直到3-4年前都使用C编程语言。C ++始终提供比C更丰富的功能集,但是大约在那时,编译器已经达到了已编译代码等效或更好的地步。那是我开始学习C ++的时候,发现该语言变得多么丰富,以及让我学习该语言的更多知识。 C ++允许开发人员利用以下功能: 模板–允许独立于任何特定类型编写代码 动态多态性–允许在运行时分配实现 异常处理–捕获错误(任何C开发人员都震惊) 编译时静态if语句 虚拟功能 这些只是几个例子,还有更多!所有这些工具使对嵌入式系统的编程变得更加容易。 结论 C ++是一种现代且不断发展的语言,其中C似乎是静态的,并且发展缓慢。实际上,在编程语言迅速发展的时代,C正在成为众所周知的恐龙。随着开发人员面临着系统内日益增加的复杂性,他们需要一种语言,以使其具有灵活性并最大限度地提高重用性。过去的许多抱怨不再适用于C ++,特别是考虑到C ++编译器已经变得多么高效。如果曾经有时间开始过渡到C ++,那就很可能了。 文章来源:http://emb.hqyj.com/Column/20209447.html  

  • 发表了主题帖: 嵌入式软件开发工具简化基于STM8的智能装置开发

    嵌入式软件开发工具简化基于STM8的智慧装置开发 降低功耗一直是微控器(MCU)市场的主要关注焦点。超低功耗MCU现在可大幅降低主动和深度睡眠的功耗。此种变化的效果是显而易见的,因为它大幅提高了日常嵌入式应用的电池寿命,以及在未来使用能量采集的可能性。然而,为了适当地利用现有MCU的电流消耗规格,嵌入式开发工程师必须考虑许多因素。嵌入式开发工程师可利用现代MCU中周边装置的自主操作,透过更接近于'0'MIPS的操作,实现规格表中所要求的低功耗。 对于在功耗敏感的物联网(IoT)应用中所使用的现代MCU和无线MCU(WMCU),执行程式码时的功耗已经明显下降了,甚至达到40μA/MHz以下。藉由这些低功耗规格,您可能会想知道为什么需要睡眠模式。为什么不直接以500kHz运作时脉,以实现20μA的电流消耗,并且让您的应用以电池运行长达10年?这可不是那么简单的。 过去几年来,睡眠状态下的功耗已经显著地改善了。我们现在可以看到在深度睡眠模式时的功耗低于2μA,以及在某些睡眠模式时的功耗甚至低于50nA。您可能认为这些模式的可用性自动地使系统功耗降低,但情况并非如此。相反地​​,应用使用睡眠模式的能力才是关键。 为什么主动模式有好…也有坏? 使用MCU或WMCU最直接方法,是让CPU管理一切。例如,您可以启动类比数位转换(ADC),将一些资料放入通讯介面(如USART传输)中以读取ADC资料,并对资料做出决策,其中的一切都由CPU直接控制。直接的CPU控制简化了开发,但其代价是:每当必须关注周边装置或外部事件时,MCU将会发现自己处于主动模式,从而使功耗大增。 近来,一些规格表将指定40μA/MHz及以下功耗作为主动模式,尤其是在较高频率下。因为较低频率的μA/MHz数值较高,导致绝对功耗更高。这是因为在主动模式下的电流不会随着频率线性调整。其组成部份有二,其中的第二部份在较高的操作频率下具有较小的影响: 处理程式本身随时脉频率而变化 用于基础设施元件,如稳压器、欠压检测器(BOD)等的基准电流 尽可能地将其卸载到MCU中的其他周边装置,并尽可能使CPU处于休眠状态,以避免从主动模式带来的高功耗,是相当有助益的。 功耗预算 对于具有有限电能的电池供电应用,重要的是要知道能量在哪里被使用,以便能开始为其实现最佳化。表1显示未经有效最佳化的(感测器监测)无线应用之功耗预算。 藉由平均每个元件的电流消耗来测量或估计功耗。如果CPU的工作周期为2%,并以60μA/MHz操作于20MHz的频率,则CPU的贡献为24μA。 请注意,表1所示的功耗预算是根据功能划分。例如,基准睡眠电流包括一个低频振荡器和一个即时时脉(RTC),为系统事件进行定时并允许深度睡眠。感测器测量的贡献来自于采用中断以及中断之间的深度睡眠,以0.5kHz采样感测器。这种以蓝牙低功耗实现的装置每秒均传输广播数据封包,这对于低功耗蓝牙装置来说是非常普遍的。 最后,还有非MCU元件的贡献。MCU可能无法直接控制这些元件中的一部份,包括电源管理周边装置,但由ADC采样的感测器在这种情况下可由MCU直接进行工作周期。若非如此,感测器电流将完全进行控制。对于这个例子,连续的感测器电流约为390μA,但是在适当的工作周期下,每个ADC采样只能使用10μs,从而大幅降低了电流。 表1:目标应用的功耗预算 如果该无线应用由具有225mAh容量的CR2032电池供电,则在61.5μA功耗作业时的寿命约为0.4年。但我们其实可以做得更好。 改善现状 现在看看降低MCU感测器测量电流的方法。虽然此示例涉及ADC测量外部感测器,但相关示例可能集中在一系列不同类型的测量以及与外部环境的互动。在这两种情况下,在MCU和外部环境之间都会发生频繁的互动。 图1:采用中断进行ADC采样,随着每秒相互作用的次数增加,功耗随之增加 实现低功耗感测的最简单方法是尽可能地让CPU睡眠,仅在采样时唤醒,同时尽快地重新回到睡眠状态。针对非常低的采样速率,这会是个好方法,但从图1可以看出,当采样速率或每秒相互作用次数增加时,系统的电流消耗也会明显增加。 许多类型的应用程式必须具有高度的活动状态,同时仍保持电池寿命。超过1KHz的活动速率并非前所未闻,而且需要采取措施,才能使这些应用处于低功耗设置。 图2显示两种其他的感测器管理途径。周边反射系统/直接记忆体存取(PRS/DMA)途径完全无需使用CPU,并让ADC采样可完全在深度睡眠模式下进行。因此,RTC透过事件系统(如Silicon Labs的PRS)将事件直接发送到ADC,而不是由RTC唤醒CPU来启动ADC转换。ADC在接收到此事件时自动启动ADC转换;待完成转换后,DMA在这种情况下也能够从深度睡眠模式下启动操作,以及从ADC撷取资料并将其储存在RAM中。PRS/DMA途径的好处是显著降低了电流消耗。在1kHz时,系统电流从58μA降至25μA。 图2:ADC采样图显示最小化电流消耗的各种方法 更有效驱动ADC的方法是以PRS/比较器(CMP)驱动的途径,其中RTC仍然透过PRS系统触发转换,但在这种情况下,ADC使用比较器函数立即对样本进行评估,除非发现特别的事项,否则不启用DMA或CPU。这种途径能以1kHz的采样速率和3.5μA的系统电流进行最终的节能。 动态ADC比较器 使用PRS/CMP途径,CPU将只在必要时花时间查看样本,而使许多样本被弃置。当监视缓慢改变讯号或是寻找讯号中的特定事件时,这种途径多半都极其有利。 当使用比较器监测讯号时,一种方法是测量讯号值,并在讯号中最后一个已知值的任一侧设置比较器。只要讯号保持在比较器阈值范围内,系统将维持深度睡眠,而ADC同时监测讯号, CPU则将保持睡眠状态。 图3:当讯号超过阈值时,动态ADC比较器的值可透过CPU中断进行更改 然而,如果讯号发生变化且超过阈值,系统将会察觉并采取适当的措施。在回到睡眠状态之前,ADC阈值应该重新配置,以适应新的讯号值,并使系统再度进入休眠状态,直到下一次讯号发生变化。图3显示此种技术的一个例子。圆点表示ADC样本,箭头表示当CPU唤醒时,将会记录变化并重新配置阈值。 透过这种方法,系统将会失去一些讯号的准确性,因为讯号可以在触发器之间的阈值间移动。然而,其优点是功耗显著降低。 如果系统的目标是测量讯号的动态值,那么以PRS/DMA驱动方法十分理想,因为它让所有的资料可用,同时仍然提供非常有效的节能。 自主子系统 ADC示例只是睡眠模式可利用以显著降低应用功耗的许多方式之一。专注于低功耗应用的现代MCU(如Silicon Labs的EFM32 Gecko MCU)拥有大量功能,可在深度睡眠模式下运作,从而实现高度的自主行为。 例如,Gecko MCU的LESENSE(低功耗感测)周边能完全自主地对多达16个感测器进行自动化的采样和评估,完全不需要CPU的干预,并与感测器进行高频互动,同时让电池充电一次即可运作10年。 图4:自主ADC系统包括自动感测器工作周期和看门狗监测器 在许多情况下,单个周边装置就能自主地履行其职责,但也有许多需要互动的情况。在这种情况下,我们可以利用一些像现代MCU中的PRS系统等周边互连。这些互连可让多个周边装置互连,以便自主执行更复杂的任务。 图4显示此自主系统的示例,使用事件链来执行其功能: RTC周期性地向ADC发送PRS讯号,以特定时间偏置开始转换 RTC讯号也开始外部感测器的激励,且将在采样时间之前准备就绪; ADC采样并提醒DMA,该DMA撷取采样并将其传输到RAM; 来自ADC的完成PRS讯号,确保外部感测器断电; 当缓冲器已满时,CPU只会产生中断,或者在超过ADC阈值时才会中断; PRS看门狗监测事件回圈功能确保持续运行,但这项功能是可选的。 请注意,在此不必再使用DMA,而且该设定可以与动态比较器设定一起使用,以实现最低的功耗。 这些自主子系统具有以下几个主要优点: 显著地节能; 确定性的感测器操作,即使是在具有大量CPU负载期间。 其缺点在于并非所有的MCU都支援这种类型的操作,而且在设定互动时,您可能会希望硬体设计者一样地思考。对于许多电池供电的应用,其优点明显多于缺点。 文章来源:http://emb.hqyj.com/Column/20209429.html  

  • 2020-05-22
  • 发表了主题帖: 嵌入式平台增加了新的硬件

    围绕Express Logic X-Ware构建的完整Synergy软件包(SSP),扩展了其Synergy平台,使其包括应用程序编程接口(API)。 此SSP版本1.2.0由瑞萨电子认证,维护,支持和担保,以减轻开发人员的嵌入式项目负担。Synergy平台集成了可通过软件API完全访问的各种可扩展的基于ARM Cortex-M的MCU,具有直观配置帮助的开发工具链IAR Embedded Workbench,以及用于开发和解决方案的硬件套件。 记录的软件质量 软件质量是任何使用嵌入式微控制器的产品生命周期中至关重要的方面。为确保质量,SSP是根据已记录并经过审核的软件质量保证流程开发的,该流程遵循已建立的ISO / IEC / IEEE 12207国际标准,涵盖了整个SSP软件开发生命周期(SDLC)。该SQA流程包括每天使用8,000多个测试用例对SSP进行静态和动态测试。除非通过这些条件,否则不会发布SSP。对于需要从质量角度认证或以其他方式证明自己的过程的客户而言,SQA文档将大大减少时间和精力。瑞萨表示,这是MCU行业中第一个在嵌入式平台级别执行和记录此类测试的公司。 协同扩展 将无线连接集成到嵌入式系统中需要来自多个来源的支持和文档:Wi-Fi芯片组或模块制造商,软件协议提供商,甚至是开发工具供应商,以实现成功的集成。Synergy Wi-Fi框架为应用程序开发人员消除了这些障碍。 瑞萨提出了一个Wi-Fi软件框架,即Synergy Wi-Fi框架,以标准化和简化嵌入式IoT设备的连接。瑞萨电子旨在通过引入一种轻松添加Wi-Fi连接的方法来节省系统开发人员的资源,而无论使用哪种芯片组或模块。Synergy Wi-Fi框架通过一组用于通用Wi-Fi功能的统一API提供硬件抽象,而与所使用的Wi-Fi硬件无关。这使开发人员可以快速评估和添加来自各个供应商的Wi-Fi技术,而不必将其应用程序适应不同的API。 图1: 瑞萨的Synergy PK-S5D9套件可访问整个Synergy平台,并使用所有所有Synergy软件包(SSP)的绝大多数功能进行全面开发。 SQA流程包括每天使用8,000多个测试用例对SSP进行静态和动态测试,以确保: •所有代码语句,分支和跳转的100%测试覆盖率 •符合瑞萨和MISRA C:2012强制性编码准则 •低代码复杂性,以实现良好的可读性,可测试性,维护性 •代码行为符合要求 •干净的构建,无警告,无错误 当前,该框架使用QCA4002芯片组支持Longsys GT202 Wi-Fi模块。客户可以在Synergy Gallery上访问Synergy Wi-Fi框架和支持的设备驱动程序。在接下来的几个月中,对其他Wi-Fi芯片组和模块的支持将继续添加到Synergy Gallery中。 Synergy MCU设备组 瑞萨还发布了其Synergy S5D9 Group微控制器,可实现安全的制造和通信。Synergy S5D9组MCU提供嵌入式和IoT应用所需的性能,功能和安全功能。借助瑞萨合作伙伴的SSP和解决方案,开发人员将能够在每个微芯片上建立唯一的信任根,从而开始建立从制造到连接到已部署产品的信任链。 这些MCU的特定功能包括120MHz ARM Cortex-M4 MCU内核,高达2MB的片上闪存和640KB的SRAM,TFT-LCD控制器,精密模拟采集,以太网接口和高速USB。专门的片上安全功能包括使用对称和非对称密码生成和安全存储私钥的能力,真正的随机数生成器(TRNG)和特殊的存储器保护功能。 文章来源:http://emb.hqyj.com/Column/20209413.html  

  • 发表了主题帖: FPGA运算单元可以支援高运算力浮点

    随着机器学习(Machine Learning)领域越来越多地使用现场可编程闸阵列(FPGA)来加速推论(inference),传统FPGA只支援定点运算的瓶颈日益突显。为了解决这一困境,Achronix设计机器学习处理(Machine Learning Processing;MLP)单元,不仅支援浮点的乘加运算,还可以支援对多种定浮点数格式进行拆分。 MLP单元是由一组至多32个乘法器的阵列,以及一个加法树、累加器,以及四舍五入(rounding)/饱和(saturation)/常规化(normalize)功能区块。同时还包括2个快取,分别是一个BRAM72k和LRAM2k,用于独立或结合乘法器使用。MLP支援定点模式和浮点模式,对应以下图1和图2。 图1:定点模式下的MLP方块图 图2:浮点模式下的MLP方块图 考虑到运算功耗以及准确度的折衷,目前机器学习引擎中最常使用的运算格式是FP16和INT8,而Google Tensor Flow支援的BF16格式则是透过降低精度,以获取更大的数值空间。下面的表1是MLP支援的最大位宽浮点格式,表2说明各自的取值范围。 表1: MLP支援的最大位宽浮点格式 表2:不同运算格式的取值范围 而且这似乎也成为未来的一种趋势。目前已经有不少研究显示,更小位宽的浮点或整数可以在确保准确度的同时,还可以减少大量的计算量。因此,为了顺应这一潮流,MLP还支援将大位元宽乘法单元拆分成多个小位元宽乘法,包括整数和浮点数。如以下的表3。 值得注意的是,这里的BFloat16即脑浮点(Brain Float)格式,而Block Float为块浮点演算法,即当应用Block Float16及更低位宽块浮点格式时,指数位宽不变,小数位缩减到了16bit以内,因此浮点加法位宽变小,并且不需要使用浮点乘法单元,而是整数乘法和加法树即可,MLP的架构可以使这些格式下的运算能力倍增。 表3是Speedster7t系列1500元件所支援的典型格式运算能力比较,从表中可以看到,单晶片FPGA的浮点运算力最高可达到123TOPS。 表3: Achronix Speedster7t系列1500元件支援的典型格式运算能力比较 下图3是MLP中FP24/FP16乘加单元的简化结构图,即一个MLP支援FP24/FP16的AxB+CxD,或者AxB、CxD。 图3: MLP中FP24/FP16乘加单元的简化结构图。 而以下的图4则是块浮点乘加单元结构。 图4:块浮点乘加单元结构。 在此考虑浮点数序列块: 浮点数序列块: 各序列块内均拥有相同的指数ea和eb。则: 因此,不难看出,乘法单元的个数取决于尾数(即整数)位宽。 表4: MLP中乘法单元的个数与整数位宽之关系。 文章来源:http://emb.hqyj.com/Column/20209362.html  

  • 2020-05-21
  • 发表了主题帖: 华清远见嵌入式Linux+Android学习路线

    在移动互联网发展的今天,谈起嵌入式Linux+Android系统想必大家都不陌生,那么嵌入式Linux+Android系统包含哪些东西呢?申老师带领大家一起研究下。 ① 电脑一开机,那些界面是谁显示的? 是BIOS,它做什么?一些自检,然后从硬盘上读入windows并启动它。类似的这个BIOS对应于嵌入式Linux+Android里的bootloader。这个bootloader要去Flash上读入内核,并启动它。 ② 启动windows的目的是什么? 当然运行应用程序以便上网、聊天什么的了。这些上网程序、聊天程序在哪? 在C盘、D盘上, 所以,windows要先识别出C盘、D盘,在Linux下我们称之为根文件系统。 ③ windows能识别出C盘、D盘,那么肯定有读写硬盘的能力,这个能力我们称之为驱动程序。当然不仅仅是操作硬盘,还有网卡、USB等等其他硬件。 嵌入式Linux+Android能从Flash上读出并执行应用程序,肯定也得有Flash的驱动程序啊,当然也不仅仅是Flash。 简单地说,嵌入式linux系统里含有bootloader、内核、驱动程序、根文件系统、应用程序这5大块。而应用程序,我们又可以分为:C/C++、Android 所以,嵌入式Linux/Android系统包含以下6部分内容: ① bootloader ② Linux内核 ③ 驱动程序 ④ 使用C/C++编写的应用程序 ⑤ Android系统本身 ⑥ Android应用程序 Android跟Linux的联系实在太大了,它的应用是如此广泛,学习了Linux之后没有理由停下来不学习Android。在大多数智能设备中,运行的是Linux操作系统;它上面要么安装有Android,要么可以跟Android手机互联。现在,Linux+Android已成标配。 怎么学习嵌入式Linux+Android操作系统?本文假设您是零基础,以实用为主,用最快的时间让你入门; 后面也会附上想深入学习时可以参考的资料。在实际工作中,我们从事的是“操作系统”周边的开发,并不会太深入学习、修改操作系统本身。 ① 操作系统具有进程管理、存储管理、文件管理和设备管理等功能,这些核心功能非常 稳定可靠,基本上不需要我们修改代码。我们只需要针对自己的硬件完善驱动程序 ② 学习驱动时必定会涉及其他知识,比如存储管理、进程调度。当你深入理解了驱动程 序后,也会加深对操作系统其他部分的理解 ③ Linux内核中大部分代码都是设备驱动程序,可以认为Linux内核由各类驱动构成,但是要成为该领域的高手,一定要深入理解Linux操作系统本身,要去研读它的源代码。 学习驱动程序之前的基础知识: 1.C语言 只要是理工科专业的,似乎都会教C语言。我见过很多C语言考试90、100分的一上机就傻了,我怀疑他们都没在电脑上写过程序。理论再好,没有实践不能干活的话,公司招你去干嘛?反过来,实践出真知,学习C语言,必须练练练、写写写!当你掌握基本语法后,就可以在电脑上练习一些C语言习题了;当你写过几个C程序后,就可以进入下一阶段的裸机开发了。 ① 不需要太深入作为快速入门,只要你会编写“Hello, world!”,会写冒泡,会一些基础的语法操作,暂时就够了。指针操作是重点,多练习;不需要去学习过多的数据结构知识,只需要掌握链表操作,其他不用学习,比如:队列、二叉树等等都不用学;不需要去学习任何的函数使用,比如文件操作、多线程编程、网络编程等等;这些知识,在编写Linux应用程序时会用,但是在操作系统特别是驱动学习时,用不着!永往直前吧,以后碰到不懂的C语言问题,我们再回过头来学习, 在后续的“裸机开发”中,会让你继续练习C语言,那会更实战化, C语言是在写代码中精进的。 ② 可以在Visual Studio下学习,也可以在Linux下学习,后者需要掌握一些编译命令 2.PC Linux基本操作 对于PC Linux,我们推荐使用Ubuntu,在它上面安装软件非常简便, 我们的工作模式通常是这样:在Windows下阅读、编写代码,然后把代码上传到PC Linux去编译。实际上,Ubuntu的桌面系统已经很好用了,我们拿到各种智能机可以很快上手,相信Ubuntu的桌面系统也可以让你很快上手。为了提高工作效率,我们通常使用命令行来操作Ubuntu。不用担心,你前期只需要掌握这几条命令就可以了,它们是如此简单: ① cd : Change Directory(改变目录) cd 目录名 // 进入某个目录 cd .. // cd “两个点”:返回上一级目录 cd - // cd “短横”:返回上一次所在目录 ② pwd : Print Work Directory(打印当前目录 显示出当前工作目录的绝对路径) ③ mkdir : Make Directory(创建目录) mkdir abc // 创建文件夹abc mkdir -p a/b/c // 创建文件夹a,再a下创建文件夹b,再在b下创建文件夹c ④ rm : Remove(删除目录或文件) rm file // 删除名为file的文件 rm -rf dir // 删除名为dir的目录 ⑤ ls : List(列出目录内容) ⑥ mount : 挂载 mount -t nfs -o nolock,vers=2 192.168.1.123:/work/nfs_root /mnt mount -t yaffs /dev/mtdblock3 /mnt ⑦ chown : Change owner(改变文件的属主,即拥有者) chown book:book /work -R // 对/work目录及其下所有内容,属主改为book用户,组改为book ⑧ chmod : Change mode(改变权限),下面的例子很简单粗暴 chmod 777 /work -R // 对/work目录及其下所有内容,权限改为可读、可写、可执行 ⑨ vi : Linux下最常用的编辑命令,使用稍微复杂,请自己搜索用法。 要练习这些命令,你可以进入Ubuntu桌面系统后,打开终端输入那些命令;或是用SecureCRT、putty等工具远程登录Ubuntu后练习。 3.硬件知识 我们学习硬件知识的目的在于能看懂原理图,看懂通信协议,看懂芯片手册;不求能设计原理图,更不求能设计电路板。对于正统的方法,你应该这样学习: ① 《微机原理》,理解一个计算机的组成及各个部件的交互原理。 ② 《数字电路》,理解各种门电路的原理及使用,还可以掌握一些逻辑运算(与、或等)。 ③ 《模拟电路》 4.Windows下的单片机开发 很多学校都开通了单片机的课程,很多人都是从51单片机、AVR单片机,现在比较新的STM32单片机开始接触嵌入式领域,并且使用Windows下的开发软件,比如keil、MDK等。问题来了,要不要专门学习Windows下的单片机开发? ① 如果这是你们专业的必修课,那就学 ② 如果你的专业跟单片机密切相关,比如机械控制等,那就学 ③ 如果你只是想从单片机入门,然后学习更广阔的嵌入式Linux,那么放弃在Windows学习单片机,理由如下: ① Windows下的单片机学习,深度不够 Windows下有很好的图形界面单片机开发软件,比如keil、MDK等。 它们封装了很多技术细节,比如: 你只会从main函数开始编写代码,却不知道上电后第1条代码是怎么执行的; 你可以编写中断处理函数,但是却不知道它是怎么被调用的; 你不知道程序怎么从Flash上被读入内存; 也不知道内存是怎么划分使用的,不知道栈在哪、堆在哪; 当你想裁剪程序降低对Flash、内存的使用时,你无从下手; 当你新建一个文件时,它被自动加入到工程里,但是其中的机理你完全不懂 ② 基于ARM+Linux裸机学习,可以学得更深,并且更贴合后续的Linux学习。 实际上它就是Linux下的单片机学习,只是一切更加原始:所有的代码需要你自己来编写;哪些文件加入工程,需要你自己来管理。在工作中,我们当然倾向于使用Windows下更便利的工具,但是在学习阶段,我们更想学习到程序的本质。一切从零编写代码、管理代码,可以让我们学习到更多知识: 你需要了解芯片的上电启动过程,知道第1条代码如何运行; 你需要掌握怎么把程序从Flash上读入内存; 需要理解内存怎么规划使用,比如栈在哪,堆在哪; 需要理解代码重定位; 需要知道中断发生后,软硬件怎么保护现场、跳到中断入口、调用中断程序、恢复现场; 你会知道,main函数不是我们编写的第1个函数; 你会知道,芯片从上电开始,程序是怎么被搬运执行的; 你会知道,函数调用过程中,参数是如何传递的; 你会知道,中断发生时,每一个寄存器的值都要小心对待; 你掌握了ARM+Linux的裸机开发,再回去看Windows下的单片机开发,会惊呼:怎么那么简单!并且你会完全明白这些工具没有向你展示的技术细节。 驱动程序=Linux驱动程序软件框架+ARM开发板硬件操作,我们可以从简单的裸机开发入手,先掌握硬件操作,并且还可以: ① 掌握如何在PC Linux下编译程序、把程序烧录到板子上并运行它 ② 为学习bootloader打基础:掌握了各种硬件操作后,后面一组合就是一个bootloader 以上是我对嵌入式Linux+Android开发学习过程的见解,希望对大家有所帮助。        文章来源:http://emb.hqyj.com/Column/20209382.html  

  • 发表了主题帖: 华清远见—QT基础

    一、Qt简介 1、什么是Qt Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展。包括一套跨平台的类库、一套整合的开发工具和一个跨平台的集成开发环境(IDE)。 2、Qt支持的平台 Windows – XP、Vista、Win7、Win8、Win2008、Win10 Uinux/X11 – Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX、FreeBSD、BSD/OS、和其他很多X11平台 Macintosh – Mac OS X Embedded – 有帧缓冲支持的嵌入式Linux平台,Windows CE 3、Qt的安装 Linux离线安装: sudo ./qt-opensource-linux-x86-5.5.1.run Sudo cp /opt/5.5.1/gcc/bin/qmake /usr/bin Windows下离线安装:直接双击安装软件即可 二、创建Qt项目 1、使用向导创建: 打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项弹出New Project对话框,选择Qt Widgets Application,  选择【Choose】按钮,弹出如下对话框 设置项目名称和路径,按照向导进行下一步 选择编译套件 向导会默认添加一个继承自MainWindow的类,可以在此修改类的名字和基类(我们目前一般选QWidget作为基类)。继续下一步 即可创建出一个Qt桌面程序。 2、手动创建 (1)添加一个空项目 选择【choose】进行下一步。设置项目名称和路径 —> 选择编译套件 --> 修改类信息 --> 完成(步骤同上),生成一个空项目。 (2)在空项目中添加文件:在项目名称上单击鼠标右键弹出右键菜单,选择【添加新文件】 弹出新建文件对话框 在此对话框中选择要添加的类或者文件,根据向导完成文件的添加。 三、第一个简单的Qt应用程序 #include <QApplication> #include <QWidget>//引用窗口类声明的头文件 int main(int argc, char *argv[])//入口函数 { QApplication a(argc, argv);//GUI事件处理对象 QWidget w;//定义窗口类对象 w.show();//显示窗口 return a.exec();//事件循环 } 说明: Qt头文件没有.h后缀,Qt中一个类对应一个头文件,类名就是头文件名。 QApplication应用程序类 管理图形用户界面应用程序的控制流和主要设置。 是Qt的整个后台管理的命脉它包含主事件循环,在其中来自窗口系统和其它资源的所有事件处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。 对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication 对象,而不论这个应用程序在同一时间内是不是有0、1、2或更多个窗口。 QWidget是QT的窗口基类,所有的窗口都由其派生而来。 a.exec() 程序进入消息循环,等待对用户输入进行响应。这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回。 四、信号和槽机制 当我们改变一个部件时,往往想要让另一个部件知道,如按下一个按钮,整个窗口退出。可以这样来描述该机制:当点击按钮时按钮会自动产生一个clicked()信号 ,我们将这个信号连接到窗口的quit()槽函数上,这样在点击按钮时就会自动运行窗口的quit()槽函数。  信号和槽的连接: 为了体验一下信号槽的使用,我们以一段简单的代码说明: #include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) {     QApplication app(argc, argv);       QPushButton button("Quit"); QObject::connect(&button, &QPushButton::clicked, &app, &QApplication::quit);     button.show();     return app.exec(); } 我们按照前面介绍的在 Qt Creator 中创建工程的方法创建好工程,然后将main()函数修改为上面的代码。点击运行,我们会看到一个按钮,上面有“Quit”字样。点击按钮,程序退出。 connect()函数最连接信号与槽常用的一般形式: connect(sender, signal, receiver, slot); 参数: sender:发出信号的对象 signal:发送对象发出的信号 receiver:接收信号的对象 slot:接收对象在接收到信号之后所需要调用的函数 文章来源:http://emb.hqyj.com/Column/20209383.html  

  • 2020-05-20
  • 发表了主题帖: 电子技术2020年值得期待的几大新趋势

    2020年CES消费电子展不仅展现了大量的创新概念和原型设计,亦是一个可以探索创新动力,以及引领未来科技的发展方向。意法半导体表示,2020是一个新十年的开始,对于未来十年改变人类生活的产品来说,今年将是影响深远的一年,因此分享了未来的十大新趋势。 1. 2020年,提升生活品质的十年 过去十年,嵌入式系统真正触及了人们的生活。从监测心率的智慧手表,到追踪运动量的健身手环,再到看护银发族的跌倒侦测器,嵌入式技术为人们带来了实质的益处。2020年应该会让此一趋势崛起,未来十年可能提升生活品质。嵌入式电子产品正在从小工具变为对人们生活有深远影响的智慧产品,而且在机器学习的协助下,人们可以获得有关如何改善健康、减轻压力、安全驾驶,以及如何用心交流的资讯和建议。2020年将提炼我们从过去十年学到的知识经验,并开始应用,使其更有意义。 2. 嵌入式系统教育 意法半导体与重点大学合作,在未来工程师教育方式上发挥作用。例如,为了让学生更快速地掌握控制系统知识,加州大学洛杉矶分校(UCLA)的Kaiser教授示范了一个价格适中,而且每个学生都能买得起的旋转倒立摆实验平台。ST还展示了如何用透过无人机套件帮助学生了解嵌入式系统。随着教育工作者为未来十年的热点应用培养人才, 2020年将继续上演大规模的教育学术创新。 3. 充电器引领电动车的普及 电动车的售价越来越便宜,某种程度上归功于ST新研发的SiC元件。然而,崛起于2019年的更高效、更实用的充电器市场,2020年应该会全面爆发。假设电动汽车充电器无处不在,城市街道到处都是充电桩,并且家里安装也不用花太多的钱,电动汽车续航问题将会成为历史。正如Enel X于2020年CES中所展示的应用,ST最新IGBT产品有助于创造出更高效的充电系统。 4. 嵌入式系统的图形使用者介面(GUI) 在很长的一段时间里,嵌入式系统是有几个按钮和常式的黑盒子,如今,变成了征服新产业和新应用的人机互动式系统。这也导致产品的成功对易用性的依赖程度越来越高,开发人员往往需要在图形化使用者介面上花费很多时间。意法半导体TouchGFX等解决方案的出现让使用者介面设计相较从前要简单很多,同时最新的优化设计让低功耗微控制器(MCU)也能支援60 FPS的动画,以及多种颜色和细节。 5. 虚拟货币提升资料传输速率和IoT安全? 区块链是过去十年出现之具有重大意义的热门技术之一。不过,企业现在开始意识到,这些系统的用途远不止于货币。透过IOTA和X-CUBE-IOTA1等专案,ST看到整个科技界都在利用分散式帐本技术来促进机器间的通讯,尤其是IoT节点间的通讯。目前该专案本身进展顺利,2020年,资讯传播方式可能会发生变化。   6. 资料安全要求将更加严格 过去曾有评论家表示IoT为「威胁之网」(Internet of Threats)。但是,在走完一段很长的路后,企业更加明白保护嵌入式系统、资料资讯及更新机制的重要性。随着消费者提出更严格的网路攻击防护需求,意法半导体预计企业将会更加地保护产品的资料安全。几年前,资料外泄只是一种几乎没有间接负面影响的教育学习,今天,这是一场公关噩梦,可能危害公司利益,甚至危及生命安全。STM32Trust 正是ST提供合作伙伴保护嵌入式系统的方法之一。 文章来源:http://emb.hqyj.com/Column/20209361.html  

  • 发表了主题帖: 嵌入式微控制器架构为AI演进

    如果您将IoT与AI相结合会得到什么?AIoT是简单的答案,但由于神经网络技术的进步,使机器学习不再局限于超级计算机的世界,因此您还将获得 嵌入式微控制器的巨大新应用领域。如今,智能手机应用处理器可以(并且确实)执行AI推理以用于图像处理,推荐引擎和其他复杂功能。 未来几年,数十亿物联网设备的生态系统将获得机器学习功能 将这种功能带给不起眼的嵌入式微控制器代表了巨大的机会。想象一下一个助听器,它可以使用AI过滤掉对话中的背景噪音,可以识别用户面部并切换到其个性化设置的智能家电,以及支持AI的传感器节点,该节点可以使用最少的电池运行数年。在端点处处理数据具有不容忽视的延迟,安全性和隐私优势。 然而,利用微控制器级设备实现有意义的机器学习并非易事。例如,作为AI计算的关键标准的内存通常受到严格限制。但是数据科学正在迅速发展以减小模型尺寸,并且设备和IP供应商正在通过开发工具并结合针对现代机器学习需求量身定制的功能来做出响应。 TinyML起飞 作为该行业快速增长的标志,TinyML峰会(本月初在硅谷举行的新行业盛会)正日趋强大。根据组织者的说法,去年举行的第一届峰会有11家赞助公司,而今年的活动有27家赞助商,售空时间更早。组织者还表示,其全球设计师每月聚会的会员人数急剧增加。 高通公司Evgeni Gousev的TinyML委员会联席主席说:“我们看到一个由TinyML技术支持的数万亿智能设备组成的新世界,这些设备可以共同感知,分析和自主行动,为所有人创造一个更健康,更可持续的环境。”展会开幕词。 Gousev将这一增长归功于更节能的硬件和算法以及更成熟的软件工具的开发。他指出,企业和风险投资的投资正在增加,启动和并购活动也在增加。 今天,TinyML委员会认为该技术已经过验证,并且在微控制器中使用机器学习的初始产品应在2-3年内推向市场。“杀手级应用程序”被认为需要3-5年。 去年春天,谷歌首次展示了针对微控制器的TensorFlow框架版本,这是技术验证的重要部分。TensorFlow Lite for Microcontroller设计为仅在千字节内存上运行的设备(Arm Cortex M3上的核心运行时大小为16 KB,并且有足够的运算符来运行语音关键字检测模型,总共需要22 KB)。它仅支持推理(不支持训练)。 大玩家 大型微控制器制造商当然会感兴趣地关注TinyML社区的发展。随着研究使神经网络模型变得越来越小,它们的机会也越来越大。 大多数都对机器学习应用程序提供某种支持。例如,意法半导体(STMicroelectronics)拥有一个扩展包STM32Cube.AI,它可以在基于Arm Cortex-M的STM32系列微控制器上映射和运行神经网络。 e-AI开发环境,该环境允许在微控制器上实现AI推理。它有效地将模型转换为可在其e 2 Studio中使用的形式,与C / C ++项目兼容。 恩智浦表示,已有客户将其低端Kinetis和LPC MCU用于机器学习应用程序。该公司正在将AI与硬件和软件解决方案结合起来,尽管它主要围绕其更大的应用处理器和交叉处理器(在应用处理器和微控制器之间)进行。 强力武装嵌入式微控制器领域中大多数已建立的公司都有一个共同点:Arm。嵌入式处理器内核巨头凭借其Cortex-M系列统治了微控制器市场。该公司最近宣布了全新的Cortex-M55内核,该内核是专门为机器学习应用而设计的,尤其是与Ethos-U55 AI加速器结合使用时。两者都是为资源受限的环境而设计的。 文章来源:http://emb.hqyj.com/Column/20209345.html

  • 2020-05-19
  • 发表了主题帖: MEMS传感器推动嵌入式变革

    物联网(IoT)正在改变我们与周围世界互动的方式。每个人(以及所有事物)都已连接,很快就会相互连接。微机电系统(MEMS)设备和嵌入式传感器通常在实时收集,监视和分析数据方面承担着重要的工作。 如果我必须用一个词来概括一下我的感觉:古老。我仍然觉得MEMS是一个新兴产业。从高中开始我就一直这样做。我没有偏离道路。我已经看到很多人去做其他事情。在[推动]技术进步方面,您的[您]的贡献得到了同行的认可,这是一项巨大的荣誉。所以我会说老而荣幸。 您在硅MEMS的商业化以及先进的嵌入式传感器和执行器方面拥有超过25年的经验。您还拥有MEMS和传感器应用方面的40多项全球专利。您的职业生涯中有哪些主要成就或决定性的决定? 对我而言,它一直在研究传感器将如何成为推动变化的因素。我很早就意识到这一点。我的第一个MEMS工作是在惠普,然后是:“计算机公司将如何处理传感器?” 我们正在建立这些大脑,它们对世界正在发生的事情视而不见,聋哑。传感器使他们能够看到世界,并最终与世界互动。现在对我们来说似乎很自然,而我们拥有的强大计算能力可以解释命令,就像更改音乐一样简单。我们意识到,传感器将成为数字世界和现实世界之间的接口。 我的第二份工作是在Apple。在那儿,我能够看到使技术普及给大众的影响,而没有让某些东西变得深奥的东西,只是让极客和早期采用者真正看到的东西。 我最喜欢的记忆之一是在一家餐馆里,在那儿,我看着一个祖父和他的孙女看着iPhone上的东西。实际上,您在iPhone上有70多岁的东西在看东西,而在计算机上有70多岁的东西在看四人,而我们已经启用了它。[仅仅]四年之前,他们都不是计算机用户。[现在],他们不仅使用计算机,而且他们的经历非常好,妈妈给他们照相了。 技术超越并变得透明。因此,当我看着自己想去的地方,向前迈进时,便是……我们如何使这项技术消失在我们周围的环境中,使我们不再为这项技术的作用或成就感到惊讶。它变得自然。 回到语音接口的概念,如果您回到打字机发明的年代,计算机键盘已有140年的历史了。我八岁的儿子看着键盘,[并且]仅看到一个按钮。这是Siri按钮或“确定Google”按钮。[他的期望是,]“我只是要推动它并与之交谈,它才有效。” 有了这种期望,当技术刚刚消失在后台并且我们更加高效并且拥有更好,更安全的体验时,会是什么样? 希望会有一段有益的关系。 TDK是一家材料和制造公司,从根本上追求质量。我们使用的日语这个字是monozukuri,意思是“如果您要建造东西,那就把它做好。” 现在,我们谈论kotozukuri的概念,即如果您想要构建某些东西,可以很好地构建它,但有目的地构建它,则可以尝试为客户做一些事情,了解客户的需求。它使我们能够从整个行业的角度出发,从用于制造产品的原材料(对质量和性能至关重要的原材料)一直到这种体验将如何影响我们的客户和客户的客户。 它是两种不同能力和优势的完美结合。在一起,我们比以往任何时候都拥有更多的优势,因为我们现在可以跨所有部门获得该系统级别的信息,无论是在IoT,汽车还是消费电子领域。我们拥有更好的工具集来攻击整个市场。 展望未来,在产品开发和技术路线图方面,TDK的InvenSense扩展将采取哪些下一步措施? 我们现在在超声波方面做很多工作。在收购之前,在InvenSense内部,我们有一个非常漂亮的超声波指纹传感器,由TDK(购买InvenSense时)收购。(自)我们收购了另一家公司Chirp。由于TDK在超声材料方面的知识,因此非常适合TDK。[Chirp业务]是TDK内部非常大的业务部门之一。因此,这仅仅是新材料和新MEMS器件完美结合的结果,我认为这就是我们看到应用程序空间爆炸式增长的地方。在[去年的MEMS和传感器执行大会]会议上,我们听说静电致动器已经走得很远了,现在压电材料可能会带我们迈出下一步。 文章来源:http://emb.hqyj.com/Column/20209344.html

  • 发表了主题帖: 嵌入式微控制器架构为AI演进

    如果您将IoT与AI相结合会得到什么?AIoT是简单的答案,但由于神经网络技术的进步,使机器学习不再局限于超级计算机的世界,因此您还将获得 嵌入式微控制器的巨大新应用领域。如今,智能手机应用处理器可以(并且确实)执行AI推理以用于图像处理,推荐引擎和其他复杂功能。 未来几年,数十亿物联网设备的生态系统将获得机器学习功能 将这种功能带给不起眼的嵌入式微控制器代表了巨大的机会。想象一下一个助听器,它可以使用AI过滤掉对话中的背景噪音,可以识别用户面部并切换到其个性化设置的智能家电,以及支持AI的传感器节点,该节点可以使用最少的电池运行数年。在端点处处理数据具有不容忽视的延迟,安全性和隐私优势。 然而,利用微控制器级设备实现有意义的机器学习并非易事。例如,作为AI计算的关键标准的内存通常受到严格限制。但是数据科学正在迅速发展以减小模型尺寸,并且设备和IP供应商正在通过开发工具并结合针对现代机器学习需求量身定制的功能来做出响应。 TinyML起飞 作为该行业快速增长的标志,TinyML峰会(本月初在硅谷举行的新行业盛会)正日趋强大。根据组织者的说法,去年举行的第一届峰会有11家赞助公司,而今年的活动有27家赞助商,售空时间更早。组织者还表示,其全球设计师每月聚会的会员人数急剧增加。 高通公司Evgeni Gousev的TinyML委员会联席主席说:“我们看到一个由TinyML技术支持的数万亿智能设备组成的新世界,这些设备可以共同感知,分析和自主行动,为所有人创造一个更健康,更可持续的环境。”展会开幕词。 Gousev将这一增长归功于更节能的硬件和算法以及更成熟的软件工具的开发。他指出,企业和风险投资的投资正在增加,启动和并购活动也在增加。 今天,TinyML委员会认为该技术已经过验证,并且在微控制器中使用机器学习的初始产品应在2-3年内推向市场。“杀手级应用程序”被认为需要3-5年。 去年春天,谷歌首次展示了针对微控制器的TensorFlow框架版本,这是技术验证的重要部分。TensorFlow Lite for Microcontroller设计为仅在千字节内存上运行的设备(Arm Cortex M3上的核心运行时大小为16 KB,并且有足够的运算符来运行语音关键字检测模型,总共需要22 KB)。它仅支持推理(不支持训练)。 大玩家 大型微控制器制造商当然会感兴趣地关注TinyML社区的发展。随着研究使神经网络模型变得越来越小,它们的机会也越来越大。 大多数都对机器学习应用程序提供某种支持。例如,意法半导体(STMicroelectronics)拥有一个扩展包STM32Cube.AI,它可以在基于Arm Cortex-M的STM32系列微控制器上映射和运行神经网络。 e-AI开发环境,该环境允许在嵌入式微控制器上实现AI推理。它有效地将模型转换为可在其e 2 Studio中使用的形式,与C / C ++项目兼容。 恩智浦表示,已有客户将其低端Kinetis和LPC MCU用于机器学习应用程序。该公司正在将AI与硬件和软件解决方案结合起来,尽管它主要围绕其更大的应用处理器和交叉处理器(在应用处理器和微控制器之间)进行。 强力武装嵌入式微控制器领域中大多数已建立的公司都有一个共同点:Arm。嵌入式处理器内核巨头凭借其Cortex-M系列统治了微控制器市场。该公司最近宣布了全新的Cortex-M55内核,该内核是专门为机器学习应用而设计的,尤其是与Ethos-U55 AI加速器结合使用时。两者都是为资源受限的环境而设计的。 串联使用时,Arm的Cortex-M55和Ethos-U55具有足够的处理能力,可用于手势识别,生物识别和语音识别等应用 但是,初创公司和较小的公司如何寻求与该市场中的大型企业竞争? “不是通过构建基于Arm的SoC!因为他们确实做得很好,” XMOS首席执行官Mark Lippett笑着说。“与这些人竞争的唯一方法是拥有架构优势……(这意味着)Xcore在性能和灵活性方面的内在能力。” 尽管XMOS的Xcore.ai(其新发布的用于语音接口的分频处理器)不会直接与微控制器竞争,但这种观点仍然成立。任何制造基于ARM的SoC以便与大型公司竞争的公司都可以在秘密秘诀中找到一些特别之处。 标度电压和频率 初创公司Eta Compute在TinyML展会上发布了备受期待的超低功耗设备。它可用于永远在线图像处理和传感器融合应用中的机器学习,其功率预算为100µW。该芯片使用Arm Cortex-M3内核和NXP DSP内核-一个或两个内核均可用于ML工作负载。该公司的秘制调味料具有多种成分,但关键是在两个核心上连续缩放时钟频率和电压的方式。这样可以节省大量功率,尤其是在没有PLL(锁相环)的情况下。 文章来源:http://emb.hqyj.com/Column/20209345.html

  • 发表了主题帖: AI加速器架构可提升嵌入式系统性能降低功耗

    AI加速器初创公司Hailo在5月推出其第一款芯片Hailo-8之后,就透露了其新颖的计算架构的一些关键细节。 该公司于2017年2月由以色列国防军精锐情报部门的成员创立。如今,Hailo在特拉维夫总部拥有约60名员工。 Hailo在不到两年的时间里就成功地从概念转变为产品,迄今为止已经获得了2100万美元的A轮融资。他们拥有“至少十项”专利正在申请中。 性能和力量 在嵌入式视觉峰会上发布的Hailo-8拥有26 TOPS的性能和2.8 TOPS / W的显着功率效率。功耗是在ResNet-50上以8位精度在低分辨率视频(224 x 224于672 fps)上运行时进行测量的,批量大小为1。这比当前市场领先的汽车视觉解决方案好一个数量级。边缘推断。 Hailo产品营销总监Liran Bar在接受EETimes采访时强调,2.8 TOPS / W数字是基于实际应用的真实数字。 他说:“公司声称各种能效,但实际上他们将理论上的数量乘以拥有的TOPS,然后将其除以,”(按功耗)。“ [Hailo-8的26 TOPS是最大理论值,但这是假设您具有100%的利用率,在实际应用中情况并非如此。” 使用Mobile-Net-SSD在720p视频上进行图像检测以及在1080p视频上使用FCN-16进行语义分割的结果同样令人印象深刻。 在高清分辨率的镜头上运行[语义分割]网络,与其他需要降低输入传感器分辨率以满足实时要求的解决方案不同,这意味着我们可以识别更远的物体,并且OEM可以利用昂贵的输入他们正在使用的传感器,”巴尔说。 计算架构 Hailo的架构与CPU和GPU的主要区别在于缺少外部内存。相反,计算资源(内存,控制和计算模块)分布在整个芯片上。无需在芯片上和芯片外发送数据,就可以节省大量功率。 神经网络由层组成,每个层包括多个节点。在节点处,数据值乘以各种权重值,然后相加在一起,然后将结果传递到下一层。一层可能需要与下一层略有不同的计算资源。 Hailo的软件分析网络中每一层的需求并分配相关资源。分配给每一层的内存,控制和计算块都尽可能地彼此映射到芯片上,并且随后的各层都紧挨着安装。这个想法是使数据必须传播的距离最小化。 “创新来自架构本身,” Bar说。“我们没有做任何分块,我们没有做任何压缩,我们没有做任何稀疏性,传统计算体系结构不需要任何技术来克服带宽问题。” 他补充说:“没有硬件定义的管道,因此我们非常灵活,可以采用其他神经网络,硬件支持它们。但是,我们需要通过补充软件来弥补差距。” 在过去的两年中,软件和硬件已经紧密合作开发。包含专有量化方案的软件堆栈支持TensorFlow,第四季度将提供ONNX支持。 Hailo新颖的计算架构使用软件根据需要向神经网络分配片上存储器,控制和计算块 驾驶员协助 Hailo-8专为边缘设备中的神经网络加速而设计,特别针对汽车领域,目标是高级驾驶员辅助系统(ADAS)和自动驾驶应用。它正在通过芯片级别的ASIL-B(和系统级别的ASIL-D)认证,并且已通过AEC-Q100认证。 Hailo-8还适合需要延迟和数据保密性的应用程序,这些延迟和数据保密性是通过在边缘设备而不是云中本地执行AI推理来提供的。 巴尔说:“汽车是我们的战略市场,我们的大多数投资者都来自汽车市场。” “我们已经与汽车Tier-1和OEM进行了接触,但这需要一段时间才能产生收入。” Hailo到目前为止的市场看法是,当今的汽车客户在AI加速器选择中的目光不再局限于原始计算,而优化变得越来越重要。 充当协处理器,意味着Hailo-8可以与汽车Tier-1已经开发的SoC一起设计,而无需进行深度学习。 “为了缩短上市时间,[客户]可以将Hailo-8作为协处理器进行连接,保留他们在SoC上所做的所有开发,但是可以减轻神经网络任务的负担。从他们的角度来看,这是一个很大的优势。” Hailo如何把握机会与数十家其他AI边缘加速器初创公司对抗? 巴尔说:“目前仍有许多创新技术需要证明。” “关于FPGA,模拟设备,基于存储器的架构,人们有很多想法,但是最终,挑战在于将其作为产品并将真正的芯片摆在桌面上。当我们环顾四周并看到可用的[竞争对手]芯片时,实际上今天没有太多可以集成的芯片。” 文章来源:http://emb.hqyj.com/Column/20209352.html

  • 2020-05-18
  • 发表了主题帖: 将嵌入式生命体征监测传感器编织到衣服上

    嵌入式开发工程师已经开发出一种将传感器嵌入弹性服装面料中的技术,从而为您一整天监测生命体征(例如温度,呼吸和心率)铺平了道路。此外,这些合身且带有传感器的服装可以机洗。 嵌入式开发工程师说,这些衣服可以用来远程追踪病人的健康状况,从在家或医院生病的人到监测运动员的身体活动的人都可以。它也可用于远程医疗,这在COVID-19大流行期间尤其适用于越来越多地与患者远程联系的医生。 麻省理工学院媒体艺术与科学系LG电子职业发展助理教授Canan Dagdeviren说:“我们可以在每天穿着的纺织品中嵌入任何可买到的电子零件或定制的实验室制造的电子产品,从而打造出舒适的服装。”一份声明。“这些都是可定制的,因此我们可以为需要从身体获得一些身体数据(例如温度,呼吸频率等)的任何人制作服装。” 服装通过压缩工作,传感器接触皮肤。传感器可从弹性材料中移除,并且可以使用嵌入传感器中的衣物清洗衣物。 根据发表在科学杂志《自然》上的嵌入式开发工程师的论文,可以使用标准的高通量纺织品制造和服装构图技术,以各种形式,尺寸和功能定制该纺织品平台。类似于压缩衬衫,嵌入式开发工程师称其为可伸缩的电子纺织品合身服(E-TeCS),可使电子设备与皮肤之间的接触压力约为25 mmHg。嵌入式开发工程师说,这可以提高身体舒适度并提高皮肤上传感器读数的精度。 西装(服装)是根据定制的面料量身定制的,可以与各种传感器和互连件集成为柔性,可拉伸的电子条。纺织品平台由用于编织这些电子条的通道或口袋组成。 嵌入式开发工程师说,传感器IC和互连是使用两层工业柔性印刷电路板(PCB)工艺开发的,并采用了额外的步骤进行芯片和无源组件的组装以及用热塑性聚氨酯(TPU)(TE-11C,Dupont)封装和可清洗的密封剂(PE773,杜邦)。 借助机械声惯性感应,E-TeCS可以以0.1°C的精度和0.01°C的精度检测皮肤温度,以0.0012 m / s 2的精度检测心律和呼吸。 嵌入式开发工程师还发现,在1,000次拉伸循环中,编织的纺织电子产品可以拉伸多达30%,而机械和电气性能不会明显下降。 文章来源:http://emb.hqyj.com/xuexi/baike/20209340.html  

最近访客

< 1/1 >

统计信息

已有3人来访过

  • 芯币:15
  • 好友:--
  • 主题:32
  • 回复:0
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言