|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
总结嵌入式系统基础—下篇
9 I$ ^& }; ]! N4 t3 t* W* ~2 L1 B0 G9 w, T" G; C! a# o& Q8 `
' G* u( W, j1 s; ~
第四章 外围设备( F2 S* `8 ?+ i2 i; p' s
+ h& d4 E, Q. G+ k) H2 L, Y
——>通过I/O口控制外部设备绝不像有些读者想像的去驱动一组发光二极管那么简单。在单片机的后向通道控制系统中,常用断电器控制器件功率
6 g: Y# P6 Y& \: v
7 I- B* L3 t+ s( _' w- H- B0 j——>测量和控制是单片机系统一个非常重要的应用领域。典型的应用模式是通过传感器采集现场的微弱信号参数,经过数据处理后再通过A/D模数转换送到单片机系统进行各种工业调节和控制。( V2 B( s+ b+ ?9 U
* M. u1 W6 A- Z——>在单片机系统中,与传感器的接口通常称之为前向通道接口
@( h* J1 o a$ ~' n& y: F9 M0 u& S' Q* T
——>继电器:单片机应用中,开关量都通过单片机I/O口或扩展I/O口输出来的,这些I/O口的驱动电流往往不足以驱动一些功率开关往往需要用到一些特殊的设备来控制大功率的器件. R. x9 i$ y; R) V
$ `" l5 b8 I% [6 w# ]6 E- h6 i
——>继电器:一种器件,它们响应小的电流或者电压变化,激活电路中的开关或者其他设备。可以用于远程地切换信号或电源
% ~7 l8 K$ ~1 L6 i$ l* X: W, P( a' Y N% R* Z
——>继电器分为机械继电器和固态继电器
- u0 ~) l. b- s- \
; U* Z3 C& D( T, J% V——>机械继电器:驱动器的选择要根据继电器的吸合电流而定,即驱动器的电流一定要大于继电器的吸合电流。继电器的选择是根据的需要,结合负载电流,负载功率选择合适的继电器
1 q( v y% U$ c0 D; @+ ~7 A; F! ~6 v) u9 }2 w& @5 o
——>固态继电器:固态继电器是一种新型的无触点电子继电器,输入端只需极小的控制电流,输出则用双向的晶闸管控制负载,输入、输出均通过内部光电耦合器隔离;具有外界元器件少、控制电压低、电流小、搞干扰性强、易于与单片机接口的特点7 u1 U c2 C: S
" \/ r' H$ t' C- O# X1 @
——>继电器的实际使用中,我们需要注意的关键问题主要有两点:一是功率驱动,二是抗干扰+ m& h6 a4 E$ g4 j9 z2 u
3 P3 F5 B$ j) I9 u7 t
——>A/D转换器:传感器将自然界获得的模拟信号转换成mcu能识别的电信号,也就是我们常说的AD转换;除了要选合适的传感器以外,还要将传感器采集来的微弱的信号放大
. p9 M; L7 G' z0 y0 l3 |
$ a9 n8 W# `7 t4 h——>设计软件的时候要注意:片选(CS)脉冲要在每次的开始处,或者在转换时序的开始处变化一次后保持CS为低,直到时序结束9 t; n, Q3 H. f$ @. M* t O& W
6 k1 R9 I0 w& p/ [——>信号量可以分为模拟信号量和数字信号量。模拟信号量是连续变化的信号,在自然界中,存在着大量的信号量: }4 I F& U. j& J
+ e2 i0 i! O( l- h) Q——>传感器:能够感知外界的信息并能按照一定的规律将这些转换成可用的信号装置。简单地说就是一种将物理量或化学量转化成可利用的电信号器件) K( i2 U# w# W/ z
6 Q7 z) K4 q& a1 o; q5 m# h——>MCU相当于人的大脑,传感器就相当于人的各式各样的感觉器官。传感器将从自然界中获取到的信息传给“大脑”。然后大脑进行“分析、判断、决断”6 G/ R1 P* u. A9 S# R
1 [, ]+ [# T7 G/ ?9 e. ^/ m
——>自然界中物体只要它本身温度高于绝对零度又低于500度,就会成为红外线辐射源;许多物质对可见光是透明体,但对有些红外光是不透明体,反过来也一样。
4 M. S* t3 |- ?9 t& T
3 Y2 N) F- j- ?" Y! t1 i5 K——>红外传感器:红外传感器主要用来检测是否有障碍物,一般由两只红外管构成的,一只发射,一只接收
0 F6 L" j$ @. y4 Q, v7 X% X) ^/ t; r1 x$ g2 B3 C5 d& x$ X! {
——>灰度传感器:所谓灰度也可认为是亮度,简单的说就是色彩的深浅程度。根据反射光的强度,可以判断出物体的灰级程度
# ^+ u% k+ y! h6 U5 O9 l
& @) C6 `/ Q" |, l" H; x/ o2 d0 j5 B——>亮度传感器:亮度传感器可以是一个简单的光敏电阻,其原理与热敏电阻类似,阻值随着外界亮度的不同而发生变化,使用时也必须事先确定阻值和亮度的对应关系;只要这个传感器可以“看到”LED,就表示一切正常,一旦光被挡住,你就可以知道有人或别的物体从传感器和LED之间经过& z- E2 _- ?/ \" p9 n! H
. C* @! z# |0 N. J——>超声波传感器:按其工作原理可分为压电式、磁致伸缩式、电磁式等,以压电式最为常用
0 u- @7 W5 l% r; z7 {. u$ D7 s# V7 D
——>温度传感器:温度传感器的应用范围很广,最显著的例子就是环境监控或气象站,不过也可以拿来感应室内的温度,并对加热或制冷系统进行适当的控制,将其和数据记录仪相连,你就拥有一个温度记录器1 H, P( P! V0 `% k& y/ V" d
8 t. [* n0 x9 d. T
——>最常用的电阻温度传感器,电阻的阻值随着温度的变化而变化, ?4 S; R" S3 B, v$ d* G
% u. J6 c( D( w; l' |& }——>根据原理的不同主要分为半导体热电偶传感器、PN结温度传感器和集成温度传感器
* w+ B7 p- m2 k, ]0 C" G' f. w, G/ f
——>热电偶传感器主要原理是:两种不同的材质连在一起,对这个连接点进行加热,在它们的不加热部位就会出现电位差,而这种电位差与它们在不加热点的温度和它们的材质有关 b1 T7 u: d8 w; E
% \ H4 g7 F ?+ h——>PN结温度传感器利用半导体材料和器件的某些性能参数的温度依赖性,实现对温度的检测,控制和补偿的功能4 ~ e/ T/ y# i B
2 W! ?& X. c# }. P) `6 {& b4 g' L——>随着外界温度的不同,热敏电阻的阻值会发生相应变化,这时输入MCU的A/D转换通道的电压值也跟着发生变化;热敏电阻只能作为精度不高的温度测试工具6 W# |' y& r0 H
V. P; P2 `$ n9 h. J
——>温度传感器:最简单的温度传感器为湿敏电阻或者湿敏电阻; T5 |, @: j/ l% K; i
3 n) s9 \: w% s4 F9 z——>湿敏电阻的特点是在基片上覆盖一层用感湿材料制成的膜,当空气中的水蒸气吸附在感湿膜上时,元件的电阻率和电阻值都发生变化,利用这一特性即可测量温度。而湿敏电容一般是高分子薄膜电容制成的,当环境发生改变时,湿敏电容的介电常数发生变化,使其电容量也发生变化,其电容变化量与相对温度成正比* y% R# m0 L0 S- }
- A, ]; L; P0 @+ {, ~3 V3 ]
——>磁卡(Magnetic Card)是一种卡片状的磁性记录介质,与各种读卡器配合作用) F9 A) {" r* @9 Y+ w: f
' E w; A% `9 v2 I5 \/ y8 X% J——>以前在磁卡上应用的安全技术,如水印技术、全息技术、精密磁记录技术等,随着时间的推移其相对安全性已大为降低
7 c: P U- j0 q. ]7 D, J
& j: d; g2 {5 @) d" K* B A——>IC卡(芯片型智能卡的一种)则是通过芯片上写有的密钥参数进行识别的。IC卡在使用时,必须要通过与读写设备间特有的双向密钥认证。. T/ j& _0 r& Y' ^
! P& p6 U S& d9 D5 k——>把适合的存储卡当作一个可移动存储器,从而可以通过读卡器读写存储卡! z) ?* q; x# O4 ]$ t1 Z
5 Z7 E; y+ W' p
——>按所兼容存储卡的各类分可以分为CF卡读卡器、SM卡读卡吕、PCMICA卡读卡器以及记忆棒读写器等: E0 I- c. c2 ]: d
& `2 z% `% m: |! U# c0 C+ F
——>液晶显示器(Liquid Crystal Display,LCD)基本特点' y5 j$ F9 ?! c, l p5 z
+ ~( D" s+ W! h8 L( S- w/ v1.低电压微功耗,液晶显示器件为电池供电的电子设备的首先显示器件
+ l% x$ l* e+ Q2 E5 _- k c$ O1 A; ?0 y3 r
2.平板型结构# ^ h, O( o3 y, l
6 q V0 o5 p) k3 V& o- i
3.使用寿命长
3 x4 U, k% S. g; ]$ l; T* I q
. F! `9 [9 c( @! P- G, D3 \4.被动显式。对LCD来说,环境光线越强显示内容越清晰。人眼所感受的外部信息90%以上是外部物体对光的反射,而不是物体本身发光,所以被动显式更适合人的视觉习惯,更不容易引起疲劳。这在信息量大、显示密度高、观看时间长的场合显得更重要: w. l" k. {, q ~, K- c: `- n% {
* L! E ?) u6 P" s( }% n" D
5.显示信息量大且易于彩色化- U, X: E$ f" t
0 Y' l$ I7 _7 ]. w( }
6.无电磁辐射& W0 D: c* @0 b0 O. @% S
9 n7 c6 v* N9 J( _7 h——>从程序员角度来说,LCD的显示接口与编程是面向HD44780的,只在了解HD44780的编程结构即可进行LCD的显示编程% c7 C: S4 h- Z0 T* T
; h4 i, j" t8 ]1 U9 O; k2 ^7 u——>键盘是由若干个热键组成的开关矩阵,它是最简单的MCU的数字量输入设备。键盘的基本电路为接触开关1 b g' F) V) E5 z8 d6 |9 I7 Y
7 h, z6 T9 e2 s* X) p6 L* I& I
——>独立方式:独立方式是指将每个按键按一对一的方式直接拉到I/O输入线上;读键值时直接读I/O口,每一个键的状态通过读入键值来反映,所以也称这种方式为一维直读方式,按习惯称为独立式;这种方式查键实现简单,但占用I/O资源较多,一般在键的数量较少时候使用+ ^' L, a% t; u+ ]$ e0 a
1 {" _+ R. B. V- d* n8 g——>矩阵方式:矩阵方式是用n条I/O线组成行输入口,m条I/O线组成列输出口,在行列线的每一个交点上设置一个按键;这种方式占用I/O线较少,在实际应用系统中采用较多+ r. P4 H$ m; x" Z; a3 g
5 ]4 U4 ~9 Z. T# ]: T6 G" b——>设计键盘的时候,通常小于4个按键的应用,可以使用独立式接口。如果多于4个按键,为了减少处理器的I/O端口的占用,可以使用矩阵式键盘/ T8 s1 K) \( i9 P
4 M7 f: ?" ?3 A1 n9 f
——>键的识别:若键盘上闭合键的识别由专用硬件实现,称为编码键盘;而靠软件实现的称为未编码键盘) E& T) n& Q& H% c
8 Z2 ^2 v" x m. ]+ w——>识别是否有键被按下,主要有查询法、定时扫描法与中断法等。而要识别键盘上哪个键被按下主要有行扫描法与行反转法
2 d/ U6 A/ ~1 A) M, t! a# K. y4 a9 n6 Y' [+ q" [4 z' n" `
——>抖动问题:当手按下键时,会出现所按的键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况,当释放一个按键时也会出现类似情况,这就是抖动问题0 u1 o7 d3 I0 R% | B e
. D {% }4 f; w4 i% `1 i5 f5 u; |$ M——>在软件上,解决抖动的方法通常是延迟等待抖动的消失或多次识别判定
; Z/ G5 t' y0 v2 E0 k9 L$ J
( [" I9 h/ A$ z d" m" f5 L——>重键问题:所谓重键问题就是有两个及两个以上按键同时处于闭合状态的处理问题,在软件上,处理重键问题通常有连锁法与巡回法
% l) V) s4 f. ~8 V
+ f. w: D( e& o0 o——>当键盘上某一个闭合时,则该所对应的行线与列线短路
4 N* h% d1 |9 b/ T
6 |' r# V) U4 z3 T- B \% M——>把列线n1~n4拉到MCU的输入口,行线m1~m4拉到MCU的输出口, W, D* b4 v& d: n' J
( z* O/ o/ y; ]: f: B6 \
——>逐行逐列检查键盘状态的过程称为对键盘的一次扫描。
9 E% X- _- B& ]2 | e, T: T
! e7 ^9 S$ ^! B——>CPU可随时响应键输入请求。也可以采用中断方式,当键盘上有键闭合时,向CPU请求中断
X% f3 x2 a1 \. j: i$ G, n
V# A" ^1 K! r第五章 总线" G9 a7 F0 G# e) Z
! ]4 z" \4 I! q5 X' z6 h1 R- Q3 w——>异步传输标准接口。通常RS-232接口以9个接脚(DB-9)或是25个接脚(DB-25)的型态出现,一般个人计算机上会有两级RS-232接口,分别称为COM1和COM2;RS是英文“推荐标准”的缩写! B4 ]. K9 K) e3 A/ u" [
5 L3 U4 y: ~5 D& k( z. ? V——>RS232C传输的数据位的电压电平是相对于本地的地,它的高电平是负电压,而低电平是正电压9 J0 |- V1 W7 P. B
. h% N: H* |7 H( n+ y* M$ `* d6 l
——>目前几乎所有计算机上的串行口都是9芯接口
& M& N9 K W- x) {! p$ P/ D3 h- W' A1 l
——>精简的RS-232通信,通信时仅使用3根线:RxD(接收线)、TxD(发送线)和GND(地线), O9 x. m ?" u; ]+ o3 s
# U5 K* }4 r5 I. A% s2 V9 y7 z7 l——>若用RS-232C总线进行串行通信,则需外接电路实现电平转换3 q# }% z. }( a: N( v
5 ~) z' e$ X! l! i4 `
——>RS-485接口具有良好的抗噪声干扰性,长的传输距离和多站能力等优点使其成为首选的串行接口7 O2 y+ P' D% `
. @# {3 w! D; }% ]9 Z' K. Q G: Q g
——>USB是一种高速总线。设备能够自动向计算机主机表明身份,而且可以热切换
, ?9 p& ?6 X$ d# D7 _, A9 D) Y
7 S! O! a% C8 g0 Q5 B/ K, Z——>USB网络的基本拓扑结构是星型的,一个USB系统由一个或多个USB设备(外设)、一个或多个集线器(hub)和一个主机(控制计算机)组成。计算机主机有时又叫做主控制器,在一个USB网络中只能有一个主机;集线器用来扩展USB网络
- V5 Q( ^; i8 _0 g5 e
. d0 V. r; C# K* K/ n——>每个USB连接头内拥有4个引脚:其中2个用作传递差动数据,另2个为USB设备提供电源
$ \) H. q) K6 T7 t+ D
8 s" a6 g) k0 |——>LIN(Local Interconnect Network 局域互连网络)是一种低成本的总线网络。主要用于汽车中某些对通信速率需要不高的场合,能够解决汽车内因导线过多所带来的许多问题
' ]1 p8 B, z9 R" y" Q1 I% z
1 G, v' a0 _" t x——>RJ45接口(又称水晶头)常用于数据传输,共有八芯做成
( S, X0 P5 {* a5 C4 o
?) |% x. J9 w7 I——>做水晶头时,使水晶头的弹片朝外,入线口朝下,从左到右,遵循上面的线序,充分插入线,然后用驳线钳夹一下,就可以了
3 z5 z5 y( [* f
5 k7 K6 M. F( ?/ J6 j9 G, B——>成对扭绞的作用是尽可能减少电磁辐射与外部电磁干扰的影响0 L7 F; _- a. j9 l/ M
C4 R( k8 e* e
——>在数据的传输中,为了减少和抑制外界的干扰,发送和接收的数据均以差分方式传输,即每一对线互相扭在一起传输一路差分信号(这也是双绞线名称的由来)2 n! I0 q: k y; t9 }
7 q& i$ l+ i: p2 z1 d
——>所谓的差分信号:是指一根线以正电平方式传输,另外一根线以负电平方式传输同一信号,当线路中出现干扰信号时,其对两根线的影响是相同的,因而在接收端还原差分信号时就可以屏蔽掉该干扰信号
; s2 y* n6 s1 k( j( h: z
7 C& b/ {8 ]* _% ?+ c1 Z' I——>每对线进行双绞的目的是为了抑制干扰信号,提高传输质量;因而我们的制作双绞线的接头时,一定不要将传输差分信号的一对线分开,否则将大大影响网络的传输质量
7 ~- C; b( v0 @1 M- p8 k s2 @
* K% m" [) Y$ B& s- `) E9 R1 k第六章 规范
9 ^: \/ F. V/ R7 b: Q8 g% L& x2 y3 }2 b$ P
——>从本质上讲,在一个电路原理图上有两类对象:元件和网标(net)。网标表明元件之间是如何连接的。有元件名和元件类型;注意:在电路原理图在元件的元件类型可省,但元件名不能省略并且不可重名4 t5 J6 S/ \1 [% M( L& R2 m
9 j! f1 K0 k1 Z) m0 K. O% @. C% ]——>对同种类型的元件命名时常用的做法是冠以同前缀。例如,电阻的前缀为R,电容的前缀为C,电感的前缀为L,二极管的前缀为D,晶体管为O,连接器和跳线器为J,半导体的前缀通常为U,但也常用元件名来直接命名# D6 R' G% @/ M9 i9 C! A8 d4 N
! X y) C# P/ A1 o6 a
——>电源部分:在计算电源总功率时要考虑一定的余量,可取2倍;考虑使用电源模块还是外接电源的方式提供工作电源
u! R7 q, H0 r1 a: r# C: ~7 b) _) {
——>开关量输入:开关量输入一定要保证高低电压分明,理想情况下高电平就是电源电压,低电平就是地的电平1 f: Q1 ?/ z% Y
( O" t' X; c: g, `3 ]6 A& o' A0 ^——>开关量输出:开关量输出的基本原则是保证输出高电平接近电源电压,低电平接近在电平
% w! u3 j' W; H, z1 Z( w! D" S9 }& v9 q$ Q
——>绘制原理图的基本要求0 d& ^; X$ y$ M7 K' q9 @
1 u) t3 f4 Q: x( g" R( B* n% H$ D }
1.A4纸# [2 u# u R: T
$ S) t1 P+ e. D3 M% P) g
2.不使用网格,底色为白色
2 p: X" ^- V3 y2 p. d3 l+ t* ]5 z7 f7 W( C! b/ X0 A
3.每个模块独立画出,用虚线框框好,分清输入输出,左侧输入右侧输出
- F; I/ B% F- Z& f# ]
* W1 X N1 t; ]4.每个模块要标注模块名
& a$ y+ u/ j& m# _3 V( f/ N9 d
3 D% B7 j7 F( G4 x" ~5.MCU最小系统不能做任何更改,各系统中的相同MCU的最小系统保持一致! c3 g' y% ^; W3 c$ B7 N
. x( I5 z- n6 E4 k6.以MCU为中心扩展其它模块,形成分级结构1 G* y- L6 b* R& T4 c
; n8 {" t& v$ y: a: k4 L7.对外接口的设计,尽可能采用防止反插的接口0 F0 j. R- \: S
+ ?4 f: L: b1 {$ {. J6 T8.每个电路板都应该设计有电源指示灯,运行指示灯,故障指示灯等表达电路的运行状态
- U+ G- A' S% c* ~$ E7 I* U9 @" J: e! l6 }5 m" B$ j+ \
9.电路绘制完成后,不要忘记要填写版权框中的有关信息6 F, e/ ?+ w \+ }5 \
0 n- w4 T7 T, Z; q
——>PCB(Printed Circuit Board),中文名称为印刷线路板,简称印制板0 d5 |, Q# B* f k4 N- z _- x. J. M
- t* ]$ Z, }% H——>电路板最佳形状是矩形,长宽比为3:2或4:32 C( m0 e8 A$ j1 w' n& t
/ I6 y1 m7 v" U+ _* F
——>元件封装:是指实际的电子元器件或集成电路的外型尺寸、管脚的直径及管脚的距离等,它是使元件引脚和印刷电路板上的焊盘一致的保证0 [% d, o' y# c- {2 C2 d f
; W/ F6 t; g6 S/ F X2 @2 y1 [
——>元件放置的顺序:先放置与结构有紧密配合的固定位置的元器件;接着放置线路上的特殊元件和大的元器件;最后放置小器件
$ w! { j X# b! m9 w0 E; [0 a$ L; v# D
: ], m. m5 s }8 f9 k——>平放:当电路元件数量不多,而且电路板尺寸较大的情况下,一般是采用平放比较好1 L% {6 a3 m& j
9 I* }: N2 p9 O" S- b——>竖放:当电路元件较多时,而且电路板尺寸不大的情况下,一般采用竖放
& `1 p4 ?3 s8 X+ n8 V7 o( T% O2 {* R5 q. v' j1 f
——>集成电路座应该尽可能将定位槽放置方向一致' p4 v0 X/ r# ]- x0 D
: N0 F$ R, n( `: F$ l& r
6.4 面向硬件构件底层驱动程序要求
% J9 B( V, w6 m2 @3 [ e9 G, b# `# N& E8 a. Y" x
——>独立编程的实体就是硬件构件,硬件构件分为内部构件和外部构件,内部构件如系统初始化、定时器、Flash、串口等,外部构件如LED、形状、按钮、电机等
+ z- A( ~5 i( M$ F6 R O8 q% Y7 g4 k# @( G6 H/ l! k
——>对每个硬件构件编写独立的驱动程序:每个构件对应一个头文件和源文件,如果构件是外部构件,则要在头文件中用宏定义构件接在哪个脚上,头文件只声明供外部调用的功能函数;也就是说,其他人只要看头文件函数声明就知道如何使用此构件而无需去看源文件去阅读代码
) j% \, O0 H/ @: ]
4 v8 \) ]# _4 O* |( ?; B8 v——>一般函数的命名规则是:构件_功能3 P1 u& K5 ~$ B3 I! {; w5 z3 n4 y O
/ ]# I6 Q$ m; y! y9 f6 [( y9 D, {( Y——>如果一个函数只供构件功能函数内部调用,则此函数在源文件里面声明和实现,不出现在头文件里,并声明为static函数$ a! Y2 q/ r0 o. u
) {8 V3 o% |2 J8 s% ~0 J——>如果一个全局变量只供某模块使用,则可以把此全局变量定义为static
3 M7 i9 G9 _, G! j. l3 T+ u1 z4 R
% q0 }5 d& e7 V4 j" Z——>模块函数就实现此模块要实现的功能,模块内部之间不能相互调用;可以通过返回值告诉高端,让高端根据返回值来决定是否调用串口子程序
: s8 o2 E+ m& `+ C9 C! ^* W% `0 _( Q9 N% M6 u+ Q2 R
——>返回值问题:如果只返回一个基本类型的返回值,则用返回值返回此值也可;如果返回一个复杂类型的返回值,比如一个struct结构体,则用返回值返回的话要进行复制,开销很大,此时用传地址方式返回;如果返回的值很多,可以把这些值定义在一个struct里面,通过指针形式返回
2 p" K8 `: h% g" l0 P, M- R. V9 M3 L ~( A9 M
——>函数命名要合理,所有的函数代码编写方式有一个统一的风格,注意对齐! ]' c, s4 X5 l- D
1 J' v: D r; |) E6 Q1 p, K
——>尽量用效率高的方式编码,比如乘除可以用移位来实现
0 k5 c% U3 R- m# w; B# I4 x7 Q0 y, V6 J4 B( j9 ?
——>驱动程序一般在两个地方调用:一个是main函数,一个是中断处理函数
2 A R! x" ^# Y' ^2 N$ j, m: }1 P/ k) S/ w% p
——>变量分为全局变量、堆栈变量、函数内静态变量、文件内静态变量和寄存器变量
( |; h( ]+ B, p i* F; P# f! J. c& p ^0 q I @* P
——>寄存器变量是当某个变量频繁使用很多次的时候为了避免每次从内在中读它,而把它放在寄存器中来改变性能4 j- m* U# d0 y; i' d2 w- w
g6 A, b* X7 n
——>如果一个变量只有函数中使用,并且要一直存在,则命名为函数内静态变量,如果一个函数只在某个源文件中使用,此源文件各个函数通过此变量来通信,则此变量命名为文件内静态变量
$ L9 t: ^+ c0 I7 R
o0 w# R0 Z* t1 G0 w9 E, s——>全局变量前面加前缀g,静态变量前面加前缀s,寄存器变量前面加前缀r;不管使用何种命名写法,全局要统一一致,不能两种混合使用
. p. Q2 j' ?0 h! d4 b3 ?
& K8 h6 l# U0 c/ X/ K: ]% K. Z5 ^, e6.5 硬件驱动模块的测试要求! p, }- h( [& J; `- Q6 d
/ i6 g3 g5 W# H6 j. j( C' v
——>对于已经设计好的驱动模块,必须经过严格的测试后才能使用;同时,测试过程要以目录的形式保留下来,用于备案
8 v9 z4 w( m9 J$ z- Y5 N
% J5 p' z8 N% ^: M# {——>对于有可视结果的模块先行测试 x& ` T/ }+ b$ ]3 b% s I
7 b6 O3 J, E" F# ~5 E G
——>测试只能证明错误的存在,而不能证明错误的不存在
( v- i% N+ J. D0 M( G9 q6 E8 H2 q C2 I- h9 {3 S# M6 ?) }& \9 b
——>不能简单的直接在无可视执行结果的模块的测试中直接修改: U. g* N/ L$ }2 [6 j4 Z
' Y8 z4 u! ~$ b
——>用于测试驱动模块的工程中,必须要有一个用于记录测试信息的文本文件,记录的内容包括测试人,测试时间、测试结果及意见等相关信息3 u& r3 _3 M5 L, {6 @
& G' G" L- ?0 m5 E$ N——>通过把测试用例放到静态变量中,然后不断修改静态变量,实现了自动对测试用例的覆盖测试4 Z5 f: @2 b0 m
b. R8 z; H/ O4 j" C- u9 J1 B0 o——>可使用辅助测试工具测试
$ i/ s T, C+ t; N8 t" H( E6 D" w1 U i" a
|
|