07 补充UCOSIO管理new.ppt

上传人:hyn****60 文档编号:82467924 上传时间:2023-03-25 格式:PPT 页数:36 大小:644KB
返回 下载 相关 举报
07 补充UCOSIO管理new.ppt_第1页
第1页 / 共36页
07 补充UCOSIO管理new.ppt_第2页
第2页 / 共36页
点击查看更多>>
资源描述

《07 补充UCOSIO管理new.ppt》由会员分享,可在线阅读,更多相关《07 补充UCOSIO管理new.ppt(36页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第八章第八章 I/O管理管理主要内容主要内容I/OI/O管理概述管理概述一种一种I/OI/O系统实现方法系统实现方法体系结构实现考虑在通用操作系统中,在通用操作系统中,I/OI/O管理采用层次结管理采用层次结构的思想(如四个层次的结构:中断处理构的思想(如四个层次的结构:中断处理程序,设备驱动程序,与设备无关的操作程序,设备驱动程序,与设备无关的操作系统软件,用户层软件):系统软件,用户层软件):较低层的软件较低层的软件要使较高层的软件独立于硬件的特性,较高层软件则要向用户提供一个友好、清晰、规范的接口。I/O管理概述管理概述 I/O管理概述管理概述在在I/OI/O管理的层次结构中,主要通过设

2、备独管理的层次结构中,主要通过设备独立的立的I/OI/O系统和设备驱动程序来共同完成系统和设备驱动程序来共同完成I/OI/O操作。操作。设备驱动程序设备驱动程序通过一组例程来提供比较低级的I/O功能,比如把字节序列输入或输出到面向字符的设备中。高级协议高级协议(如面向字符设备的通信协议)则由与设备无关的I/O系统来实现。在一些实时内核的在一些实时内核的I/OI/O系统中,用户系统中,用户I/OI/O请请求在到达设备驱动程序之前,通常都只进求在到达设备驱动程序之前,通常都只进行非常少量的处理。行非常少量的处理。实时内核的实时内核的I/OI/O系统的作用就像一个转换表,系统的作用就像一个转换表,把

3、用户对把用户对I/OI/O的请求转换到相应的驱动程序例程。的请求转换到相应的驱动程序例程。驱动程序就能够获得最原始的用户驱动程序就能够获得最原始的用户I/OI/O请求,请求,并对设备进行操作。并对设备进行操作。I/O管理概述管理概述 I/O管理概述管理概述为满足标准设备处理的需要,为满足标准设备处理的需要,I/OI/O系统通常系统通常也提供一些高级的例程库,便于实现设备也提供一些高级的例程库,便于实现设备的标准通信协议。的标准通信协议。I/OI/O系统既便于实现能够满足大多数设备要求系统既便于实现能够满足大多数设备要求的、标准的驱动程序;的、标准的驱动程序;在需要时,方便地实现非标准的设备驱动

4、程序,在需要时,方便地实现非标准的设备驱动程序,以满足实时性或是其他的特殊需要。以满足实时性或是其他的特殊需要。一种一种I/O系统实现方法系统实现方法在不同在不同CPUCPU和和I/OI/O设备之间的设备之间的可移植性可移植性就成为就成为嵌入式操作系统设计时需要重点考虑的内容嵌入式操作系统设计时需要重点考虑的内容可移植性有助于增强操作系统和应用的重用,以可移植性有助于增强操作系统和应用的重用,以保护应用投资保护应用投资 如何有助于提高如何有助于提高编写驱动程序的便利性编写驱动程序的便利性,通,通常也是应用开发人员非常关注的特性常也是应用开发人员非常关注的特性降低驱动程序的开发难度,则能有效提高

5、系统的降低驱动程序的开发难度,则能有效提高系统的开发效率开发效率 体系结构体系结构API设备管理设备管理中断中断驱动程序驱动程序串口串口驱动程序驱动程序键盘键盘驱动程序驱动程序串口卡串口卡A 硬件抽象硬件抽象串口卡串口卡B 硬件抽象硬件抽象串口串口1串口串口2串口串口4串口串口2串口串口3串口串口1驱动逻辑层驱动逻辑层硬件抽象层硬件抽象层设备设备设备管理层设备管理层API层层为了有效组织和管理各种不同的设备,可以采用分层的思想,把为了有效组织和管理各种不同的设备,可以采用分层的思想,把I/OI/O系统系统从上到下分为四层,分别为从上到下分为四层,分别为APIAPI、设备管理、驱动逻辑和硬件抽象

6、。、设备管理、驱动逻辑和硬件抽象。体系结构体系结构硬件抽象层硬件抽象层是硬件功能模块的集合,是对硬设备功能的第一层抽象,实现基本的IO操作。所关心的是如何实现硬件功能的软件接口,而不是设备的管理逻辑。每个硬件可能有多个端口(设备),对应的硬件抽象层是对这些端口(设备)操作的基本抽象,为驱动程序管理这些设备提供接口。上层驱动程序在不需要了解具体设备硬件信息的情况下,就可以操作这些设备。体系结构体系结构驱动逻辑层驱动逻辑层存放系统中的所有驱动程序 实现设备的管理逻辑 通过硬件抽象层来管理设备 每个驱动程序管理一类设备,例如所有串口都由串口驱动程序来管理,所有中断控制器都由中断控制器驱动程序管理。体

7、系结构体系结构设备管理层设备管理层管理系统中的设备,并向上提高统一的接口。设备管理层不直接操作设备,它只能通过驱动程序来间接操作设备。APIAPI层层用于对设备管理层提供的驱动结构进行进一步的包装,以方便应用程序使用。体系结构体系结构采用这种体系结构的好处:采用这种体系结构的好处:便于硬设备驱动的编写 便于移植 提供硬件的多种使用模式:应用程序(包括用户程序、操作系统及其组件等程序)可以根据实际需要从驱动程序的不同层次直接调用,可以满足实时性或其它一些应用设计方面的具体考虑。体系结构体系结构提供硬件的多种使用模式API设备管理设备管理驱动程序驱动程序硬件抽象硬件抽象应用程序(用户程序、操作系统

8、及其组件等)应用程序(用户程序、操作系统及其组件等)实现考虑实现考虑设备管理设备管理驱动逻辑驱动逻辑硬件抽象硬件抽象工作过程工作过程设备管理设备管理为了实现设备管理,可以提供三张表:为了实现设备管理,可以提供三张表:驱动程序地址表设备名表文件表 设备管理设备管理驱动程序地址表:管理系统中的驱动程序,驱动程序地址表:管理系统中的驱动程序,表项为各个驱动程序的功能函数表项为各个驱动程序的功能函数 驱动程序地址表驱动程序地址表initializeopenclosereadwriteControlxxx_initializexxx_openxxx_closexxx_readxxx_writexxx_c

9、ontrol设备管理设备管理驱动程序地址表驱动程序地址表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 close;/关闭设备函数指针关闭设备函数指针 T_DM_DeviceDriverEntry read;/读设备函数指针读设

10、备函数指针 T_DM_DeviceDriverEntry write;/写设备函数指针写设备函数指针 T_DM_DeviceDriverEntry control;/控制设备函数指针控制设备函数指针 T_DM_DriverAddressTable;驱动程序地址表的数据结构驱动程序地址表的数据结构设备管理设备管理设备名表:管理系统中所有设备,通过设设备名表:管理系统中所有设备,通过设备名来区分各设备备名来区分各设备 主设备号是驱动程序在驱动地址表中的位置,次设备号用来在驱动程序内部区分不同的设备 设备名表设备名表Namemajorminorname1major1minor1name2major1

11、minor1name3major1minor1设备管理设备管理设备名表设备名表typedef struct T_BYTE *device_name;/设备名设备名 T_WORD device_name_length;/设备名长度设备名长度 T_WORD major;/主设备号主设备号 T_WORD minor;/次设备号次设备号 T_DM_DriverName;设备名表的数据结构设备名表的数据结构设备管理设备管理文件表:用于记录当前打开的设备文件表:用于记录当前打开的设备 文件表文件表fddriverSizeoffsetflagssemdata11234设备管理设备管理文件表文件表typede

12、flongoff_t;typedef struct T_DM_DriverName*driver;/用于保存设备在设备表中的地址用于保存设备在设备表中的地址 off_tsize;/文件长度文件长度 off_toffset;/当前偏移当前偏移 T_UWORDflags;/文件标志文件标志 T_UWORDsem;/文件信号句柄文件信号句柄 T_VOID*data1;/文件私有数据文件私有数据 T_DM_FileDescriptor;文件表的数据结构文件表的数据结构 驱动逻辑驱动逻辑驱动逻辑层实现系统中所有驱动程序。驱动逻辑层实现系统中所有驱动程序。每个驱动程序管理一类设备,为了实现设每个驱动程序管

13、理一类设备,为了实现设备管理,在每个驱动程序中维护一张设备备管理,在每个驱动程序中维护一张设备信息表。信息表。pNextMinorhalDevDataTabledevInterfaceTabledllDevDataTablepNextMinorhalDevDataTabledevInterfaceTabledllDevDataTablepNextMinorhalDevDataTabledevInterfaceTabledllDevDataTable设备信息表设备信息表 驱动逻辑驱动逻辑pNextMinorhalDevDataTabledevInterfaceTabledllDevDataTab

14、le次设备号,表示设备在其所属驱动中的编号 设备接口函数表,也即硬件功能抽象表,表中函数由设备对应的硬件抽象提供,驱动程序通过该表中的函数,实现对设备的访问 用于硬件抽象的设备数据表,保存硬件需要的信息,该表的内容由硬件抽象层负责解析,驱动程序不关心表的具体内容 驱动设备数据表,保存驱动程序所需的信息,由驱动程序负责维护 下一个设备项 驱动逻辑驱动逻辑基本串口驱动程序基本串口驱动程序uartuart的设备信息表结构的设备信息表结构 typedef structT_DLL_UartDevInfo *pNext;/指向下一个设备信息表项int minor;/次设备号T_VOID *pHalDevD

15、ataTable;/指向设备数据表T_DLL_UART_DEV_INTERFACE *pDevInterface;/指向设备接口函数表T_DLL_UART_DEV_DATA*pDllDevDataTable;/指向驱动设备数据表 T_DLL_UartDevInfo;驱动逻辑驱动逻辑基本串口驱动程序的驱动设备数据表结构定义基本串口驱动程序的驱动设备数据表结构定义 typedef struct/*第一部分:需要用户配置的信息*/T_UBYTEenable;/通道使能 T_UBYTEparityMode;/奇偶校验模式 T_UBYTEbitsPerChar;/数据位数T_UWORD baudrate

16、;/波特率 T_UBYTEnumOfStopBits;/停止位T_UBYTErxEnable;/是否允许接收T_UBYTEmode;/访问模式(Polling、interrupt)T_UBYTEflowCtrl;/流控T_UBYTEremainder;/流控 remainder T_UWORD inBufSizeCfg;/输入缓存大小T_UWORD outBufSizeCfg;/输出缓存大小T_UWORD inBufWakeSizeCfg;/输入缓存激活容量驱动逻辑驱动逻辑/*第二部分:不需要用户配置的信息*/T_UBYTE*InBuf;/输入缓存指针T_UWORDInBufSize;/输入缓

17、存大小T_UWORDInBufHead;/queue headT_UWORDInBufTail;/queue tailT_UWORDInBufDropped;/统计T_UWORD InBufWaitMutex;/输入等待信号量idT_UWORD InBufWakeCnt;/等待接收的字符数T_UWORDInBufWaitTicks;/等待输入的等候时间,0为一直等待 T_UBYTE*OutBuf;/输出缓存指针T_UWORDOutBufSize;/输出缓存大小T_UWORDOutBufHead;/queue headT_UWORDOutBufTail;/queue tailT_WORDOutB

18、ufWaitMutex;/输出等待信号量idT_UWORDOutBufWaitTicks;/等待输出缓存释放的等候时间,0为一直等待 /输出缓存的状态:OBS_IDLE:输出缓存为空;OBS_BUSY:输出缓存还有数据T_VOLATILE enum OBS_IDLE,OBS_BUSY outBufState;T_DLL_UART_DEV_DATA;基本串口驱动程序的驱动设备数据表结构定义基本串口驱动程序的驱动设备数据表结构定义(续续)驱动逻辑驱动逻辑串口驱动程序定义的设备函数接口表串口驱动程序定义的设备函数接口表 ypedef struct /查找设备查找设备T_BOOL(*Find)(T_V

19、OID*pUartDevDataTable);/获取硬件抽象层管理该设备需要的资源获取硬件抽象层管理该设备需要的资源T_BOOL(*GetResource)(T_VOID*pUartDevDataTable);/释放硬件抽象层管理该设备需要的资源释放硬件抽象层管理该设备需要的资源T_BOOL(*ReleaseResource)(T_VOID*pUartDevDataTable);/启动设备启动设备T_BOOL(*Start)(T_VOID*pUartDevDataTable);/停止设备停止设备T_BOOL(*Stop)(T_VOID*pUartDevDataTable);/检查设备是否准备好

20、读取检查设备是否准备好读取T_BOOL(*ReadReady)(T_VOID*pUartDevDataTable);/检查设备是否准备好写入检查设备是否准备好写入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(*EnableMainCh

21、ipInt)(T_VOID*pUartDevDataTable);/禁止设备的中断禁止设备的中断T_BOOL(*DisableMainChipInt)(T_VOID*pUartDevDataTable);驱动逻辑驱动逻辑 /使能接收中断使能接收中断T_BOOL(*EnableRcvInt)(T_VOID*pUartDevDataTable);/禁止接收中断禁止接收中断T_BOOL(*DisableRcvInt)(T_VOID*pUartDevDataTable);/使能发送中断使能发送中断T_BOOL(*EnableSendInt)(T_VOID*pUartDevDataTable);/禁止发

22、送中断禁止发送中断T_BOOL(*DisableSendInt)(T_VOID*pUartDevDataTable);/获取中断类型获取中断类型T_UWORD(*GetIntType)(T_VOID*pUartDevDataTable,T_UWORD vector,T_UWORD*IntStatusReg);/处理其它中断类型处理其它中断类型T_BOOL(*HandleOtherIntType)(T_VOID*pUartDevDataTable,T_UWORD Intinfo);/配置串口通讯的数据位数配置串口通讯的数据位数T_BOOL(*Config_data_bit_len)(T_VOID

23、*pUartDevDataTable,T_UWORD DatalenCfg);/配置串口通讯的停止位数配置串口通讯的停止位数T_BOOL(*Config_stop_bit_len)(T_VOID*pUartDevDataTable,T_UWORD StopBitlenCfg);/配置串口通讯的的奇偶校验位配置串口通讯的的奇偶校验位T_BOOL(*Config_parity_sel)(T_VOID*pUartDevDataTable,T_UWORD ParitySelCfg);/配置串口通讯的的波特率配置串口通讯的的波特率T_BOOL(*Config_baud_rate)(T_VOID*pUar

24、tDevDataTable,T_UWORD BaudrateCfg);T_DLL_UART_DEV_INTERFACE;串口驱动程序定义的设备函数接口表(续)串口驱动程序定义的设备函数接口表(续)驱动逻辑驱动逻辑i8250i8250的设备数据表结构的设备数据表结构 typedef struct/设备公共信息定义T_BSP_DEV_PUB_DATA pub;/第二部分:HAL私有的,需要用户配置的信息。T_UWORD baseAddr;/设备基地址 /第三部分:HAL私有的,不需要用户配置的信息T_HAL_I8250_DEV_DATA;硬件抽象硬件抽象每个设备的硬件抽象分两部分:每个设备的硬件抽

25、象分两部分:硬件抽象部分,实现对硬件的抽象。该部分写好之后,不会随应用而改变;初始化部分,对设备进行初始化,实现设备注册。工作过程工作过程I/OI/O系统的初始化系统的初始化 设备打开设备打开 设备关闭设备关闭 设备读设备读 设备写设备写 设备控制设备控制 设备管理初始化设备管理初始化驱动逻辑初始化驱动逻辑初始化 硬件抽象初始化硬件抽象初始化 完成设备管理相关信息的完成设备管理相关信息的初始化,如创建驱动程序初始化,如创建驱动程序地址表、设备名表、文件地址表、设备名表、文件记录表等记录表等 实现系统中各驱动程序的实现系统中各驱动程序的注册,即把系统中各驱动注册,即把系统中各驱动程序注册到设备管

26、理中程序注册到设备管理中 主要完成设备注册主要完成设备注册 工作过程工作过程xxx_initializexxx_initializexxx_openxxx_openxxx_closexxx_closexxx_readxxx_readxxx_writexxx_writexxx_controlxxx_controlinitializeopenclosereadwritecontrolMajor=fnDM_DriverInstall(xxx_initialize,xxx_open,xxx_close,xxx_read,xxx_write,xxx_control)(5 5)I/OI/O系统返回记录在驱

27、动程序系统返回记录在驱动程序地址表中的索引,即主设备号地址表中的索引,即主设备号(major=2)major=2)(1)(1)驱动程序安装函数为六个基驱动程序安装函数为六个基本本I/OI/O函数指定地址。函数指定地址。(2 2)I/OI/O系系统统在在驱驱动动程程序序地地址址表表中中定定位位下下一一个个空空闲闲的记录。的记录。(3 3)I/OI/O系统在驱动程序地址表中填入驱动程序的六个函数地址。系统在驱动程序地址表中填入驱动程序的六个函数地址。(4 4)I/OI/O系统立即调用新驱动程序的系统立即调用新驱动程序的xxx_initializexxx_initialize()()函数,初始化驱动

28、程序,完成设备的函数,初始化驱动程序,完成设备的注册。注册。驱动程序地址表驱动程序地址表01234驱动程序注册驱动程序注册 工作过程工作过程设备注册设备注册name1name1majormajorminor1minor1name2name2majormajorminor2minor2xxx_initializexxx_initializexxx_openxxx_openxxx_closexxx_closexxx_readxxx_readxxx_writexxx_writexxx_controlxxx_controlinitializeopenclosereadwritecontrol驱动程序地

29、址表驱动程序地址表01234Status=fnDM_NameRegister(“name”,major,minor1);Status=fnDM_NameRegister(“name”,major,minor2);I/O系统注册设备到设备系统注册设备到设备名表中,注册的内容包括名表中,注册的内容包括设备名、设备名、major和和 minor设备名表设备名表工作过程工作过程打开设备打开设备 工作过程工作过程关闭设备关闭设备 系统调用close()关闭一个不再使用的设备,关闭一个设备时,I/O系统的内部运作过程和写一个设备大致相同,不同的是I/O系统根据设备名表中的主设备号在驱动程序地址表中定位并调用驱动程序的xxx_close()函数,然后释放文件表中的记录,返回。在此之后对该文件描述符的任何引用都将返回错误。但是随后的open()系统调用将仍然返回该文件描述符。工作过程工作过程写设备写设备读设备读设备控制设备操作控制设备操作与写设备操作与写设备操作流程类似流程类似

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com