Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1228656
  • 博文数量: 699
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 4970
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 13:45
文章分类

全部博文(699)

文章存档

2011年(1)

2008年(698)

我的朋友

分类:

2008-10-15 13:50:46

      硬件抽象层是一个处于硬件平台和操作系统之间的软件层次。它的主要功能是对系统硬件进行初始化,为操作系统的硬件操作提供一系列接口函数。硬件抽象层提高了操作系统的可移植性。

       本文基于LPC2292处理器,详细介绍μC/OS-II硬件抽象层的构建方法。

       引言
  

       为了便于操作系统在不同硬件结构上进行移植,美国微软公司首先提出了将底层与硬件相关的部分单独设计成硬件抽象层(Hardware Abstraction Layer,HAL)的思想。硬件抽象层的引入大大推动了嵌入式操作系统的通用程度,为嵌入式操作系统的广泛应用提供了可能。

      1 μC/OS-II简介
  

       μC/OS-II实时操作系统是一种开发源码的实时操作系统,可固化,可剪裁,具有高稳定性和可靠性。它最鲜明的特点就是源码公开,便于移植和维护。目前μC/OS-II版本2.52,通过了美国航空管理局的认证,其稳定性和可用性是经过实践的。μC/OS-II的应用已经覆盖了诸多领域,如照相机、医疗器械、音像设备等。

      2 硬件抽象层简介
  

       硬件抽象层隐藏特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。它通过硬件抽象层接口向操作系统以及应用程序提供对硬件进行抽象后的服务。它主要有以下特点:

      ① 硬件相关性。作为操作系统与硬件之间的接口,硬件抽象层(HAL)必须为操作系统提供具体操作硬件的方法。 
       ② 操作系统相关性。不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。
  

       硬件抽象层是一个处于硬件之上,操作系统之下的软件层次。它主要功能包括: 
       ① 对系统硬件进行初始化; 
       ② 为操作系统提供各种操作硬件的接口函数。
 

        系统硬件的初始化方法,主要由硬件厂家提供;操作系统的各种硬件接口函数和宏定义,则需要通过硬件和操作系统的使用者在熟悉了操作系统和硬件平台后自行编写。μC/OS-II需要完成的硬件接口主要包括:类型的定义、任务上下文切换、中断处理、任务堆栈初始化和定时处理。
  

       图1为硬件抽象层的功能示意图。
   

            图1 硬件抽象层功能示意图

      3 在LPC2292上构建硬件抽象层

      3.1 LPC2292简介
  

        LPC2292/LPC2294 微控制器是基于一个支持实时仿真和嵌入式跟踪的16/32 位7TDMIS CPU,带有256 KB 嵌入的高速Flash 器。128 位宽度的器接口和独特的加速结构使32 位代码能够在最高时钟速率下运行。对代码规模有严格控制的应用可使用16 位Thumb 模式将代码规模减小30%以上,而性能的损失却很小。
  

       由于LPC2292/LPC2294 的144 脚封装、极低的功耗、多个32 位定时器、8 通道10 位ADC、2/4 (LPC2292/LPC2294)高级CAN、PWM 通道以及多达9 个外部中断引脚,使它们特别适用于汽车、工业控制应用以及医疗系统和容错维护总线。LPC2292/LPC2294 含有76(使用了外部存储器)到112 个(单片)可用GPIO 口。由于内置了宽范围的串行通信接口,它们也非常适合于通信网关、转换器以及许多其他的应用中。

       3.2 类型定义
  

       在将μC/OS-II移植到LPC2292处理器上时,首先进行基本配置和数据类型定义。重新定义数据类型是为了增加代码的可移植性,因为不同的编译器所提供的同一数据类型的数据长度并不相同,例如int型,在有的编译器中是16 位,而在另外一些编译器中则是32 位。所以,为了便于移植,需要重新定义数据类型。

       μC/OS-II类型定义如下:
  typedef unsigned char BOOLEAN;/*布尔变量*/
  typedef unsigned char INT8U;/*无符号8位整型变量*/
  typedef signed char INT8S;/*有符号8位整型变量*/
  typedef unsigned short INT16U;/*无符号16位整型变量*/
  typedef signed short INT16S;/*有符号16位整型变量*/
  typedef unsigned int INT32U;/*无符号32位整型变量*/
  typedef signed intINT32S;/*有符号32位整型变量*/
  typedef floatFP32;/*单精度浮点数(32位长度)*/
  typedef doubleFP64;/*双精度浮点数(64位长度)*/
  typedef INT32UOS_STK;/*堆栈是32位宽度*/

  

[1]   

【责编:Luzi】

--------------------next---------------------

阅读(283) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~