0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

确保系统更加可靠运行,这七大技巧不可不知

贸泽电子设计圈 来源:互联网 作者:佚名 2017-09-07 15:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

就像很遥远年代的人们思想还很保守,固守着自己一方净土独享着一份安逸。总认为天圆地方一直在平淡而充实的生活,又好似红楼梦中的刘姥姥走进大观园看得眼花缭乱。对于75年以前人传统观念还比较浓重,对于那个年代的人来讲所受到教育和现在应该说是不一样的。对于那个时代物资相对比较匮乏,科技相对有些落后没有现在所谓的大数据、云计算、互联网和移动互联网。

从规范完善的开发周期到严格执行和系统检查,开发高可靠性嵌入式系统的技术有许多种。本文介绍了7个易操作且可以长久使用的技巧,它们对于确保系统更加可靠地运行并捕获异常行为大有帮助。

技巧1——用已知值填充ROM


软件开发人员往往都是非常乐观的一群人,只要让他们的代码忠实地长时间地运行就可以了,仅此而已。微控制器跳出应用程序空间并在非预想的代码空间中执行这种情况似乎是相当少有的。然而,这种情况发生的机会并不比缓存溢出或错误指针失去引用少。它确实会发生!发生这种情况后的系统行为将是不确定的,因为默认情况下内存空间都是0xFF,或者由于内存区通常没有写过,其中的值可能只有上帝才知道。

不过有相当完备的linker或IDE技巧可以用来帮助识别这样的事件并从中恢复系统。技巧就是使用FILL命令对未用ROM填充已知的位模式。要填充未使用的内存,有很多不同的可能组合可以使用,但如果是想建立更加可靠的系统,最明显的选择是在这些位置放置ISR fault handler。如果系统出了某些差错,处理器开始执行程序空间以外的代码,就会触发ISR,并在决定校正行动之前提供储存处理器、寄存器和系统状态的机会。

关于如何使用FILL命令以及关于其用途的替代性策略等额外信息可以在“使用FILL命令提高代码完整性”中找到(http://www.beningo.com/improving-code-integrity-using-fill/)。

技巧2——检查应用程序的CRC


嵌入式工程师来说一个很大的好处是,我们的IDE和工具链可以自动产生应用程序或内存空间校验和(Checksum),从而根据这个校验和验证应用程序是否完好。有趣的是,在许多这些案例中,只有在将程序代码加载到设备时,才会用到校验和。

然而,如果CRC或校验和保持在内存中,那么验证应用程序在启动时(或甚至对长时间运行的系统定期验证)是否仍然完好是确保意外之事不会发生的极好途径。现在一个编程过的应用程序发生改变的概率是很小的,但考虑每年交付的数十亿个微控制器以及可能恶劣的工作环境,应用程序崩溃的机会并不是零。更有可能的是,系统中的一个缺陷可能导致某一扇区发生闪存写入或闪存擦除,从而破坏应用程序的完整性。

技巧3——在启动时执行RAM检查


为了建立一个更加可靠和扎实的系统,确保系统硬件正常工作非常重要。毕竟硬件会发生故障。(幸运的是软件永远不会发生故障,软件只会做代码要它做的事,不管是正确的还是错误的)。在启动时验证RAM的内部或外部没有问题,是确保硬件可以如预期般运作的一个好方法。

有许多不同的方法可用于执行RAM检查,但常用的方法是写入一个已知的模式,然后等上一小段时间再回读。结果应该是所读就是所写。真相是,在大多数情况下RAM检查是通过的,这也是我们想要的结果。但也有极小的可能性检查不通过,这时就为系统标示出硬件问题提供了极好的机会。

这里有一个memtest C模块,是Michael Barr在 2000年就写好了的,它可以节省工程师考虑RAM测试所需的时间。可在此处下载该模块(http://www.embedded.com/design/embedded/source-code/4200237/memtest-zip16)。

技巧4——使用堆栈监视器


对许多的嵌入式开发者而言,堆栈似乎是一股相当神秘的力量。当奇怪的事情开始发生,工程师终于被难倒了,他们开始思考,也许堆栈中发生了什么事。结果是盲目地调整堆栈的大小和位置等等。但该错误往往是与堆栈无关的,但怎能如此确定?毕竟,有多少工程师真的实际执行过最坏情况下的堆栈大小分析?

堆栈大小是在编译时就静态分配好的,但堆栈是以动态的方式使用的。随着代码的执行,应用程序需要的变量、返回的地址和其它信息被不断存储在堆栈中。这种机制导致堆栈在其分配的内存中不断增长。然而,这种增长有时会超出编译时确定的容量极限,导致堆栈破坏相邻内存区域的数据。

绝对确保堆栈正常工作的一种方法是实现堆栈监视器,将它作为系统“保健”代码的一部分(有多少工程师会这样做?)。堆栈监视器会在堆栈和“其它”内存区域之间创建一个缓冲区域,并填充已知的位模式。然后监视器会不断的监视图案是否有任何变化。如果该位模式发生了改变,那就意味着堆栈增长得太大了,即将要把系统推向黑暗地狱!此时监视器可以记录事件的发生、系统状态以及任何其它有用的数据,供日后用于问题的诊断。

大多数实时操作系统(RTOS)或实现了内存保护单元(MPU)的微控制器系统中都提供有堆栈监视器。可怕的是,这些功能默认都是关闭状态,或者经常被开发人员有意关闭。在网络上快速搜寻一下可以发现,很多人建议关闭实时操作系统中的堆栈监视器以节省56字节的闪存空间。等等,这可是得不偿失的做法!

技巧5 - 使用MPU


在过去,是很难在一个小而廉价的微控制器中找到内存保护单元(MPU)的,但这种情况已经开始改变。现在从高端到低端的微控制器都已经有MPU,而这些MPU为嵌入式软件开发人员提供了一个可以大幅提高其固件(firmware)鲁棒性(robustness)的机会。

MPU 已逐渐与操作系统耦合,以便建立内存空间,其中的处理都分开,或任务可执行其代码,而不用担心被stomped on。倘若真有事情发生,不受控制的处理会被取消,也会执行其他的保护措施。请留意带有这种组件的微控制器,如果有,请多加利用它的这种特性。

技巧6 - 建立一个强大的看门狗系统


你经常会发现的一种总是最受喜爱的看门狗(watchdog)实现是,在看门狗被启用之处(这是一个很好的开始),但也是可以用周期性定时器将该看门狗清零之处;定时器的启用是完全与程序中出现的任何情况隔离的。使用看门狗的目的是协助确保如果出现错误,看门狗不会被清零,即当工作暂停,系统会被迫去执行硬件重设定(hardware reset),以便恢复。使用与系统活动独立的定时器可以让看门狗保持清零,即使系统已失效。

对应用任务如何整合到看门狗系统中,嵌入式开发人员需要仔细考虑和设计。例如,有种技术可能可以让每个在一定时期内运行的任务标示它们可以成功地完成其任 务。在此事件中,看门狗不被清零,强制被复位。还有一些比较先进的技术,像是使用外部看门狗处理器,它可用来监视主处理器如何表现,反之亦然。

对一个可靠的系统而言,建立一个强大的看门狗系统是很重要的。由于有太多的技术,难以在这几个段落中完全涵盖,但针对此一议题,笔者未来还会发表相关的文章。

技巧7 - 避免易失存储器分配


不习惯在资源有限环境下工作的工程师,可能会试图使用其编程语言的特性,这种语言让他们可以使用易失存储器分配。毕竟,这是一种常在计算器系统中使用的技术,在计算器系统中,只有在有必要时,内存才会被分配。例如,以C开发时,工程师可能倾向于使用malloc来分配在堆(heap)上的空间。有一个操 作会执行,一旦完成,可以使用free将被分配的内存返回,以便堆的使用。

在资源受限的系统,这可 能是一场灾难!使用易失存储器分配的其中一个问题是,错误或不当的技术可能会导致内存泄漏或内存碎片。如果出现这些问题时,大多数的嵌入式系统并没有 资源或知识来监视堆或妥善地处理它。而当它们发生时,如果应用程序提出对空间的要求,但却没有所请求的空间可以使用,会发生什么事呢?

使用易失存储器分配所产生的问题是很复杂的,要妥善处理这些问题,可以说是一个噩梦!一种替代的方法是,直接以静态的方式,简化内存的分配。例如,只要在 程序中简单地建立一个大小为256字节长的缓冲区,而不是经由malloc请求这样大小的内存缓冲区。此一分配的内存可在整个应用程序的生命周期期 间保持,且不会有堆或内存碎片问题方面的顾虑。

结论

这些都只是一些可以让开发人员开始建立更可靠嵌入式系统的方法。另外还有很多其他技术,例如利用良好的编码标准、位翻转的监测、执行数组和指针边界检查,及使用断言等。所有这些技术都是让设计者可以开发出可靠性更高嵌入式系统的秘诀。

关于贸泽电子设计圈

贸泽电子设计圈由贸泽电子(Mouser Electronics)开发和运营,服务全球广大电子设计群体,贸泽电子分销600多家领先品牌,可订购400多万种在线产品,可为设计工程师和采购人员提供一站式采购平台,欢迎关注我们,获取第一手的设计与产业资讯信息!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5209

    文章

    20655

    浏览量

    336953
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3822

    浏览量

    133881
  • 嵌入式工程师

    关注

    1

    文章

    39

    浏览量

    16833

原文标题:Duang!Duang!Duang!7大技巧助你开发高可靠嵌入式系统

文章出处:【微信号:Mouser-Community,微信公众号:贸泽电子设计圈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    七大无人机全频段抗干扰通信系统软件已融合AI模型

        七大AI融合型无人机全频段抗干扰通信系统精简介绍    七大无人机全频段抗干扰通信系统融合AI模型后,抗干扰能力、通信稳定性及智能化水平显著提升,具体如下:    
    的头像 发表于 01-13 16:08 330次阅读

    七大大模型赋能的无人集群分布式协同调度与任务分配系统

        七大典型大模型赋能无人集群分布式协同调度与任务分配系统案例    尽管“七大大模型赋能系统”并非严格意义上的官方分类,但以下类代表
    的头像 发表于 12-30 11:39 557次阅读

    国内七大基于大模型的发射任务调度与过程保障分系统软件介绍

        七大基于大模型的发射任务调度与过程保障系统    结合公开航天资料、机构技术路线及商业航天实践,可梳理出涵盖国内外典型案例的七大智能发射调度系统及平台。这些
    的头像 发表于 12-24 11:08 421次阅读

    七大基于大模型的地面测控站网调度分系统软件的应用与未来发展

        七大基于大模型的地面测控站网智能调度系统    “七大基于大模型的地面测控站网调度分系统”并非公开资料中的标准化术语,而是结合国际航天测控领域发展趋势,以及人工智能大模型的技术
    的头像 发表于 12-19 15:42 501次阅读

    请问可不可以在中断中配置ADC和处理ADC检测到的结果?

    可不可以在中断中配置ADC和处理ADC检测到的结果?
    发表于 11-13 06:18

    2025年七大数据防泄密软件权威盘点:为你的机密数据提供持续守护

    2025年七大数据防泄密软件权威盘点:为你的机密数据提供持续守护 无论是内部员工的无意泄露,还是外部黑客的有意窃取,都可能给企业带来巨大的经济损失和声誉损害。 如何选择一款可靠的数据防泄密软件,成为
    的头像 发表于 09-30 10:46 607次阅读

    精准润滑,稳定运行:泰德航空润滑系统的核心技术解析

    润滑系统:保障试验件可靠运行的关键支撑润滑系统是现代工业测试和研发过程中不可或缺的关键组成部分,其主要作用是为试验件提供持续、稳定、可控的润
    的头像 发表于 09-25 11:27 404次阅读
    精准润滑,稳定<b class='flag-5'>运行</b>:泰德航空润滑<b class='flag-5'>系统</b>的核心技术解析

    七大无人机电磁兼容测试平台系统:如何护航飞行安全

    七大无人机电磁兼容测试平台系统:如何护航飞行安全
    的头像 发表于 09-12 14:49 854次阅读
    <b class='flag-5'>七大</b>无人机电磁兼容测试平台<b class='flag-5'>系统</b>:如何护航飞行安全

    工控板SMT贴片加工:七大关键工艺要求详解​

    品控体系,为工业控制、智能装备等领域提供高可靠性工控板贴片加工服务。本文深度解析工控级SMT加工的七大关键工艺规范。 工控级SMT加工的七大关键工艺要求 一、工控板SMT加工的严苛性要求 工控板作为工业自动化设备的核心控制单元,
    的头像 发表于 08-06 09:18 1250次阅读
    工控板SMT贴片加工:<b class='flag-5'>七大</b>关键工艺要求详解​

    光信号传递中的耦合效能:七大核心要素的专业解析

    在光通信系统链路中,光模块与光纤的耦合效率直接决定了系统的传输性能与可靠性。耦合过程本质上是光波模式从光源 / 光器件到光纤波导的能量转换与传输,其效率损耗每增加 0.5dB,就可能导致传输距离缩短
    的头像 发表于 08-02 10:10 1395次阅读
    光信号传递中的耦合效能:<b class='flag-5'>七大</b>核心要素的专业解析

    SPI通信可不可以不使用中断?

    你好,我目前在使用TC377芯片,我需要在PWM中断内使用QSPI通信,出于某种原因,我不得不将PWM中断优先级提到最高,导致我无法进入spi中断。因此,我希望知道SPI通信可不可以不使用中断?
    发表于 07-31 08:15

    电解电容真的不可靠吗?

    电容的高故障率是电力电子系统可靠性问题的一大来源,其中电解电容短寿命的特点尤为突出。然而,追求可靠性的本质是追求产品全寿命周期成本的最优,从这一角度出发,可靠性不高的电解电容也许在某些
    的头像 发表于 07-26 09:14 932次阅读
    电解电容真的<b class='flag-5'>不可靠</b>吗?

    第九届集创赛“法动杯”燃爆七大赛区

    盛夏创新热潮涌动,“法动杯”燃爆集创赛七大赛区。第九届全国大学生集成电路创新创业大赛(简称“集创赛”)正如火如荼进行中,集创赛七大分赛区决赛已全面启动。
    的头像 发表于 07-23 16:45 1687次阅读

    PCBA贴片价格“水很深”?七大核心要素拆解,帮你避开成本陷阱!

    一站式PCBA加工厂家今天为大家讲讲PCBA贴片价格影响因素有哪些?影响 PCBA贴片加工 价格的七大核心要素。PCBA贴片加工作为电子制造的核心环节,其费用核算受多重技术规格与商业因素制约。我们
    的头像 发表于 07-17 09:28 1033次阅读

    PCBA代工代料行业怎么应用AI技术?五大变革不可不知

    ——从“制造”到“智造”,AI如何赋能电子制造的“心脏”? 在电子制造领域,PCBA(印刷电路板组装)被称为电子产品的“心脏”,而代工代料模式则是这一行业高效运转的核心。随着AI技术的快速渗透,传统PCBA行业正经历一场从“经验驱动”到“数据驱动”的智能化革命。本文将深入探讨AI技术如何推动这一领域的五大核心变革。   一、生产流程智能化:效率与精度的双重飞跃 AI质检:告别“人眼找芝麻”的时代 传统PCBA检测依赖人工目检,效率低
    的头像 发表于 06-14 17:35 1866次阅读
    PCBA代工代料行业怎么应用AI技术?<b class='flag-5'>这</b>五大变革<b class='flag-5'>不可不知</b>