在嵌入式体系规划进程中,体系的掉电维护越来越受到重视。本文介绍的办法是在用ARM7系列芯片S3C4510B和μClinux构建的嵌入式渠道上完结的。整个掉电维护完结的基本思路是:发生掉电信号,捕捉掉电信号和处理掉电信号。要点介绍这个进程的详细完结。
体系防掉电规划的意图是:选用一种机制,使得体系在意外失掉供电的情况下,能够确保体系运转情况确实定性以及记载数据的完整性;当体系供电康复后,现场数据能够及时康复,防止运用体系发生紊乱。咱们知道,在嵌入式体系规划与开发中越来越多地运用嵌入式操作体系。因为操作体系的引进,数据的读写往往是经过文件的办法完结,而不是直接对存储单元地址操作。用文件读写办法操作数据,在程序的运转进程中往往将数据暂存在易失性的存储空间,如SDRAM,一旦体系意外失电,这些数据往往被丢掉。因而,当体系意外失电时有必要采纳必定的办法进行体系的掉电维护,以防止体系发生紊乱。总的说来,防掉电程序的首要思路便是:发生掉电信号,捕捉掉电信号,处理掉电信号和数据以及现场情况的康复。
假如不引进操作体系,直接对存储单元进行数据操作,每次操作的数据量小,能够运用中止服务的办法进行掉电维护;而用文件的办法进行数据操作,数据量一般比较大,因而依据中止服务的办法进行掉电维护现已不再牢靠。本文研讨的目标是依据操作体系的较为杂乱的嵌入式体系规划进程中的掉电维护。
1 掉电维护计划完结的体系根底
掉电维护是在由ARM体系的硬件渠道和μClinux嵌入式操作体系的根底上完结的。
ARM7系列的微处理器支撑八种类型的中止处理。外部中止请求会在外部中止引脚有用(一般是低电平),而且程序情况寄存器相关位(即CPSR的I操控位)设置为答应时得到处理器呼应。呼应后处理器进入中止作业形式,PC被装人中止向量0x00000018。在这个地址单元寄存中止服务程序人口地址,中止服务程序就能够被履行。在掉电维护计划中,中止服务程序很简略,便是将表明掉电的全局变量置位即可。这样能够缩短程序履行时刻。
Flash存储器是一种可在体系(in system)进行电擦写,电后信息不丢掉的存储器。它具有低功耗、大容量、可整片或分扇区在体系编程(烧写)、擦除等特色,而且可由内部嵌入的算法完结对芯片的操作,因而在各种嵌入式体系中得到了广泛的运用。作为一种非易失性存储器。Flash在体系中一般用于寄存程序代码、常量表以及一些在体系掉电后需求保存的用户数据等。常用的Flash为8位或16位的数据宽度,编程电压为单3.3V。与Flash存储器相比较,SDRAM不具有掉电坚持数据的特性,但其存取速度大大高于Flash存储器,且具有读/写的特点,因而,SDRAM在体系中首要用作程序的运转空间、数据及仓库区。当体系发动时,CPU首要从复位地址0x0处读取发动代码,在完结体系的初始化后,程序代码一般应调入SDRAM中运转,以进步体系的运转速度,一起,体系及用户仓库、运转数据也都放在SDRAM中。SDRAM的存储单元能够理解为一个电容,总是倾向于放电,为防止数据丢掉,有必要守时改写(充电)。因而,要在体系中运用SDRAM,就要求微处理器具有改写操控逻辑,或在体系中别的参加改写操控逻辑电路,特别的情况是在体系失电后,要采纳一种有用的机制确保将sDRAM中的数据写入F1ash中。
2 依据掉电维护计划的硬件规划
图1是一种典型的嵌入式体系硬件规划计划。体系的微处理器选用S3c4510B,是依据ARM7体系结构的。SDRAM是一种易失性存储器作为程序的运转空间,类似于PC机的内存;Flash作为程序存储空间对错易失性的。程序运转进程中的数据往往缓存在sDRAM中,在体系失电时有必要写往Flash。
在体系中,需求运用5V和3.3V的直流稳压电源。其间,S3C4510B及部分外围器材需3.3V电源,别的部分器材需5V电源。为简化体系电源电路的规划,要求整个体系的输入电压为高质量的5V的直流稳压电源。有别于一般的电源回路规划,本体系的电源回路规划进程中增加了有关掉电维护的规划。包括这个规划的体系电源电路如图2所示。
这个电源回路除了能够供给5v和3.3v的电源以外,还为体系掉电维护供给了延时及预警功用,经过软件的合作能够完结体系的掉电维护机制。正常情况下,由供电回路1给整个体系供电。当体系因为意外原因掉电时,因为输入的比较电压下降,这样MAX809 模块输出电压发生翻转为体系供给掉电中止预警信号,中止请求经过外部中止引脚XREQ0发生;一起供电回路2开端启用。经过大电容C3、c4放电,持续为体系供给一段供电电压,支撑掉电中止服务程序完结。供电回路2只给最小体系供电,并不给耗电量大的外围部件供电。这样,给最小体系的供电时刻满足长,能够完结敏感数据的维护操作。
经过软件测算,%&&&&&%放电可供最小体系作业时刻在0.5~4.5S之间。这种测算办法很简略.编写一个掉电中止服务子程序,这个程序仅仅不断进行时刻改写操作。相同,能够经过软件测定在这段时刻里向Flash擦写2~3MB。可见,在选用这种硬件体系的情况下,体系掉电维护能够得到牢靠确实保。
3 掉电信号处理软件办法的完结
在μClinux体系下,掉电信号的捕捉有两种办法能够进行。一种是运用体系调用,即选用void(*signal(intslg,void(*func)(int)))(int)。这个函数能够为特定的中止信号组织制定的履行函数,用参数func传递。在μCllnux中,共有31个体系中止信号,其间掉电信号为SIGPWR。假定掉电中止服务处理程序为void interrupt-service(int),则中止服务与信号相关的办法为:signal(SIGPWR,interrupt_service)。这种办法充分运用体系调用,完结简略。在掉电维护计划规划初期也是选用这种机制。但事实证明这种机制并不牢靠,其原因是Linux内核发生和办理信号的机制并不完善,有或许存在信号丢掉。查阅有关Unix或L1nux的相关材料,能够发现这种情况也遍及存在于某些其他版别的Linux和Unix中。
另一种办法是选用守候进程的办法,注册一个进程,此进程专门等候中止信号。主程序依据数据操作目标的不同,将自己的流程计划划分红若干原子操作,所谓原子操作即划定的程序块要么彻底履行,要么不履行。每个操作对应专一情况标志。在每个原子操作前,主进程都将会经过管道通讯的办法阅览中止信号。假如中止信号发生,主进程首要保存情况标志,然后将相关数据写往Flash后退出,电源康复后,主进程首要依据标志字确认体系康复计划。图3用流程图的办法完结这一进程。
下面是完结这一进程的程序片断:
结语
依据该计划规划的税控收款机在实践运转进程中,掉电维护功用齐备。此掉电维护规划办法运用目标依据ARM和μClinux构建的嵌入式体系,在32位嵌入式体系开学中具有典珏型代表含义。因而在嵌人式体系规划中具有推行价值。