0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

设计嵌入式驱动程序有哪些小窍门

Wildesbeast 来源:今日头条 作者:面包板社区 2020-01-18 12:07 次阅读

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

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外设上电时会处于故障状态,需要将一个隐藏在寄存器中的标志位清零。在驱动程序实现的开始,确认外设可能出现的故障并查看其他看似无关的寄存器错误。
责任编辑 LK

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4976

    文章

    18246

    浏览量

    287941
  • 驱动程序
    +关注

    关注

    19

    文章

    769

    浏览量

    47205
  • dma
    dma
    +关注

    关注

    3

    文章

    535

    浏览量

    98971
收藏 人收藏

    评论

    相关推荐

    嵌入式Linux驱动程序设计高级培训

    及路线图详见报到通知)五、培训对象具备一定开发经验的工程师,通过本课程的学习能够掌握嵌入式Linux驱动程序设计技巧。课堂中的传授的案例、驱动代码、设计诀窍都来自于大型实际项目,对工程师
    发表于 03-10 17:54

    学习嵌入式 必备几点小窍门

    方法,自己会得到更大的收获。)学习嵌入式六点小窍门必备知识对嵌入式学习者很好地指导作用,只要你自己能够钻研其中,一定可以发现嵌入式的奇妙。
    发表于 10-14 16:02

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

    ,我在数据手册中一个完全不相关的注脚里发现了PWM外设上电时会处于故障状态,需要将一个隐藏在寄存器中的标志位清零。在驱动程序实现的开始,确认外设可能出现的故障并查看其他看似无关的寄存器错误。以上5点希望对你学习嵌入式帮助,同时
    发表于 03-14 16:56

    如何构造运行良好的嵌入式设备的驱动程序

    嵌入式系统需要支持的外部设备种类繁多,如何构造运行良好的嵌入式设备的驱动程序,对嵌入式操作系统的实际应用重要意义。
    发表于 09-25 07:44

    嵌入式Linux下的LCD驱动程序怎么编写?

    随着嵌入式Linux的迅速发展,由于其没有昂贵的版权费,完全开放源代码,可裁减性与可移植性,因此是开发嵌入式产品的优秀操作系统平台。设备驱动程序是Linux内核的重要组成部分,运行在Linux内核
    发表于 11-11 07:33

    嵌入式Linux网络驱动程序的实现原理是什么?

    嵌入式Linux网络驱动程序的结构是如何构成的?嵌入式Linux网络驱动程序的实现原理是什么?如何将设备驱动模块编译进内核里?
    发表于 06-04 06:25

    谈谈学习嵌入式linux驱动小窍门

    驱动程序是项目成功的关键,那么嵌入式linux驱动如何学呢?那我就来谈谈学习嵌入式linux驱动小窍
    发表于 11-04 06:23

    嵌入式系统驱动程序的开发

    )。但在嵌入式系统中,往往是先设计驱动程序再有系统,所以只需要致力于驱动各个外围设备,而且嵌入式产品一般没有后期新增硬件的需求,所以不要求驱动程序
    发表于 11-08 06:21

    嵌入式Linux驱动程序设计资料分享

    嵌入式 Linux驱动程序设计之驱动编译进内核接上篇(二)嵌入式 Linux驱动程序设计之make menuconfig图形化配置及问题解决
    发表于 12-24 06:24

    关于驱动程序设计的5个窍门

    每一个嵌入式应用软件都会在某些时候访问最底层的固件和进行一些硬件控制。 驱动的设计和实施是确保一个系统能够满足其实时性要求的关键。以下五个窍门是每一个开发者在设计驱动程序时应该考虑的。
    的头像 发表于 06-01 19:38 4262次阅读
    关于<b class='flag-5'>驱动程序</b>设计的5个<b class='flag-5'>窍门</b>

    设计嵌入式驱动程序有什么窍门

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

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

    电子发烧友网为你提供嵌入式系统驱动程序设计的5个窍门资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-18 08:52 10次下载
    <b class='flag-5'>嵌入式</b>系统<b class='flag-5'>驱动程序</b>设计的5个<b class='flag-5'>窍门</b>资料下载

    小白入门嵌入式Linux开发板,嵌入式linux驱动如何学?小白入门必看

    驱动程序是项目成功的关键,那么嵌入式linux驱动如何学呢?那我就来谈谈学习嵌入式linux驱动小窍
    发表于 11-01 16:32 11次下载
    小白入门<b class='flag-5'>嵌入式</b>Linux开发板,<b class='flag-5'>嵌入式</b>linux<b class='flag-5'>驱动</b>如何学?小白入门必看

    嵌入式Linux驱动程序开发

    嵌入式Linux驱动程序开发
    发表于 11-01 16:57 6次下载
    <b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>驱动程序</b>开发

    细说嵌入式驱动程序设计

    嵌入式系统驱动程序的开发有别于WIndows或Linux。后者除了必须了解新设备的硬件特性,把控制硬件的程序尽快完成之外,还需要设法让驱动程序符合Windows或Linux的规定(大且
    发表于 11-03 13:21 11次下载
    细说<b class='flag-5'>嵌入式</b><b class='flag-5'>驱动程序</b>设计