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

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

3天内不再提示

Windows CE中断流驱动程序开发实例的分析

电子设计 来源:郭婷 作者:电子设计 2019-05-14 08:16 次阅读

引 言

近年来,随着硬件复杂性、多样性和应用复杂性的增加,软件开发工作量急剧增长,传统的开发模式已经不能适应系统z杂性的增长。而嵌入式操作系统是嵌入式软件的运行平台和开发平台,它的引入极大地提高了软件的开发效率,方便了软件的维护。WindowsCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows 95,Windows CE的图形用户界面相当出色。Windows CE作业系统是Windows家族中最新的成员,专门设计给掌上型电脑(HPCs)所使用的电脑环境。这样的作业系统可使完整的可携式技术与现有的Windows桌面技术整合工作。 Windows CE 被设计成针对小型设备(它是典型的拥有有限内存的无磁盘系统)的通用操作系统,Windows CE 可以通过设计一层位于内核和硬件之间代码来用设定硬件平台,各种处理器都有丰富的外部中断源,中断源和操作系统之间通常采用中断机制来控制数据的交互。硬件厂商没有为一些外部中断源提供Windows CE下的驱动,所以有时驱动成为项目开发关键的一环。

1 Windows CE中断处理

1.1 中断产生

在Windows CE中,系统的中断分为两种:软中断和硬中断。软中断是一种"信号机制",而不是由软件产生的中断信号。硬中断通常是外部设备对CPU发出中断信弓。一般来说,软中断是由操作系统内核机制的事件产生的,例如定时器超叫,但是有的软中断由和硬件有关的中断引起。例如,当外部产生一个硬中断时,会产生和硬件相关的一个软中断,软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。很多情况下,软中断和"信号"有些类似,同时,软中断又是和硬中断相对应的,"硬中断是外部设备对CPU的中断","软中断通常是硬中断服务程序对内核的中断","信号则是由内核(或其他进程)对某个进程的中断般来说,软中断是由内核机制的触发事件引起的(例如进程运行超时),但是不可忽视有大量的软中断也是由于和硬件有关的中断引起的,例如当打印机端口产生一个硬件中断时,会通知和硬件相关的硬中断,硬中断就会产生一个软中断并送到操作系统内核里,这样内核就会根据这个软中断唤醒睡眠在打印机任务队列中的处理进程。 这样内核就会在适当的时机处理这个软中断,唤醒睡眠在相应任务队列中的处理例程。

1.2 中断处理模型

Windows CE提供了一个有效的中断处理机制,它把对中断的处理分为两部分:中断服务例程(ISR)和中断服务线程(IST)。ISR通常要求短小精悍,效率要求很严格。它只决定该怎样处理这个中断,一般情况下不应该做太多的工作。大部分工作依靠IST处理,IST和CST(common spanning tree,公共生成树)共同构成整个交换机网络的生成树CIST(common and internal spanning tree,公共和内部生成树)。IST是CIST在MST域内的片段,是一个特殊的多生成树实例。根据IEEE802.1s规范的规定,MST实例能够支持802.1Q和802.1s之间的互操作性。IST实例接收并且向CST发送BPDU.IST实例能够将整个MST区域表示为到达外部世界的CST虚拟网桥。如将数据移到缓存或处理用户某些特殊要求的工作。Windows CE中断处理模型如图1所示。

Windows CE中断流驱动程序开发实例的分析

1.3 中断处理过程

Windows CE支持两种ISR:静态ISR和可安装ISR.静态ISR只能静态地编译进内核,运行时不能改变。与IST通信时,它也只能是单向的,即由ISR到IST.静态ISR支持嵌套中断,并且使用内核堆栈。可安装ISR由内核管理程序从动态链接库中加载。和静态ISR不同,它和IST的通信是双向的,多个ISR可以与同一个中断请求相关联,系统按照加载驱动的顺序依次调度。图2为中断处理过程。

Windows CE中断流驱动程序开发实例的分析

对图2的中断处理过程作以下几点解释:

①当内核的异常处理代码接收到一个来自硬件的中断时,内核会侦测到一个异常情况发生,并会提交这个硬件中断。

②内核的中断支持处理器通知ISR去禁止该中断的重复提交,直到相关的中断处理全部完成后,才再度使能该中断。在这个过程中,允许高优先级中断触发。为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。引入多级中断是因为:为使系统能及时的响应和处理所发生的紧迫中断,同时又不至于发生中断信号丢失,计算机发展早期在设计中断系统硬件时根据各种中断的轻重在线路上作出安排,从而使中断响应能有一个优先次序。多级中断的处理原则:当多级中断同时发生时,CPU按照由高到低的顺序响应。高级中断可以打断低级中断处理程序的运行,转而执行高级中断处理程序。当同级中断同时到时,则按位响应。

③异常处理器调用ISR来响应中断。

④内核接收ISR返回值,依据该返回值决定如何处理中断。

⑤内核触发中断支持管理器来唤醒中断服务线程(IST)并激活该线程。

⑥当中断服务线程(IST)被唤醒后,它开始处理相应的中断。

⑦如果需要,中断服务线程调用各种I/0例程访问硬件来完成工作。

⑧中断处理结束后调用InterruptDone函数通知内核。

⑨内核调用OEMInterruptDone完成整个中断处理过程,0AL通知底层硬件使能所有中断。

2 中断流驱动程序设计

2.1 驱动的概念

驱动程序是一个软件模块,其功能就是对设备、协议甚至某些服务进行管理。驱动程序是直接和设备进行通信的部分,设备可以是物理设备或逻辑设备。

接口的驱动是基本的设备驱动类型,它实现一组固定的流接口函数。所有流接口驱动程序使用相同的接口并调用同一个函数集--流接口函数,大部分WindowsCE设备驱动都可用此模型来实现。流接口驱动程序由设备管理程序(Device.exe)自动加载、管理和卸载,也可以通过API函数手动加载、管理和卸载。

2.2 设计方法

Windows CE提供了几种基于等待队列的进程间通信手段,其中事件在驱动设计中经常被用来引发某一个中断处理。中断是Windows CE驱动设计的关键之一,驱动程序需要实现特定设备的中断响应、中断引发的数据传送和处理。可以把外设中断时所需处理的任务封装到流接口函数中,应用程序使用Windows CE操作系统的文件API函数与流接口进行通信,从而达到应用程序访问驱动程序和操作硬件的目的。

本文以KEYl按键连接到S3C2440外部中断EINTl(GPFl)引脚的按键电路为例,给出中断流接口驱动程序的一般设计方法,电路原理图如图3所示。

Windows CE中断流驱动程序开发实例的分析

Windows CE中断流驱动程序开发实例的分析

流接口驱动程序的入口点函数、调用方式以及每个函数实现的功能如表1所列Ⅲ。其中电源管理函数,即EIT-PowerDown和EIT_PowerUp是可选的,这里没有调用。

2.3 编写代码

三星公司BSP包驱动程序的存放位置下新建一个目录EINT,用文本编辑器建立5个文本文件,文件名分别为EINTl.c、EINTl.h、EINTl.def、sources、makefile.

从表1可以看出,驱动程序大部分功能都是在EIT_Init()函数中完成的,在EINTl.c文件中编写EIT_Init()函数,如下所示。

Windows CE中断流驱动程序开发实例的分析

EIT_Init()函数中创建了外部中断EINTl中断服务线程gEINTIntrThread具体代码如下所示。该函数首先创建外部中断事件gWaitEvent(用于ISR通知IST外部中断EINTl中断触发),然后调用内核函数InterruptInitialize()与gWaitEvent关联起来,并使能该中断。

Windows CE中断流驱动程序开发实例的分析

其他几个流接口函数编程简单,这里不作详细叙述。参考驱动目录下其他驱动完成sources、makefile和EINT.def文件的编写,当EINT目录下的5个文件都编写好后,在Platform Build 5.O编译后,用Windows CE附带的dumpbin工具(在Build菜单下)输入命令:dlampbin/exports EINTl.dll,输出结果如图4所示,导出了表1所列的流接口函数。

Windows CE中断流驱动程序开发实例的分析

结 语

Windows CE采用中断方式处理外部设备的随机输入,提高了CPU的运行效率。本文用一个实例对中断流驱动程序的开发进行了介绍,只需在此驱动程序的基础上稍作修改就可完成其他中断的驱动程序开发。驱动程序编译成功后,通过进一步修改BSP的FILES目录下的platform.bib和platform.reg文件,可将驱动加入到操作系统中。

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

    关注

    5063

    文章

    18990

    浏览量

    302501
  • WINDOWS
    +关注

    关注

    3

    文章

    3523

    浏览量

    88361
  • 操作系统
    +关注

    关注

    37

    文章

    6707

    浏览量

    123163
收藏 人收藏

    评论

    相关推荐

    Windows CE中断处理及中断流驱动设计,看完你就懂了

    本文用一个实例中断流驱动程序开发进行了介绍,只需在此驱动程序的基础上稍作修改就可完成其他中断
    发表于 04-27 06:56

    Windows CE下的串口驱动设计

    驱动程序及串口驱动开发和设计是构建嵌入式系统的重要组成部分。该文介绍了Windows CE下的驱动程序
    发表于 04-13 09:04 22次下载

    Windows CE 下通用串行总线(USB)驱动程序开发

    Windows CE 下通用串行总线(USB)驱动程序开发:通过分析通用串行总线(USB)的拓扑结构和W
    发表于 05-09 08:07 28次下载

    基于Windows CE的USB设备驱动程序设计

    本文针对Windows CE 下USB 外围设备的驱动开发问题,对Windows CE 下USB
    发表于 08-03 11:22 33次下载

    Windows CE下GPIO驱动程序的设计与应用

    Windows CE 流接口设备驱动程序是一种基本的设备驱动程序。本文以S3C2410 开发板中的GPIO 流接口
    发表于 01-06 16:02 48次下载

    Windows CEnet设备驱动程序开发研究

    本文介绍了Windows CE. net的平台结构 阐述了Windows CE驱动的系统结构 对驱动
    发表于 04-18 10:02 0次下载

    Windows CENET中断架构分析和高速AD驱动程序开发

    本文分析Windows CE.NET嵌入式实时系统的中断架构和流式驱动架构 及其设备驱动程序
    发表于 04-18 10:02 0次下载

    Windows CE平台上开发采集板驱动程序

    应用的艾讯AX10410A型高速数据采集板为例介绍了Windows CE 操作系统的设备驱动程序开发过程。经过测试效果良好。
    发表于 04-18 10:02 0次下载

    Windows CE驱动程序开发

    不同的嵌入式系统硬件平台,往往有其独有或特殊的设备,而这些设备的Windows CE驱动程序设计问题是开发人员经常遇到的。本文着重阐述了Window
    发表于 04-18 10:13 0次下载

    Windows CE设备驱动程序开发

    本文介绍了 Windows CE 体系结构和开发 wince 设备驱动程序的过程,阐述了设备驱动程序模型、设备
    发表于 04-18 10:13 0次下载

    基于Windows CE.NET的设备驱动程序开发

    本文阐述了设备驱动程序的概念和结构 介绍了 Windows CE. NET环境下开发驱动程序的特点以及一些常用的
    发表于 04-18 11:28 0次下载

    基于Windows CE的USB设备驱动程序设计

    本文针对Windows CE下USB外围设备的驱动开发问题对Windows CE下USB系统软件
    发表于 04-18 11:28 5次下载

    基于WINDOWS CE的开放式数控系统设备驱动程序开发

    本文讨论了基于Windows CE. NET的开放式数控系统的一项关键技术。首先分析了 WindowsCE.NET的系统结构并详细阐述其中断原理介绍如何修改内核和硬件抽象层安装
    发表于 04-18 11:28 0次下载

    基于WinDriver for CE的视频采集驱动程序设计

    本文针对视频监控系统功能要求、视频采集硬件特性 WinDriver for CE驱动开发特点设计并实现了一种简洁高效的视频采集驱动程序分析
    发表于 04-18 14:12 0次下载

    嵌入式Windows CE设备驱动的研究实现

    基于 StrongArm 处理器的彩色 LCD (640 3 480) 的 WindowsCE 驱动程序设计为例 介绍了嵌入式 Windows CE 驱动程序
    发表于 04-18 14:12 1次下载