《嵌入式系统Chapter8IO管理new.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统Chapter8IO管理new.ppt(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心嵌入式系统Chapter8IO管理new Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心第八章第八章 I/O管理管理电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心主要内容主要内容I/OI/O管理概述管理概述一种一种I/OI/O系统实现方法系统实现方法体系结构实现考虑电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心在通用操
2、作系统中,在通用操作系统中,I/OI/O管理采用层次结构的思管理采用层次结构的思想(如四个层次的结构:中断处理程序,设备想(如四个层次的结构:中断处理程序,设备驱动程序,与设备无关的操作系统软件,用户驱动程序,与设备无关的操作系统软件,用户层软件):层软件):较低层的软件较低层的软件要使较高层的软件独立于硬件的特性,较高层软件则要向用户提供一个友好、清晰、规范的接口。在在I/OI/O管理的层次结构中,主要通过设备独立的管理的层次结构中,主要通过设备独立的I/OI/O系统和设备驱动程序来共同完成系统和设备驱动程序来共同完成I/OI/O操作。操作。设备驱动程序设备驱动程序通过一组例程来提供比较低级
3、的I/O功能,比如把字节序列输入或输出到面向字符的设备中。高级协议高级协议(如面向字符设备的通信协议)则由与设备无关的I/O系统来实现。I/O管理概述管理概述 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心在一些实时内核的在一些实时内核的I/OI/O系统中,用户系统中,用户I/OI/O请求在请求在到达设备驱动程序之前,通常都只进行非常少到达设备驱动程序之前,通常都只进行非常少量的处理。量的处理。实时内核的I/O系统的作用就像一个转换表,把用户对I/O的请求转换到相应的驱动程序例程。驱动程序就能够获得最原始的用户I/O请求,并对设备进行操作。为满足标准设备处理的需要,为满足标准设备
4、处理的需要,I/OI/O系统通常也系统通常也提供一些高级的例程库,便于实现设备的标准提供一些高级的例程库,便于实现设备的标准通信协议。通信协议。I/O系统既便于实现能够满足大多数设备要求的、标准的驱动程序;在需要时,方便地实现非标准的设备驱动程序,以满足实时性或是其他的特殊需要。I/O管理概述管理概述 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心一种一种I/O系统实现方法系统实现方法在不同在不同CPUCPU和和I/OI/O设备之间的设备之间的可移植性可移植性就成就成为嵌入式操作系统设计时需要重点考虑的为嵌入式操作系统设计时需要重点考虑的内容内容可移植性有助于增强操作系统和应用的
5、重用,以保护应用投资 如何有助于提高如何有助于提高编写驱动程序的便利性编写驱动程序的便利性,通常也是应用开发人员非常关注的特性通常也是应用开发人员非常关注的特性降低驱动程序的开发难度,则能有效提高系统的开发效率 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心体系结构体系结构 为了有效为了有效组织和管组织和管理各种不理各种不同的设备,同的设备,可以采用可以采用分层的思分层的思想,把想,把I/OI/O系统系统从上到下从上到下分为四层,分为四层,分别为分别为APIAPI、设、设备管理、备管理、驱动逻辑驱动逻辑和硬件抽和硬件抽象。象。API设备管理设备管理中断中断驱动程序驱动程序串口串口
6、驱动程序驱动程序键盘键盘驱动程序驱动程序串口卡串口卡A 硬件抽象硬件抽象串口卡串口卡B 硬件抽象硬件抽象串口串口1串口串口2串口串口4串口串口2串口串口3串口串口1驱动逻辑层驱动逻辑层硬件抽象层硬件抽象层设备设备设备管理层设备管理层API层层电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心体系结构体系结构硬件抽象层硬件抽象层是硬件功能模块的集合,是对硬设备功能的第一层抽象,实现基本的IO操作。所关心的是如何实现硬件功能的软件接口,而不是设备的管理逻辑。每个硬件可能有多个端口(设备),对应的硬件抽象层是对这些端口(设备)操作的基本抽象,为驱动程序管理这些设备提供接口。上层驱动程序在不
7、需要了解具体设备硬件信息的情况下,就可以操作这些设备。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心体系结构体系结构驱动逻辑层驱动逻辑层存放系统中的所有驱动程序 实现设备的管理逻辑 通过硬件抽象层来管理设备 每个驱动程序管理一类设备,例如所有串口都由串口驱动程序来管理,所有中断控制器都由中断控制器驱动程序管理。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心体系结构体系结构设备管理层设备管理层管理系统中的设备,并向上提高统一的接口。设备管理层不直接操作设备,它只能通过驱动程序来间接操作设备。APIAPI层层用于对设备管理层提供的驱动结构进行进一步的包装,以方便应用程序
8、使用。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心体系结构体系结构采用这种体系结构的好处:采用这种体系结构的好处:便于硬设备驱动的编写 便于移植 提供硬件的多种使用模式:应用程序(包括用户程序、操作系统及其组件等程序)可以根据实际需要从驱动程序的不同层次直接调用,可以满足实时性或其它一些应用设计方面的具体考虑。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心体系结构体系结构提供硬件的多种使用模式API设备管理设备管理驱动程序驱动程序硬件抽象硬件抽象应用程序(用户程序、操作系统及其组件等)应用程序(用户程序、操作系统及其组件等)电子科技大学嵌入式软件工程中心电子科技大
9、学嵌入式软件工程中心实现考虑实现考虑设备管理设备管理驱动逻辑驱动逻辑硬件抽象硬件抽象工作过程工作过程电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心设备管理设备管理为了实现设备管理,可以提供三张表:为了实现设备管理,可以提供三张表:驱动程序地址表设备名表文件表 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心设备管理设备管理驱动程序地址表:管理系统中的驱动程序,驱动程序地址表:管理系统中的驱动程序,表项为各个驱动程序的功能函数表项为各个驱动程序的功能函数 驱动程序地址表驱动程序地址表initializeopenclosereadwriteControlxxx_initi
10、alizeXxx_openxxx_closexxx_readxxx_writexxx_control电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心设备管理设备管理驱动程序地址表驱动程序地址表typedef T_DM_StatusCode(*T_DM_DeviceDriverEntry)(T_WORD,T_WORD,T_VOID*);typedef struct T_DM_DeviceDriverEntry initialization;/初始化函数指针 T_DM_DeviceDriverEntry open;/打开设备函数指针 T_DM_DeviceDriverEntry clo
11、se;/关闭设备函数指针 T_DM_DeviceDriverEntry read;/读设备函数指针 T_DM_DeviceDriverEntry write;/写设备函数指针 T_DM_DeviceDriverEntry control;/控制设备函数指针 T_DM_DriverAddressTable;驱动程地址表的数据结构驱动程地址表的数据结构电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心设备管理设备管理设备名表:管理系统中所有设备,通过设设备名表:管理系统中所有设备,通过设备名来区分各设备备名来区分各设备 主设备号是驱动程序在驱动地址表中的位置,次设备号用来在驱动程序内部区
12、分不同的设备 设备名表设备名表Namemajorminorname1major1minor1name2major1minor1name3major1minor1电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心设备管理设备管理设备名表设备名表typedef struct T_BYTE *device_name;/设备名 T_WORD device_name_length;/设备名长度 T_WORD major;/主设备号 T_WORD minor;/次设备号 T_DM_DriverName;设备名表的数据结构设备名表的数据结构电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中
13、心设备管理设备管理文件表:用于记录当前打开的设备文件表:用于记录当前打开的设备 文件表文件表fddriverSizeoffsetflagssemdata11234电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心设备管理设备管理文件表文件表typedeflongoff_t;typedef struct T_DM_DriverName*driver;/用于保存设备在设备表中的地址 off_tsize;/文件长度 off_toffset;/当前偏移 T_UWORDflags;/文件标志 T_UWORDsem;/文件信号句柄 T_VOID*data1;/文件私有数据 T_DM_FileDe
14、scriptor;文件表的数据结构文件表的数据结构 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心驱动逻辑驱动逻辑驱动逻辑层实现系统中所有驱动程序。驱动逻辑层实现系统中所有驱动程序。每个驱动程序管理一类设备,为了实现设每个驱动程序管理一类设备,为了实现设备管理,在每个驱动程序中维护一张设备备管理,在每个驱动程序中维护一张设备信息表。信息表。pNextMinorhalDevDataTabledevInterfaceTabledllDevDataTablepNextMinorhalDevDataTabledevInterfaceTabledllDevDataTablepNextMin
15、orhalDevDataTabledevInterfaceTabledllDevDataTable设备信息表设备信息表 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心驱动逻辑驱动逻辑pNextMinorhalDevDataTabledevInterfaceTabledllDevDataTable次设备号,表示设备在其所属驱动中的编号 设备接口函数表,也即硬件功能抽象表,表中函数由设备对应的硬件抽象提供,驱动程序通过该表中的函数,实现对设备的访问 用于硬件抽象的设备数据表,保存硬件需要的信息,该表的内容由硬件抽象层负责解析,驱动程序不关心表的具体内容 驱动设备数据表,保存驱动程序所
16、需的信息,由驱动程序负责维护 下一个设备项 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心驱动逻辑驱动逻辑基本串口驱动程序基本串口驱动程序uartuart的设备信息表结构的设备信息表结构 typedef structT_DLL_UartDevInfo *pNext;/指向下一个设备信息表项int minor;/次设备号T_VOID *pHalDevDataTable;/指向设备数据表T_DLL_UART_DEV_INTERFACE *pDevInterface;/指向设备接口函数表T_DLL_UART_DEV_DATA*pDllDevDataTable;/指向驱动设备数据表 T_
17、DLL_UartDevInfo;电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心驱动逻辑驱动逻辑基本串口驱动程序的驱动设备数据表结构定义基本串口驱动程序的驱动设备数据表结构定义 typedef struct/*第一部分:需要用户配置的信息*/T_UBYTEenable;/通道使能 T_UBYTEparityMode;/奇偶校验模式 T_UBYTEbitsPerChar;/数据位数T_UWORD baudrate;/波特率 T_UBYTEnumOfStopBits;/停止位T_UBYTErxEnable;/是否允许接收T_UBYTEmode;/访问模式(Polling、interru
18、pt)T_UBYTEflowCtrl;/流控T_UBYTEremainder;/流控 remainder T_UWORD inBufSizeCfg;/输入缓存大小T_UWORD outBufSizeCfg;/输出缓存大小T_UWORD inBufWakeSizeCfg;电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心驱动逻辑驱动逻辑/*第二部分:不需要用户配置的信息*/T_UBYTE*InBuf;/point to the real bufferT_UWORDInBufSize;/输入缓存大小T_UWORDInBufHead;/queue headT_UWORDInBufTail;
19、/queue tailT_UWORDInBufDropped;/StatisticsT_UWORD InBufWaitMutex;/输入等待信号量idT_UWORD InBufWakeCnt;/等待接收的字符数T_UWORDInBufWaitTicks;/等待输入的等候时间,0为一直等待 T_UBYTE*OutBuf;/输出缓存指针T_UWORDOutBufSize;/输出缓存大小T_UWORDOutBufHead;/queue headT_UWORDOutBufTail;/queue tailT_WORDOutBufWaitMutex;/输出等待信号量iT_UWORDOutBufWaitTi
20、cks;/等待输出缓存释放的等候时间,0为一直等待 /输出缓存的状态:OBS_IDLE:输出缓存为空;OBS_BUSY:输出缓存还有数据T_VOLATILE enum OBS_IDLE,OBS_BUSY outBufState;T_DLL_UART_DEV_DATA;基本串口驱动程序的驱动设备数据表结构定义基本串口驱动程序的驱动设备数据表结构定义(续续)电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心驱动逻辑驱动逻辑串口驱动程序定义的设备函数接口表串口驱动程序定义的设备函数接口表 ypedef struct /查找设备T_BOOL(*Find)(T_VOID*pUartDevDat
21、aTable);/获取硬件抽象层管理该设备需要的资源T_BOOL(*GetResource)(T_VOID*pUartDevDataTable);/释放硬件抽象层管理该设备需要的资源T_BOOL(*ReleaseResource)(T_VOID*pUartDevDataTable);/启动设备T_BOOL(*Start)(T_VOID*pUartDevDataTable);/停止设备T_BOOL(*Stop)(T_VOID*pUartDevDataTable);/检查设备是否准备好读取T_BOOL(*ReadReady)(T_VOID*pUartDevDataTable);/检查设备是否准备好
22、写入T_BOOL(*WriteReady)(T_VOID*pUartDevDataTable);/读取字符T_BOOL(*ReadChar)(T_VOID*pUartDevDataTable,T_BYTE*RcvChar);/写入字符T_BOOL(*WriteChar)(T_VOID*pUartDevDataTable,T_BYTE SendChar);/使能设备的中断T_BOOL(*EnableMainChipInt)(T_VOID*pUartDevDataTable);/禁止设备的中断T_BOOL(*DisableMainChipInt)(T_VOID*pUartDevDataTable)
23、;电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心驱动逻辑驱动逻辑 /使能接收中断T_BOOL(*EnableRcvInt)(T_VOID*pUartDevDataTable);/禁止接收中断T_BOOL(*DisableRcvInt)(T_VOID*pUartDevDataTable);/使能发送中断T_BOOL(*EnableSendInt)(T_VOID*pUartDevDataTable);/禁止发送中断T_BOOL(*DisableSendInt)(T_VOID*pUartDevDataTable);/获取中断类型T_UWORD(*GetIntType)(T_VOID*p
24、UartDevDataTable,T_UWORD vector,T_UWORD*IntStatusReg);/处理其它中断类型T_BOOL(*HandleOtherIntType)(T_VOID*pUartDevDataTable,T_UWORD Intinfo);/配置串口通讯的数据位数T_BOOL(*Config_data_bit_len)(T_VOID*pUartDevDataTable,T_UWORD DatalenCfg);/配置串口通讯的停止位数T_BOOL(*Config_stop_bit_len)(T_VOID*pUartDevDataTable,T_UWORD StopBit
25、lenCfg);/配置串口通讯的的奇偶校验位T_BOOL(*Config_parity_sel)(T_VOID*pUartDevDataTable,T_UWORD ParitySelCfg);/配置串口通讯的的波特率T_BOOL(*Config_baud_rate)(T_VOID*pUartDevDataTable,T_UWORD BaudrateCfg);T_DLL_UART_DEV_INTERFACE;串口驱动程序定义的设备函数接口表串口驱动程序定义的设备函数接口表 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心驱动逻辑驱动逻辑i8250i8250的设备数据表结构的设备数据表
26、结构 typedef struct/设备公共信息定义T_BSP_DEV_PUB_DATA pub;/第二部分:HAL私有的,需要用户配置的信息。T_UWORD baseAddr;/设备基地址 /第三部分:HAL私有的,不需要用户配置的信息T_HAL_I8250_DEV_DATA;电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心硬件抽象硬件抽象每个设备的硬件抽象分两部分:每个设备的硬件抽象分两部分:硬件抽象部分,实现对硬件的抽象。该部分写好之后,不会随应用而改变;初始化部分,对设备进行初始化,实现设备注册。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心工作过程工作过程I
27、/OI/O系统的初始化系统的初始化 设备打开设备打开 设备关闭设备关闭 设备读设备读 设备写设备写 设备控制设备控制 设备管理初始化设备管理初始化驱动逻辑初始化驱动逻辑初始化 硬件抽象初始化硬件抽象初始化 完成设备管理相关信息的完成设备管理相关信息的初始化,如创建驱动程序初始化,如创建驱动程序地址表、设备名表、文件地址表、设备名表、文件记录表等记录表等 实现系统中各驱动程序的实现系统中各驱动程序的注册,即把系统中各驱动注册,即把系统中各驱动程序注册到设备管理中程序注册到设备管理中 主要完成设备注册主要完成设备注册 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心工作过程工作过程驱动
28、程序注册驱动程序注册 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心工作过程工作过程设备注册设备注册 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心工作过程工作过程打开设备打开设备 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心工作过程工作过程关闭设备关闭设备 系统调用close()关闭一个不再使用的设备,关闭一个设备时,I/O系统的内部运作过程和写一个设备大致相同,不同的是I/O系统根据设备名表中的主设备号在驱动程序地址表中定位并调用驱动程序的xxx_close()函数,然后释放文件表中的记录,返回。在此之后对该文件描述符的任何引用都将返回错误。但是随后的open()系统调用将仍然返回该文件描述符。电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心工作过程工作过程写设备写设备读设备、控制读设备、控制设备操作与写设备操作与写设备操作流程设备操作流程类似类似 电子科技大学嵌入式软件工程中心电子科技大学嵌入式软件工程中心谢谢!