Kl25-ch05(构件化开发方法与底层驱动构件封装规范)_第1页
Kl25-ch05(构件化开发方法与底层驱动构件封装规范)_第2页
Kl25-ch05(构件化开发方法与底层驱动构件封装规范)_第3页
Kl25-ch05(构件化开发方法与底层驱动构件封装规范)_第4页
Kl25-ch05(构件化开发方法与底层驱动构件封装规范)_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第5章章 构件化开发方法与底层驱动构构件化开发方法与底层驱动构件封装规范件封装规范主要内容:主要内容:5.1 5.1 嵌入式硬件构件与底层软件构件嵌入式硬件构件与底层软件构件5.2 5.2 基于硬件构件的嵌入式系统硬件电路设计基于硬件构件的嵌入式系统硬件电路设计5.3 5.3 基于硬件构件的嵌入式底层软件构件的编程方法基于硬件构件的嵌入式底层软件构件的编程方法5.4 5.4 底层驱动构件封装规范底层驱动构件封装规范5.5 5.5 本章小结本章小结5.1 嵌入式硬件构件与底层软件构件嵌入式硬件构件与底层软件构件 软件产业的发展借鉴了机械、建筑等传统产业先生产符软件产业的发展借鉴了机械、建筑等传

2、统产业先生产符合标准的构件(零部件),然后将标准构件按照规则组装合标准的构件(零部件),然后将标准构件按照规则组装成实际产品的模式。而成实际产品的模式。而随着微控制器及应用处理器内部随着微控制器及应用处理器内部RAM及及Flash存储器容量的增大,以及外部模块内置化程存储器容量的增大,以及外部模块内置化程度的提高,嵌入式系统的设计复杂性、设计规模及开发手度的提高,嵌入式系统的设计复杂性、设计规模及开发手段已经发生了根本变化。为此希望提高软硬件设计可重用段已经发生了根本变化。为此希望提高软硬件设计可重用性与可移植性,构件的制作与应用是重用与移植的基础与性与可移植性,构件的制作与应用是重用与移植的

3、基础与保障。保障。5.1.1 嵌入式硬件构件的概念嵌入式硬件构件的概念 要提高硬件设计可重用性与可移植性,就必须有工程师要提高硬件设计可重用性与可移植性,就必须有工程师们共同遵守的硬件设计规范。设计人员若凭借个人工作经验们共同遵守的硬件设计规范。设计人员若凭借个人工作经验和习惯的积累进行系统硬件电路的设计,往往每次都需从零和习惯的积累进行系统硬件电路的设计,往往每次都需从零开始,若在已有类似原理图上修改又很麻烦,容易出错。因开始,若在已有类似原理图上修改又很麻烦,容易出错。因此把构件的思想引入到硬件原理图设计中。此把构件的思想引入到硬件原理图设计中。 嵌入式硬件构件嵌入式硬件构件是指将一个或多

4、个硬件功能模块、支撑是指将一个或多个硬件功能模块、支撑电路及其功能描述封装成一个可重用的硬件实体,并提供一电路及其功能描述封装成一个可重用的硬件实体,并提供一系列规范的输入系列规范的输入/输出接口。输出接口。 据接口之间的生产消费关系,接口可分为提供接口和需据接口之间的生产消费关系,接口可分为提供接口和需求接口两类。根据所拥有接口类型的不同,硬件构件分为求接口两类。根据所拥有接口类型的不同,硬件构件分为核核心构件心构件、中间构件中间构件和和终端构件终端构件三种类型。三种类型。5.1.2 嵌入式底层驱动构件的概念嵌入式底层驱动构件的概念 构件构件(Component)是可重用的实体,它包含了合乎

5、)是可重用的实体,它包含了合乎规范的接口和功能实现,能够被独立部署和被第三方组装规范的接口和功能实现,能够被独立部署和被第三方组装 。 软件构件软件构件(Software Component)是指,在软件系统)是指,在软件系统中具有相对独立功能、可以明确辨识构件实体。中具有相对独立功能、可以明确辨识构件实体。 嵌入式软件构件嵌入式软件构件(Embedded Software Component)是实现一定嵌入式系统功能的一组封装的、规范的、可重)是实现一定嵌入式系统功能的一组封装的、规范的、可重用的、具有嵌入特性的软件构件单元,是组织嵌入式系统功用的、具有嵌入特性的软件构件单元,是组织嵌入式系

6、统功能的基本单位。能的基本单位。 嵌入式软件分为嵌入式软件分为高层软件构件高层软件构件和和底层软件构件底层软件构件(底层驱(底层驱动构件)。高层软件构件与硬件无关,而底层驱动构件与硬动构件)。高层软件构件与硬件无关,而底层驱动构件与硬件密不可分,是硬件驱动程序的构件化封装。件密不可分,是硬件驱动程序的构件化封装。5.2 基于硬件构件的嵌入式系统硬件电基于硬件构件的嵌入式系统硬件电路设计路设计5.2.1 设计时需要考虑的基本问题设计时需要考虑的基本问题 1MCU的选择的选择 选择选择MCU时要考虑时要考虑MCU所能够完成的功能、所能够完成的功能、MCU的价的价格、功耗、供电电压、格、功耗、供电电

7、压、I/O口电平、管脚数目以及口电平、管脚数目以及MCU的封的封装等因素。装等因素。 2电源电源 (1)考虑系统对电源的需求,例如系统需要几种电)考虑系统对电源的需求,例如系统需要几种电估计各需要多少功率或最大电流(估计各需要多少功率或最大电流(mA)。)。 (2)考虑芯片与器件对电源波动性的需求。一般允许)考虑芯片与器件对电源波动性的需求。一般允许电源波动幅度在电源波动幅度在5%以内。对于以内。对于A/D转换芯片的参考电压一转换芯片的参考电压一般要求般要求1%以内。以内。 (3)考虑工作电源是使用电源模块还是使用电源电路)考虑工作电源是使用电源模块还是使用电源电路。 3普通普通I/O口口 (

8、1)上拉、下拉电阻:考虑用内部或者外部上)上拉、下拉电阻:考虑用内部或者外部上/下拉电下拉电阻。阻。 (2)开关量输入:一定要保证高低电压分明。)开关量输入:一定要保证高低电压分明。 (3)开关量输出:基本原则是保证输出高电平接近电)开关量输出:基本原则是保证输出高电平接近电源电压,低电平接近地电平。源电压,低电平接近地电平。 4A/D电路与电路与D/A电路电路 (1)A/D电路:要清楚前端采样基本原理,对电阻型、电路:要清楚前端采样基本原理,对电阻型、电流型和电压型传感器采用不同的采集电路。如果采集的电流型和电压型传感器采用不同的采集电路。如果采集的信号微弱,还要考虑如何进行信号放大。信号微

9、弱,还要考虑如何进行信号放大。 (2)D/A电路:考虑电路:考虑MCU的引脚通过何种输出电路控的引脚通过何种输出电路控制实际对象。制实际对象。 5控制电路控制电路 对外控制电路要注意设计的冗余与反测,要有合适的信对外控制电路要注意设计的冗余与反测,要有合适的信号隔离措施等。在评估设计的布板时,一定要在构件的输号隔离措施等。在评估设计的布板时,一定要在构件的输入输出端引出检测孔,以方便排查错误时测量。入输出端引出检测孔,以方便排查错误时测量。 6考虑低功耗考虑低功耗 低功耗设计并不仅仅是为了省电,更多的好处在于降低低功耗设计并不仅仅是为了省电,更多的好处在于降低了电源模块及散热系统的成本。要做到

10、低功耗一般需要注意了电源模块及散热系统的成本。要做到低功耗一般需要注意以下几点:以下几点: (1)并不是所有的总线信号都要上拉。)并不是所有的总线信号都要上拉。 (2)不用的)不用的I/O口不要悬空,如果悬空的话,受外界的口不要悬空,如果悬空的话,受外界的一点点干扰就可能成为反复振荡的输入信号,而一点点干扰就可能成为反复振荡的输入信号,而MOS器件的器件的功耗基本取决于门电路的翻转次数。功耗基本取决于门电路的翻转次数。 (3)对一些外围小芯片的功耗也需要考虑。)对一些外围小芯片的功耗也需要考虑。 7考虑低成本考虑低成本 (1)正确选择电阻值与电容值。)正确选择电阻值与电容值。 (2)指示灯的选

11、择。)指示灯的选择。 (3)不要什么都选最好的。)不要什么都选最好的。5.2.2 硬件构件化电路原理图绘制的简明规则硬件构件化电路原理图绘制的简明规则 1硬件构件设计的通用规则硬件构件设计的通用规则 (1)元器件命名格式:对于核心构件,其元器件直接)元器件命名格式:对于核心构件,其元器件直接编号命名,同种类型的元件命名时冠以相同的字母前缀。编号命名,同种类型的元件命名时冠以相同的字母前缀。对于中间构件和终端构件,其元器件命名格式采用对于中间构件和终端构件,其元器件命名格式采用“构件名构件名-标志字符标志字符?”。当构件原理图应用到具体系统中时,可借助。当构件原理图应用到具体系统中时,可借助原理

12、图编辑软件为其自动编号。原理图编辑软件为其自动编号。 (2)为硬件构件添加详细的文字描述,包括中文名称)为硬件构件添加详细的文字描述,包括中文名称、英文名称、功能描述、接口描述、注意事项等,以增强原、英文名称、功能描述、接口描述、注意事项等,以增强原理图的可读性。理图的可读性。 (3)将前两步产生的内容封装在一个虚线框内,组成)将前两步产生的内容封装在一个虚线框内,组成硬件构件的内部实体。硬件构件的内部实体。 (4)为该硬件构件添加与其他构件交互的输入)为该硬件构件添加与其他构件交互的输入/输出接输出接口标识。接口标识有两种:接口注释和接口网标。口标识。接口标识有两种:接口注释和接口网标。 2

13、核心构件设计规则核心构件设计规则 设计核心构件时,需考虑的问题是:设计核心构件时,需考虑的问题是:“核心构件能为其核心构件能为其他构件提供哪些信号?他构件提供哪些信号?”。 核心构件其实就是某型号核心构件其实就是某型号MCU的最小系统。的最小系统。 核心构件设计的目标是:凡是使用该核心构件设计的目标是:凡是使用该MCU进行硬件系进行硬件系统设计时,核心构件可以直接统设计时,核心构件可以直接“组装组装”到系统中,无须任何到系统中,无须任何改动。为了实现这一目标,在设计核心构件的实体时必须考改动。为了实现这一目标,在设计核心构件的实体时必须考虑细致、周全,包括稳定性、扩展性等,封装要完整。虑细致、

14、周全,包括稳定性、扩展性等,封装要完整。 在进行接口设计时,需将所有可能使用到的引脚都标注在进行接口设计时,需将所有可能使用到的引脚都标注上接口网标(不要考虑:核心构件将会用到怎样的系统中上接口网标(不要考虑:核心构件将会用到怎样的系统中去)。若同一引脚具有不同功能,则接口网标依据第一功能去)。若同一引脚具有不同功能,则接口网标依据第一功能选项命名。选项命名。 遵循上述规则设计核心构件的好处是:当使用核心构件遵循上述规则设计核心构件的好处是:当使用核心构件和其他构件一起组装系统时,只要考虑其他构件将要连接到和其他构件一起组装系统时,只要考虑其他构件将要连接到核心构件的哪个接口(不是考虑:核心构

15、件将要连接到其他核心构件的哪个接口(不是考虑:核心构件将要连接到其他构件的哪个接口),这也符合设计人员的思维习惯。构件的哪个接口),这也符合设计人员的思维习惯。 3中间构件设计规则中间构件设计规则 设计中间构件时,需考虑的问题是:设计中间构件时,需考虑的问题是:“中间构件需要接中间构件需要接受哪些信号,以及提供哪些信号?受哪些信号,以及提供哪些信号?”。 中间构件是核心构件与终端构件之间通信的桥梁。中间构件是核心构件与终端构件之间通信的桥梁。 一个中间构件应具有明确的且相对独立的功能,它既要一个中间构件应具有明确的且相对独立的功能,它既要有接受其他构件提供的服务的接口,即需求接口,又要有为有接

16、受其他构件提供的服务的接口,即需求接口,又要有为其他构件提供服务的接口,即提供接口。描述需求接口采用其他构件提供服务的接口,即提供接口。描述需求接口采用接口注释,描述提供接口采用接口网标。接口注释,描述提供接口采用接口网标。 为直观起见,设计中间构件时,将构件的需求接口放置为直观起见,设计中间构件时,将构件的需求接口放置在构件实体的左侧,提供接口放置在右侧。在构件实体的左侧,提供接口放置在右侧。 电源控制构件、可变频率产生构件是常用的中间构件。电源控制构件、可变频率产生构件是常用的中间构件。 4终端构件设计规则终端构件设计规则 设计终端构件时,需考虑的问题是:设计终端构件时,需考虑的问题是:“

17、终端构件需要什终端构件需要什么信号才能工作?么信号才能工作?”。 终端构件是嵌入式系统中最常见的构件。终端构件是嵌入式系统中最常见的构件。 终端构件没有提供接口,它仅有与上一级构件交付的需终端构件没有提供接口,它仅有与上一级构件交付的需求接口,因而接口标识均为斜体标注的接口注释。求接口,因而接口标识均为斜体标注的接口注释。LCD(YM1602C)构件、)构件、LED构件、指示灯构件以及键盘构件构件、指示灯构件以及键盘构件等都是典型的终端构件。等都是典型的终端构件。 5使用硬件构件组装系统的方法使用硬件构件组装系统的方法 对于核心构件,在应用到具体的系统中时,不必作任何对于核心构件,在应用到具体

18、的系统中时,不必作任何改动。具有相同改动。具有相同MCU的应用系统,其核心构件完全相同。对的应用系统,其核心构件完全相同。对于中间构件和终端构件,在应用到具体的系统中时,仅需为于中间构件和终端构件,在应用到具体的系统中时,仅需为需求接口添加接口网标,在不同的系统中,接口网标名称不需求接口添加接口网标,在不同的系统中,接口网标名称不同,但构件实体内部完全相同。同,但构件实体内部完全相同。使用硬件构件化思想设计嵌入式硬件系统的过程与步骤是:使用硬件构件化思想设计嵌入式硬件系统的过程与步骤是:(1)根据系统的功能划分出若干个硬件构件。)根据系统的功能划分出若干个硬件构件。(2)将所有硬件构件原理图)

19、将所有硬件构件原理图“组装组装”在一起。在一起。(3)为中间构件和终端构件添加接口网标。)为中间构件和终端构件添加接口网标。5.2.3 实验实验PCB板设计的简明规则板设计的简明规则 印刷电路板(印刷电路板(Printed-Circuit Board,PCB)是由环氧)是由环氧树脂粘合而成的镀了铜的玻璃纤维板。蚀刻掉部分镀铜,只树脂粘合而成的镀了铜的玻璃纤维板。蚀刻掉部分镀铜,只留下以构成电路互连通路的铜层走线。留下以构成电路互连通路的铜层走线。 PCB可以是单层、双层或者四层、六层、八层、十二层可以是单层、双层或者四层、六层、八层、十二层甚至更多。层数越多,连接的布线就越容易,但成本却越高甚

20、至更多。层数越多,连接的布线就越容易,但成本却越高,调试也越难。,调试也越难。 如果如果PCB有专用供电层和接地层,系统将会有更强的燥有专用供电层和接地层,系统将会有更强的燥声抗扰度。声抗扰度。 在使用电子设计自动化软件(如在使用电子设计自动化软件(如DXP)设计)设计PCB时需注时需注意以下几个方面的问题。意以下几个方面的问题。 1PCB板布局板布局 在正式走线之前要对在正式走线之前要对PCB的大体格局进行规划。布局的大体格局进行规划。布局规划应遵循下列基本原则。规划应遵循下列基本原则。(1)在)在PCB布板之前首先要打印出相应的原理图,然后根布板之前首先要打印出相应的原理图,然后根据原理图

21、确定整个据原理图确定整个PCB板的大体布局,即各个硬件构件的位板的大体布局,即各个硬件构件的位置安排。置安排。(2)PCB板的形状如无其他要求,一般为矩形,长宽比为板的形状如无其他要求,一般为矩形,长宽比为4:3或或3:2。(3)考虑面板上元件的放置要求。)考虑面板上元件的放置要求。(4)考虑边缘接口。)考虑边缘接口。 2元件放置元件放置 (1)元件放置要求整齐,尽可能正放,属于同一硬件)元件放置要求整齐,尽可能正放,属于同一硬件构件内的元件尽可能排放在一起。排列方位尽可能与原理图构件内的元件尽可能排放在一起。排列方位尽可能与原理图一致,布线方向最好与电路图走线方向一致。元器件在一致,布线方向

22、最好与电路图走线方向一致。元器件在PCB上的排列可采用不规则、规则和网格等三种排列方式中的一上的排列可采用不规则、规则和网格等三种排列方式中的一种,也可同时采用多种。种,也可同时采用多种。 布局的元器件应有利于发热元器件散热,高频时要考虑布局的元器件应有利于发热元器件散热,高频时要考虑元器件之间的分布参数,高、低压之间要隔离,隔离距离与元器件之间的分布参数,高、低压之间要隔离,隔离距离与承受的耐压有关。承受的耐压有关。 (2)电容的位置要特别注意,其中电源模块的滤波电)电容的位置要特别注意,其中电源模块的滤波电容要求靠近电源,而容要求靠近电源,而IC的滤波电容要靠近的滤波电容要靠近IC的引脚。

23、的引脚。 (3)考虑元件间的距离,防止元件之间出现重叠。)考虑元件间的距离,防止元件之间出现重叠。还要考虑元器件的引脚间距,因为它决定着焊盘放置间距。还要考虑元器件的引脚间距,因为它决定着焊盘放置间距。对于非标准器件的引脚间距的确定最直接的方法就是:使用对于非标准器件的引脚间距的确定最直接的方法就是:使用游标卡尺进行测量。游标卡尺进行测量。 (4)PCB四周留有四周留有5-10mm空隙不布器件。空隙不布器件。 (5)先放置占用面积较大的元器件,先集成后分立,)先放置占用面积较大的元器件,先集成后分立,先主后次,多块集成电路时先放置主电路。先主后次,多块集成电路时先放置主电路。 (6)可调元件应

24、放置在便于调节的地方,质量超过)可调元件应放置在便于调节的地方,质量超过15g的元器件应当用支架,热敏元件应远离发热元件。晶的元器件应当用支架,热敏元件应远离发热元件。晶振应平放,而不要竖直放置。振应平放,而不要竖直放置。 (7)PLL滤波电路应尽量靠近滤波电路应尽量靠近MCU。 3有关设定有关设定 (1)线宽。导线的最小宽度由导线与绝缘基板间的粘)线宽。导线的最小宽度由导线与绝缘基板间的粘附强度和流过它们的电流值决定。一般地线宽度附强度和流过它们的电流值决定。一般地线宽度电源线电源线宽度宽度信号线宽度。信号线宽度。 (2)间距。导线间的间距由它们之间的安全工作电压)间距。导线间的间距由它们之

25、间的安全工作电压决定,相邻导线之间的峰值电压、基板的质量、表面涂层决定,相邻导线之间的峰值电压、基板的质量、表面涂层、电容耦合参数等都影响导线的安全工作电压、电容耦合参数等都影响导线的安全工作电压 (3)过孔大小。过孔大小设定要适中。)过孔大小。过孔大小设定要适中。4布线布线 布线时,应该首先对时钟和高速信号进行布线,以确保布线时,应该首先对时钟和高速信号进行布线,以确保它们的走线尽可能直接。它们的走线尽可能直接。 石英晶振和对噪声特别敏感的器件下面不要走线。石英晶振和对噪声特别敏感的器件下面不要走线。 对总线进行布线时,尽可能地保持信号线平行走线,而对总线进行布线时,尽可能地保持信号线平行走

26、线,而时钟信号线则要避免平行,且在这些导线之间最好加接地线。时钟信号线则要避免平行,且在这些导线之间最好加接地线。 布板完成后一定要进行自动与人工检查。过孔数尽可能布板完成后一定要进行自动与人工检查。过孔数尽可能少。少。 最小系统中未使用的最小系统中未使用的I/O口,可通过电阻接地。口,可通过电阻接地。 走线尽量少拐弯,线宽不要突变,导线拐角应走线尽量少拐弯,线宽不要突变,导线拐角应90,力求线条简单明了。力求线条简单明了。 信号线的拐角应设计成钝角走向,为圆形或圆弧形,切信号线的拐角应设计成钝角走向,为圆形或圆弧形,切忌画成忌画成90或更小角度形状。或更小角度形状。 5测量点测量点 考虑到硬

27、件测试的方便,在考虑到硬件测试的方便,在PCB布板时要留下一些测布板时要留下一些测量点,以便调试之用。以下几处需要留测量点:量点,以便调试之用。以下几处需要留测量点: (1)原理图中模块的输入输出引脚。)原理图中模块的输入输出引脚。 (2)最小系统模块中)最小系统模块中MCU的引脚。的引脚。 (3)各硬件功能模块单元的输入、输出口;)各硬件功能模块单元的输入、输出口; 画测量点的步骤是:引出、打孔、标字。孔的大小以万画测量点的步骤是:引出、打孔、标字。孔的大小以万用表头方便测量为原则,一般不要在线上直接打孔。用表头方便测量为原则,一般不要在线上直接打孔。 6模块标示模块标示 由于在整体布局时,

28、已经将各个硬件构件的组成元件放由于在整体布局时,已经将各个硬件构件的组成元件放在一起,因而可在在一起,因而可在PCB板上用矩形框将各个硬件构件区分板上用矩形框将各个硬件构件区分开,并用汉字标出构件名(与原理图一致),并注意字体开,并用汉字标出构件名(与原理图一致),并注意字体字号。字号。 7铺地铺地 在布板的最后都要铺地,目的是减小干扰,提高在布板的最后都要铺地,目的是减小干扰,提高PCB板的稳定性。铺地需注意:板的稳定性。铺地需注意: (1)在铺地前,要设定地与导线、地与引脚之间的距)在铺地前,要设定地与导线、地与引脚之间的距离,并要求该距离尽可能大。离,并要求该距离尽可能大。 (2)铺地本

29、应该双面铺,作为实验用板,为了方便检)铺地本应该双面铺,作为实验用板,为了方便检查,可只铺反面地。查,可只铺反面地。 (3)如果电路板中有数字地和模拟地,应将它们隔离)如果电路板中有数字地和模拟地,应将它们隔离开,两者间使用磁珠相连。开,两者间使用磁珠相连。 8空余位置的利用并标注相关信息空余位置的利用并标注相关信息 PCB板的空余位置可适度作如下用途:板的空余位置可适度作如下用途: (1)电源、地。空白处多留几排电源和地。)电源、地。空白处多留几排电源和地。 (2)双排孔。留出几排两孔相连的排孔,以用来扩展)双排孔。留出几排两孔相连的排孔,以用来扩展或试验时焊接其他元件。或试验时焊接其他元件

30、。 (3)固定孔。在)固定孔。在PCB上画固定板的固定孔,一般在板上画固定板的固定孔,一般在板的四个角落。的四个角落。 在完成在完成PCB板的铺地之后,要在板的正面适当位置标板的铺地之后,要在板的正面适当位置标出以下信息:单位、日期、责任人、出以下信息:单位、日期、责任人、PCB板的名称、编号板的名称、编号等。等。 9抗干扰问题的特别考虑抗干扰问题的特别考虑 1)热干扰及抑制)热干扰及抑制 元器件在工作中都有一定程度的发热,发出的热量会对元器件在工作中都有一定程度的发热,发出的热量会对周边比较敏感的器件产生干扰,若热干扰得不到很好的抑制,周边比较敏感的器件产生干扰,若热干扰得不到很好的抑制,整

31、个电路的电性就会发生变化,最后造成短路整个电路的电性就会发生变化,最后造成短路. 为了对热干为了对热干扰进行抑制,可采取以下措施:扰进行抑制,可采取以下措施: (1)发热元件的放置)发热元件的放置 不要贴板放置,也可以单独设计为一个功能单元,放在不要贴板放置,也可以单独设计为一个功能单元,放在靠近边缘容易散热的地方。另外,发热量大的器件与小热量靠近边缘容易散热的地方。另外,发热量大的器件与小热量的器件应分开放置。的器件应分开放置。 (2)大功率器件的放置)大功率器件的放置 应尽量靠近边缘布置,在垂直方向时应尽量布置在板上应尽量靠近边缘布置,在垂直方向时应尽量布置在板上方。方。 (3)温度敏感器

32、件的放置)温度敏感器件的放置 对温度比较敏感的器件应安置在温度最低的区域,千万对温度比较敏感的器件应安置在温度最低的区域,千万不要将它放在发热器件的正上方。不要将它放在发热器件的正上方。 (4)器件的排列与气流)器件的排列与气流非特定要求,一般设备内部均以空气自由对流进行散热,故非特定要求,一般设备内部均以空气自由对流进行散热,故元器件应以纵式排列;若强制散热,元器件可横式排列。元器件应以纵式排列;若强制散热,元器件可横式排列。另外,为了改善散热效果,可添加与电路原理无关的零部另外,为了改善散热效果,可添加与电路原理无关的零部件以引导热量对流。件以引导热量对流。 2)共阻抗及抑制)共阻抗及抑制

33、 共阻干扰是由共阻干扰是由PCB上大量的地线造成,当两个或两个上大量的地线造成,当两个或两个以上的回路共用一段地线时,不同的回路电流在共用地线以上的回路共用一段地线时,不同的回路电流在共用地线上产生一定压降,此压降经放大就会影响电路性能,当电上产生一定压降,此压降经放大就会影响电路性能,当电流频率很高时,会产生很大的感抗而使电路受到干扰。为流频率很高时,会产生很大的感抗而使电路受到干扰。为了抑制共阻抗,可采取以下措施:了抑制共阻抗,可采取以下措施: (1)一点接地)一点接地 (2)就近多点接地)就近多点接地 (3)大面积接地)大面积接地 (4)加粗接地线)加粗接地线 (5)DA(数模)电路的地

34、线分开(数模)电路的地线分开 3)电磁干扰及抑制)电磁干扰及抑制 电磁干扰是由电磁效应而造成的干扰,针对由电源布线、电磁干扰是由电磁效应而造成的干扰,针对由电源布线、信号布线产生的电磁干扰,可采取不同的措施。信号布线产生的电磁干扰,可采取不同的措施。 (1)电源布线可采用以下预防措施:)电源布线可采用以下预防措施:布线要宽布线要宽;加去加去耦电容耦电容(这种电容起到旁路滤波的作用,要在电源的输入(这种电容起到旁路滤波的作用,要在电源的输入端并联较大的和较小的滤波电容);端并联较大的和较小的滤波电容);地线环绕地线环绕(地线要靠(地线要靠近供电电源母线和信号线,因电流沿路径传输会产生回路近供电电

35、源母线和信号线,因电流沿路径传输会产生回路电感,地线靠近,回路面积减小,电感量减小,回路阻抗电感,地线靠近,回路面积减小,电感量减小,回路阻抗减小,从而减小电磁干扰耦合)。减小,从而减小电磁干扰耦合)。 (2)信号布线可采用以下预防措施:)信号布线可采用以下预防措施:不同功能的单元不同功能的单元电路电路(如数字电路与模拟电路,高频与低频)(如数字电路与模拟电路,高频与低频)分开设置分开设置,布线图形应易于信号流通且使信号流向尽可能保持一致;布线图形应易于信号流通且使信号流向尽可能保持一致;合理使用屏蔽和滤波技术合理使用屏蔽和滤波技术,注意高低压之间的隔离;,注意高低压之间的隔离;尽量尽量不选用

36、比实际需要的速度更快的元件不选用比实际需要的速度更快的元件,在元件的位置安排,在元件的位置安排上,易受电磁干扰的元器件不能相距太近,应大于信号波上,易受电磁干扰的元器件不能相距太近,应大于信号波长的四分之一,输入器件与输出器件尽量远离;长的四分之一,输入器件与输出器件尽量远离;做到安全做到安全接地接地。5.3 基于硬件构件的嵌入式底层软件构基于硬件构件的嵌入式底层软件构件的编程方法件的编程方法5.3.1 嵌入式硬件构件和软件构件的层次模型嵌入式硬件构件和软件构件的层次模型 嵌入式软件构件(嵌入式软件构件(Embedded Software Component, ESC)是实现一定嵌入式系统功能

37、的一组封装的、规范的、)是实现一定嵌入式系统功能的一组封装的、规范的、可重用的、具有嵌入特性的软件单元,是组织嵌入式系统的可重用的、具有嵌入特性的软件单元,是组织嵌入式系统的功能单位。功能单位。 嵌入式软件构件分为高层软件构件和底层软件构件(以嵌入式软件构件分为高层软件构件和底层软件构件(以下简称高层构件和底层构件)。高层构件与硬件无关。通常下简称高层构件和底层构件)。高层构件与硬件无关。通常,MCU内部包含有内部包含有GPIO(即通用(即通用IO)口和一些内置功能模块)口和一些内置功能模块,而底层构件与硬件密不可分,是硬件驱动程序的封装。可,而底层构件与硬件密不可分,是硬件驱动程序的封装。可

38、将通用将通用I/O口的驱动程序封装为口的驱动程序封装为GPIO驱动构件,各内置功能模驱动构件,各内置功能模块的驱动程序封装为功能构件,块的驱动程序封装为功能构件, 在硬件构件层中,相对于核心构件而言,中间构件和终在硬件构件层中,相对于核心构件而言,中间构件和终端构件是核心构件的端构件是核心构件的“外设外设”。由这些。由这些“外设外设”的驱动程的驱动程序封装而成的软件构件称为底层外设构件。注意,并不是序封装而成的软件构件称为底层外设构件。注意,并不是所有的中间构件和终端构件都可以作为编程对象。所有的中间构件和终端构件都可以作为编程对象。 由图可看出,底层外设构件可以调用底层内部构件,而由图可看出

39、,底层外设构件可以调用底层内部构件,而高层构件可以调用底层外设构件和底层内部构件中的功能高层构件可以调用底层外设构件和底层内部构件中的功能构件,而不能直接调用构件,而不能直接调用GPIO驱动构件。另外,考虑到几驱动构件。另外,考虑到几乎所有的底层内部构件都涉及到乎所有的底层内部构件都涉及到MCU各种寄存器的使用,各种寄存器的使用,因此将因此将MCU的所有寄存器定义组织在一起,形成的所有寄存器定义组织在一起,形成MCU头头文件,以便其他构件头文件中包含该头文件。文件,以便其他构件头文件中包含该头文件。5.3.2 底层构件的实现方法与编程思想底层构件的实现方法与编程思想 底层构件是与硬件直接打交道

40、的软件,由头文件和源程底层构件是与硬件直接打交道的软件,由头文件和源程序文件两部分组成。序文件两部分组成。 头文件中的内容主要有:包含下层构件头文件的头文件中的内容主要有:包含下层构件头文件的#include语句、用以描述构件属性的宏定义语句以及对外接语句、用以描述构件属性的宏定义语句以及对外接口函数原型说明。口函数原型说明。 在头文件中使用函数原型,对于建立代码模块和外部接在头文件中使用函数原型,对于建立代码模块和外部接口的规范,便于他人使用,都是很有帮助的。口的规范,便于他人使用,都是很有帮助的。 源程序文件中存放构件的内部函数和外部函数的定义,源程序文件中存放构件的内部函数和外部函数的定

41、义,即函数的实现代码,以完成函数所要实现的功能。即函数的实现代码,以完成函数所要实现的功能。 在对底层构件进行设计时,最关键的工作是要对构件的在对底层构件进行设计时,最关键的工作是要对构件的共性和个性进行分析,抽取出构件的属性和对外接口函数。共性和个性进行分析,抽取出构件的属性和对外接口函数。尽量做到:当一个底层构件应用到不同系统中时,仅需修改尽量做到:当一个底层构件应用到不同系统中时,仅需修改构件的头文件,对于构件的源程序文件则不必修改或改动很构件的头文件,对于构件的源程序文件则不必修改或改动很小。小。 在编写构件时,一般应注意以下几方面的内容:在编写构件时,一般应注意以下几方面的内容: (

42、1)构件的头文件名和源程序文件名一致,且为构件)构件的头文件名和源程序文件名一致,且为构件名。名。 (2)属性和操作的命名统一以构件名开头。这样做的)属性和操作的命名统一以构件名开头。这样做的好处是:当使用底层构件组装软件系统时,避免构件之间好处是:当使用底层构件组装软件系统时,避免构件之间出现同名现象。出现同名现象。 (3)对)对MCU内的模块寄存器名和端口名进行重定义,内的模块寄存器名和端口名进行重定义,在其他的代码里面都将使用宏名对模块寄存器和端口进行在其他的代码里面都将使用宏名对模块寄存器和端口进行操作。这样,当底层驱动程序移植到其他操作。这样,当底层驱动程序移植到其他MCU时,只要时

43、,只要修改重定义语句就可以了。修改重定义语句就可以了。 (4)内部函数与外部函数要设计合理,函数参数个数)内部函数与外部函数要设计合理,函数参数个数及类型要考虑全面。及类型要考虑全面。 (5)应用程序在使用底层构件时,严格禁止通过全局)应用程序在使用底层构件时,严格禁止通过全局变量来传递参数,所有的数据传递都要通过函数的形式参变量来传递参数,所有的数据传递都要通过函数的形式参数来接收。这样做不但使得接口简洁,更加避免了全局变数来接收。这样做不但使得接口简洁,更加避免了全局变量可能引发的安全隐患。量可能引发的安全隐患。5.3.3 硬件构件及底层软件构件的重用与移植方法硬件构件及底层软件构件的重用

44、与移植方法 1硬件构件的重用与移植硬件构件的重用与移植 对于以单对于以单MCU为核心的嵌入式应用系统而言,当用硬件为核心的嵌入式应用系统而言,当用硬件构件构件“组装组装”硬件系统时,核心构件(即最小系统)有且只硬件系统时,核心构件(即最小系统)有且只有一个,而中间构件和终端构件可有多个,并且相同类型的有一个,而中间构件和终端构件可有多个,并且相同类型的构件可出现多次。下面以终端构件构件可出现多次。下面以终端构件LCD为例,介绍硬件构件为例,介绍硬件构件的移植方法。的移植方法。 2底层构件的移植底层构件的移植 当一个已设计好的底层构件当一个已设计好的底层构件移植到另外一个嵌入式系统中移植到另外一

45、个嵌入式系统中时,其头文件和程序文件是否时,其头文件和程序文件是否需要改动要视具体情况而定。需要改动要视具体情况而定。例如:系统的核心构件发生改例如:系统的核心构件发生改变(即变(即MCU型号改变)时,型号改变)时,底层内部构件头文件和某些对底层内部构件头文件和某些对外接口函数也要随之改变,例外接口函数也要随之改变,例如模块初始化函数。而对于外如模块初始化函数。而对于外接硬件构件,希望不改动程序接硬件构件,希望不改动程序文件,而只改动头文件,那么,文件,而只改动头文件,那么,头文件就必须充分设计。以头文件就必须充分设计。以LCD构件为例,与前图相对应构件为例,与前图相对应的底层构件头文件的底层

46、构件头文件lcd.h可如可如下编写。下编写。5.4 底层驱动构件封装规范底层驱动构件封装规范5.4.1 构件设计的基本原则构件设计的基本原则 良好的底层驱动构件具备如下特性:良好的底层驱动构件具备如下特性: (1)封装性。)封装性。 (2)描述性。)描述性。 (3)可移植性。)可移植性。 (4)可复用性。)可复用性。 构件被组织成具有一定独立性的功能模块,由以构件的构件被组织成具有一定独立性的功能模块,由以构件的名称命名的头文件(名称命名的头文件(.h)和源文件)和源文件(.c)文件两部分组成。文件两部分组成。 构件的头文件中,主要包含引用必要的文件、描述构件构件的头文件中,主要包含引用必要的

47、文件、描述构件功能特性的宏定义语句以及声明对外提供服务的函数接口。功能特性的宏定义语句以及声明对外提供服务的函数接口。 构件的源文件中存放构件的内部函数和对外提供服务函数的构件的源文件中存放构件的内部函数和对外提供服务函数的定义,即函数的实现代码,完成构件所要实现的功能。定义,即函数的实现代码,完成构件所要实现的功能。 调用者通过构件接口获取服务,而不必关心服务函数的调用者通过构件接口获取服务,而不必关心服务函数的具体实现细节。这就是构件设计的基本内容。具体实现细节。这就是构件设计的基本内容。 为了使构件设计满足封装性、描述性、可移植性、可复为了使构件设计满足封装性、描述性、可移植性、可复用性

48、的基本要求,嵌入式底层驱动构件的开发,应遵循层用性的基本要求,嵌入式底层驱动构件的开发,应遵循层次化、易用性、鲁棒性及对内存的可靠使用原则。次化、易用性、鲁棒性及对内存的可靠使用原则。 1层次化原则层次化原则 (1)针对应用场景和服务对象,分层组织构件。)针对应用场景和服务对象,分层组织构件。 (2)在构件的层次模型中,上层构件可以调用下层构)在构件的层次模型中,上层构件可以调用下层构件提供的服务,同一层次的构件不存在相互依赖关系,不件提供的服务,同一层次的构件不存在相互依赖关系,不能相互调用。能相互调用。 2易用性原则易用性原则 易用性在于让调用者能够快速理解的构件提供服务的功易用性在于让调

49、用者能够快速理解的构件提供服务的功能并进行使用。遵循易用性原则设计底层驱动构件需要做能并进行使用。遵循易用性原则设计底层驱动构件需要做到:函数名简洁且达意;接口参数清晰,范围明确;使用到:函数名简洁且达意;接口参数清晰,范围明确;使用说明语言精炼规范,避免二义性。此外,在函数的实现方说明语言精炼规范,避免二义性。此外,在函数的实现方面,避免编写代码量过多。面,避免编写代码量过多。 3鲁棒性原则鲁棒性原则 鲁棒性在于为调用者提供安全的服务,避免在程序执行鲁棒性在于为调用者提供安全的服务,避免在程序执行过程中出现异常状况。遵循鲁棒性原则设计底层驱动构件过程中出现异常状况。遵循鲁棒性原则设计底层驱动

50、构件需要做到:在明确函数输入输出的取值范围、提供清晰接需要做到:在明确函数输入输出的取值范围、提供清晰接口描述的同时,在函数实现的内部要有对输入参数的检测,口描述的同时,在函数实现的内部要有对输入参数的检测,对超出合法范围的输入参数进行必要的处理;使用分支判对超出合法范围的输入参数进行必要的处理;使用分支判断时,确保对分支条件判断的完整性,对缺省分支进行处断时,确保对分支条件判断的完整性,对缺省分支进行处理。理。同时,不能忽视编译警告错误。同时,不能忽视编译警告错误。 4内存可靠使用原则内存可靠使用原则 遵循内存可靠使用原则设计底层驱动构件需要做到:遵循内存可靠使用原则设计底层驱动构件需要做到

51、: (1)优先使用静态分配内存。)优先使用静态分配内存。 (2)谨慎地使用变量。)谨慎地使用变量。 (3)检测空指针。)检测空指针。 (4)检测缓冲区溢出,并为内存中的缓冲区预留不小)检测缓冲区溢出,并为内存中的缓冲区预留不小于于20%的冗余。的冗余。 (5)对内存的使用情况进行评估。)对内存的使用情况进行评估。5.4.2 编码风格基本规范编码风格基本规范 1文件、函数、变量、宏及结构体类型的命名规范文件、函数、变量、宏及结构体类型的命名规范 命名的基本原则是:命名的基本原则是: (1)命名清晰明了,有明确含义,使用完整单词或约定俗)命名清晰明了,有明确含义,使用完整单词或约定俗成的缩写。命名

52、中若使用特殊约定或缩写,要有注释说明。成的缩写。命名中若使用特殊约定或缩写,要有注释说明。 (2)命名风格要自始至终保持一致。)命名风格要自始至终保持一致。 (3)为了代码复用,命名中应避免使用与具体项目相关的)为了代码复用,命名中应避免使用与具体项目相关的前缀。前缀。 (4)为了便于管理,对程序实体的命名要体现出所属构件)为了便于管理,对程序实体的命名要体现出所属构件的名称。的名称。 (5)使用英语命名。)使用英语命名。 (6)除宏命名外,名称字符串全部小写,以下划线)除宏命名外,名称字符串全部小写,以下划线“_”作作为单词的分隔符。首尾字母不用为单词的分隔符。首尾字母不用“_”。 针对嵌入

53、式底层驱动构件的设计需要,对文件、函数、针对嵌入式底层驱动构件的设计需要,对文件、函数、 变量、宏及数据结构类型的命令特别进行说明。变量、宏及数据结构类型的命令特别进行说明。 1)文件的命名)文件的命名 底层驱动构件在具体设计时分为两个文件,其中头文件底层驱动构件在具体设计时分为两个文件,其中头文件命名为命名为“.h”,源文件命名为,源文件命名为“.c”,其中其中表示具体的硬件模块的名称。表示具体的硬件模块的名称。 2)函数的命名)函数的命名 底层驱动构件的函数从属于驱动构件,驱动函数的命名底层驱动构件的函数从属于驱动构件,驱动函数的命名除要体现函数功能外,还需要使用命名前缀和后缀标识其除要体

54、现函数功能外,还需要使用命名前缀和后缀标识其所属的构件及不同的实现方式。所属的构件及不同的实现方式。 函数名前缀:底层驱动构件中定义的所有函数均使用函数名前缀:底层驱动构件中定义的所有函数均使用“_”前缀表示其所属的驱动构件模块。前缀表示其所属的驱动构件模块。 函数名后缀:对同一服务的不同方式的实现,使用后缀函数名后缀:对同一服务的不同方式的实现,使用后缀加以区分。加以区分。 3)函数形参变量与函数内局部变量的命名)函数形参变量与函数内局部变量的命名 对嵌入式底层驱动构件进行编码的过程中,需要考虑对对嵌入式底层驱动构件进行编码的过程中,需要考虑对底层驱动函数形参变量及驱动函数内部局部变量的命名

55、。底层驱动函数形参变量及驱动函数内部局部变量的命名。 函数形参变量:函数形参变量名是使用函数时理解形参函数形参变量:函数形参变量名是使用函数时理解形参的最直观印象,表示传参的功能说明。的最直观印象,表示传参的功能说明。 局部变量:局部变量的命名与函数形参变量类似。局部变量:局部变量的命名与函数形参变量类似。 4)宏常量及宏函数的命名)宏常量及宏函数的命名 宏常量及宏函数的命名全部使用大写字符,使用下划线宏常量及宏函数的命名全部使用大写字符,使用下划线“_”为分隔符。例如,在构件公共要素中定义的开关中断为分隔符。例如,在构件公共要素中定义的开关中断的宏如下:的宏如下: 5)结构体类型的命名、类型

56、定与变量声明)结构体类型的命名、类型定与变量声明 (1)结构体类型名称使用小写字母命名)结构体类型名称使用小写字母命名 (),定义结构体类型变量时,),定义结构体类型变量时,全部使用大写字母命名全部使用大写字母命名()。)。 (2)对结构体内部字段全部使用大写字母命名()对结构体内部字段全部使用大写字母命名()。)。 (3)定义类型时,同时声明一个结构体变量和结构体)定义类型时,同时声明一个结构体变量和结构体指针变量。指针变量。 模板如下:模板如下:2排版排版 对程序进行排版是指,通过插入空格与空行,使用缩进对程序进行排版是指,通过插入空格与空行,使用缩进、断行等手段,调整代码的书面版式,使代

57、码整体美观、清晰、断行等手段,调整代码的书面版式,使代码整体美观、清晰,从而提高代码的可读性。,从而提高代码的可读性。 1)空行与空格)空行与空格 关于空行:相对独立的程序块之间须加空行。关于空行:相对独立的程序块之间须加空行。 关于空格:在两个以上的关键字、变量、常量进行对等关于空格:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格,必操作时,它们之间的操作符之前、之后或者前后要加空格,必要时加两个空格;进行非对等操作时,如果是关系密切的立即要时加两个空格;进行非对等操作时,如果是关系密切的立即操作符(如操作符(如),其后不应加空格。),其后不应加空格

58、。 2)缩进)缩进 使用空格缩进,不使用使用空格缩进,不使用Tab键,这样代码复制打印是不会键,这样代码复制打印是不会造成错乱。代码的每一级均往右缩进造成错乱。代码的每一级均往右缩进4个空格的位置。个空格的位置。 3)断行)断行 (1)较长的语句()较长的语句(78字符)要分成多行书写,长表达字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。分出的新行要进行适当的缩进,使排版整齐,语句可读。 (2)循环、判断等语句中若有较长的表达式或语句,则)循环、判断等语句

59、中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。,操作符放在新行之首。 (3)若函数或过程中的参数较长,则要进行适当的划分)若函数或过程中的参数较长,则要进行适当的划分。 (4)不允许把多个短语句写在一行中,即一行只写一条)不允许把多个短语句写在一行中,即一行只写一条语句。特殊情况可用,例如语句。特殊情况可用,例如“if (x3) x=3;”可以在一行。可以在一行。 (5)if、for、do、while、case、switch、default等语等语句后的程序块分界符(如句后的程序块分

60、界符(如C/C+语言的大括号语言的大括号和和)应)应各独占一行并且位于同一列,且与以上保留字左对齐。各独占一行并且位于同一列,且与以上保留字左对齐。 3注释注释 在程序代码中使用注释,有助于对程序的阅读理解,说在程序代码中使用注释,有助于对程序的阅读理解,说明程序在明程序在“做什么做什么”,解释代码的目的、功能和采用的方,解释代码的目的、功能和采用的方法。法。 (1)一般情况源程序有效注释量在)一般情况源程序有效注释量在30左右。左右。 (2)注释语言必须准确、易懂、简洁。)注释语言必须准确、易懂、简洁。 (3)编写和修改代码的同时,处理好相应的注释。)编写和修改代码的同时,处理好相应的注释。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论