目前,嵌入式系統在工業控制、家用電器、移動通信、PDA等各種領域得到了越來越廣泛的應用。由于用戶對嵌入式產品的性能要求越來越高,程序設計也變得越來越復雜,這就需要一個通用的嵌入式實時操作系統來對其進行管理和控制。對移植了操作系統的嵌入式系統進行設計和開發,可以大大減小程序員的負擔,對于不同的應用可以按照相同的步驟來完成系統的設計。
嵌入式系統是根據IEEE(電氣和電子工程師協會)的定義,嵌入式系統是“控制、監視或者輔助裝置、機器和設備運行的裝置”(devices used to control, monitor, or assist the operation of equipment, machinery or plants)。從中可以看出嵌入式系統是軟件和硬件的綜合體,還可以涵蓋機械等附屬裝置。目前國內一個普遍被認同的定義是:以應用為中心、以計算機技術為基礎、軟件硬件可裁剪、適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。
μC/OS-Ⅱ是一種簡單高效、源代碼公開的嵌入式實時操作系統,具有良好的可擴展性和可移植性,被廣泛的應用到各種嵌人式處理器上。μCOS-Ⅱ操作系統擁有可固化,可裁剪,可剝奪性的實時內核,可同時管理64個系統任務。
1、 μCOS-Ⅱ概述
μCOS-Ⅱ從8位到64位,μCOS-Ⅱ已在超過40種不同架構的微處理器上運行。μCOS-Ⅱ是專門為嵌入式應用而設計的,它包含了任務調度,任務管理,時間管理,內存管理和任務問的通信和同步等基本功能。μCOS-Ⅱ擁有一個可移植、可固化、可裁剪的實時內核,它具有執行效率高,占用空間小,實時性能優良和可擴展性強等特點,被廣泛地移植應用到各種嵌入式微處理器中。
2、 S3C44B0處理器概述
S3C44B0x微處理器采用高性能、低功耗的32位RISC內核ARM7TDMI。 同時,S3C44B0x在ARM7TDMI核的基礎上,擴展了一系列的外圍器件,使系統成本及外圍器件數目降低至最低,這些功能部件分為CPU單元,系統時鐘管理單元,存儲單元和系統功能接口單元,片上集成的主要功能如下:
在ARM7TDMI基礎上增加了8 KB的CACHE;外部擴充存儲器控制器;LCD控制器,并帶有1個LCD專用DMA通道;2個通用DMA通道,2個帶外部請求引腳的DMA;2個帶有握手協議的UART,1個SIO;1個I2C總線控制器;5個PWM定時器及1個內部定時器;1個看門狗定時器;71個通用可編程I/O口,8個外部中斷源;功耗控制模式:正常、低、休眠和停止;8路10位ADC;具有日歷功能的RTC;PLL時鐘發生器等。
對于我們采用的S3C44B0微處理器來說,在系統加電之后,指令指針是指向0x00000000的,也就是說系統是從0x00000000開始之行。正是因為這個原因,通常這個地址空間我們會安排給FLASH存儲器。這樣我們可以將BootLoader啟動代碼以及我們之后將會要啟動的uClinux操作系統映像燒寫到Flash里。對于RAM地址空間,S3C44B0芯片將其設定為從0x0C000000到0x0FFFFFFF一共64MB的范圍里。我們可以通過設定存儲器控制寄存器來重新設定RAM的大小。
3、 嵌入式操作系統μCOS-Ⅱ的移植
3.1 移植μCOS-Ⅱ的條件
所謂移植,就是使一個實時內核能在其他的微處理器或微控制器上運行。為方便移植,大部分μCOS-Ⅱ的代碼都是用C語言編寫的,但是仍需要用C語言和匯編語言編寫與處理器硬件相關的代碼,這是因為μCOS-Ⅱ在讀/寫處理器的寄存器時,只能通過匯編語言來實現,要使μCOS-Ⅱ正常運行,處理器必須滿足以下要求:
(1)處理器的C編譯器能產生可重人型代碼;
(2)處理器支持中斷,并且能產生定時中斷(通常為10~100 Hz);
(3)用C語言就可以開/關中斷;
(4)處理器能支持一定數量的數據存儲硬件堆棧;
3.2 搭建移植環境
本次移植在如下的環境中完成:
編譯工具采用ARM公司的ADS 1.2。ADS全稱為ARM Developer Suite,是ARM公司推出的新一代ARM集成開發工具。ADS 1.2由命令行開發工具,ARM實時庫,GUI開發環境,實用程序和支持軟件組成。有了這些部件,用戶就可以非常方便地為ARM系列的處理器編寫和調試自己的應用程序了。
3.3 μCOS-Ⅱ的移植
μCOS-Ⅱ的硬件/軟件體系結構如圖1所示,對μCOS-Ⅱ的移植其實就是對與處理器有關的代碼進行重新編寫或修改。
由圖1可知,移植μCOS-Ⅱ實際上就是分別對OSCPU.H,OS_CPU_A.ASM和OS_CPU_C.C這三個文件進行重新編寫或修改。由于在本次移植中是將μCOS-Ⅱ移植到ARM系列單片機S3CA4B0x中,接下來將結合S3CA4B0x微處理器的特性來具體介紹本次移植過程中所做的主要工作。
(1)移植OS_CPU.H文件
OS CPU.H文件中包括了用#define定義的與處理器相關的常量和類型的定義,與μCOS-Ⅱ所定義的變量類型相一致;定義開/關中斷的宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()來保護臨界段代碼免受多任務或中斷服務例程的干擾;。在移植該文件時,需要編寫和修改的部分代碼如下所示:
①設置與編譯器相關的數據類型
③設置堆棧的增長方向
絕大多數的微處理器和控制器的堆棧是從上往下增長的,但是也有一些處理器和控制器的堆棧增長方向是從下往上增長的μCOS-Ⅱ被設計成這兩種情況都可以處理,只要在結構常量OS_STK_GROWTH中指定堆棧的增長方式即可。在本次移植中堆棧的增長方向被設置成從上往下增長。
在這些函數中惟一必須需要編寫的函數是OSTa-skStkInit(),其他9個函數必須要聲明,但不一定要包含任何代碼。OSTaskCreate()和OSTaskCreateExt()通過調用OSTaskStkInit()函數來初始化任務的堆棧結構,因此,堆??雌饋砭拖駝偘l生過中斷,并將所有的寄存器都保存到堆棧中的情形一樣。OSTaskStkInit()的程序代碼如下:
(3)移植OS_CPU_A.ASM文件
在移植OS_CPU_A.ASM文件時,要求用戶編寫4個簡單的匯編語言函數,它們分別是:OS-StartHighRdy(),OSCtxSw(),OSIntCtxSw(),OS-TickISR()。
①OSStartHighRdy():運行最高優先級的就緒任務。此函數僅在多任務啟動時執行一次,用來啟動第1個(也就是最高優先級)任務運行。它的程序代碼如下:
②OSCtxSw():任務級任務切換函數。實現CPU在正常運行時任務間的切換,完成對當前任務堆棧的保存和對最高優先級任務堆棧的彈出,使最高優先級的任務得到運行。
③OSIntCtxSw():中斷級的任務切換函數。在中斷服務程序執行完后,如果中斷使得更高優先級的任務處于就緒狀態,則該函數實現對任務的切換:保存中斷發生之前的那個任務的執行現場?;謴鸵烟幱诰途w態的那個更高優先級任務的執行現場,使優先級更高的那個任務得以運行,從而完成對任務的切換。
④OSTickISR():是系統時鐘的中斷服務函數。該函數的主要功能是檢查是否有由于延時而被掛起的任務轉為就緒態。如果有,則調用OSIntCtxSw()函數進行任務切換,使已處于就緒態的且具有最高優先級的任務運行。
4、 測試移植代碼
為S3C44B0x移植好μC/OS-Ⅱ后,緊接著的工作就是驗證移植好的μC/OS-II是否能正常工作。通過四個步驟來完成對移植代碼的測試:確保C編譯器、匯編編譯器及鏈接器正常工作;驗證OSTaskStkInit()和OSStartHighRdy()函數;驗證OSCtxSw()函數;驗證OSIntCtxSw()和OSTick-ISR()函數。
驗證OSCtxSw函數,在已經知道OSTaskStkInit函數正確后,就可以在程序中加入一個任務,并不斷的切換到空閑任務。這里是使用的軟件中斷swi來調用OSCtxSw函數的。
5、 結束語
μC/OS-II是一種可配置、可裁剪的嵌入式實時操作系統,現已被廣泛的移植應用到多種處理器當中。這里成功地將μC/OS-Ⅱ移植到了ARM系列單片機S3C44B0x中,經測試,移植好的μC/OS-Ⅱ代碼能正常的在S3C44B0x處理器中穩定運行。
責任編輯:gt
-
嵌入式
+關注
關注
5086文章
19142瀏覽量
305978 -
操作系統
+關注
關注
37文章
6842瀏覽量
123409 -
微處理器
+關注
關注
11文章
2264瀏覽量
82532
發布評論請先 登錄
相關推薦
評論