zoukankan      html  css  js  c++  java
  • eCos设备驱动程序 (一)

    http://blog.chinaunix.net/uid-23860671-id-150538.html

      eCos设备驱动程序(一)

    .    应用程序在使用设备的时候,它通过驱动程序的用户API访问设备驱动程序,而设备驱动程序通过设备内核API与内核和硬件抽象层HAL进行交互,设备驱动程序和内核再通过HAL对硬件平台进行操作,从而实现对设备的访问。

          设备驱动程序一般可分为三个部分,分别为设备表入口DEVTAB_ENTRY、设备I/O函数表DEVIO_TAB和设备I/O函数。设备驱动程序的主要组成模块全部定义在头文件cyg/io/devtab.h中。

          ecos中的所有设备驱动程序都使用设备表入口来进行描述。设备表入口是一个具有cyg_devtab_ebtry_t类型的数据结构,使用宏DEVTAB_ENTRY()可以生成一个设备表入口,其格式为:

    DEVTAB_ENTRY(l,name,dep_name,handlers,init,lookup,priv)

    其中:
    l:            该设备表入口的"C"标识符。
    name:      该设备的"C"字符串名字。
    dep_name: 对于一个层次设备,些参娄是该设备的下层设备的"C"字符串名字。
    handles:    I/O函数句柄指针(见下面的设备I/O函数表DEVIO_TAB的详细说明)。
    init:          当ecos处于初始化阶段时被调用的函数,该函数可以进行查找设备、对硬件进行设置等操作。
    lookup:    当调用cyg_io_lookup()函数对该设备进行操作时所调用的一个函数。
    priv:        该设备驱动程序所需要的专用数据存放位置。

    上而所定义的设备表入口只适用于字符设备。对于块设备,要使用宏BLOCK_DEVTAB_ENTRY进行定义。其格式为:
    BLOCK_DEVTAB_ENTRY(l,name,dep_name,handlers,init,lookup,priv)

          设备表入口中的句柄handles提供了一级设备驱动程序接口函数。handlers是设备I/O函数表DEVIO_TAB的指针,DEVIO_TAB包 含了一组函数的指针,这些函数是各种接口函数cyg_io_XXX()的具体实现。设备I/O函数表通过DEVIO_TAB宏来定义,其格式如下:

      DEVIO_TABLE(l,write,read,get_config,set_config)

    其中:
    l:              该表的"C"标识符。
    write:        cyg_io_write()函数所调用的函数,实现向设备传送数据。
    read:          cyg_io_read()函数所调用的函数,实现从设备读取数据。
    get_config: cyg_io_get_config()函数所调用的函数,实现对设备配置信息的读取操作。
    set_config: cyg_io_set_config()函数所调用的函数,完成对设备的配置操作。

          在ecos的初始化引导过程中,对系统中的所有设备都要调用其相应的init()函数。init()函数有可能返回错误,出现这种情况时,设备将处于"离线"状态,所有针对离线设备的I/O请求都将返回错误。

          当使用某个设备的名字调用cyg_io_lookup()函数时,该设备的设备表入口中指定的lookup()将被调用。lookup()函数将使设备处于"在线"状态,处于在线状态下的设备对所有针对该项设备的I/O请求进行处理。

  • 相关阅读:
    Web开发快速上手
    前端概述
    Python语言进阶
    图像和办公文档处理
    网络编程
    进程和线程
    正则表达式
    面向对象进阶
    面向对象
    js 获取指定时间上月26 ,
  • 原文地址:https://www.cnblogs.com/kuainiao/p/2957798.html
Copyright © 2011-2022 走看看