嵌入式系統的掉電保護設計
通過(guò)軟件測算,電容放電可供最小系統工作時(shí)間在0.5~4.5S之間。這種測算方法很簡(jiǎn)單.編寫(xiě)一個(gè)掉電中斷服務(wù)子程序,這個(gè)程序只是不斷進(jìn)行時(shí)間刷新操作。同樣,可以通過(guò)軟件測定在這段時(shí)間里向Flash擦寫(xiě)2~3MB??梢?jiàn),在采用這種硬件體制的情況下,系統掉電保護能夠得到可靠的保證。
3 掉電信號處理軟件方法的實(shí)現
在μClinux系統下,掉電信號的捕捉有兩種方式可以進(jìn)行。一種是運用系統調用,即采用void(*signal(intslg,void(*func)(int)))(int)。這個(gè)函數可以為特定的中斷信號安排制訂的執行函數,用參數func傳遞。在μCllnux中,共有31個(gè)系統中斷信號,其中掉電信號為SIGPWR。假設掉電中斷服務(wù)處理程序為void interrupt-service(int),則中斷服務(wù)與信號關(guān)聯(lián)的方式為:signal(SIGPWR,interrupt_service)。這種方式充分利用系統調用,實(shí)現簡(jiǎn)單。在掉電保護方案設計初期也是采用這種機制。但事實(shí)證明這種機制并不可靠,其原因是Linux內核產(chǎn)生和管理信號的機制并不完善,有可能存在信號丟失。查閱有關(guān)Unix或L1nux的相關(guān)資料,可以發(fā)現這種狀況也普遍存在于某些其他版本的Linux和Unix中。
另一種方式是采用守候進(jìn)程的方式,開(kāi)通一個(gè)進(jìn)程,此進(jìn)程專(zhuān)門(mén)等待中斷信號。主程序根據數據操作對象的不同,將自己的流程方案劃分成若干原子操作,所謂原子操作即劃定的程序塊要么完全執行,要么不執行。每個(gè)操作對應惟一狀態(tài)標志。在每個(gè)原子操作前,主進(jìn)程都將會(huì )通過(guò)管道通信的方式閱讀中斷信號。如果中斷信號產(chǎn)生,主進(jìn)程首先保存狀態(tài)標志,然后將相關(guān)數據寫(xiě)往Flash后退出,電源恢復后,主進(jìn)程首先根據標志字確定系統恢復方案。圖3用流程圖的方式實(shí)現這一過(guò)程。
下面是實(shí)現這一過(guò)程的程序片斷:
結語(yǔ)
基于該方案設計的稅控收款機在實(shí)際運行過(guò)程中,掉電保護功能完備。此掉電保護設計方法應用對象基于A(yíng)RM和μClinux構建的嵌入式系統,在32位嵌入式系統開(kāi)學(xué)中具有典玨型代表意義。因此在嵌人式系統設計中具有推廣價(jià)值。
評論