Linux下有许多高质量的代码,如Linux Kernel, Apache Http Server. 如果能够读懂这些代码,了解其设计思路,对我们的软件学习无疑是获益良多的。我想先拿个一般大小的成熟代码试试看。
呵呵, 本人由于工作之余,需要了解 一个被称为 epics 的软件 链接如下 http://www.aps.anl.gov/epics/
EPICS 是 Experimental Physics and Industrial Control System的缩写,是实验物理和工业控制系统的分布式控制软件。到目前已经是3.14版了,目前4.0版在开发中。我个人感觉EPICS代码简洁干净,而且最为重要的一点,它已经将分布式数据库的完美的实现了。
EPICS的目的是在一个互通的局域网下实现分布式控制系统的通信和监测功能。在一个系统中,我们假设有m台设备,这些设备完成不同的任务,它们之间需要共享它们控制的状态变量,以此来达到总体任务的控制目标。因此,各个控制节点通过内存数据库来存储对应的状态变量。
为了实现数据的通信,epics特地开发了一个网络协议,称为 CA (Channel Access), 各个控制节点可以把自身的状态封装成PV (Process Variable), 这样既可以通过网络协议CA,为其他节点知晓,达到通信的目的。
因此,在我看来EPICS 主要由 DB, Protocal,和 对应的Device Driver,再加上一些其他的辅助工具完成。
呵呵,今天,就到这里。
EPICS 源代码 代码组织如下
src
|-- RTEMS
| `-- base
|-- as
|-- bpt
|-- ca
|-- cap5
|-- cas
| |-- build
| |-- example
| | `-- directoryService
| |-- generic
| | |-- mt
| | `-- st
| |-- io
| | `-- bsdSocket
| |-- os
| | `-- vms
| `-- test
|-- catools
|-- db
| `-- test
|-- dbStatic
|-- dbtools
|-- dev
| |-- softDev
| `-- testDev
|-- excas
|-- gdd
|-- libCom
| |-- bucketLib
| |-- calc
| |-- cppStd
| |-- cvtFast
| |-- cxxTemplates
| | `-- test
| |-- dbmf
| |-- ellLib
| |-- env
| |-- error
| |-- fdmgr
| |-- freeList
| |-- gpHash
| |-- iocsh
| |-- logClient
| |-- macLib
| |-- misc
| |-- osi
| | `-- os
| | |-- Darwin
| | |-- Linux
| | |-- RTEMS
| | |-- VMS
| | |-- WIN32
| | |-- cygwin32
| | |-- default
| | |-- freebsd
| | |-- hpux
| | |-- osf
| | |-- posix
| | |-- sgi
| | |-- solaris
| | |-- sun4
| | `-- vxWorks
| |-- ring
| |-- taskwd
| |-- test
| |-- timer
| `-- tsDefs
|-- makeBaseApp
| `-- top
| |-- caClientApp
| |-- caServerApp
| |-- configure
| |-- exampleApp
| | |-- Db
| | `-- src
| |-- exampleBoot
| | `-- ioc
| |-- iocApp
| | |-- Db
| | `-- src
| |-- iocBoot
| | `-- ioc
| `-- supportApp
| |-- Db
| `-- src
|-- makeBaseExt
| `-- top
| |-- configure
| | `-- os
| |-- exampleExt
| |-- simpleExt
| `-- src
|-- misc
|-- rec
|-- registry
|-- rsrv
|-- softIoc
|-- tools
| `-- EPICS
|-- toolsComm
| |-- antelope
| `-- flex
|-- util
`-- vxWorks