rt-thread驱动移植要点及at25256驱动.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
RT-Thread驱动移植要点 I/O管理模块为应用提供了一个对设备进行访问的通用接口, 并通过定义的数据结构对设备驱动程序和设备信息进行 管理。从系统整体位置来说 I/O管理模块相当于设备驱动程序和上层应用之间的一个中间层。 I/O管理模块实现了对 设备驱动程序的封装:设备驱动程序的实现与 I/O管理模块独立,提高了模块的可移植性。应用程序通过 I/O管理模 块提供的标准接口访问底层设备,设备驱动程序的升级不会对上层应用产生影响。这种方式使得与设备的硬件操作 相关的代码与应用相隔离,双方只需各自关注自己的功能,这降低了代码的复杂性,提高了系统的可靠性。在 RT-Thread中,设备也被认为是一类对象,被纳入对象管理器范畴。每个设备对象都是由基对象派生而来,每个具体 设备都可以继承其父类对象的属性,并派生出其私有属性。下图即为设备对象的继承和派生关系示意图。 设备对象的继承和派生关系示意图 1. I/O设备管理控制块 struct rt device { struct rt object pare nt; /*设备类型*/ enum rt device class type type; /*设备参数及打开时参数 */ rt_uin t16_t flag, ope n flag; /*设备回调接口 */ rt_err_t (*rx in dicate)(rt_device_t dev, rt_size_t size); rt_err_t (*tx complete)(rt_device_t dev, void* buffer); /*设备公共接口 */ rt_err_t (*i nit) (rt_device_t dev); rt_err_t (*ope n) (rt_device_t dev, rt_uin t16_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 (*c on trol)(rt_device_t dev, rt_uint8_t cmd, void *args); #ifdef RT_USING_DEVICE_SUSPEND rt_err_t (*suspe nd) (rt_device_t dev); rt err t (*resumed) (rt device t dev); #en dif /*设备私有数据*/ void* private; }; 当前RT-Thread支持的设备类型包括: enum rt_device_class_type { RT_Device_Class_Char = 0, /* 字符设备 */ RT_Device_Class_Block, /* 块设备 */ RT_Device_Class_Netlf,/* 网络接口设备 */ RT_Device_Class_MTD, /* 内存设备 */ RT_Device_Class_CAN, /* CAN 设备 */ RT_Device_Class_ Unknown /* 未知设备 */ }; 注意:suspend、resume回调函数只会在 RT_USING_DEVICE_SUSPEND 宏使能的情况下才会有效。 接口函数说明: 每一个设备的驱动都对应着一个设备管理控制块,在编写驱动的同时要定义该设备的控制块结构体,这个结构体中 包含了一些私有数据和一些公共接口函数,公共设备接口函数是设备必须实现的,其中,当设备使用挂起功能时才 需要用到 rt_err_t (*suspe nd) (rt_device_t dev); rt_err_t (*resumed) (rt_device_t dev); 这两个接口函数,其他的六个接口,可以看成是底层设备驱动必须提供的接口。 rt_err_t (*i nit) (rt_device_t dev); 设备的初始化。设备初始化完成后,设备控制块的 ?ag会被置成已激活状态(RT_DEVICE FLAG_ACTIV ATED)。如 果设备控制块的?ag不是已激活状态,那么在设备框架调用 rt_device _init_all接口时调用此设备驱动的 init接口进行 设备初始化。 rt_err_t (*ope n) (rt_device_t dev, rt_uin t16_t oflag); 打开设备。有些设备并不

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档