最近,我开始为微控制器设计和编写代码,以便更深入地了解它们的工作原理。我承担的第一个主要项目是为令人信赖的日立HD44780液晶显示控制器编写驱动程序。在没有任何时间,我能够实现一个通信接口与液晶显示器和所有定义的液晶显示命令。我对基本的司机很满意,我相信这是按照惯例进行的。它使用一种分层的自顶向下的方法,这样就有一个定义良好的公共接口,底层包含了与GPIO硬件对话的唯一功能。
然而,我已经开始实现高级功能,如垂直移位/滚动、动画等。到目前为止,实现是在一个模块内完成的,这是很好的,因为它将所有功能保持在一起,并且驱动程序的用户只需调用提供给他/她的功能。它的缺点是驱动程序的维护变得越来越复杂,这告诉我,我可能需要分解它,而不是追求单块设计。
我正在考虑创建另一个模块,比如垂直滚动。公共接口将包含执行滚动所需的数据结构和功能,所有这些都由main处理。这是一个有效的方法,还是我完全遗漏了什么?
当我说模块时,我指的是一组相互关联的功能。我的理解是,驱动程序是控制一些硬件的模块,但模块并不一定意味着驱动程序,例如C字符串库。
发布于 2015-06-01 12:27:03
驱动程序经常被分成几个层次。作为鼠标驱动程序的“简单”功能有单独的模块,用于:
当然,根据抽象级别或可能会更改的内容来划分驱动程序是合理的。缓冲、滚动、格式化、包装和动画可以而且应该分开处理,只使用下面各层的公共API。
https://softwareengineering.stackexchange.com/questions/285446
复制相似问题