0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于LPC2292硬件平台实现操作系统硬件抽象层的构建方法

电子设计 来源:单片机与嵌入式系统应用 作者:林川,吴景东 2020-09-27 17:50 次阅读

为了便于操作系统在不同硬件结构上进行移植,美国微软公司首先提出了将底层与硬件相关的部分单独设计成硬件抽象层(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 位ARM7TDMIS 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类型定义如下:

3.3 任务堆栈初始化

在μC/OS-II中,函数OSTaskStkInit()对任务堆栈进行初始化,在LPC2292中,任务堆栈空间由高到低依次为PC ,LR,R12 ,R11,…,R1,R0,CPSR,SPSR。 在进行堆栈初始化以后,OSTaskStkInit ( ) 返回新的堆栈栈顶指针。图2为任务堆栈增长的方向。其初始化过程如下:

图2 堆栈增长的方向

3.4 任务上下文切换

任务上下文管理负责嵌入式操作系统内核中任务管理部分对任务寄存器上下文的创建、删除以及切换等操作。任务的寄存器上下文是操作系统内核所管理的任务的重要组成部分,是CPU内核的寄存器中内容的映像,因此上下文管理的实现依赖于CPU 内核中寄存器的组织,是与体系结构密切相关的。通用硬件抽象层的任务上下文管理统一定义体系结构中的寄存器上下文的保护格式,提供了任务管理对任务上下文的基本操作的API接口。

μC/OS-II的任务切换其实就是通过改变PC中的内容来实现的。将PC指向新任务开始运行的地方,同时将当前任务(被抢占任务)环境保存到相应的任务堆栈中,将新任务环境从任务堆栈中恢复到相应的寄存器中。

μC/OS-II用OS_TASK_SW()完成任务级切换。将μC/OS-II移植到LPC2292上,其任务切换代码如下:

3.5 中断结构和中断处理程序的设计

中断结构和中断处理程序的设计是嵌入式操作系统HAL中最重要的组成部分。中断机制是操作系统内核实现与外部设备通信、任务系统调用、进行出错处理,以及实现对任务的实时调度的重要手段。因此,硬件抽象层中断系统的管理部分是整个硬件抽象层中的关键。

μC/OS-II采用了二次跳转的办法。首先在ARM处理器定义的中断向量处安放跳转指令,跳转到指定位置后,再进行位置的第二次映射。其中位置的映射是通过一个汇编定义的宏来实现的。将μC/OS-II移植到LPC2292中,其宏汇编的定义如下:

;/************************************************

;比较当前任务控制块和最高优先级任务控制块是否一致,如果一致则直接恢复任务环境;否则,在中断退出时需要进行任务切换,CPU将运行优先级最高的任务,而不是中断前运行的任务

为了使用ISR的汇编宏,每个受μC/OS-II管理的ISR都必须按宏汇编要求的格式,在文件IRQ.S中定义:

XXXX_HANDLERHANDLERXXXX_Exception

其中:

XXXX_HANDLER是ISR的起始地址,即汇编宏的起始地址,在初始化向量中断控制器时作为中断向量的地址使用。用户按中断源来命名,即把其中的XXXX换为具体的中断源名称。

XXXX_Exception是用户用C语言实现编写的功能函数名。该函数供汇编宏调用,用户可以按实际的中断源来命名,即把XXXX换为具体的中断源名称。

3.6 定时管理

μC/OS-II需要一个周期性的中断源来产生系统时钟节拍。μC/OS-II利用了LPC2292的Timer0作为定时器产生时钟节拍。其实现步骤为:

添加中断句柄Timer0_HandlerHANDLER Timer0_Exception配置中断源定时器T0IR = 0xffffffff;T0TC = 0;T0TCR = 0x01;T0MCR = 0x03;T0MR0 = (Fpclk / OS_TICKS_PER_SEC);配置向量中断控制器extern void Timer0_Handler(void);VICVectAddr0 = (uint32)Timer0_Handler;VICVectCntl0 = (0x20 | 0x04);使能中断VICIntEnable = 1<<4;

4 总结

硬件抽象层的出现,使得嵌入式操作系统的设计者不需要考虑嵌入式系统硬件环境差异较大的问题,可以专心设计通用的操作系统,而将与硬件的接口部分留给硬件抽象层来实现,这样大大提高了嵌入式操作系统在不同硬件平台之间的移植能力。本文基于LPC2292硬件平台,详细介绍了μC/OS-II的硬件抽象层的构建方法,对其向其他平台的移植提供了参考。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微软
    +关注

    关注

    4

    文章

    6557

    浏览量

    103909
  • 接口
    +关注

    关注

    33

    文章

    8470

    浏览量

    150759
  • 操作系统
    +关注

    关注

    37

    文章

    6707

    浏览量

    123157
收藏 人收藏

    评论

    相关推荐

    基于LPC2292 和DS18B20 的测温节点设计The Des ign of Temperature measure node B

    基于LPC2292 和DS18B20 的测温节点设计 摘要:本文介绍了一种基于LPC2292 和数字式温度传感器DS18B20 的测温节点的软硬件实现
    发表于 10-19 14:52

    向懂LPC2292的人请教请教!

    LPC2292做CAN总线,没有一个硬件(学校比较穷,不给经费),能进行软仿么?还有程序怎么写,能否给写个例程,学习学习!谢谢啦!
    发表于 05-02 18:45

    嵌入式操作系统的通用硬件抽象设计

    API能够在下层硬件平台实现,那么操作系统和应用程序的代码就可以移植。图1 引入HAL后的嵌入式系统
    发表于 12-07 10:30

    怎么利用LPC2292嵌入式微处理器设计监护系统

    如何利用LPC2292嵌入式微处理器设计监护系统
    发表于 07-31 06:10

    硬件抽象在嵌入式操作系统设计中有什么优点?

    为了便于操作系统在不同硬件结构上进行移植,美国微软公司首先提出了将底层与硬件相关的部分单独设计成硬件抽象
    发表于 09-24 06:09

    微控制器LPC2292资料推荐

    微控制器LPC2292资料下载内容主要介绍了:LPC2292功能和特性LPC2292引脚功能LPC2292内部方框图LPC2292中文资料
    发表于 03-31 07:40

    嵌入式系统硬件抽象的设计思想简析

    嵌入式系统硬件抽象(HAL & BSP)的设计思想1 前言1.1 层次化思想1.2 模块化思想1.3 对象化思想2 板级支持包(BSP)3 嵌入式
    发表于 02-11 07:49

    基于LPC2292的手持JPEG图像显示器设计

            文章介绍了基于32 位ARM7 芯片LPC2292 实现的软件JPEG 解码算法及应用了此算法的手持JPEG 图像显示器的设计。文章从JPEG 的编码原理入手,针对
    发表于 09-05 09:17 21次下载

    LPC2292芯片的μC/OS-II硬件抽象构建

    硬件抽象是一个处于硬件平台和嵌入式操作系统之间的软件层次。它的主要功能是对
    发表于 03-29 15:11 890次阅读
    <b class='flag-5'>LPC2292</b>芯片的μC/OS-II<b class='flag-5'>硬件</b><b class='flag-5'>抽象</b><b class='flag-5'>层</b><b class='flag-5'>构建</b>

    嵌入式操作系统的通用硬件抽象设计

    摘要 基于嵌入式操作系统硬件抽象层理论,设计一种用于嵌入式操作系统内核开发的通用硬件抽象
    发表于 03-29 15:16 1189次阅读
    嵌入式<b class='flag-5'>操作系统</b>的通用<b class='flag-5'>硬件</b><b class='flag-5'>抽象</b><b class='flag-5'>层</b>设计

    基于LPC2292的发声程序

    本内容提供了基于LPC2292的发声程序 #include LPC22XX.H /* LPC22XX Peripheral Registers */ extern long volatile
    发表于 05-03 15:51 27次下载

    应用LPC2292与DS18B20设计测温节点系统

    本文为应用LPC2292与DS18B20设计 测温 节点系统,给出了程序代码。
    发表于 06-29 15:08 41次下载
    应用<b class='flag-5'>LPC2292</b>与DS18B20设计测温节点<b class='flag-5'>系统</b>

    基于LPC2292的USB接口适配器设计

    本文为基于LPC2292的USB接口适配器设计,解决了 CAN总线 PC机的通信问题,给出了软硬件结构设计方法
    发表于 06-29 15:14 39次下载
    基于<b class='flag-5'>LPC2292</b>的USB接口适配器设计

    基于LPC2292的手持JPEG图像显示器设计

    基于LPC2292的手持JPEG图像显示器设计,很好的资料,快来学习吧
    发表于 02-18 13:52 0次下载

    嵌入式操作系统的通用硬件抽象设计方案

    (Hardware Abstraction Layer)的思想。硬件抽象的引入大大推动了嵌入式操作系统的通用程度,为嵌入式操作系统的广泛应
    发表于 11-06 14:12 3次下载