嵌入式开发之编写设备驱动程序
这里有以下几个问题:
(1)代码为何而写?
(2)在进行驱动程序编写前应该怎么做,或者说该思考些什么?
(3)是否已经想好驱动程序文件的组织形式?
(4)硬件和软件之间驱动接口是否已经有了眉目?
一、代码为何而写?
站在编写驱动程序人员角度,我谈谈自己的看法,当然,我不是专业驱动程序编写人员,但是我还是想谈谈自己的一些想法。厂家出了新的硬件,需要配套的驱动程序,这就需要设备驱动程序的开发了。
二、在进行驱动程序编写前应该做什么?
说一说整个驱动程序编写,需要完成的步骤:
- 首先要进行规范制定,确定需求目标,没有需求就如同大海里的孤帆,指明设备驱动程序所需要提供的服务是首要步骤。
- 在软件和硬件之间进行接口的定义,确保该接口好用好使。
- 最后就是驱动程序代码的编写了,这就如同一个循环,结束的条件就是驱动程序=Perfect,不然就不断循环编写-调试代码吧。
三、设备驱动程序的相关知识
通常情况下,CPU计算能力强,可以处理数据空间和驱动程序组件寄存器中的数以百万计的地址。硬件中往往都有寄存器,这里就不谈什么是寄存器了(专门写在了第四点上),设备驱动程序可以对寄存器进行读和写操作,这些寄存器都被映射到了存储器中,每一个寄存器都有一个唯一的内存地址,通过这个唯一的内存地址就可以找到对应的寄存器进行读写操作了,为什么要进行读写操作呢?哈哈,这点我最开始也不是很理解,到后来我逐渐领悟了一些,通过寄存器就可以来操控硬件芯片这些啦,同时硬件也能够通知软件关于硬件的相关状态。
四、寄存器简介
在硬件芯片设计时,那些寄存器就已经有了着落了,一块硬件芯片上寄存器很多,但是都根据相关功能模块进行了寄存器分组,并分配了唯一地址空间,这点可以看看相关MCU的硬件开发手册,就能很好体会。
一般有三种不同的寄存器:数据寄存器、控制寄存器、状态寄存器。这些都可以用来存储数据。
- 数据寄存器用来存放一些数据的。比如说一个定时器数据寄存器,该寄存器名为:TIMEDATA_REG,那么该寄存器中就保存了定时器某个时刻的时间值,该值随着时间变换而变,驱动程序可以读出时间值,然后应用程序就可以利用时间了。
- 控制寄存器是用来控制硬件功能的,根据任务的不同可以对其进行配置,当然,应用程序是需要驱动程序来对控制寄存器进行读写的,没了驱动办不成事儿。
- 状态寄存器用来保存硬件的状态信息(例如,是否处于繁忙状态?是否处于完成状态?),利用这些状态寄存器就可以很好编写驱动程序了,因为给出了程序的运行条件。