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

the*_*oid 0 architecture embedded hal driver

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

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

哪一个更好,为什么?

Tim*_*oft 5

简短回答:是的.

有一个HAL(或驱动程序下面的稳定驱动程序ABI很好,特别是对于驱动程序编写者)在驱动程序之上使用HAL对于应用程序编程人员来说非常好.

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

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

让我们尝试一些例子.

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

如果你的公司正在使用它,例如电视机,并且预计平台会改变,但设备将保持不变(电视是电视是电视,但最便宜的微观将随着时间的推移而变化)然后你'与驾驶员一起驾驶,并保持对驾驶员的投资.

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

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

对HAL付出多少努力同样是一种权衡.在一个很小的嵌入式系统中,无法提供过多的抽象.

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

如果您没有HAL,并且您必须更换平台,例如您的处理器寿命结束,那么您需要进行大量的重写.

如果您尝试应用YAGNI规则(你不会需要它)没有权衡研究以后可能使公司损失了一笔.

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