HAL层简介

          刚刚看了HAL层驱动API函数,没有全部看完,本文主要是谈谈HAL的作用。

        所谓HAL层,Hardware Abstract Layer,即硬件抽象层。硬件抽象层主要是干嘛的呢?

        HAL在windowsNT中就曾经提出来过,主要是用于处理不同平台之间的移植兼容性的问题。如下一段话是百度百科的内容:

HAL的作用是将操作系统的其余部分表示为抽象的硬件设备,特别是去除了真正硬件所富含的瑕疵和特质。这些设备表现为操作系统的其它部分和设备可以使用的独立于机器的服务的形式(函数调用和宏)。通过使用HAL服务和间接硬件寻址,当移植到新的硬件上时,驱动程序和核心只需做很少的改动。移植HAL本市是直接的,因为所有的机器相关代码都集中在一个地方,并且移植的目标是充分定义的,即实现所有的HAL服务。

       感兴趣的读者可以看百度百科,了解更为详细的信息。

如下为document中定义的内容:

This document describes the application programming interface for HAL Drivers. The  API  provides

application the interface to access timers, GPIO, UART and ADC. This is a platform independent API that

provides a superset of features for each service. Not all features will be available for all platforms.

        在zstack中,HAL具有与windows相似的功能,,它提供了一种接口来访问定时器,GPIO,UART,ADC。这些接口都通过相应的函数进行实现。此外,我们还应注意到在OSAL中系统也可以调用相应的函数来访问这些资源,例如定时器。那么HAL中调用和OSAL中的调用有何区别呢?

       在OSAL中,任何的资源调用都是通过一个task来调用的,或者说是某一个task在使用这个资源,例如定时器,而每一个任务都有自己的查询时间,就是轮询时间,过了这个时间就会被系统强制挂起,而这些资源可能在下一个task中使用。简单的说:某一个任务中资源,例如ADC,可能被系统打断而暂时不执行。

      在HAL中,任何函数的调用都是通过阻塞的形式来实现的,或者说任何一个函数都是一个阻塞函数。什么事阻塞呢,阻塞就是独占,一个函数为执行完毕不会释放CPU的。假设一个函数为阻塞函数,那么这个函数就会在其调用期间独占CPU直到执行完毕为止。

       所以这样看来,HAL的优先级比OSAL还是要高一些,它是不会理会系统的。

原文地址:https://www.cnblogs.com/farbeyond/p/5204608.html