首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

如何构建eCos嵌入式系统 02

如何构建eCos嵌入式系统 02

5  驱动程序设计
  
        平台抽象层完成后,接着要完成系统的设备驱动程序。eCos设备驱动程序的中断模块分为三个层次:中断服务程序ISR、中断滞后服务程序DSR和中断线程。ISR在响应中断时立即调用,DSR由ISR发出调用请求后调用,而中断线程为驱动程序的客户程序。
  
        硬件中断在最短的时间内交付给ISR处理。硬件抽象层对硬件中断源进行译码并调用对应的中断ISR。ISR可以对硬件进行简单的操作,应使ISR的处理时间尽量短。当ISR返回时,它可将自己的中断滞后服务程序DSR放入操作系统的任务调度中,DSR可以在不妨碍调度器正常工作时安全运行。大多数情况下,DSR将在ISR执行完成后立即运行。
  
        eCos设备驱动程序一般可分为三个部分,如图2所示。
  eCos的所用设备驱动程序都使用设备表入口来描述。使用宏DEVTAB_ENTRY()可生成设备表入口。其格式为:
  DEVTAB_ENTRY(l, name, dep_name, handlers, init, lookup, priv)。
  l:设备表入口的“C”标识符。
  name:该设备的“C”字符串名字,在搜索设备时用到。
  dep_name:对于一个层次设备,此参数是该设备下层设备的“C”字符串名字。
  handlers:I/O函数句柄指针,由宏DEVIO_TABLE实现的。
  init:当eCos处于初始化阶段时被调用的函数,该函数可以进行查找设备,对硬件进行设置等操作。
  lookup:当调用cyg_io_lookup()函数对该设备进行操作时调用的函数。
  priv:该设备驱动程序所需的专用数据。
  设备入口中的句柄handlers包含了一组设备驱动程序接口函数,是设备函数表DEVIO_TAB的指针,DEVIO_TAB包含了一组函数的指针。设备I/O函数表通过DEVIO_TAB宏来定义,格式如下:
  DEVIO_TABLE(l, write, read, get_config, set_config)。
  l:改表的“C”标识符,即在DEVTAB_ENTRY中的handlers。
  write:实现向设备传送数据。
  read:实现从设备读取数据。
  get_config:实现读取设备配置信息。
  set_config:实现对设备的配置操作。
  在eCos的初始化引导过程中,对系统中的所有设备调用其相应的init()函数(即DEVTAB_ENTRY宏注册的初始化函数),所有对设备的I/O操作通过handlers完成。
  
        设备驱动程序包含如下内容(xxx:表示某种设备)。
  ◆ 用宏定义DEVIO_TABLE设备I/O函数表。
DEVIO_TABLE(xxx_handlers, // I/O函数句柄指针
      xxx_write, // 写函数
      xxx_read, // 读函数
      xxx_get_config, // 读配置
      xxx_set_config)// 设置配置
  ◆ 用宏定义DEVTAB_ENTRY注册设备入口。
DEVTAB_ENTRY(xxx_device, // 设备入口名
      “/dev/xxx”, // 设备名,查找设备时用到
      NULL,// 需用到的底层驱动,这里为空
      xxx_handles, // I/O函数句柄指针
      xxx_init, // 设备初始化函数
      xxx_lookup, // 设备搜索
      xxx_priv)// 设备专用数据指针
  ◆ 完成初始化函数xxx_init。完成对硬件的初始化,调用函数cyg_drv_interrupt_create建立中断对象,然后调用函数cyg_drv_interrupt_attach完成中断与硬件向量的连接。
  ◆ 完成中断服务程序。
  ◆ 完成中断滞后服务程序。
  ◆ 若有中断线程,则完成中断线程。
  ◆ 完成设备搜索函数xxx_lookup。
  ◆ 完成写函数xxx_write。
  ◆ 完成读函数xxx_read。
  ◆ 完成读配置函数x xx_get_config。
  ◆ 完成设置配置函数xxx_set_config。

       结论
  
        经过硬件平台的移植和驱动程序的编写,就可在此基础上开发各种应用程序了。
  
        eCos具有非常优秀的可移植性;使用多任务抢占机制,具有最小的中断延迟;支持嵌入式系统所需的所有同步原语,提供包括设备驱动程序、内存管理、例外处理、标准C和数学库;提供各种开发嵌入式应用所需的工具,是开发嵌入式系统的强有力工具。
返回列表