开发可靠固件的3个常被忽视的技术

更新时间: 2024-05-27 10:14:09来源: 粤嵌教育浏览量:524

可靠的软件是指在指定的时间内,在指定的条件下持续执行其所需功能的软件类别。可靠的固件通常具有正确性、健壮性、容错性和一致的行为等特征。可能会认为可靠的软件是不想执行系统重置来使其再次工作的软件。比如飞行控制器、刹车系统、医疗设备等。这篇文章将探讨开发可靠固件的三种通常被忽视的技术。

 

技巧1使用内置纠错码(ECC)外设

大多数微控制器都有一个开发人员容易忽略的外设,即ECCECC主要用于易出现位错误的存储器类型,如闪存或SRAM。许多ECC外设将连接到内部和外部存储器,例如通过QSPI连接的存储器。

 

ECC向存储的数据添加额外的位(奇偶校验位)。可以想象,这意味着要使用ECC将需要额外的内存。如果ECC外设,通常不必担心CPU开销,因为这些位是使用硬件加速算法计算的,几乎不需要CPU干预。回读数据时,ECC逻辑会再次计算奇偶校验位,并将它们与存储的奇偶校验位进行比较。如果不匹配,则意味着数据中存在错误。

 

ECC可以检测两种类型的错误:单位错误和多位错误。当检测到一位错误时,可以自动纠正。ECC逻辑会在CPU或其他外设使用数据之前自动纠正数据。可以检测到多位错误,但无法纠正。在这种情况下,ECC逻辑可以向系统发出错误情况信号,然后系统可以采取适当的措施,例如标记错误或启动系统重置。

 

开发人员经常忽略ECC,因为部署在地面上的设备比在轨道上或更高海拔的设备发生比特翻转和单粒子翻转的概率更低。当在实验台上没有看到问题时,很容易假设系统不会经历这些行为。ECC也不会出现在大多数配置软件中,因为它通常通过对微控制器配置寄存器中的单个位进行编程来启用。设置通常保留默认值。

在可靠性至关重要的应用中,例如医疗、汽车或航天系统中,使用ECC可能是实现所需可靠性水平的整体策略的一部分。

 

技巧2:设计强大的看门狗解决方案

对于可靠的固件来说,看门狗是一种经常被忽视的技术吗?嗯,它被广泛忽视了,因为它是团队经常实施的最后一件事。最后一刻的实现通常考虑不周,可能无法满足系统的需求。团队经常在创建任务时打开内部看门狗定时器,该任务会定期触发定时器,并表示他们有看门狗解决方案。事实并非如此。

 

可靠的看门狗解决方案需要与正在开发的软件紧密集成。它需要一个总体策略来跟踪内存、任务执行、应用程序代码和驱动程序。可靠系统中的看门狗会小心保护系统并查找问题。如果发现问题,它可能会重新启动系统或有问题的线程或进程。有无数种方法可以根据所需的可靠性水平在系统中实现看门狗。

 

在某些系统中,看门狗可能是多层的。它可以利用内部看门狗定时器、监视软件行为的线程和监视整个系统的外部看门狗。这些系统的可靠性很高,但看门狗的复杂性也很高。最终目标是设计一个看门狗,安全可靠地检测问题并恢复系统。

 

技巧3:使用断言

CC++中,断言检查程序中的条件或假设,如果不满足这些条件,就停止程序的执行。断言有助于调试并确保的代码按预期运行。CC++中有两种类型的断言:运行时断言和静态断言。

 

运行时断言是使用cassert(C++)assert.h(c++)头文件提供的assert宏实现的。assert宏将表达式作为参数。假设表达式被评估为假(即,不满足条件)。在这种情况下,它会触发一个断言失败,通常会导致程序陷入一个无限循环,并给出失败条件的详细信息。

 

静态断言对于在编译时捕捉潜在问题特别有用,而运行时断言用于运行时调试和验证。如果想编写更可靠的软件,使用这些断言可以帮助发现潜在的问题,否则可能会被忽视。

 

结论

编写可靠的固件是许多嵌入式系统专业人员的一项重要技能。嵌入式系统通常被部署到现场,并期望在不被重置的情况下正确工作数周或数月。今天讨论的技术对于开发可靠的软件来说是必不可少的。如果使用得当,可以提高系统的可靠性。

免费预约试听课