一種提高μC/OS-II操作系統安全性與穩定性的方法
3.3 修改OS_CPU_A.ASM文件中的函數
在OS_CPU_A.ASM文件中,只需修改函數PendSV_Handler(PendSV服務(wù)例程),任務(wù)切換是由它來(lái)完成的。
PendSV服務(wù)例程的流程如圖2所示。本文引用地址:http://dyxdggzs.com/article/202468.htm
3.4 系統函數的使用
系統函數都是在“特權級+MSP”狀態(tài)下執行的,因此,在用戶(hù)任務(wù)調用系統函數前,應先切換到“特權級+MSP”狀態(tài),系統函數執行完畢后再切換到“用戶(hù)級+PSP”狀態(tài)。具體代碼如下。
在特權級下通過(guò)置位CONTRO[0]來(lái)進(jìn)入用戶(hù)級,而用戶(hù)級下是不能直接修改CONTROL[0]回到特權級的,必須通過(guò)一個(gè)異常,在異常例程中修改CONTROL[0],才能在返回到線(xiàn)程模式后拿到特權級。通常的方法是使用軟中斷SVC。
因此,從“用戶(hù)級+PSP”狀態(tài)下切換到“特權級+MSP”狀態(tài)的實(shí)現方法是:在用戶(hù)級下執行SVC指令,在SVC異常服務(wù)函數中清零CONTROL[0]位,再返回到線(xiàn)程模式下清零CONTROL[1]位切換到MSP;而從“特權級+MSP”狀態(tài)下切換到“用戶(hù)級+PSP”狀態(tài)下,只需置位CONTROL[0]與CONTROL[1]。
4 系統測試
在基于第二代Correx-M3內核的LPC1786處理器的語(yǔ)音識別系統上,對修改后的操作系統進(jìn)行測試。具體測試過(guò)程為:首先創(chuàng )建3個(gè)信號量0、1、2(計數器初始值都為0);ADC按10 kHz的頻率對語(yǔ)音信號采樣,采樣200點(diǎn)(也就是一幀數據)后發(fā)送信號量0(發(fā)生中斷級切換);任務(wù)0(優(yōu)先級0)請求信號量0,并對語(yǔ)音信號預處理并檢測語(yǔ)音信號的起始端與結束端;當任務(wù)0檢測到起始端后,每處理完一幀數據都發(fā)送信號量1(產(chǎn)生任務(wù)級切換),直到檢測到結束端,任務(wù)1(優(yōu)先級1)請求道信號量1后對真正的語(yǔ)言信號進(jìn)行特征提??;當任務(wù)0檢測到語(yǔ)音信號結束端時(shí)發(fā)送信號量2,任務(wù)2(優(yōu)先級2)獲得信號量2后利用DWT算法對語(yǔ)音信號進(jìn)行識別并顯示到LCD屏上。
測試結果表明,改進(jìn)后的系統抗干擾能力、穩定性和安全性均大大增強,并且系統連續穩定地運行很長(cháng)時(shí)間,沒(méi)有出現任何問(wèn)題,可見(jiàn)系統移植成功。
結語(yǔ)
改進(jìn)后的系統,內存的使用沒(méi)有增加,只是增加了很小的系統開(kāi)銷(xiāo);但配合MPU使用,使系統的安全性和穩定性得到了很大的提高。該方法可廣泛應用于對系統安全性與穩定性要求比較高的場(chǎng)合。
評論