zoukankan      html  css  js  c++  java
  • 嵌入式开发之编写设备驱动程序(一)

      前面谈到有关驱动程序的相关简述,写了什么是驱动程序,以及驱动程序在嵌入式开发中占据的重要地位。同时也简要分析了驱动程序开发所面临的挑战。接下来谈谈如何来完成驱动程序的编写。

      这里有以下几个问题:

      (1)代码为何而写?

      (2)在进行驱动程序编写前应该怎么做,或者说该思考些什么?

      (3)是否已经想好驱动程序文件的组织形式?

      (4)硬件和软件之间驱动接口是否已经有了眉目?

      一、代码为何而写?

      站在编写驱动程序人员角度,我谈谈自己的看法,当然,我不是专业驱动程序编写人员,但是我还是想谈谈自己的一些想法。厂家出了新的硬件,需要配套的驱动程序,这就需要设备驱动程序的开发了。往往,硬件和配套的驱动程序是一项独立的知识产权,在做嵌入式软件开发中,为了一个驱动程序包,哈哈!往往在Internet上各处寻觅。

      二、在进行驱动程序编写前应该做什么?

       说一说整个驱动程序编写,需要完成的步骤:

      (1)首先要进行规范制定,确定需求目标,没有需求就如同大海里的孤帆,指明设备驱动程序所需要提供的服务是首要步骤。

      (2)在软件和硬件之间进行接口的定义,确保该接口好用好使。

      (3)最后就是驱动程序代码的编写了,这就如同一个循环,结束的条件就是驱动程序=Perfect,不然就不断循环编写-调试代码吧。

       所以说,在进行驱动程序编写前还是需要仔细考虑一下下滴。当然我能体会到驱动程序开发的难度以及代码量的庞大!

      三、设备驱动程序的相关知识  

       通常情况下,CPU计算能力强,可以处理数据空间和驱动程序组件寄存器中的数以百万计的地址。硬件中往往都有寄存器,这里就不谈什么是寄存器了(专门写在了第四点上),设备驱动程序可以对寄存器进行读和写操作,这些寄存器都被映射到了存储器中,每一个寄存器都有一个唯一的内存地址,通过这个唯一的内存地址就可以找到对应的寄存器进行读写操作了,为什么要进行读写操作呢?哈哈,这点我最开始也不是很理解,到后来我逐渐领悟了一些,通过寄存器就可以来操控硬件芯片这些啦,同时硬件也能够通知软件关于硬件的相关状态。

      四、寄存器简介

        在硬件芯片设计时,那些寄存器就已经有了着落了,一块硬件芯片上寄存器很多,但是都根据相关功能模块进行了寄存器分组,并分配了唯一地址空间,这点可以看看相关MCU的硬件开发手册,就能很好体会。

    一般有三种不同的寄存器:数据寄存器、控制寄存器、状态寄存器。这些都可以用来存储数据。

       (1)数据寄存器用来存放一些数据的。比如说一个定时器数据寄存器,该寄存器名为:TIMEDATA_REG,那么该寄存器中就保存了定时器某个时刻的时间值,该值随着时间变换而变,驱动程序可以读出时间值,然后应用程序就可以利用时间了。

        (2)控制寄存器是用来控制硬件功能的 ,根据任务的不同可以对其进行配置,当然,应用程序是需要驱动程序来对控制寄存器进行读写的,没了驱动办不成事儿。

           (3)状态寄存器用来保存硬件的状态信息(例如,是否处于繁忙状态?是否处于完成状态?),利用这些状态寄存器就可以很好编写驱动程序了,因为给出了程序的运行条件。

      五、重要一点  

         编写设备驱动程序需要详细了解硬件寄存器的设计,如何与硬件寄存器进行通信以及所需服务,这些都是技术关键!

  • 相关阅读:
    LeetCode59 Spiral Matrix II
    LeetCode58 Length of Last Word
    LeetCode54 Spiral Matrix
    LeetCode63 Unique Paths II
    LeetCode62 Unique Paths
    LeetCode55 Jump Game
    网易2017年校招笔试题 最大的奇约数
    Codeforces Round #119 (Div. 2)
    Codeforces Round #118 (Div. 2)
    2016 MIPT Pre-Finals Workshop Taiwan NTU Contest
  • 原文地址:https://www.cnblogs.com/iriczhao/p/10484311.html
Copyright © 2011-2022 走看看