阅读更多
在嵌入式系统的开发中,驱动程序的设计和实施是一个关键组成部分,是满足系统实时性需求的关键。本文由资深嵌入式软件开发专家Jacob Beningo撰写,总结了设计驱动程序开发者应该掌握的五个技巧。

每一个嵌入式应用软件都会在某些时候访问最底层的固件和进行一些硬件控制。 驱动的设计和实施是确保一个系统能够满足其实时性要求的关键。以下五个窍门是每一个开发者在设计驱动程序时应该考虑的。

1 使用设计模式
设计模式是一个用来处理那些在软件中会重复出现的问题的解决方案。 开发人员可以选择浪费宝贵的时间和预算从无到有地重新发明一个解决方案,也可以从他的解决方案工具箱中选择一个最适合解决这个问题的方案。在微处理器出现之初,底层驱动已经很成熟了,那么,为什么不利用现有的成熟的解决方案呢?

驱动程序设计模式大致分属以下4个类别:bit bang、轮询、中断驱动和直接存储器访问(DMA)。

Bit bang模式:当微控制器没有内外设去执行功能的时候,或者当所有的内外设都已经被使用了,而此时又有一个新的请求,那么开发者就应该选择bit bang设计模式。Bit bang模式的解决方案很有效率,但通常需要大量的软件开销来确保其实施的能力。bit bang模式可以让开发者手动完成通信协议或外部行为。
轮询模式用于简单地监视一个轮询调度方式中的事件。轮询模式适用于非常简单的系统,但许多现代应用程序都需要中断。
中断可以让开发者在事件发生时进行处理,而不用等代码手动检查。
DMA(直接存储器访问)模式允许其它外围设备来处理数据传输的需求,而不需要驱动的干预。
2 了解实时行为
一个实时系统满足是否能满足实时需求取决于它的驱动程序。写入能力差的驱动是低效的,并可能使不知情的开发者放弃系统的性能。设计者需要考虑驱动的两个特点:阻塞和非阻塞。一个阻塞的驱动程序在其完成工作之前会阻止其他任何软件执行操作。例如,一个USART驱动程序可以把一个字符装入传输缓冲区,然后一直等到接收到传输结束标志符才继续执行下一步操作。

另一方面,非阻塞驱动则是一般利用中断来实现它的功能。中断的使用可以防止驱动程序在等待一个事件发生时拦截其他软件的执行操作。USART的驱动程序可以将一个字符装入传输缓冲区然后等主程序发布下一个指令。传输结束标志符的设置会导致中断结束,让驱动进行下一步操作。

无论哪种类型,为了保持实时性能,并防止系统中的故障,开发人员必须了解驱动的平均执行时间和最坏情况下的执行时间。一个完整的系统可能会因为一个潜在的风险而造成更大的安全问题。

3 重用设计
在时间和预算都很紧张的情况下为什么还要再造轮子呢?在驱动程序开发中,重用、便携性和可维护性都是驱动设计的关键要求。这里面的许多特征可以通过硬件抽象层的设计和使用来说明。

硬件抽象层(HAL)为开发人员提供一种方式来创建一个标准接口去控制微控制器的外设。抽象隐藏实现细节,取而代之的是提供了可视化功能,如Usart_Init和Usart_Transmit。这个方法就是让任何USART、SPI、PWM或其他外设具备所有微控制器都支持的共同特点。 使用HAL隐藏底层、特定设备的细节,让应用程序开发人员专注于应用的需求,而不是关注底层的硬件是如何工作的。同时HAL提供了一个重用的容器。

4 参考数据手册… 是的,全部
微控制器在过去的几年里变得越来越复杂。以前想要完全了解一个微控制器需要掌握由一个大约包含500页组成的单一数据手册。而如今,一个32位微控制器通常包含由部分的数据手册、整个微控制器系列的资料表、每个外设数以百计的资料以及所有的勘误表组成的数据手册。 开发人员如果想要完全掌握这部分的内容需要了解几千页的文件。

不幸的是,所有这些数据手册都是一个驱动程序能真正合理实现所需要的。开发人员在一开始就要对每个数据手册中包含的信息进行收集和排序。通常它们中的每一个都需要被访问以使外设启动和运行。 关键信息被分散(或隐藏)在每种类型的数据手册中。

5 谨防外设故障
最近我刚好有机会把一系列的微控制器驱动移植到其他的微处理器上。制造商和数据手册都表明PWM外设在这两个系列的微控制器之间是相同的。 然而,实际情况却是在运行PWM驱动器的时候两者之间有很大的不同。该驱动程序只能在原来的微控制器工作,而在新系列的微控制器上却无效。

在反复翻看数据手册之后,我在数据手册中一个完全不相关的注脚里发现了PWM外设上电时会处于故障状态,需要将一个隐藏在寄存器中的标志位清零。

在驱动程序实现的开始,确认外设可能出现的故障并查看其他看似无关的寄存器错误。

物联网(IoT)包括嵌入式系统将是CSDN在2016年重点运营的内容之一,进一步了解和探讨驱动程序的设计模式以及如何构建嵌入式系统,您可以:
  • 关注微信公众号:IoTMaster
  • 加入CSDN IoT技术微信群:添加jianding_zhou为好友,请注明来意、所在机构及技术专长

作者简介:Jacob Beningo是认证软件开发专家(CSDP),其专长是嵌入式软件开发。他与公司一起致力于在保持产品质量的同时降低产品成本并缩短上市时间。您可以通过jacob@beningo.com随时联系他。

原文链接:5 Tips for driver design (翻译/Gawain Gao 审校/周建丁 翻译或原创投稿请联系zhoujd@csdn.net)
来自: 极客头条
2
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 嵌入式系统开发:驱动程序设计的5个方法

    每一个嵌入式应用软件都会在某些时候访问层的固件和进行一些硬件控制。 驱动的设计和实施是确保一个系统能够满足... 驱动程序设计模式大致分属以下4个类别:bit bang、轮询、中断驱动和直接存储器访问(DMA)。 Bit b

  • 嵌入式系统/ARM技术中的嵌入式系统开发:驱动程序设计的5个方法

    每一个嵌入式应用软件都会在某些时候访问最底层的固件和进行一些硬件控制。 驱动的设计和实施是确保一个系统能够... 驱动程序设计模式大致分属以下4个类别:bit bang、轮询、中断驱动和直接存储器访问(DMA)。 Bi

  • 嵌入式系统开发中五个设计驱动程序的方法

    以下5个窍门是每一个者在设计驱动程序时应该考虑的,跟随我看看这些设计方法。下面就随嵌入式小编一起来了解一下相关内容吧。1.使用设计模式设计模式是一个用来处理那些在软件中会重复出现的问题的解决方案。开发...

  • 嵌入式系统驱动程序设计窍门

    每一个嵌入式应用软件都会在某些时候访问最底层的固件和进行一些硬件控制。 驱动的设计和实施是确保一个系统能够满足其实时性要求的关键。以下五个窍门是每一个开发者在设计驱动程序时应该考虑的。

  • 嵌入式系统驱动程序设计的5个窍门资料下载

    驱动程序设计模式大致分属以下4个类别:Bit bang、轮询、中断驱动和直接存储器访问(DMA)。 Bit bang模式: 当微控制器没有内外设去执行功能的时候,或者当所有的内外设都已经被使用了,而此时又有一个新的请求,...

  • 嵌入式驱动程序设计的小窍门,业界大牛总结

    嵌入式驱动程序的设计是满足嵌入式系统最关键的一步,学习嵌入式对嵌入式驱动程序设计是比较关键的,那么如何学嵌入式驱动程序设计成为了关键,在这里业界大牛总结了一些嵌入式驱动程序设计的小窍门,对学习嵌入式...

  • 实时嵌入式软件开发的25个常见错误

        英文原文由David B. Stewart撰写, 这篇论文对实时嵌入式软件开发的易犯错误做了深入分析,对我们的开发非常有指导意义。   David B. Stewart Software Engineering for Real-Time Systems ...

  • 学嵌入式有两个诀窍:勤奋刻苦+不要脸

    在这里我学会了嵌入式系统设计、驱动开发、TCP/IP和很多通信的知识,我花了一年时间终于使自己从MIS开发转到了通信行业,并且站稳了脚跟。 我的开发大量是对硬件的直接操作,不再受微软的操作系统,VC、Delhpi这些...

  • 嵌入式入门要知道的五个小窍门-心得

    对于很多即将毕业的学生和在社会打拼的底层技术者...开发人员可以选择浪费宝贵的时间和预算从无到有地重新发明一个解决方案,也可以从他的解决方案工具箱中选择一个最适合解决这个问题的方案。在微处理器出现之初,底.

  • 有5个窍门是每一个嵌入式驱动开发者设计前都应该了解的!

    以下5个窍门是每一个开发者在设计驱动程序时应该考虑的,下面就随我们一起来了解一下相关内容吧。 1.使用设计模式 设计模式是一个用来处理那些在软件中会重复出现的问题的解决方案。开发人员可以选择浪费宝贵...

  • Android应用程序开发以及背后的设计思想深度剖析

    序在运行环境上的需求来分析出,为什么我们的Android系统需要今天这样的设计方案,这样的设计会有怎样的意义, Android究竟是基于怎样的考虑才变成今天的这个样子,所以本文更多的分析Android应用程序设计背后的思想...

  • 我的嵌入式工程师成长之路:从技术小白到技术大佬

    回顾一下上面的内容,也就是为大家分享一下我从成为嵌入式工程师的艰辛历程,期间的经历和遭遇,值得借鉴和深思,尤其是在嵌入式工作中的努力和选择。希望在看到这篇文章的时候能够有所启发,尤其是初入职场的大学生...

  • 《 嵌入式系统设计与实践》一一3.2 阅读数据表

    3.2 阅读数据表面对着产品发布的压力,很难让开发速度慢下来以便有足够的时间去阅读组件的数据表、手册和应用说明。更糟糕的是,可能看起来都读过了(因为翻阅了所有的资料页)但是什么都没弄明白,只记得好像是用...

  • 嵌入式工程师是青春饭吗?越老越吃香吗?

    信息来自火哥,朱晓明,CSDN等一位不愿透露姓名的嵌入式工程师说过,“我是一名嵌入式软件工程师,我现在慌得一笔!”并非计算机科班出身的他,整个七年下来感觉自己学习的课程也不比电子信息科班...

  • 【转载】实时嵌入式软件开发的25个常见错误

    英文原文由David B. Stewart撰写, 这篇论文对实时嵌入式软件开发的易犯错误做了深入分析,对我们的开发非常有指导意义。 David B. Stewart Software Engineering for Real-Time Systems Laborat...

  • 嵌入式新手要知道的五个小窍门-心得

    对于很多即将毕业的学生和在社会打拼的底层技术者再说,对于嵌入式的发展和掌握的技术层次是迷茫的?他们不知道如何学习,其实掌握学习嵌入式没有...开发人员可以选择浪费宝贵的时间和预算从无到有地重新发明一个...

  • setuptools-40.7.3-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • Centos7-离线安装redis

    Centos7-离线安装redis

  • setuptools-39.0.1-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics