前言隨著微電子技術和網路的發展,人們對網路的認識日益深入。網路終端產品也越來越受到人們的關注,嵌入式作業系統的應用也得到了前所未有的發展,人們對嵌入式的研究也有了長足的進步。基於某個作業系統的實時、多工系統的設計合應用成為微控制器應用的新的發展趨勢。
uc/os是乙個公開源**的嵌入式作業系統,uc/os-ii是由uc/os v1.1版公升級而來,在原來版本的基礎上,uc/os-ii有了許多新功能,如:記憶體管理;在任務建立、刪除、任務切換、時鐘節拍切換處理過程中,允許用 戶呼叫自定義的函式;支援任務控制塊(tcb)功能擴充套件;能效驗各堆疊使用情況;以及其它一些新功能。m16c62微控制器是三菱公司在90年代末推 出的新一代16位微控制器,是目前應用最廣泛的16位微控制器之一。m16c族微控制器融合了基於暫存器和基於儲存器型兩種結構的優點,從而能夠實現類似 risc的高速處理效能。m16c62微控制器具有超低功耗、極強的抗干擾能力和很高的c語言程式設計效率等特點,片內整合了10位a/d轉換器、dma控制 器、非同步通訊通道、定時器等豐富的周邊功能電路模組,非常適合應用在小型實時、多工、嵌入式系統中。把uc/os-ii移植到m16c62微控制器 中,就可以構成乙個實時多工應用系統。下面就來談談如何把uc/os-ii移植到m16c62微控制器中,並以此設計乙個實時多工系統。
1、uc/os-ii的移植
uc/os-ii採用完全佔先式的實時核心,最多可以管理56個任務,每個任務對應乙個不同的優先順序,因而,uc/os-ii作業系統並不支援時間片輪 轉排程法。但是全部uc/os-ii的函式呼叫與服務的執行時間是可知的,也就是,uc/os-ii系統服務的執行時間不依賴於應用程式任務的多少。另 外,uc/os-ii中每個任務都有自己單獨的棧,每個棧的大小可以根據應用程式的需要進行分配,這樣壓低了系統對ram的需求;在中斷管理方面,uc /os-ii中的中斷可以使正在執行的任務掛起,如果優先順序更高的任務被中斷喚醒,則高優先順序的任務在中斷巢狀全部退出後立即執行,uc/os-ii的中 斷巢狀可達255層。
uc/os-ii的原始碼大部分是用可移植性很強的ansi c 寫的。只是和微處理器有關的很小一部分**是用彙編寫的,這樣把uc/os-ii移植到mc16c62中就變得相對容易很多,主要是要修改和處理器有關的 **,如:os-cpu.h、os-cpu-a.asm、os-cpu-c.c。
(1)、os-cup.h標頭檔案
os_cup.h標頭檔案主要是定義和處理器有關的資料型別,在m16c62中的資料型別包括無符號整型、有符號整型、無符號字元型、有符號字元型等。因 此,os_cpu.h標頭檔案對這些型別進行全新的定義。除了和處理器有關的資料型別定義外,在os-cup.h中還作了有關中斷禁止、中斷允許、堆疊的增 長方向等一些簡單巨集的定義。
(2)、os-cpu-a.asm檔案
在os-cpu-a.asm檔案中包含四個彙編語 言的函式:osstarthighrdy()、osctxsw()、osintctxsw()、ostickisr()。在uc/os-ii中處於就緒態 的任務的堆疊結構,看起來和剛中斷的情形是一樣的。要想執行最高優先順序任務,移植要做的是就是將所有處理器的暫存器按順序從任務堆疊中恢復出來,並且通過 一條中斷返回語句來實現任務的切換。因而,osstarthighrdy()就是使要恢復的任務堆疊指標指到任務控制塊的0偏址的記憶體單元中。也就是要把 儲存在任務堆疊中的資料以及cpu暫存器,如r0、r1、r2、r3、a0、a1、sb和fb返回到系統當前的暫存器中,並把當前堆疊指標指到pc指標的 位置。
在uc/os-ii中任務的切換問題是通過發軟體中斷命令或依靠處理器執行陷阱指令來完成的。但是中斷服務例程、陷阱或異常處理 例程的向量位址必須指向osctxsw()。在m16c62微控制器中可以通過定義軟體中斷0來完成任務的切換。因而,在m16c62中的中斷向量表 中的0號軟體中斷位址指向osctxsw()。對應的中斷號為0。
osinctxsw()用來在isr中執行切換功能。由於這個函式本身就是在中斷中被呼叫,因而,在中斷處理時暫存器的狀態已經都被正確儲存了。在osinctxsw()函式中要進行堆疊清理工作,只有這樣被中斷的任務的堆疊內容才能正確返回。
ostickisr()這個函式時uc/os-ii所要求的時鐘基準,即時鐘節拍,uc/os-ii的時鐘節拍頻率在10到100之間,通常為了計算方 便而設為整數。在m16c62中有多個定時計數器可以選擇用來作為系統的時鐘基準。在該系統中利用時鐘定時器a0來產生頻率為100的乙個時鐘節拍。 ostickisr()是乙個中斷響應函式,因而必須在m16c62的中斷向量表中,a0的中斷向量應分配給ostickisr(),對應的中斷向量號是 21。
(3)、os_cpu_c.c檔案
在這個c檔案中包含6個簡單的c函式,而這6個函式中和移植關係最密切的 ostaskinit()函式,這個函式是用來建立乙個任務堆疊。ostaskcreat()和ostaskext()就是通過呼叫這個函式來初始化任務 的堆疊結構的,由此看來,ostaskinit()是移植的關鍵。在前面的os_cpu_a.asm檔案中,任務的切換是通過呼叫乙個軟中斷0來實現任務 切換,通過中斷的返回指令使堆疊中的資料返回到cpu暫存器,使最高優先順序的任務占有cpu,因而,ostaskinit()函式要做的就是模擬中斷發生 時處理器壓棧的過程,把cpu的暫存器內容壓到任務堆疊中。在m16c62微控制器中,系統分為兩個堆疊,即:使用者堆疊和中斷堆疊,而在uc/os-ii進 行任務切換是通過軟中斷0來實現的,因此,uc/os-ii的任務堆疊是m16c62中的中斷堆疊。在m16c62中,響應中斷後堆疊的狀態如圖 (一)所示:
中 斷堆疊中依次儲存程式計數器pc和標誌暫存器***中的內容,因此,在ostaskstkinit()函式中就是要模擬這樣的乙個壓棧過程。先壓入 flag的高四位和pc指標的高四位,接著壓入flag低位、pc中間八位和pc的低八位。在儲存完pc和flag位後就應該為cpu的暫存器fb、 sb、a1、a0、r3、r2、r1和r0分配相應儲存空間。ostaskinit()函式返回的是任務堆疊的指標。
2、多工系統設計
多工系統的設計是以m16c62微控制器為cpu,以uc/os-ii為作業系統構成乙個實時多工系統,系統包括乙個基於spi匯流排的溫度感測器 (ds1722)、乙個基於i2c匯流排的實時鐘(x1226)、乙個lcd(jm202a)和鍵盤。m16c62工作在微處理器模式,片外擴充套件乙個 32k×16位的ram(cy7c1021b)和由兩片eeprom(eep29010-90)構成的儲存器。多工系統的設計主要包括:微控制器資源分配 和多工設計兩個方面。
(1)、m16c62微控制器資源分配
m16c62微控制器是乙個16位微控制器,線性定址空間是 1m,但片內的ram大小只有3kbyte,因此要使多工系統能正常穩定地工作必須合理分配資源。uc/os-ii中所有核心**必須在ram區而把系 統堆疊區劃塊到3k ram 區外。通過對ncrt0.a30和sect30.inc這兩個m16c62配置檔案,可以完成對微控制器的資源劃分。nc30編譯器一開始就會編譯 ncrt0.a30和sect30.inc這兩個檔案,完成對cpu的初始化,和資源分配,主要包括:儲存器空間、ram區分配、中斷向量分配、堆疊區劃 分等。
(2)、多工設計
該系統中除了uc/os-ii的空閒任務外,還包括實時鐘任務、溫度採 集任務和鍵盤中斷任務和資料儲存任務。實時鐘主要是能精確記錄系統的日期,任務優先順序為10,該任務處於一直工作狀態;溫度採集任務的優先順序為20,主要 是完成溫度資料的採集;資料儲存任務是在溫度發生較大變化的時候記錄當時的時間和溫度,任務優先順序為30,在一般情況下這個任務是處在掛起狀態,一旦溫度 變動超過預置範圍,溫度採集任務就會發出乙個有效訊號量使處於掛起態的資料儲存任務轉為就緒態。鍵盤中斷任務是通過m16c62的鍵盤中斷來完成引數的設 定,該任務以乙個中斷處理函式的形式來完成的。系統的程式流程圖如圖(二)所示。
3、結束語
把 uc/os-ii移植到m16c62微控制器中,並以m16c62微控制器為微處理器構成乙個實時多工系統,不僅系統設計簡潔、硬體結構相對與51系列單片 機來說也要簡單,而且具有較強的抗干擾能力和系統穩定性。以m16c62為微處理器,以uc/os-ii為實時作業系統構成的多工系統能廣泛應用在小型 實時多工系統中,具有較好的應用前景。
圖(二):系統主程式流圖
TFTP協議在嵌入式系統中的實現
隨著internet和pc時代的到來,嵌入式系統成為當前it產業的焦點之一。在這種形勢下,家用電器等嵌入式裝置的internet網路化就成了目前網路發展的乙個重要方向和必然結果。本文基於arm核處理器的多嵌入式應用綜合開發平台,對嵌入式裝置聯網的tcp ip協議進行了討論研究。1 引言 嵌入式系統是...
嵌入式系統在物聯網行業中的應用
作為物聯網重要技術組成的嵌入式系統,嵌入式系統的視角有助於深刻地 全面地理解物聯網的本質。作為物聯網重要技術組成的嵌入式系統,嵌入式系統的視角有助於深刻地 全面地理解物聯網的本質。嵌入式系統技術 是綜合了計算機軟硬體 感測器技術 積體電路技術 電子應用技術為一體的複雜技術。經過幾十年的演變,以嵌入式...
狀態機系統在嵌入式軟體中的地位
一 有限狀態機系統在嵌入式軟體中是個什麼地位?嵌入式系統軟體的分類 1 按處理器位數分類 嵌入式系統分為4位 8位 16位 32位和64位 2 按產品應用型別分類 資訊家電類 移動終端類 網路通訊類 汽車電子類,工業控制類等 3 按系統實時性來分類 根據實時性的強弱,嵌入式系統分為硬實時 軟實時系統...