北京pk10开奖号码查询,pk10直播9号彩票网,北京pk10开奖直播号彩票网,北京赛车pk10直播9号彩票网,www.truly-organic.com pk10开奖

Baidu

北京pk10开奖号码查询9号彩票 万利彩票 熊猫彩票 98彩票 www.truly-organic.com博乐彩票 云鼎彩票 快赢彩票 快赢彩票 永利彩票 趣彩彩票 金巴黎彩票 广发彩票 葡京彩票 顺发彩票 鸿利彩票 聚富彩票 我赢彩票 大发彩票 财神汇彩票 苹果彩票 欢乐彩票 大唐彩票 盛兴彩票 智博彩票 环球彩票 金彩彩票 彩盈彩票 丰亿彩票 金沙彩票 www.truly-organic.com金福彩票 大运彩票 万彩会彩票 大乐购彩票 宏发彩票 八八彩票 金凤凰彩票 易发彩票 豪门会彩票 迪士尼彩票 众彩彩票 丰亿彩票 大世纪彩票 创元彩票 鑫彩网彩票 大无限彩票 利来彩票 华夏彩票 金砖彩票 大金彩票 千禧彩票 全迅彩票 菠萝彩票 大赢家彩票 华人彩票 通博彩票 万家彩票 盛世彩票 福布斯彩票 鼎盛彩票www.truly-organic.com 澳彩网彩票 东方彩票 新世佳彩票 皇冠彩票 港龙彩票 迅雷彩票 幸运飞艇开奖 幸运飞艇彩票 幸运飞艇官网 幸运飞艇技巧 幸运飞艇开户 幸运飞艇代理 幸运飞艇开奖记录幸运飞艇开奖直播 幸运飞艇开奖记录查询 www.truly-organic.com幸运飞艇投注平台 幸运飞艇计划软件 凤凰娱乐 500万彩票 E时彩 88彩票 J8彩票 5颗星彩票 W彩票网 M5彩票 天天彩票 彩客网彩票 好彩头彩票 彩票在线 www.truly-organic.com乐彩网彩票 GT彩票 投彩彩票 中华彩票 568彩票 快开彩票 18彩票 传奇彩票 网易彩票 幸运彩票 e乐彩 彩票控 状元彩票 拉菲彩票 999彩票 杏彩彩票 东方彩票 皇族彩票 qq彩票 金誉彩票 爱投彩票 人人彩票 爱购彩 众购彩票 盈彩娱乐 彩票王 非凡彩票 五洲尚合彩票 www.truly-organic.com快开彩票 彩盈线上娱乐 富利娱乐 传奇娱乐 全民彩票北京pk10开奖号码查询

新闻中心

EEPW首页 > 嵌入式系统 > 牛人业话 > 这些技巧让高可靠性嵌入式系统的开发更简单

这些技巧让高可靠性嵌入式系统的开发更简单

作者:时间:2017-04-17来源:网络

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

本文引用地址:/article/201704/346641.htm
这些技巧让高可靠性嵌入式系统的开发更简单

 

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

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

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

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

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

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

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

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

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

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

  技巧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请求这样大小的内存缓冲区。此一分配的内存可在整个应用程序的生命周期期 间保持,且不会有堆或内存碎片问题方面的顾虑。

  结论

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



关键词: 嵌入式 看门狗

评论

技术专区

关闭
pk10开奖记录 pk10开奖直播www.truly-organic.com pk10直播 pk10官网 pk10开奖 pk10论坛 pk10技巧 pk10助赢软件 pk10杀号 pk10杀号软件 pk10冠亚军玩法 pk10冠军玩法 pk10玩法攻略www.truly-organic.com pk10玩法规则 pk10中奖规则 pk10定位胆玩法 pk10彩赔率多少 pk10走势 pk10开户 pk10开奖记录百度9号彩票网 pk10开奖号码查询 pk10开奖直播 pk10计划群www.truly-organic.com pk10玩法 pk10网站 pk10玩法介绍 pk10后二 pk10改单 pk10开奖直播百度9号彩票网 pk10qq群 pk10稳赚 pk10分析软件 pk10群 pk10平台网址 pk10赚钱 pk10综合走势图www.truly-organic.com pk10遗漏 pk10人工计划 pk10投注技巧 pk10直播百度9号彩票网 pk10开奖时间 pk10评测 pk10平台评测网 pk10网站制作 pk10现场开奖 pk10官方开奖www.truly-organic.com pk10地址 北京赛车pk10开奖记录 北京赛车pk10开奖直播 北京赛车pk10直播 北京赛车pk10官网 pk10官网百度9号彩票网 北京赛车pk10开奖 北京赛车pk10论坛 北京赛车pk10技巧 北京pk10玩法规则 北京赛车pk10助赢软件 北京赛车pk10杀号 北京赛车pk10杀号软件 北京赛车pk10冠亚军玩法 北京赛车pk10冠军玩法www.truly-organic.com 北京赛车pk10玩法攻略 北京赛车pk10中奖规则 pk10开奖百度9号彩票网 pk10论坛百度9号彩票网 北京赛车pk10定位胆玩法 北京赛车pk10彩赔率多少 北京赛车pk10走势 北京赛车pk10开户 北京赛车pk10开奖号码查询 北京赛车pk10开奖直播 北京赛车pk10计划群 北京赛车pk10玩法 北京赛车pk10网站www.truly-organic.com pk10技巧百度9号彩票网 pk10助赢软件百度9号彩票网 pk10杀号百度9号彩票网 pk10杀号软件百度9号彩票网 北京赛车pk10玩法介绍 北京赛车pk10后二 北京赛车pk10改单 北京赛车pk10qq群 北京赛车pk10稳赚 北京赛车pk10分析软件 北京赛车pk10群 北京赛车pk10平台网址 pk10玩法规则百度9号彩票网www.truly-organic.com pk10中奖规则百度9号彩票网 pk10定位胆玩法百度9号彩票网 北京赛车pk10赚钱 北京赛车pk10综合走势图 北京赛车pk10遗漏 北京赛车pk10人工计划 北京赛车pk10投注技巧 北京赛车pk10开奖时间 北京赛车pk10评测 北京赛车pk10平台评测网 北京赛车pk10网站制作 pk10走势百度9号彩票网 北京赛车pk10现场开奖www.truly-organic.com 北京赛车pk10官方开奖 北京赛车pk10地址 北京pk10开奖记录 北京pk10开奖直播 北京pk10直播 北京pk10官网 北京pk10开奖 北京pk10论坛 北京pk10技巧 北京pk10玩法规则 北京pk10助赢软件 北京pk10杀号 北京pk10杀号软件 pk10开户百度9号彩票网www.truly-organic.com 北京pk10冠亚军玩法 北京pk10冠军玩法 北京pk10玩法攻略 北京pk10中奖规则 北京pk10定位胆玩法 pk10冠军玩法百度9号彩票网 北京pk10彩赔率多少 北京pk10走势 北京pk10开户 北京pk10开奖号码查询 北京pk10开奖直播 pk10彩赔率多少百度9号彩票网 北京pk10计划群 北京pk10玩法 北京pk10网站www.truly-organic.com 北京pk10玩法介绍 北京pk10后二 北京pk10改单 北京pk10qq群 北京pk10稳赚 北京pk10分析软件 北京pk10群 北京pk10平台网址 北京pk10赚钱 pk10冠亚军玩法百度9号彩票网 pk10玩法攻略百度9号彩票网 北京pk10综合走势图 北京pk10遗漏 北京pk10人工计划 北京pk10投注技巧 北京pk10开奖时间 北京pk10评测www.truly-organic.com 北京pk10平台评测网 北京pk10网站制作 北京pk10现场开奖 北京pk10官方开奖 北京pk10地址 北京赛车pk拾开奖记录 北京赛车pk拾开奖直播 北京赛车pk拾直播 北京赛车pk拾官网 北京赛车pk拾开奖 北京赛车pk拾论坛 北京赛车pk拾技巧 北京pk10玩法规则 北京赛车pk拾助赢软件 北京赛车pk拾杀号www.truly-organic.com 北京赛车pk拾杀号软件 北京赛车pk拾冠亚军玩法 北京赛车pk拾冠军玩法 北京赛车pk拾玩法攻略 北京赛车pk拾中奖规则 北京赛车pk拾定位胆玩法 北京赛车pk拾彩赔率多少 北京赛车pk拾走势 北京赛车pk拾开户 北京赛车pk拾开奖号码查询 北京赛车pk拾开奖直播 北京赛车pk拾计划群 北京赛车pk拾玩法 北京赛车pk拾网站 北京赛车pk拾玩法介绍www.truly-organic.com 北京赛车pk拾后二 北京赛车pk拾改单 北京赛车pk拾qq群 北京赛车pk拾稳赚 北京赛车pk拾分析软件 北京赛车pk拾群 北京赛车pk拾平台网址 北京赛车pk拾赚钱 北京赛车pk拾综合走势图 北京赛车pk拾遗漏 北京赛车pk拾人工计划 北京赛车pk拾投注技巧 北京赛车pk拾开奖时间 北京赛车pk拾评测 北京赛车pk拾平台评测网www.truly-organic.com 北京赛车pk拾网站制作 北京赛车pk拾现场开奖 北京赛车pk拾官方开奖 北京赛车pk拾地址