嵌入式软件开发人员通常会避免硬件抽象层(HAL),声称它们会降低性能并增加代码复杂性。不幸的是,当嵌入式开发人员采用HAL时,供应商提供的HAL通常不会抽象硬件,并且仍然保证与硬件的紧密耦合。毕竟,一个真正的抽象HAL将使开发人员能够轻而易举地使用任何供应商。然而,使用或开发自己的HAL会通过多种方式影响你的软件。在这篇文章中,我们将探索HAL可以改变你的软件项目的五种令人惊讶的方式,并释放你没有意识到的速度和价值。
方式1:硬件独立性
开发人员通常有一个最喜欢的微控制器供应商。通常是你第一次编写嵌入式软件的供应商或者你熟悉的供应商。
使用一个好的HAL将允许你编写更易移植和可重用的独立于硬件的应用程序代码。对于许多嵌入式团队来说,这是一个巨大的转变。例如,你可以使用供应商A运行代码,并通过更改版本中的标志,为供应商b编译代码。硬件独立性使你可以灵活地使用任何你想要的硬件,并消除你对微控制器供应商的依赖。
如果你喜欢使用供应商提供的HAL,只要你回顾几个基本特性,这是可以的。首先,HAL必须是一个真正的HAL。这意味着你必须有一个定义好的接口来打破对硬件的依赖。接下来,HAL应该与实现分开定义。最后,你应该能够快速换出接口调用的函数。如果你没有这三样东西,那么你就没有硬件独立性;你有硬件依赖!
方式2:启用自动化单元和集成测试
释放价值和转变软件开发的关键从使用HAL开始。HAL进一步支持额外的转换,比如支持自动化单元和集成测试。嵌入式开发人员经常纠结于单元测试,因为他们编写的代码会接触到硬件。这意味着你必须在微控制器上运行你的测试。当你有了一个合适的HAL,你仍然需要在目标上测试你的驱动,但是你所有的应用程序代码突然被释放了!你的应用程序代码现在可以在独立于硬件的主机上进行单元和集成测试。
方式3:执行偏离目标模拟的能力
当你用一个好的HAL把硬件从等式中去掉时,它允许你把任何实现放在它后面。这意味着你可以为你的目标、你的测试工具和一个模拟环境拥有一个实现!在许多情况下,嵌入式软件开发人员必须在硬件可用之前开始编写软件。因此,虽然我们可以使用开发板开始,但有了一个好的HAL,我们可以在我们的应用程序代码上运行模拟!
模拟应用程序代码对嵌入式开发人员来说有很多好处。首先,它允许他们更早而不是更晚地在客户面前获得应用程序代码。我们都知道,客户喜欢改变主意,在体验之前,他们很难想象产品的工作方式。模拟可以帮助客户理解产品,并更快地提供富有成效的反馈,减少开发周期后期昂贵而耗时的变更。
其次,通过允许在没有硬件的情况下测试故障和其他异常行为,模拟实现了更健壮的测试。例如,让一个传感器行为不当或在目标处理器上强制硬件异常通常是具有挑战性的。在模拟环境中,这不是问题。结果又是更健壮的软件。
方式4:更快、更高效的调试
当你在目标上调试时,每次进行更改时,都会有一个交叉编译、擦除闪存、编程闪存和运行应用程序的循环。整个过程可能需要相当长的时间,这取决于应用程序,即使使用专业工具。使用HAL来分离应用程序可以更快地调试代码!在主机上,编译和运行周期要短得多。这意味着开发人员可以更快地解决问题,然后在必要时在他们的硬件上测试最终的调试版本。
如果你允许HAL提供的其他方式实现,你将使用单元测试来驱动开发,这意味着你甚至可以减少调试时间。你只会编写通过测试的代码。你的软件会以小的增量编写,测试会一直验证它。如果你破坏了什么东西,回归测试会立即发现它。其结果将是更快、更高效的调试,并且几乎完全从你的生活和项目中去除调试!听起来是不是很棒?
方式5:上市时间和成本降低
使用HAL开发嵌入式软件的最终转变是降低成本和上市时间。HAL为嵌入式开发软件创造了灵活性,这是大多数团队做梦也想不到的。你可以很容易地看到,如果你能很快得到客户的反馈,你在开发周期的后期会有更少的返工。此外,如果你能消除调试,那就太棒了!大多数团队平均花费20–40%的开发周期进行调试!也就是每人每年2.4-4.5个月!这都是因为你使用了HAL,它能够测试你的应用程序代码并减少调试时间。
随着上市时间的缩短,成本显然会降低。当然,在HAL开发、测试工具和其他工具上也有投资,以确保开发周期顺利进行。然而,这些成本通常比节省的成本少一个数量级。我甚至没有提到与维护相关的费用,这些费用很容易超过最初的开发成本。
结论
我们讨论的一些方式可能看起来有点陌生,因为嵌入式开发人员传统上没有使用过这些技术。然而,不需要花太多时间就能掌握它们,并允许它们极大地改进你开发嵌入式软件的方式。你已经看到了好处;问题是你是否会接受它们,并开始在你的软件中构建一个独立于微控制器的HAL。如果你这样做了,我认为你将彻底改变你开发嵌入式产品的方式。
领取专属 10元无门槛券
私享最新 技术干货