首页 > 其他分享 >外设驱动库开发笔记54:外设库驱动设计改进的思考

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

时间:2023-06-21 22:33:05浏览次数:51  
标签:初始化 函数 对象 54 使用 驱动 我们 外设 定义

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

1、问题分析

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

2、改进设计

  依据前述提到的几点,我们考虑从以下几个方面来进行改进:一是,优化对象的属性,将与对象的配置无关的属性裁剪掉;二是,优化对象的访问方式;尽量不通过直接调用去处理对象操作;三是,优化对象变量类型的定义,非必要的情况下不单独定义类型。
  首先来说说对象属性的优化,在原来的设计中有的属性并不是用来实现对对象的配置,这一类属性可以裁剪的尽量裁剪掉。而对于有必要保留的状态类属性我们将尽量限制外部访问。
  关于对象访问方式的优化,在原有的设计中,有一些函数是公开的,可以在外部直接调用这些函数来实现对象的操作。我们考虑将所有的函数都设计为非公开的,但都可以同过对象来实现调用。
  有关对象的类型定义,主要是前面网友提到的typedef问题。在原来设计中,基于程序看起来比较简洁的目标,定义了很多函数指针类型,后经网友提醒,我们也确实觉得这一方式不直观,增加了使用者的使用难度。所以在本次改进中我们也将尽量减少typedef的使用,是的代码更加直观。

3、应用方式

  从应用方式来说,本质之上使用的流程没有变化。我们要使用某一驱动依然是需要做三方面的工作:声明对象、初始化对象、执行对象调用。具体如下:

  先说对象的声明,每类对象根据实际情况声明对象,名称无限制,只要符合变量的命名规则就好。但这只是声明了一个对象变量而已,尚不具备使用条件。
  声明对象变量后,我们还需要对该对象变量进行初始化才可以使用。每一类对象都有一个初始化函数。在具体应用中调用此函数对对象进行初始化,初始化的参数根据要求以参数形式传递给初始化函数。
  初始化完成之后就可以在具体应用中调用相应的函数获取对象参数。调用的函数一般以对象指针为实参,调用完成后可以通过对象的属性得到数据。
  此外,所用的对象头文件都汇集在扩展外设配置文件中,所以我们需要将配置文件添加到我们的应用中,并通过宏定义添加我们需要用到对象的头文件,将宏参数定义为0则不使用,定义为1则使用。然后还需要将我们使用的对象的源文件添加到我们的应用项目中就可以了。

4、总结说明

  本次改进设计的目标有两个:让使用更简单、让功能更内聚。在实例中,我们只设计了初始化函数,而其它的函数都需要对象变量来访问。
  本套驱动程序完全开源,并会根据使用情况随时修正和新增。并将源码公布到GitHUB:https://github.com/foxclever/ExPeriphDriver

欢迎关注:

标签:初始化,函数,对象,54,使用,驱动,我们,外设,定义
From: https://www.cnblogs.com/foxclever/p/17497240.html

相关文章

  • 54 KVM工具使用指南-vmtop使用指南
    54KVM工具使用指南-vmtop使用指南54.1概述vmtop是运行在宿主机host上的用户态工具。使用vmtop可以实时动态地查看虚拟机资源的使用情况,例如CPU占用率、内存占用率、vCPU陷入陷出次数等。因此,可以使用vmtop作为虚拟化问题定位和性能调优的工具。54.1.1多架构支持当前vmtop支......
  • 54基于java的高校图书馆座位预约系统设计与实现
    本章节给大家带来一个基于java的座位预约系统,可以用于图书馆占位系统,图书馆座位预约系统,大学自习室占座系统,自习室座位预约系统,图书馆预约占座系统,自习室预约占座系统,高校图书馆座位预约系统等等;下面以图书馆为例,大家把源码下载下来后,还可以修改图书馆名字改成自习室或者阅览室......
  • Wallys WIFI7 Mainboard /the difference between ipq9574 with ipq9554/DBDC.
    WIFI7MainboardSPECTheIPQ9574andIPQ9554arebothsystem-on-chip(SoC)solutionsdesignedbyQualcommfornetworkingapplications,buttheybelongtodifferentgenerationsandofferdifferentcapabilities.Herearethekeydifferencesbetweenthetwo:G......
  • abc054d <dp, 背包>
    https://atcoder.jp/contests/abc054/tasks/abc054_d//https://atcoder.jp/contests/abc054/tasks/abc054_d//背包//这里开始的时候数据规模想错了,所以用了map,实际上可以用数组(40*10)^2*40#include<iostream>#include<algorithm>#include<map>usingnamesp......
  • 目前最全面深入的Linux设备驱动程序著作
    《精通Linux驱动程序开发(英文版)》在Linux内核源代码树提供的各个子系统中,drivers/目录是其中最大的一个分支,它比其他子系统大数倍。随着各种新技术的广泛应用,内核中新的设备驱动程序的开发工作正在稳步加速。最新的Linux内核支持多达70余种设备驱动程序的庞大家族。《精通Linux驱动......
  • 车灯IC 平均电流型LED降压恒流驱动AP5127
    产品描述 AP5127是一款PWM工作模式,高效率、外围简单、内置功率管,适用于12-100V输入的高精度降压LED恒流驱动芯片。输出最大功率可达25W,最大电流2.5A。AP5127可实现全亮/半亮功能切换,通过MODE切换:全亮/半亮/循环模式。AP5127工作频率固定在140KHZ,同时内置抖频......
  • 驱动开发:内核注册表增删改查
    注册表是Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息,注册表是一个巨大的树形结构,无论在应用层还是内核层操作注册表都有独立的API函数可以使用,而在内核中读写注册表则需要使用内核装用API函数,如下将依次介绍并封装一些案例,实现对注册表的创建,删除,更新,查询等操作......
  • BLDC无刷直流驱动控制板资料,可驱动300W电机,已量产(STM32 CAN总线)输入电压:15~36V
    BLDC无刷直流驱动控制板资料,可驱动300W电机,已量产(STM32CAN总线)输入电压:15~36V驱动功率:300W~500W,20A电流检测,CAN通信总线功能介绍KEY1:运行KEY2:停止VR1:转速调节带霍尔传感器提供工程原理图和源码,AD9工程内有提供电机型号ID:1759609955138630......
  • 植保机电调无感电机控制器软硬件方案全套,FOC矢量控制 算法,永磁同步电机驱动用,所有源码
    植保机电调无感电机控制器软硬件方案全套,FOC矢量控制算法,永磁同步电机驱动用,所有源码,含观测器部分,全部开源,植保机风机等大功率使用,可直接打板子使用,稳定性非常好,提供硬件原理图,PCB,BOM,软件源代码ID:935000609416290163......
  • fpga 以太网w5500 SPI传输80MHz,Alter FPGA verilog udp驱动源码,8个SOCKET都可用,SPI频
    fpga以太网w5500SPI传输80MHz,AlterFPGAverilogudp驱动源码,8个SOCKET都可用,SPI频率支持80MHZ,硬件验证以通过。w5500ip核w5500软核实测网络传输速度8.5M/s,学习必用之良品ID:1399607465825157......