嵌入式新人必知的程序设计道路有哪些?

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

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

来源:微信公众号

时间: 2025-01-03 16:44:36

嵌入式新人必知的程序设计道路有哪些?的相关文章

嵌入式工程师必知必会 —— 读书笔记1、需掌握的知识

<嵌入式工程师必知必会>,Lewin A.R.W.Edwards 著:张乐锋等译. 很多人推荐这本书,最近也一直在看,把觉得有用的东西记录下,以后自己可以看看,也希望能给想学习嵌入式的朋友带来一点帮助. 一.嵌入式工程师应该掌握的知识 这里给出了一些理论知识与实践技能,我个人认为这些理论知识与实践技能是嵌入式工程师必须掌握的. 1.至少要对印制电路板中电源的走线有基本理解,了解糟糕的布局布线对对电源质量造成什么样的严重后果. 2.同样,你还应该对印制电路板的布线如何影响信号传播有基本理解. 3

产品新人必知的6件事儿

产品经理是一个需要具备较强综合能力的岗位,对于从事产品岗的新人,这6件事必须要知道,一起来看看吧. 一.产品范畴 产品的本质是让人的生活更美好,给用户创造价值就是一切产品的本源,所有影响用户体验的显性和隐性的因素都是产品影响的范围,包括但不限于审美.交互.业务逻辑.内容.服务. 产品的范畴十分宽泛,而很多人认为产品经理就是画画原型.写写文档.做做项目推进的.这种认识是十分错误的.产品同学们,你们自己首先要认清产品的范畴,不要给自己设限,尽力协同团队,让自己负责的产品能更进一步. 二.产品经理的价

产品新人必知的设计流程规范详解

大部分产品经理都存在一个非常严重的问题,从产品构思阶段开始,就上手做产品页面原型,忽略了中间太多的关于产品架构,功能模块设计,产品规则定义这些非常重要的工作.结果就是出来的页面原型逻辑不自洽,或者忽视了太多产品关键细节.使得研发拿到原型以后做不下去,不得不后期各种修补和返工,制造了产品经理和研发之间的矛盾. 当然我们的产品经理团队也普遍存在这个问题,为此,打算在公司内部给我们的产品经理培训一下.以下是完整的产品设计流程规范: 1. 产品构思 . 目标:搜集需求,整理产品思路,逐渐形成和完善产品构

产品新人必知的框架3C方法论

创造好的产品,需要对更普遍的需求,建立一个概念性的框架. 如果 产品经理 只是把一些想法.流程.原型.概念拿出来搅一搅,岂不是显得我们的工作很简单,甚至有些LOW ?而事实上,这是大多数产品经理给团队的最初 / 最后印象. 记得IA 一书中的一句话:好的研究就是提出对的问题,选择对的问题需要对更宽广的环境建立一个概念性的架构.不妨将这句话换一种解读的方式: 创造好的产品,需要对更普遍的需求,建立一个概念性的框架. 如果暂时忽略不相干因素,任何产品都能够抽象为三个维度:情境.内容.用户:这是产品过

C++程序设计必知:生存期

参考引用自: 鸡啄米:C++编程入门系列之十九(C++程序设计必知:生存期) 1.静态生存期 若某个对象它的生存期与程序的运行期相同,我们就说它具有静态生存期,就是说在程序运行期间它都不会释放. a.具有文件作用域的对象都具有静态生存期. b.使用关键字static修饰的变量,也就是静态变量具有静态生存期 2.动态生存期 具有动态生存期的对象产生于声明处,于该对象的作用域结束处释放. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

开发Mhealth(即:Mobile Health 移动医疗)应用必知的10个掘金点

近 日,著名移动技术咨询公司Research2Guidance发布了最新版的<移动医疗应用开发者经济>报告.在过去的两年半里,iOS和Android 两大主流移动平台上的移动医疗应用(以下简称mHealth应用)呈现出爆发式的增长,截止2014年Q1季度,mHealth应用数量已超过10万.本 文综合mHealth应用报告,总结出了移动开发者想要进驻mHealth应用市场所必须关注的那些事儿. 1. mHealth应用开发者的收入来源 调查显示,69%的mHealth应用开发者主要收入来源于服

.NET零基础入门09:SQL必知必会

一:前言 仿佛到了更进一步的时候了,每一个程序员迟早都会遇到数据存储的问题.我们拿什么来存储程序产生的数据?举例来说,用什么来存储我们的打老鼠游戏每次的成绩呢?选择如下: 1:内存中.缺点,退出游戏,数据就没了: 2:文件中.好办法!缺点,自己解析文本,把文本变成我们程序中的数据,这个解析的过程叫做协议.协议这个词听上去够恐怖吧,实际上说白了无非就是数据格式怎么样,API接口怎么样之类的东东. 3:数据库.好办法!好吧,数据库文件其实也就是硬盘上的文件,只不过数据库本身就已经为我们定义好了数据格

《mysql必知必会》笔记-部分

<mysql必知必会>笔记-部分 注释: 开始时整理笔记,记录自己看书过程的疑问和重点,后来发现记录没太多意义,还不如直接去翻原书,所以就放弃了. 因此,这个笔记只有一部分,不过依旧分享出来. 1.语言分类: 客户机可以是MySQL提供的工具.脚本语言(如perl).Web应用开发语言(如ASP.ColdFusion.JSP和PHP).程序设计语言(如C.C+kJava)等. 2.之前找不到表的原因: 虽然SQL是不区分大小写的,但有些标识符(如数据库名.表名.列名)可能不同:在MySQL4.

《正则表达式必知应会》读书

内容简介  · · · · · · <正则表达式必知必会>从简单的文本匹配开始,循序渐进地介绍了很多复杂内容,其中包括回溯引用.条件性求值和前后查找,等等.每章都为读者准备了许多简明又实用的示例,有助于全面.系统.快速掌握正则表达式,并运用它们去解决实际问题.正则表达式是一种威力无比强大的武器,几乎在所有的程序设计语言里和计算机平台上都可以用它来完成各种复杂的文本处理工作.而且书中的内容在保持语言和平台中立的同时,还兼顾了各种平台之间的差异.通过阅读本书,读者能够在轻松的氛圉中迅速掌握正则表达