嵌入式 Linux C ARM 我用 LinuxLinux

嵌入式硬件抽象层HAL的设计实现

2020-11-29  本文已影响0人  Leon_Geo

硬件抽象层对下必须检验查看目前硬件配置的能力与限制,以及将来可能的扩展性,对上得倾听系统软件得需求。简单得说,HAL就是我们系统的“硬件”,而“硬件”的功能就是它所提供的API,即所有上层的程序完全不需要知道硬件与驱动程序的细节,只能通过HAL来操控硬件。按照这样的逻辑,通常我们实现HAL的流程如下:

所以HAL不过是驱动程序提供给上层应用的API标准而已。


1、HAL基本设计原则

HAL设计文件是以驱动来区分章节,不同的驱动由不同专长的工程师负责设计与编写。因此设计文件的第一章是HAL基本设计原则,第二章是共享数据结构与常数定义。以下是设计原则:

<pre mdtype="fences" cid="n249" lang="c" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" spellcheck="false" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 0px; width: inherit; color: rgb(184, 191, 198); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"> #include <hal.h>

ifdef HAL_WITH_GPS //HAL_WITH_GPS为HAL配置之一,定义在hal.h中

...

endif</pre>

2、驱动程序与系统的沟通机制

系统与HAL的沟通方式有3种:

3、驱动接口

我们以HAL里重要的驱动——Audio为例,看一下该驱动的接口。按照设计文件风格规范,必须先描述这个模块中所有的API的关系:

HAL设计文件中的流程图范例 HalAudEn HalAudDis HalAudSetSampleRate

获取更多知识,请点击关注:
嵌入式Linux&ARM
CSDN博客
简书博客
知乎专栏

上一篇下一篇

猜你喜欢

热点阅读