Philips PM6303A 掉电信号处理软件方法的实现
在Philips PM6303A系统下,掉电信号的捕捉有两种方式可以进行。一种是运用系统调用,即采用 void(*signal(intslg,void(*func)(int)))(int)。这个函数可以为特定的中断信号安排制订的执行函数,用参数 func传递。在μCllnux中,共有31个系统中断信号,其中掉电信号为SIGPWR.假设掉电中断服务处理程序为void interrupt-service(int),则中断服务与信号关联的方式为:signal(SIGPWR,interrupt_service)。这种方式充分利用系统调用,实现简单。在掉电保护方案设计初期也是采用这种机制。但事实证明这种机制并不可靠,其原因是Linux内核产生和管理信号的机制并不完善,有可能存在信号丢失。查阅有关Unix或L1nux的相关资料,可以发现这种状况也普遍存在于某些其他版本的Linux和Unix中。
Philips PM6303A另一种方式是采用守候进程的方式,开通一个进程,此进程专门等待中断信号。主程序根据数据操作对象的不同,将自己的流程方案划分成若干原子操作,所谓原子操作即划定的程序块要么*执行,要么不执行。每个操作对应惟一状态标志。在每个原子操作前,主进程都将会通过管道通信的方式阅读中断信号。如果中断信号产生,主进程首先保存状态标志,然后将相关数据写往Flash后退出,电源恢复后,主进程首先根据标志字确定系统恢复方案。图3用流程图的方式实现这一过程。
下面是实现Philips PM6303A这一过程的程序片断:
GE Fanuc VMIC VMIVME-7486 PC/AT VMEbus CPU ___H156
GE FANUC VMIVME-1182 VMIVME 1182 VMIC VMEBUS VMIVME1182
GE Fanuc VMIC-4120 VMIVME Analog Out 16 Channel VMEbus
VMIC VMIVME5588 VMIVME DMA High-Speed Reflective MVME
VMIC / GE Fanuc VMIVME-REPEAT L-485 Long-Line VMEbus
VMIC / GE Fanuc VMIVME-2232-100 32-Channel Relay Output
VMIC VMIVME-3115 12-Bit High-Throughput Analog Input
VMIC VMIVME-7589 VMIVME7589 VMEbus VME MAINFRAME
VMIC VMIVME-2232 32-CH RELAY OUTPUT VME BOARD
VMIC VMIVME-2511 VMEbus PROCESSOR MAINFRAME BOARD
VMIC VMIVME-4132-011 USPP VMIVME4132011
VMIC GE Fanuc VMIVME-3114 VMIVME3114 Analog I/O Board
VMIC GE Fanuc VMIVME-3115 VMIVME3115 12-Bit VME Module