外设驱动库开发笔记54:外设库驱动设计改进的思考

本文基于网友建议和使用中发现的问题,对驱动程序设计进行优化。分析了typedef重定义函数指针、直接从结构体对象属性获取数据等问题,从优化对象属性、访问方式和类型定义三方面改进,介绍了应用方式,目标是让使用更简单、功能更内聚,源码开源在GitHub。

  不知不觉中我们已经发布了五十多篇外设驱动的文章。前段时间有一位网友提出了一些非常中肯的建议,这也让我们开始考虑怎么优化驱动程序设计的问题。在这一篇中我们将来讨论这一问题。

1、问题分析

  首先我们来分析一下网友提出的几点问题。第一点是说在驱动设计时,使用了typedef重定义函数指针,这就需要使用人员了解这个函数的原型定义,使用起来不太直观,所以建议直接使用函数指针定义而不是使用typedef重定义。对于这一建议,我们觉得这位网友说的很对,typedef重定义方式确实不直观,所以这将是我们的一个改进方向。
  关于第二点,网友提到了直接从结构体对象的属性获取数据的方法不合适。理由是给使用者一个错觉,既然可以从属性得到数据,自然也可以直接修改属性的值,而有些值是从获取的测量数据是不可以被修改的。对于这一点我们也认为很有道理,这种方式确实存在一定的隐患,所以后续我们将对这一方面加以改进。
  至于网友提到的第三点,是在声明对象变量时最好初始化为{0}。在我们给出的实例中确实没有这一点。当然这个问题严格来说不是对象驱动设计的问题,而是使用上的问题,这需要我们在后续的应用文档中给出规范说明。
  除了上述几点网友的建议外,我们在使用过程中也发现一些不太合适的地方。在原笨的模式下,我们都是通过调用函数来访问对象,使用时还需要关注函数而不只是关注对象,所以我们也移植在考虑驱动库的改进问题。

2、改进设计

  依据前述提到的几点,我们考虑从以下几个方面来进行改进:一是,优化对象的属性,将与对象的配置无关的属性裁剪掉;二是,优化对象的访问方式;尽量不通过直接调用去处理对象操作;三是,优化对象变量类型的定义,非必要的情况下不单独定义类型。
  首先来说说对象属性的优化,在原来的设计中有的属性并不是用来实现对对象的配置,这一类属性可以裁剪的尽量裁剪掉。而对于有必要保留的状态类属性我们将尽量限制外部访问。
  关于对象访问方式的优化,在原有的设计中,有一些函数是公开的,可以在外部直接调用这些函数来实现对象的操作。我们考虑将所有的函数都设计为非公开的,但都可以同过对象来实现调用。
  有关对象的类

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值