欢迎您访问欧宝体育高清直播门户网站!    
您所在的位置: 首页 > 欧宝直播篮球 > 公司新闻

提高嵌入式程序可靠性的7个常用技巧

发布时间:2023-12-23 13:00:02 作者: 欧宝体育入口 来源:欧宝直播篮球

  

  成为一个正式的嵌入式主板开发工程师,是一个艰辛的过程,需要研发人员维护和管理系统的每个比特和字节。

  从规范完善的开发周期到严格执行和系统检查,开发高可靠性嵌入式系统的技术有许多种。

  今天给大家介绍7个易操作且可以长久使用的技巧,它们对于确保系统更加可靠地运行并捕获异常行为大有帮助。

  嵌入式软件开发人员往往都是非常乐观的一群人,只要让他们的代码忠实地长时间地运行就可以了,仅此而已。

  微控制器跳出应用程序空间并在非预想的代码空间中执行这样的一种情况似乎是相当少有的。

  然而,这样的一种情况发生的机会并不比缓存溢出或错误指针失去引用少。它确实会发生!发生这种情况后的系统行为将是不确定的,因为默认情况下内存空间都是0xFF,或者由于内存区通常没有写过,其中的值可能只有上帝才知道。

  不过有相当完备的linker或IDE技巧可拿来帮助识别这样的事件并从中恢复系统。

  要填充未使用的内存,有很多不同的可能组合能够正常的使用,但如果是想建立更加可靠的系统,最明显的选择是在这些位置放置ISR fault handler。

  如果系统出了某些差错,处理器开始执行程序空间以外的代码,就会触发ISR,并在决定校正行动之前提供储存处理器、寄存器和系统状态的机会。

  对嵌入式工程师来说一个很大的好处是,我们的IDE和工具链可以自动产生应用程序或内存空间校验和(Checksum),从而根据这个校验和验证应用程序是否完好。

  有趣的是,在许多这些案例中,只有在将程序代码加载到设备时,才会用到校验和。

  然而,如果CRC或校验和保持在内存中,那么验证应用程序在启动时(或甚至对长时间运行的系统定期验证)是否仍然完好是确保意外之事不可能会发生的极好途径。

  现在一个编程过的应用程序发生改变的概率是很小的,但考虑每年交付的数十亿个微控制器以及可能恶劣的工作环境,医疗仪器应用程序崩溃的机会并不是零。

  更有可能的是,系统中的一个缺陷可能会引起某一扇区发生闪存写入或闪存擦除,从而破坏应用程序的完整性。

  为了建立一个更加可靠和扎实的系统,确保系统硬件正常工作很重要。毕竟硬件会出现故障。(幸运的是软件永远都不可能出现故障,软件只会做代码要它做的事,不管是正确的还是错误的)。

  在启动时验证RAM的内部或外部没问题,是确保硬件可以如预期般运作的一个好方法。

  有许多不同的方法可用于执行RAM检查,但常用的方法是写入一个已知的模式,然后等上一小段时间再回读。

  但也有极小的可能性检查不通过,这时就为系统标示出硬件问题提供了极好的机会。

  对许多的嵌入式开发者而言,堆栈似乎是一股相当神秘的力量。当奇怪的事情开始发生,工程师终于被难倒了,他们开始思考,也许堆栈中发生了什么事。

  堆栈大小是在编译时就静态分配好的,但堆栈是以动态的方式使用的。随着代码的执行,应用程序需要的变量、返回的地址和其它信息被不断存储在堆栈中。

  这种机制导致堆栈在其分配的内存中一直增长。然而,这种增长有时会超出编译时确定的容量极限,导致堆栈破坏相邻内存区域的数据。

  绝对确保堆栈正常工作的一种方法是实现堆栈监视器,将它作为系统“保健”代码的一部分(有多少工程师会这样做?)。

  堆栈监视器会在堆栈和“其它”内存区域之间创建一个缓冲区域,并填充已知的位模式。

  然后监视器会不断的监视图案是否有任何变化。如果该位模式发生了改变,那就从另一方面代表着堆栈增长得太大了,即将要把系统推向黑暗地狱!

  此时监视器可以记录事件的发生、系统状态和任何其它有用的数据,供日后用于问题的诊断。

  大多数实时操作系统(RTOS)或实现了内存保护单元(MPU)的微控制器系统中都提供有堆栈监视器。

  在网络上快速搜寻一下不难发现,很多人建议关闭实时操作系统中的堆栈监视器以节省56字节的闪存空间等等,这可是得不偿失的做法!

  在过去,是很难在一个小而廉价的微控制器中找到内存保护单元(MPU)的,但这样的一种情况慢慢的开始改变。

  现在从高端到低端的微控制器都已经有MPU,而这些 MPU为嵌入式软件研发人员提供了一个可以大幅度提高其固件(firmware)鲁棒性(robustness)的机会。

  MPU已逐渐与操作系统耦合,以便建立内存空间,其中的处理都分开,或任务可执行其代码,而不需要过多的担心被stomped on。

  倘若真有事情发生,不受控制的处理会被取消,也会执行其他的保护的方法。请留意带有这种组件的微控制器,如果有,请多加利用它的这种特性。

  你经常会发现的一种总是最受喜爱的看门狗(watchdog)实现是,在看门狗被启用之处(这是一个很好的开始),但也能用周期性定时器将该看门狗清零之处;

  使用看门狗的目的是协助确保假如慢慢的出现错误,看门狗不会被清零,即当工作暂停,系统会被迫去执行硬件重设定(hardware reset),以便恢复。使用与系统活动独立的定时器可以让看门狗保持清零,即使系统已失效。

  对应用任务如何整合到看门狗系统中,嵌入式主板研发人员需要仔细考虑和设计。

  例如,有种技术可能可以让每个在一定时期内运行的任务标示它们能成功地完成其任 务。在此事件中,看门狗不被清零,强制被复位。

  还有一些比较先进的技术,像是使用外部看门狗处理器,它可用来监视主处理器如何表现,反之亦然。

  不习惯在资源有限环境下工作的工程师,可能会试图使用其编程语言的特性,这种语言让他们能够使用易失存储器分配。

  毕竟,这是一种常在计算器系统中使用的技术,在计算器系统中,只有在有必要时,内存才会被分配。

  例如,以C开发时,工程师可能倾向于使用malloc来分配在堆(heap)上的空间。

  有一个操作会执行,一旦完成,能够正常的使用free将被分配的内存返回,以便堆的使用。

  使用易失存储器分配的其中一个问题是,错误或不当的技术可能会导致内存泄漏或内存碎片。

  如果出现这些问题时,大多数的嵌入式系统并没有 资源或知识来监视堆或妥善地处理它。而当它们发生时,如果应用程序提出对空间的要求,但却没有所请求的空间能够正常的使用,会发生什么事呢?

  使用易失存储器分配所产生的问题是很复杂的,要妥善处理这样一些问题,可以说是一个噩梦!

  例如,只要在 程序中简单地建立一个大小为256字节长的缓冲区,而不是经由malloc请求这样大小的内存缓冲区。

  此一分配的内存可在整个应用程序的生命周期期间保持,且不会有堆或内存碎片问题方面的顾虑。

  以上嵌入式开发的教程可以让开发技术的人员获取更好嵌入式系统的办法。所有这些技术都是让设计者可以开发出可靠性更高嵌入式系统的秘诀。

  *博客内容为网友个人发布,仅代表博主个人自己的观点,如有侵权请联系工作人员删除。

上一篇:嵌入式l

下一篇: 嵌入式工程师是做什么的 工作内容有哪些

首页

© 2009 Copyright All rights reserved  

欧宝体育高清直播  版权所有  

0551-65326431

  
0551-65326431