0

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

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

哪个更好,为什么?

4

1 回答 1

7

简短的回答:是的。

在驱动程序下方有一个 HAL(或稳定驱动程序 ABI 很好,特别是对于驱动程序编写者)在驱动程序上方有一个 HAL 对应用程序程序员来说很好。

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

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

让我们尝试一些例子。

假设它是一种商业产品,您的公司认为不需要跨平台移植。在这种情况下,你不在乎。

如果您的公司正在使用它,例如电视机,并且预计平台会发生变化,但设备会保持不变(电视就是电视就是电视,但最便宜的微型电视会随着时间的推移而改变)那么你d 选择 hal-below-driver,并保持对驱动程序的投资。

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

如果你放入两个 HAL,用于嵌入式,你就有变成建筑宇航员的风险。如果两个 HAL(运行时间和设计时间)的成本超过了跨平台移植所节省的劳动力,那么这就是浪费时间和金钱。

为 HAL 付出多少努力同样需要权衡。在一个微型嵌入式系统中无法承受太多的抽象。

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

如果您没有 HAL,并且您必须更改平台,例如您的处理器报废,您将面临很大的困难重写。

如果你在没有权衡研究的情况下尝试应用 YAGNI 规则(你不需要它),你可能会在以后花费公司一大笔钱。

现在,如果您因技术发生意想不到的转变而措手不及,那么您的权衡研究将是错误的,您的公司将遭受损失。

于 2012-11-27T08:01:09.473 回答