1. 程式人生 > >嵌入式實時作業系統μC/OS-Ⅱ 在DSP晶片上的移植與測試

嵌入式實時作業系統μC/OS-Ⅱ 在DSP晶片上的移植與測試

【摘要】為了降低DSP 系統軟體的開發難度,保證系統的實時性,縮短開發週期,將嵌入式實時作業系統μC/OS-Ⅱ移植到DSP 晶片中是目前比較常用的一種方法。本文介紹了嵌入式實時作業系統μC/OS-Ⅱ的特點,並研究分析了μC/OS-Ⅱ作業系統在目前比較流行的DSP晶片TMS320C6713上的移植方法,解決了移植μC/OS-Ⅱ過程中的重點和難點。最後對移植後的作業系統進行測試,最終測試結果表明:該作業系統是一個穩定、可靠的實時嵌入式作業系統。

【關鍵詞】μC/OS-Ⅱ;嵌入式實時作業系統;TMS320C6713;DSP;移植

1 μC/OS-Ⅱ作業系統介紹

μC/OS-Ⅱ是一種可以免費使用,原始碼公開的嵌入式作業系統,具有結構小巧、可裁剪、可固化、可移植性強等優點,同時擁有可剝奪的核心。主要有以下特點:穩定性和安全效能好,實時多工,可裁剪可固化,且具有較強的移植性。作為一種軟體平臺,它提供了包括任務管理和排程、時間管理、記憶體管理、訊息郵箱以及任務間的通訊和同步等系統服務功能。

μC/OS-Ⅱ核心的主要功能是為任務提供系統服務,根據任務的當前狀態,及時執行優先順序最高的處於就緒態的任務,採用佔先式排程機制,保證系統的實時性。μC/OS-Ⅱ軟體結構如圖1所示。


2 μC/OS-Ⅱ作業系統在DSP上移植的意義

隨著科學技術的不斷髮展,我們已經進入了數字化的時代,而數字化時代的核心引擎就是數字訊號處理器(Digital SignalProcessor,DSP)。從20世紀60年代數字訊號處理理論誕生以來,數字訊號處理器取得了迅猛的發展,DSP已經廣泛的應用到社會生活的各個領域,正在改變著我們的生活方式。但是,隨著社會的發展,大規模軟體越來越成為當前軟體行業的主流。伴隨著大規模軟體的普及,系統軟體的複雜度也越來越高,系統軟體對實時性的要求也在不斷增加。如何在大規模軟體開發中保持系統良好的實時性,已經成為DSP系統開發的重點和難點,也是制約著DSP系統進一步發展的瓶頸。因嵌入式實時作業系統μC/OS-Ⅱ在DSP晶片上的移植與測試此,在很多實際應用中,我們考慮使用μC/OS-Ⅱ實時核心來管理系統軟體,可以以較小的代價,更大幅度地降低DSP 系統軟體的開發難度,同時兼顧系統的實時性和可靠性,縮短軟體開發週期,具有很強的現實意義。

DSP晶片TMS320C6713由於其出色的運算能力、高效的指令集、智慧外設、大容量的片記憶體儲器和大範圍的定址能力等,得到了越來越廣泛的應用。但是目前在6713晶片上進行的開發大都是在沒有作業系統的情況下進行的,效率較低。而且目前沒有針對μC/OS-Ⅱ作業系統在DSP6713 上進行移植的研究。因此,本文就是以此為目的,對在TMS320C6713DSP 晶片上移植μC/OS-Ⅱ作業系統進行研究,並進行了測試驗證。

3 μC/OS-Ⅱ在TMS320C6713上的移植

3.1 μC/OS-II 的移植條件

μC/OS-Ⅱ的大部分程式碼都是用C語言編寫的,只有少量與處理器相關的程式碼使用匯編編寫的,因此具有很強的可移植性。目前流行的多種處理器上都可以移植μC/OS-Ⅱ作業系統,要移植μC/OS-Ⅱ,目標處理器必須滿足以下要求:1)處理器的C編譯器能產生可重用程式碼;2)用C語言就可以開啟和關閉中斷;3)處理器支援中斷,並能產生定時中斷;4)處理器支援一定數量的資料儲存硬體堆疊;5)處理器有將堆疊指標和暫存器內容讀出、並存儲到堆疊或記憶體中的指令。

DSP 晶片TMS320C6713的特點及其軟體開發環境CCS都能滿足μC/OS-Ⅱ作業系統的移植要求,所以可以在該DSP晶片上進行移植。

3.2 μC/OS-II作業系統移植的主要工作

μC/OS-Ⅱ的體系結構如圖2所示,由圖可以看出使用者編寫的應用程式軟體位於整個系統的頂層,只與跟應用相關的程式碼和μC/OS-Ⅱ中與處理器無關的程式碼相關聯。這種體系結構可以很好的保證應用軟體的可重用性,當應用程式執行在不同處理器上時,只需要對與處理器相關的程式碼進行修改即可。

由圖可以看出,與處理器相關的程式碼主要在OS_CPU.H、OS_CPU_C.C、OS_CPU_A.ASM 三個檔案中,因此要實現μC/OS-Ⅱ作業系統的移植,需要對這三個檔案中的程式碼進行修改。下面將詳細說明在DSP晶片TMS320C6713上移植μC/OS-Ⅱ作業系統時修改這三個檔案需注意的問題。


1)OS_CPU.H移植實現

OS_CPU.H中主要定義了與所使用的編譯器有關的資料型別,同時還定義了選擇開關中斷方法的巨集OS_CRITICAL_METHOD、關中斷巨集OS_ENTER_CRITICAL()、開中斷巨集OS_EXIT_CRITICAL()、任務切換巨集OS_TASK_SW()和堆疊存放順序的巨集OS_STK_GROWTH。

C語言中定義的資料型別的位數在不同的處理器中是不相同的,因此這部分內容是不可移植的。因此μC/OS-Ⅱ自己定義了一系列可移植且直觀的資料型別來確保系統的可移植性,例如:

typedef unsigned intINT32U;

typedef unsignedshort INT16U;

typedef unsignedchar INT8U;

typedef unsignedchar BOOLEAN。

μC/OS-Ⅱ通過OS_STK 來宣告任務堆疊的資料型別,TMS320C6713晶片的處理器堆疊為32 位的,所以OS_STK 宣告為:

typedef INT32UOS_STK。

在進行中斷響應時,μC/OS-Ⅱ通過先關中斷,然後處理臨界段程式碼,處理完畢後重新開啟中斷這個機制保護臨界段程式碼免受多工或中斷服務子程式的破壞。

為了增加可移植性,μC/OS-Ⅱ定義了巨集OS_ENTER_CRITICAL()來開中斷,巨集OS_EXIT_CRITICAL()來關中斷。

我們通過在OS_CPU.H中定義OS_CRITICAL_METHOD常數來選擇OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()的不同實現方法。

本文中採用第一種方式來實現對臨界區的保護,實現程式碼如下:

#defineOS_ENTER_CRITICAL()Disable_int( )

#defineOS_EXIT_CRITICAL()Enable_int( )

巨集OS_TASK_SW的作用是實現任務切換,如果任務處於就緒狀態,μC/OS-Ⅱ就會將任務的暫存器從任務堆疊中恢復,並且執行中斷返回。中斷服務子程式的中斷向量地址必須指向組合語言函式OSCtxSw( )。

#define OS_TASK_SW() OSCtxSw( )

處理器的壓棧順序是由巨集OS_STK_GROWTH來定義的,我們使用的DSP晶片TMS320C6713的堆疊順序是從高地址向低地址遞減的,因此,我們定義OS_STK_GROWTH 為1。

2)OS_CPU_C.C移植實現

這部分定義了10個C語言編寫的函式,除了OSTaskStkInit( )函式之外,其他函式可以只進行宣告,在有需要擴充套件相關功能是才新增相應程式碼。在使用者建立任務時,系統內部自己呼叫OSTaskStkInit( )函式,對使用者的任務堆疊進行初始化。針對本次在DSP晶片TMS320C6713上的移植,建立了初始化堆疊幀INIT_STACK_FRAME,對堆疊的每個暫存器進行初始化。

3)OS_CPU_A.ASM

移植O S_CPU_A.ASM 的檔案需要編寫OSStartHighRdy( ),Enable_int( ),Disable_int( ),OSCtxSw( )和OSIntCtxSw( )等幾個組合語言函式。

OSStartHighRdy( )函式的作用是指向優先順序最高的處於就緒態的任務。系統通過呼叫該函式,來使優先順序最高的就緒狀態下的任務執行。

6713晶片需要用匯編語言編寫一個OSCtxSw( )函式來用於任務切換。該函式使DSP系統從當前執行的低優先順序任務切換到優先順序更高任務。系統通過執行向量地址指向OSCtxSw( )的軟中斷或陷阱(TRAP)來實現任務級的切換。如果有更高優先順序的任務進入就緒狀態,μC/OS-Ⅱ可以通過指向OSCtxSw( )函式的向量地址找到OSCtxSw( )函式,從而完成任務的切換。Disable_int( ),Enable_int( )函式可以實現對臨界區的保護。這兩個函式利用狀態控制暫存器(CSR)控制全域性中斷,在遮蔽中斷時,先將GIE位的值寫入PGIE中,再將GIE寫0遮蔽中斷。在Enable_int( )中則從PGIE中讀值,寫入GIE。這樣就可以避免意外改變系統的中斷狀態。

經過對OS_CPU.H、OS_CPU_C.C、OS_CPU_A.ASM這3個檔案中的函式進行編輯,就可以完成μC/OS-Ⅱ作業系統在TMS320C6713晶片上的移植。

4 測試移植程式碼

將μC/OS-Ⅱ作業系統移植到TMS320C6713晶片上後,還需要對移植後的作業系統進行測試。本次測試需將程式下載到6713開發板中進行驗證。測試共分為兩個步驟:首先是在沒有新增任何使用者任務的前提下,對核心本身進行測試;第二步是建立基於訊息郵箱的多個任務,在此基礎上驗證作業系統核心的多個任務排程是否正確,從而驗證系統移植成功與否。

首先不新增任務應用程式碼測試核心自身的執行情況,測試程式碼為:

#include “includes.h”

void main(void)

{

printf(“InitializinguC/OS-II.\n”);

OSInit();

printf(“StartinguC/OS-II.\n”);

OSStart();

}

核心測試的執行結果表明μC/OS-Ⅱ核心執行正常。在此基礎上建立兩個任務,任務1是控制6713開發板上的小燈開啟,任務2是控制小燈關閉,兩個任務技術之間使用訊息郵箱通訊,進行任務切換。作業系統初始化後,建立任務1和任務2兩個任務。在建立任務時,定義任務1的優先順序高於任務2。所以系統首先執行任務1。在任務1執行3S之後,向任務2傳送一條訊息,任務1掛起,任務2開始執行;任務2執行1S之後,再向任務1傳送一條訊息,任務2掛起,任務1又開始執行,如此迴圈。系統任務排程流程圖如3所示。


執行後,看到6713開發板的LED燈以3S亮,1S滅的頻率閃爍,該結果表明作業系統呼叫的所有函式都工作正常,從而表明整個移植及其測試工作已經完成。至此可以驗證μC/OS-Ⅱ已經正常工作,可以在此基礎上新增新的應用程式,實現使用者需要的功能。

5 結束語

本文論述了嵌入式作業系統μC/OS-Ⅱ在DSP上的迫切需求,實現了嵌入式實時作業系統μC/OS-Ⅱ在TMS320C6713晶片上的移植,並在TDS6713EVM開發板上對移植後的作業系統進行了測試和驗證工作。經測試證明:移植後的作業系統在DSP晶片TMS320C6713能夠正常執行,可靠性得到了保證,並且實時性也有很大提高。同時,本文介紹的移植方法在同類DSP 架構處理器上具有較強的通用性,對μC/OS-Ⅱ作業系統在其它的DSP處理器上的移植也有一定的指導意義。

參考文獻

[1] Jean J.Labrosse 著.邵貝貝等譯.嵌入式實時作業系統μC/OS-Ⅱ(第2 版)[M] .北京:北京航空航天大學出版社,2003.

[2] 三恆星科技著.TMS320C6713DSP 原理與應用例項[M].北京:電子工業出版社,2009.4.

[3] 皇甫睿,宋志剛.嵌入式實時作業系統μC/OS-Ⅱ在DSP上的移植[J].航空計算技術,2008.38(4).

[4] 劉海峰,劉百芬. 嵌入式作業系統μC/OS-Ⅱ在DSP 上的移植研究[J].華東交通大學學報,2006.23(1).

[5] 吳小毛.基於點對點即時資訊交換安全通訊協議模型研究[J].資訊網路安全,2012,(04):72-74.

[6] 王希忠,曲家興,黃俊強等.網路資料庫安全檢測與管理程式設計實現[J].資訊網路安全,2012,(02):14-18.