读书人

rt-thread的IO装置管理系统源码分析

发布时间: 2013-11-09 17:06:53 作者: rapoo

rt-thread的IO设备管理系统源码分析

rt-thread的IO设备管理模块为应用提供了一个对设备进行访问的通用接口,,并通过定义的数据结构对设备驱动程序和设备信息进行管理。从系统整体位置来说I/O管理模块相当于设备驱动程序和上层应用之间的一个中间层。

I/O管理模块实现了对设备驱动程序的封装:设备驱动程序的实现与I/O管理模块独立,提高了模块的可移植性。应用程序通过I/O管理模块提供的标准接口访问底层设备,设备驱动程序的升级不会对上层应用产生影响。这种方式使得与设备的硬件操作相关的代码与应用相隔离,双方只需各自关注自己的功能,这降低了代码的复杂性,提高了系统的可靠性。

1 IO设备管理控制块

/** * This function will set the indication callback function when device has  * written data to physical hardware. * * @param dev the pointer of device driver structure * @param tx_done the indication callback function * * @return RT_EOK */rt_err_trt_device_set_tx_complete(rt_device_t dev,                          rt_err_t (*tx_done)(rt_device_t dev, void *buffer)){    RT_ASSERT(dev != RT_NULL);    dev->tx_complete = tx_done;    return RT_EOK;}

3 设备驱动实现的步骤

上述内容已经比较详细地介绍了设备控制块的数据结构及其相关的操作接口,那么在具体实现中,又是如何实现一个设备的驱动的呢?

步骤1:根据rt_device定义的结构定义一设备变量,根据设备公共接口,实现各个接口,当然也可以是空函数。

步骤2:根据自己的设备类型定义自己的私有数据域。特别是可以有多个相同设备的情况下,设备接口可以用同一套,不同的只是各自的数据域(例如寄存器基地址)。

步骤3: 按照RT-Thread的对象模型,扩展一个对象有两种方式:
(a) 定义自己的私有数据结构,然后赋值到RT-Thread设备控制块的private指针上。
(b) 从struct rt device结构中进行派生。

步骤4: 根据设备的类型,注册到RT-Thread设备框架中,即调用rt_device_register接口进行注册.


完!


读书人网 >软件架构设计

热点推荐