诊断之美-概述

jdygrdzh 2010-08-29 11:00:38
做了几年系统诊断,发现这个概念在各大公司都有,也有很多人在做这方面的工作,但是很少有人能够把它进行系统的描述,更没人进行详细分析。那就让我来做这件事情吧。

数字系统诊断(Digital System Diagnostics)被广泛应用于各大系统生产商和制造商。PC机上的BIOS就可以看作一个简单的诊断系统。BIOS在上电后,会对缓存,内存,芯片组以及多种外设进行检测。在复杂的系统,比如电信级路由器上,诊断系统更是必不可少。生产商会在每台出厂的路由器上花上数小时乃至数天运行诊断系统,直到没有任何问题才能交货。否则,一旦在路由器工作期间发生硬件故障,将会引起非常严重的后果。

那么什么是数字系统诊断?一个比较典型的定义是:利用软件对硬件系统进行逻辑层面的检测,以发现硬件的缺陷。这包含了四个方面的深层含义。第一,它是针对数字电路系统的。模拟电路的诊断可以通过模数和数模转换来间接实现。第二,诊断系统通常是用软件来实现的。这就要求系统中需要软件或者固件的运行环境。第三,数字系统诊断的目的是发现硬件的缺陷,而不是软件或者操作系统本身。我们需要提高软件的可靠性,以及侦错的覆盖率。第四,它只能发现逻辑上的错误。也就是说,只有当一个错误能够被硬件用零或者一反映出来的时候,诊断系统才能捕获它。有时候我们需要借助示波器或者万用表来测量模拟信号才能确定最终的错误根源。

那么我们什么时候需要应用数字诊断系统呢?这需要从硬件系统的构成来分析。一个大型系统通常是由各类芯片,主板,电源,风扇以及底架构成的。其中涉及到芯片设计,主板设计,机械设计,热力设计以及系统设计。芯片在设计阶段就需要用计算机进行模拟验证。在被制造出来以后,还可以利用专用设备进行管脚测试。此外,我们必须在芯片被镶嵌到主板上后用软件进行功能性测试。对于主板来说,在设计阶段就会有信号完整性分析。在主板制造完成后,我们也需要运行软件来对上面的各个模块进行测试。至于机械和热力学设计,他们同样需要在设计完成后不停地运行软件来验证。最后,在整个系统完成后,需要有一个诊断软件来进行各个模块和各种功能的测试。如果发现问题,那么就需要进行重新设计或者返工,直至不能发现任何缺陷。

综上所述,我们可以得到诊断系统的应用范围:1.系统原型设计阶段。2.批量制造阶段。3.售后维护阶段。这三个阶段对诊断系统的要求也是不一样的。在设计阶段,硬件工程师希望在硬件原型出厂后立刻就能运行诊断系统,以帮助他们更容易的发现设计错误。因此,诊断系统的快速开发以及诊断的完整性,对错误定位的精确性就非常重要。在批量制造阶段,制造商希望能够尽快的运行完诊断系统,以减少出厂时间。并且,他们也希望能够得到精确的错误信息,以便替换掉有问题的芯片或者模块,而不是扔掉整个硬件系统。在售后维护阶段,售后工程师希望能够进行非常全面的诊断,并且诊断系统最好能够运行在现场的操作系统上,而不是和原系统冲突。这就需要诊断系统具有多线程,多任务功能,并且要和主流操作系统兼容。

针对以上的需求,我们可以把诊断的工作分为五层:

1.芯片诊断。这一层主要测试芯片的是不是能被访问以及一些特有功能。

2.连接诊断。这一层主要测试芯片间的连接是不是完好。

3.数据通路诊断。这一层会通过处理器产生一些数据流,看他能不能在各个模块间顺利流动。

4.大流量数据诊断。这一层会通过对系统注入大量数据来验证系统在满负荷条件下的是不是达到了设计要求。

5.压力诊断。把前面提到的四层测试绑在一起,配合上温度,电压,湿度等环境因素,验证系统的可靠性和稳定性。

那么我们需要在怎样的构架下来开发诊断系统呢?通常有两种情况。

1. 在类似boot loader的软件框架下开发。通常开发语言是C。这类系统的优点是简单,实用。它们甚至不需要操作系统的支持,只需要在编译时集成C的基本库就行。这类系统一般是单进程的,系统耦合性很低,一旦发现缺陷,基本可以排除操作系统本身的错误。他的缺点也很明显,对于前文所述的现场工程师所要求的复杂性和兼容性很难做到。还有,这类系统需要构架设计者有较强的大型系统软件设计能力,否则一旦诊断系统需要支持的硬件系列很多,开发者容易陷入代码的海洋。

2.第二类诊断系统会基于VxWorks, Windows或者linux系统。通常开发语言是C或者C++。优点是代码构架清晰,可以利用操作系统提供的驱动构架以及丰富的库函数。在利用了多线程机制后,可以很容易就写出并发测试,从而模拟系统在运行业务时的情况。缺点就是耦合性高,不容易排除软件错误。开发者需要对硬件和操作系统有相当程度的了解才能避免这类情况。

在以后的文章中,我会详细讲述以下几个方面:

1. 诊断的五层任务具体需要做些什么,诊断开发是怎样一个流程。在大型系统上,硬件千变万化,但是万变不离其宗。在抓住了一些必要的流程和算法后,诊断系统的任务会变的很有条理。

2.诊断系统的构架和平台。有了合适的构架和平台,诊断系统就能更好的发现硬件缺陷。

3.集成开发环境。根据我接触下来,虽然各大系统厂商都有自己的诊断系统,但是其软件构架各不一样,开发流程也不统一。往往是一个高手写完框架,后来者就在这个基础上做后续开发。这样的缺点是新人上手不快,而且在也不利于做诊断开发的工程师之间交流。最好是能有个类似Visual C++的图形化的开发工具作为开发环境。对大厂商来说,这个工具也许不是那么重要。因为他们很多硬件很多都是专有的,即使有这样的工具,也需要做大量的开发。不过我想这个工具至少能减少其诊断系统的开发时间,减少软件本身引入的错误。对于小公司来说,这个工具如果提供了很多标准驱动和标准算法,那么将会大大减少他们的开发时间。此外,专业的诊断流程会提高其硬件的质量。
...全文
59 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdygrdzh 2010-08-30
  • 打赏
  • 举报
回复
没有同行么?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧