RTT之设备管理机制

仅对自己在了解RTT过程中的关键点进行了记录整理而矣!仅代表个人的一些学习思路。

RTT有很多linux的影子,所以从linux思路及面向对象的编程角度来理解要方便些,如I/O管理层的三层结构。设备管理层、设备驱动框架层、驱动层。相对比,嵌入式系统也分为三层:应用层、内核层、硬件层《详见linux IO 知识点》。尽管嵌入式系统是这么分的,但可不是直接对应的就是RTT的这三层,实际上,内核层对应的是设备管理层,硬件层对应驱动层,真正的应用层其实是调用的:设备驱动框架层。设备驱动框架层,只是对不同MCU的同类硬件设备相同的部分抽取出来 ,不同的部分留出接口;方便移值。

应用程序主要是调用设备驱动框架层提供的函数来实现对硬件层抽象的操作,应用层须在内核层device.c文件所定义的函数完成相应的硬件管理。基本的时序序列如下图:

对于复杂设备的操作时序:

从本质上来说,无论是简单还是复杂的设备,都是一样的流程,RTT是如何做到的呢??

答案是:面向对象的编程思维及实现。

 关于设备操作函数,图11-3和图11-4的时序图还是比较重要的,因为里面所涉及到的就是操作的函数。

要理解的问题:

1、创建设备的实质,可以动态申请和静态申请创建设备,函数原型为:rt_device_t rt_device_create(int type, int attach_size);

从静态区或动态堆内存中分配一个设备控制块,大小为 struct rt_device 和 attach_size的和,设备的类型由参数 type 设定。-->然后在此基础上,再实现其操作:

struct rt_device_ops
{
/* common device interface */
rt_err_t (*init) (rt_device_t dev);
rt_err_t (*open) (rt_device_t dev, rt_uint16_t oflag);
rt_err_t (*close) (rt_device_t dev);
rt_size_t (*read) (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size
);
rt_size_t (*write) (rt_device_t dev, rt_off_t pos, const void *buffer,
rt_size_t size);
rt_err_t (*control)(rt_device_t dev, int cmd, void *args);
};

--->应用程序端的对应函数,

程序实现部分:

具体方法描述: 

2、两个数据收发回调

rt_err_t rt_device_set_rx_indicate(rt_device_t dev, rt_err_t (*rx_ind)(rt_device_t
dev,rt_size_t size));

功能是:当硬件设备收到数据时,可以通过如下函数回调另一个函数来设置数据接收指示,通知上层应用线程
有数据到达。

rt_err_t rt_device_set_tx_complete(rt_device_t dev, rt_err_t (*tx_done)(rt_device_t
dev,void *buffer));

这个函数是针对写操作,并且,条件是如果底层硬件能够支持自动发送,那么上层应用可以设置一个回调函数,在底层硬件数据发送完成后 (例如 DMA 传送完成或 FIFO 已经写入完毕产生完成中断时) 调用。指示设备发送完成。

 

I/O设备管理接口:

创建:驱动层负责创建设备实例,并注册到 I/O 设备管理器中。可能过静态申明方式,也可以调用下面的接口来创建。

rt_device_t rt_device_create(int type, int attach_size);//attach_size指用户数据大小。

销毁:针对是动态创建。void rt_device_destroy(rt_device_t device);

 

注册:注册设备到设备管理器中,只有注册的设备才能通过“查找设备接口”的方式从系统中查找到,从而获得该设备控制块(或设备句柄)。

注:要先创建后,再注册到系统。

注销设备:rt_device_unregister();将设备从设备系统中移除,被卸载的设备将不能再通过“查找设备接口”被查找到.注销设备不
会释放设备控制块占用的内存。

 

总结,脑补出RTT设备管理的架构,设备管理作为内核的一个容器来管理,由链表链接同类的设备,分配内存,并且通过面向对象技术,实现了类和对象的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值