尽管许多嵌入式工程师充满了希望和梦想 , 但高可靠性的代码不是一蹴而就的 。 它是一个艰苦的过程 , 需要开发人员维护和管理系统的每个比特和字节 。 当一个应用程序被确认为“成功”的那一刻 , 通常会有一种如释重负的感觉 , 但仅仅因为软件在受控条件下的那一刻运行正常并不意味着明天或一年后还会运行正常 。
从规范完善的开发周期到严格执行和系统检查 , 开发高可靠性嵌入式系统的技术有许多种 。 给大家介绍7个比较好操作且可以长久使用的技巧 , 它们对于确保系统更加可靠地运行并捕获异常行为大有帮助
技巧1——用已知值填充ROM
软件开发人员往往都是非常乐观的一群人 , 只要让他们的代码忠实地长时间地运行就可以了 , 仅此而已 。 微控制器跳出应用程序空间并在非预想的代码空间中执行这种情况似乎是相当少有的 。 然而 , 这种情况发生的机会并不比缓存溢出或错误指针失去引用少 。 它确实会发生!发生这种情况后的系统行为将是不确定的 , 因为默认情况下内存空间都是0xFF , 或者由于内存区通常没有写过 , 其中的值可能只有上帝才知道 。
不过有相当完备的linker或IDE技巧可以用来帮助识别这样的事件并从中恢复系统 。 技巧就是使用FILL命令对未用ROM填充已知的位模式 。 要填充未使用的内存 , 有很多不同的可能组合可以使用 , 但如果是想建立更加可靠的系统 , 最明显的选择是在这些位置放置ISR fault handler 。 如果系统出了某些差错 , 处理器开始执行程序空间以外的代码 , 就会触发ISR , 并在决定校正行动之前提供储存处理器、寄存器和系统状态的机会 。
技巧2——检查应用程序的CRC
对嵌入式工程师来说一个很大的好处是 , 我们的IDE和工具链可以自动产生应用程序或内存空间校验和(Checksum) , 从而根据这个校验和验证应用程序是否完好 。 有趣的是 , 在许多这些案例中 , 只有在将程序代码加载到设备时 , 才会用到校验和 。
然而 , 如果CRC或校验和保持在内存中 , 那么验证应用程序在启动时(或甚至对长时间运行的系统定期验证)是否仍然完好是确保意外之事不会发生的极好途径 。 现在一个编程过的应用程序发生改变的概率是很小的 , 但考虑每年交付的数十亿个微控制器以及可能恶劣的工作环境 , 应用程序崩溃的机会并不是零 。 更有可能的是 , 系统中的一个缺陷可能导致某一扇区发生闪存写入或闪存擦除 , 从而破坏应用程序的完整性 。
技巧3——在启动时执行RAM检查
为了建立一个更加可靠和扎实的系统 , 确保系统硬件正常工作非常重要 。 毕竟硬件会发生故障 。 (幸运的是软件永远不会发生故障 , 软件只会做代码要它做的事 , 不管是正确的还是错误的) 。 在启动时验证RAM的内部或外部没有问题 , 是确保硬件可以如预期般运作的一个好方法 。
有许多不同的方法可用于执行RAM检查 , 但常用的方法是写入一个已知的模式 , 然后等上一小段时间再回读 。 结果应该是所读就是所写 。 真相是 , 在大多数情况下 RAM检查是通过的 , 这也是我们想要的结果 。 但也有极小的可能性检查不通过 , 这时就为系统标示出硬件问题提供了极好的机会 。
技巧4——使用堆栈监视器
对许多的嵌入式开发者而言 , 堆栈似乎是一股相当神秘的力量 。 当奇怪的事情开始发生 , 工程师终于被难倒了 , 他们开始思考 , 也许堆栈中发生了什么事 。 结果是盲目地调整堆栈的大小和位置等等 。 但该错误往往是与堆栈无关的 , 但怎能如此确定?毕竟 , 有多少工程师真的实际执行过最坏情况下的堆栈大小分析?
- 报告显示八成互联网电视系统存非法采集共享用户数据问题
- 对于老用户来说|win7系统新增性能指标功能
- 华为鸿蒙系统|进一步挑战安卓和iOS!华为鸿蒙系统3.0开始公测:多款机型可升级
- 操作系统|又一款适配开源鸿蒙的操作系统诞生了!
- Ubuntu Core 22 发布:为物联网/嵌入式设备打造,应用完全容器化
- 华为鸿蒙系统|EVO认证下的鸿蒙生态有多猛? 华为MateBook 16s体验评测!
- 微软|这么突然?微软发布Win11全新轻量级系统:Validation OS来袭!
- 师妹|博士开发出AI乳癌检测系统
- 非标机械企业ERP系统数控加工企业ERP软件机加工行业ERP系统MES
- 华为鸿蒙系统|否认使用AMD芯片却被光速“打脸”,蔚来这是在害怕什么?