新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一種提高uc/os-ii操作系統安全性與穩定性的方法

        一種提高uc/os-ii操作系統安全性與穩定性的方法

        作者: 時間:2013-11-04 來源:網絡 收藏

        3.2.2 修改任務創建函數

        在任務創建函數的參數中加入mode參數,形式如下:
        一種提高uc/os-ii操作系統安全性與穩定性的方法

        對OSTaskCreateExt()函數做的修改同上。

        3.2.3 修改堆棧初始函數

        在堆棧初始化時,把mode值存儲在MSP底部,以便任務第一次運行時進入相應的運行狀態(特權級還是用戶級,使用MSP還是PSP)。系統任務的mode是OS_Mode_PRIVILEGE | OS_Mode_MSP,任務創建時PSP為0;而用戶任務為OS_Mode_USER | OS_Mode_PSP。

        堆棧初始函數的參數中加入mode參數,形式如下:
        一種提高uc/os-ii操作系統安全性與穩定性的方法

        OS_TCBInit()函數把堆棧初始化得到的堆棧指針存入OS_TCB中。

        3.3 修改OS_CPU_A.ASM文件中的函數

        在OS_CPU_A.ASM文件中,只需修改函數PendSV_Handler(PendSV服務例程),任務切換是由它來完成的。
        PendSV服務例程的流程如圖2所示。
        一種提高uc/os-ii操作系統安全性與穩定性的方法


        3.4 系統函數的使用

        系統函數都是在“特權級+MSP”狀態下執行的,因此,在用戶任務調用系統函數前,應先切換到“特權級+MSP”狀態,系統函數執行完畢后再切換到“用戶級+PSP”狀態。具體代碼如下。

        一種提高uc/os-ii操作系統安全性與穩定性的方法
        一種提高uc/os-ii操作系統安全性與穩定性的方法

        在特權級下通過置位CONTRO[0]來進入用戶級,而用戶級下是不能直接修改CONTROL[0]回到特權級的,必須通過一個異常,在異常例程中修改CONTROL[0],才能在返回到線程模式后拿到特權級。通常的方法是使用軟中斷SVC。

        因此,從“用戶級+PSP”狀態下切換到“特權級+MSP”狀態的實現方法是:在用戶級下執行SVC指令,在SVC異常服務函數中清零CONTROL[0]位,再返回到線程模式下清零CONTROL[1]位切換到MSP;而從“特權級+MSP”狀態下切換到“用戶級+PSP”狀態下,只需置位CONTROL[0]與CONTROL[1]。

        4 系統測試

        在基于第二代Correx-M3內核的處理器的語音識別系統上,對修改后的操作系統進行測試。具體測試過程為:首先創建3個信號量0、1、2(計數器初始值都為0);ADC按10 kHz的頻率對語音信號采樣,采樣200點(也就是一幀數據)后發送信號量0(發生中斷級切換);任務0(優先級0)請求信號量0,并對語音信號預處理并檢測語音信號的起始端與結束端;當任務0檢測到起始端后,每處理完一幀數據都發送信號量1(產生任務級切換),直到檢測到結束端,任務1(優先級1)請求道信號量1后對真正的語言信號進行特征提取;當任務0檢測到語音信號結束端時發送信號量2,任務2(優先級2)獲得信號量2后利用DWT算法對語音信號進行識別并顯示到LCD屏上。
        測試結果表明,改進后的系統抗干擾能力、穩定性和安全性均大大增強,并且系統連續穩定地運行很長時間,沒有出現任何問題,可見系統移植成功。

        結語

        改進后的系統,內存的使用沒有增加,只是增加了很小的系統開銷;但配合MPU使用,使系統的安全性和穩定性得到了很大的提高。該方法可廣泛應用于對系統安全性與穩定性要求比較高的場合。


        上一頁 1 2 下一頁

        關鍵詞: ucos-ii LPC1786 Cortex-M3

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 获嘉县| 天津市| 西林县| 沿河| 镇巴县| 栾川县| 盱眙县| 东至县| 高要市| 牙克石市| 化州市| 新邵县| 雷波县| 富民县| 东安县| 上杭县| 肃宁县| 东港市| 班戈县| 桂平市| 原平市| 聂拉木县| 定日县| 宁阳县| 庄浪县| 凤山县| 呼伦贝尔市| 库伦旗| 南澳县| 西乌| 长岛县| 丽江市| 福州市| 张家界市| 喀喇沁旗| 萍乡市| 来宾市| 富宁县| 璧山县| 金阳县| 牟定县|