基于ARM+WinCE项目开发过程中动态加载GPIO端口驱动程序的设计方法

发布者:EternalBliss最新更新时间:2018-03-20 来源: eefocus关键字:ARM  WinCE  动态加载  GPIO端口  驱动程序 手机看文章 扫描二维码
随时随地手机看文章

  本文针对采用基于流接口驱动方式进行GPIO端口驱动开发所存在的困难和不足,提出了采用动态方式加载(卸载)端口驱动的思路,给出了该思路下GPIO端口驱动设计方法的步骤和关键代码并进行了验证,为其他类似的驱动设计与实现提供参考。

  WinCE下GPIO端口驱动大多采用流接口驱动的方式进行开发,在实现上主要依托Platform Builder编译环境将驱动程序编译成动态链接库,并整合到WinCE内核中。但在实际项目的开发中,Platform Builder在驱动程序的开发和涮试上不够便捷,且在整合动态链接库和WinCE内核时,需要进行繁琐的参数配置,整个过程较为复杂。笔者以飞凌S3C2440开发板为例,给出在VisualStudio编译环境中采用动态加载方式来设计GPIO端口驱动程序的思路,较好地改进了目前常用的GPIO端口驱动设计方法,提高了开发效率。


  1 GPIO端口的流驱动设计

  1.1 过程简述

  关于GPIO端口流驱动的设计原理,大量论文及书籍中均有介绍,这里不再赘述。其设计步骤也遵循固定的设计模式,按照编写驱动实现代码、驱动程序配置、编译调试的顺序进行。

  1.1.1 编写驱动实现代码

  WinCE流式驱动实质上是按照固定的流函数接口实现的一个动态链接库。在实现时,创建相关的.cpp文件、.h文件和.def文件,根据需要实现xxx_Init、xxx_Read、xxx_Write等流接口函数即可。

  1.1.2 驱动程序配置

  WinCE配置文件分为源代码配置文件和镜像配置文件,通过这两种配置文件,Platform Builder编译环境实现对驱动代码和内核的编译、整合。具体包括:

  ①创建相关提供注册信息的.reg文件以供在WinCE注册表中注册GPIO驱动程序。

  ②在Platform Builder的相关目录下,配置Dirs文件、Makefile文件、Sources文件和Platform.bib文件中的相关参数,Platform Buil der在编译时按照配置的参数编译驱动程序并将其整合到内核镜像中。

  1.1.3 编译调试

  使用Platform Builder编译环境编译驱动程序和WinCE内核,编译成功之后即得到按照硬件平台定制的含有驱动程序动态链接库的内核镜像文件,当WinCE启动时,该驱动会被自动加载。

  1.2 设计方法的不足

  基于以上描述,流接口驱动程序设计方法中存在以下两个问题:

  ①在整个设计过程中,驱动程序的编译、调试全部依托的是Platform Builder编译环境。Platform Builder编译环境虽然也能实现对驱动程序的编译和后期调试,但在实际工程项目的开发中适用面不广,在使用操作、功能提供等方面均不如Visual Stladio,其在实际工程项目中主要是用来定制WinCE内核。另外,为了将驱动程序整合到WinCE内核中,需要开发者较为熟悉Platform Builder编译环境中对源代码配置文件和内核镜像配置文件的修改及原理,而大多数开发者对此基本上处于“比葫芦画瓢”的模仿层次,学习入门门槛较高。

  ②在设计中,出于整合资源的目的,将端口驱动程序的动态链接库编译到WinCE内核中,但实际上这种方法导致驱动程序的动态链接库与内核结合过于紧密,每次对驱动程序的任何改动都需要随后使用Platform Builder编译环境对内核重新进行编译,来回反复、效率低下。从程序设计的角度讲,驱动程序和内核分属不同功能类型的模块,与程序设计中功能模块内紧外松的耦合思想不一致。

  2 WinCE内核动态加载GPIO端口驱动的设计方法2.1 设计方法原理

  在前文中已经介绍过,在基于流驱动的驱动设计方法中,需要在Platform Builder编译环境中配置相关的参数,将驱动程序的动态链接库文件编译到WinCE内核中。实际上,WinCE内核具有动态加载(卸载)驱动文件的能力,驱动文件可以在需要的时候动态加载进WinCE内核中,在不需要的时候卸载掉。开发者可以使用Visual Studio编译环境替代Platform Builder编译环境,在Visualstudio中通过调用相关的WinCE API来实现对驱动文件的加载、卸载。利用这一特性,对驱动文件的调用方式更加灵活,项目的可扩展性得到了提高。


2.2 具体实现步骤
    在WinCE中,主要通过RegisterDevICe和Deregister Device两个函数实现WinCE内核对GPIO端口驱动的动态加载和卸载,其中Register Device函数负责加载设备驱动,DeregisterDevice函数负责卸载设备驱动。在程序设计时,端口驱动程序的开发仍然采用流驱动的设计方式,但编译环境使用Visual Studio。生成驱动动态链接库文件后将其部署在开发板适当的路径下,然后在WinCE程序中动态加载(卸载)该dll文件。笔者使用飞凌S3C2440开发板,创建了一个WincE对话框程序,通过点击相关按钮可以实现加载(卸载)GPIO端口驱动、点亮(熄灭)LED灯。图1是本程序的运行界面。


a.JPG

    
    相关的要点代码及解释如下(暂不考虑程序的异常处理)。
    (1)端口驱动动态链接库的创建及生成
    使用Visual Studio编译环境创建一个常规的动态链接库工程,并编译生成dll文件即可。具体代码这里不再给出。需要注意的是,在动态链接库工程的.cpp文件中,驱动的编写需要严格遵循流驱动定义的接口标准。在本程序中,流驱动的前缀名为GPI,生成的动态链接库文件名为GPI.dll。
    (2)端口驱动动态链接库的注册及加载
    调用RegisterDevice函数后,即将步骤1中生成的动态链接库文件注册到注册表中,并加载进WinCE内核。在使用该函数时需要注意,在WinCE应用程序中需要获取该驱动动态链接库文件的绝对路径。因此,开发者在部署WinCE应用程序和端口驱动动态链接库时,需要注意两者之间的位置关系,一般情况下,将两者部署在同一路径下即可。驱动程序动态链接库的注册及加载代码如下:
   b.JPG
    (3)端口访问
    端口访问的方式与常规方式一致,根据需要调用CreateFile、WriteFile、ReadFile等函数即可,相关代码这里不再给出。
    (4)端口驱动动态链接库的卸载
    当不需要该设备驱动时,调用DeregisterDevice函数即可实现对动态链接库dll文件的卸载。如果程序再次需要该设备驱动时,按照步骤2再次加载设备驱动即可。
2.3 设计方法的优点
    在WinCE内核动态加载GPIO端口驱动的设计方法中,内核调用端口驱动的方式比较灵活,GPIO端口驱动文件是通过相关WinCE API直接注册和调用的,整个开发过程不再涉及Platform Builder编译环境的使用。开发者只需要将注意力集中在Visual Studio创建端口驱动文件和WinCE应用程序的开发上,对驱动程序的修改和调试都独立于WinCE内核,而且在实际的使用中,端口驱动程序、WinCE内核和WinCE应用程序各自独立,便于各功能模块的独立开发和调试。

结语
    本文介绍了基于ARM+WinCE进行项目开发过程中动态加载GPIO端口驱动程序的设计方法,较好地避开了对Platform Builder编译环境的使用,能够替代常用的基于流驱动的驱动程序的设计方法。笔者在工程项目中验证了这两种设计方法,实际可行且快捷有效,对于其他ARM类的GPIO驱动程序开发,具有一定的借鉴意义。


关键字:ARM  WinCE  动态加载  GPIO端口  驱动程序 引用地址:基于ARM+WinCE项目开发过程中动态加载GPIO端口驱动程序的设计方法

上一篇:Cortex--M0单片机二-十进制整数转换的快速算法
下一篇:何谓STM32F单片机的RTC校准功能

推荐阅读最新更新时间:2024-03-16 15:57

基于ARM的直流系统接地故障检测应用程序设计
0 引言 发电厂、变电站的直流供电系统是控制和信号系统、继电保护及自动装置的工作电源,对保障电力系统安全运行是十分重要的,这就要求直流系统及其网络必须具有高可靠性。当直流系统发生一点接地时,应能及时找出和处理。目前,国内外基于单片机的绝缘监测装置大多是基于传统的平衡电桥法、低频信号注入法等研制的,但要解决直流系统大电容接地和环网影响等问题,则需要采用更为先进的处理方法,如基于小波变换的检测方法,而单片机有限的资源限制了这类方法的使用。 本文通过基于ARM的嵌入式系统进行直流系统接地故障检测装置的设计,并在该装置中实现基于小波变换的检测方法解决直流系统大电容接地和环网影响等问题,并重点阐述了基于该系统的应用程序的设计。 1
[单片机]
基于<font color='red'>ARM</font>的直流系统接地故障检测应用程序设计
PCF8563 时钟芯片驱动程序 (STM8S/STM8L)
模拟I2C读取时钟芯片PCF8563中的日期时间 #define SCLK_Clr() GPIO_ResetBits(GPIOD, GPIO_PIN_1)//SDA IIC接口的时钟信号 #define SCLK_Set() GPIO_SetBits(GPIOD, GPIO_PIN_1) #define SDIN_Clr() GPIO_ResetBits(GPIOD, GPIO_PIN_2)//SCL IIC接口的数据信号 #define SDIN_Set() GPIO_SetBits(GPIOD, GPIO_PIN_2) u8 buf ; void SDA_IN(u8 in) { if(in) GPIO_I
[单片机]
STM32系列之LCD驱动接口与驱动程序介绍
STM32F103系列是没有内置LCD控制器接口的,如果要驱动LCD,需要一颗LCD图形驱动IC。STM32和LCD驱动IC的接口在STM32端是FSMC,FSMC接口提供各种存储器驱动信号也提供了驱动LCD驱动IC的各种信号。 一、FSMC简介 FSMC概览 如下图可以看到FSMC支持的存储器类型及提供的各种读写控制信号。 图1 2.FSMC 框图 图2 3.FSMC 内存地址空间分配 图3 二、LCD 接口 1.8080和6800接口 这两种接口类型是典型的LCD并行接口。接口信号分为:数据信号和控制信号。 数据信号支持8,9,16,18,24位等。 控制信号用来区分读、写及区分是向LCD寻址命令寄存器还是写L
[单片机]
STM32系列之LCD驱动接口与<font color='red'>驱动程序</font>介绍
字符设备驱动程序之poll机制
驱动源码: #include linux/module.h #include linux/kernel.h #include linux/fs.h #include linux/init.h #include linux/delay.h #include linux/irq.h #include asm/uaccess.h #include asm/irq.h #include asm/io.h #include asm/arch/regs-gpio.h #include asm/hardware.h #include linux/poll.h int major = 0; st
[单片机]
字符设备<font color='red'>驱动程序</font>之poll机制
基于ARM处理器的嵌入式脑血氧参数监测仪
  引言   氧是人体新陈代谢的重要物质,脑组织新陈代谢率高,耗氧量占全身总量的20%左右。在心脑血管疾病及脑外伤病人的临床抢救与治疗中,如果缺乏对脑组织供氧的监护手段,就有可能造成脑组织神经功能的丧失或损害。因此,提供一种连续监测大脑供氧状况的临床设备,对提高心脑血管和脑外伤等多种疾病的诊断和治疗具有重大意义。在健康监护和临床诊断中,对脑组织血氧参数的监测是不可缺少的。   本文即应用ARM微处理器开发了一种带有网络通信功能的嵌入式脑组织血氧参数监测设备。    系统硬件设计   整个硬件系统由脑血氧检测探头脉冲驱动电路、滤波放大电路、LPC2210系统及接口电路组成。由LPC2210产生PWM脉宽调制信号,经探头脉冲驱
[医疗电子]
基于<font color='red'>ARM</font>处理器的嵌入式脑血氧参数监测仪
ARM 服务器出货2017年可望破百万台
ARM伺服器自2012年底开始出现在市场上,2013年开始加速推行,预估未来数年将逐渐增长,安谋(ARM)已两度公开表露其市场目标,包含2016年之前期望ARM伺服器能在全球伺服器市场的年出货表现占有5~10%,以及2017年能达到10~15%的市占率。 DIGITIMES Research推估,2013年全球ARM伺服器应在2万台左右,占全球伺服器年出货量的0.2%,而后逐年增长,至2017年能达106万台,年复合成长率(Compound Annual Growth Rate;CAGR)为170%。 若再加入乐观、悲观情境,则ARM伺服器的年出货量将有不小的变动空间。根据DIGITIMES Research观察,目前
[手机便携]
<font color='red'>ARM</font> 服务器出货2017年可望破百万台
ARM 中断状态和SVC状态的堆栈切换 (异常)
基础知识: Arm的寄存器使用规则以及寻址指令: R13 Sp 堆栈寄存器 R14 Lr 连接寄存器 R15 PC 程序计数器 多寄存器寻址: LDMIA R0!,{R1-R4} 执行以后的效果 R1 R2 R3 R4 堆栈寻址: STMFD入栈指令,相当于STMDB STMFD SP!,{R2-R4} 注意这个 ! 的使用,在使用和不使用的情况下会有不一样的效果,在后面的代码中具体分析。 R4 R3 R2 LDMFD出栈指令,相当于LDMIA LDMFD SP!,{R6-R8} R6 R7
[单片机]
<font color='red'>ARM</font> 中断状态和SVC状态的堆栈切换 (异常)
IAR推出新版IAR Embedded Workbench for Arm功能安全版,该版本配备经过认证的静态代码分析功能
IAR推出新版IAR Embedded Workbench for Arm功能安全版,该版本配备经过认证的静态代码分析功能 瑞典乌普萨拉,2024年2月20日 – 全球领先的嵌入式系统开发软件解决方案供应商IAR宣布 :推出其旗舰产品IAR Embedded Workbench for Arm功能安全版的最新版本9.50.3。此次发布进一步加强了IAR支持开发人员创建安全、可靠和符合标准的嵌入式应用程序的承诺,涵盖了汽车、医疗设备、工业自动化和消费电子等多个行业。该版本中最重要的新功能是经过认证的C-STAT,这是专为安全关键应用程序设计的静态代码分析工具。 IAR Embedded Workbench for Ar
[嵌入式]
IAR推出新版IAR Embedded Workbench for <font color='red'>Arm</font>功能安全版,该版本配备经过认证的静态代码分析功能
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved