在驱动程序层之上或之下定义HAL?

时间:2012-11-27 05:00:14

标签: architecture embedded driver hal

在定义嵌入式系统架构时,在定义HAL时有两种选择 -

  • 在驱动程序层上方定义HAL(这意味着需要为您移植的每个平台重写驱动程序)
  • 在驱动程序层下面定义HAL(这意味着需要为您移植的每个平台重写HAL)

哪一个更好,为什么?

1 个答案:

答案 0 :(得分:5)

简答:是的。

拥有HAL(或驱动程序下面的稳定驱动程序ABI很好,特别是对于驱动程序编写者而言) 对于应用程序程序员来说,将HAL放在驱动程序之上是很好的。

你可以做到这两点:看看Unix设备驱动程序;相当便携。[Endian-ness仍然咬人]

哪个更好取决于嵌入式架构的产品开发路线图。

让我们尝试一些例子。

让我们说这是一种商业产品,而你的公司并不认为需要跨平台移植。在这种情况下,你不在乎。

如果您的公司正在使用它,例如电视机,并且预计该平台将会改变,但设备将保持不变(电视是电视是电视,但最便宜的微观将随着时间的推移而改变)那么你就可以选择低于司机,继续投资司机。

如果您的公司制造,例如智能手机,处理器会发生变化,设备也会发生变化,随着分辨率的变化,额外的传感器会被添加......所以在这种情况下,你可以选择使用hal-above-driver,并保持软件负载的重要部分。

如果你输入两个HAL,对于嵌入式,你就有可能变成一个架构宇航员。如果两个HAL的成本(运行时间和设计时间)超过了跨平台移植所节省的人力,则浪费时间和金钱。

HAL需要多少努力才能获得权衡。在一个很小的嵌入式系统中,无法提供过多的抽象。

同样,这种权衡取决于一个小平台是您的应用的正确选择,这最终取决于上市时间和功能与每设备成本的相对重要性。关于需要为批量市场便宜的说法很多;提供了很少的科学证据。最赚钱的嵌入式设备制造商之一是Apple,而不是使用微型平台。 (哎呀,他们不再在纳斯达克了,因为他们对此进行了如此扭曲)

如果您没有HAL,并且您必须更改平台,例如你的处理器寿命结束,你有一个很大的重写。

如果您尝试在不进行权衡研究的情况下应用YAGNI规则(您不需要它),您可能会在以后花费该公司一笔财富。

现在,如果你因为技术转向盲目而你没想到,那么你的权衡研究将是错误的,你的公司将受到损害。