999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

UCOS移植中的硬件抽象層構建技術

2006-04-29 00:00:00彭楚武譚凌峰陳敬恩
電子產品世界 2006年16期

摘 要:在UCOS移植前,必須先要建立一定的硬件環境讓其運行。原始的UCOS實際上構成了具體內核中的外層或高層,而真正位于內核底層的則是CPU。而這兩者之間就由“硬件抽象層”(HAL)來連接。本文在基于HMS30C7202硬件平臺的基礎上,詳細講述了UCOS在HMS30C7202移植中,硬件抽象層的實現步驟。

關鍵詞:UCOS移植;硬件抽象層;中斷二次跳轉

引言

一般常用的嵌入式操作系統和通用操作系統一樣,在內核完成了自身的初始化以后便會創建一個shell進程或者相應的窗口。之后,其他應用進程的創建和啟動就是這個shell進程或者窗口的事情了。然而,像類似于UCOS這類比較小而是專用的嵌入式操作系統就不同了,內核和應用程序之間沒有明確的界限,它們共享一個地址空間,在物理地址或者邏輯地址上都形成一個整體。整個系統的映像中就只有一個入口函數。

UCOS啟動中,系統在完成最初的硬件初始化以后便轉入由開發者提供的main(),在main()中再調用一個內核函數OSInit()來完成內核的初始化,然后在完成了與應用相關的初始化以后,就可以調用一個內核函數OSStart()啟動內核的進程調度。從上面的過程可以看出,main0函數其實是一個回調函數,整個系統的入口其實是在HAL程序中。

HAL簡介

一般HAL中包含著特定CPU的匯編語言編寫的底層函數和數據結構,例如對CPU內部一些特殊寄存器的設置、開中斷/關中斷、中斷向量的設置等等。

在不同類型的操作系統中,HAL存在的形式也有很大的不同。在一體化內核的Linux操作系統中,不存在獨立的HAL。在Linux內核的源碼中,目錄arch/下面就是依賴于各種不同CPU的底層代碼,那就是需要靜態連接到內核中的HAL。所以,Linux所需要的就只是一個基本的引導裝入程序。一旦內核開始運行,引導裝入程序就完成了使命,Linux內核及其應用程序不會調用引導裝入程序中的任何一段代碼。然而在微內核的UCOS操作系統中,內核引導裝入程序與HAL連接在一起,或者說在HAL的基礎上構建內核引導裝入程序。

在Hms30C7202上構建HAL

Hms30c7202是一款基于ARM720T內核的32位處理器。主要特征如下:更詳細的芯片功能介紹請見參考文獻。

·內核運行速率可達70MHz

·8KB綜合指令/數據的cache

·內存管理單元MMU

·支持小端操作系統

·2KBSRAM可用于內部buffer。

如上所說,在ARM上運行UCOS的HAL要完成系統硬件的初始化和操作系統的引導兩個工作。系統的初始化,主要包括下面幾個步驟:

·標志整個代碼的初始入口點

·設置異常中斷向量表

·初始化存儲系統

·初始化MMU

·將已經初始化的數據搬運到可寫的數據區

·初始化各個模式下的數據棧

·初始化一些特殊外圍接口

·安放好中斷處理程序

·使能IRQ異常中斷

以上的步驟中根據處理器中相應的寄存器,進行數據的讀寫即可。但是要注意MMU的初始化和中斷結構的設計。在Hms30c7202中,對于MMU設置如下:

IMPORT LOPageTable

ldrr0,=LOPageTable

mcr

p15,0,r0,c2,c0,0

mvn

rO,#0

mcr

p15,0,r0,c3,c0,0

mov

rO,#CtrlMMU+CtrlCache+CtrlWBuff

mcr

p15,0,rO,c1,c0,0

首先我們將建立好的頁表地址的基址存入寄存器C2(translationtablebase),然后通過寄存器C3設置好內存的訪問權限,最后使能MMU單元,CACHE和BUFF。在LOPageTable開始的內存頁表中,規劃’了4G內存的分配情況。其實根據UCOS的自身特點可以不使用MMU或者將內存映射為1—1的甲板映射就可以。這里將4G的空間劃分開來主要是為了更好的通用性,將來如果引導Linux,就也可以使用這段代碼。

中斷結構和中斷處理程序的設計,應該是HAL中最為重要的一個環節。因為UCOS做為一個多任務操作系統,其本質就是在響應系統指定的時鐘中斷后進行任務切換。為了使中斷處理程序的安裝更為方便,因此采用了中斷二次跳轉的方法。首先在ARM處理器定義的中斷向量處安放跳轉指令,跳轉到指定位置后,再進行位置的第二次映射。其中位置的映射是通過一個匯編定義的宏來實現的。其代碼如下:

MACRO

$SourceHANDLER$Destination

$Source

subsp,sp,#4

stmfdsp!,{rO}

1drr0,=$Destination

ldr ro.[ro]

strl0,[sp,#4]

Idmfd sp!,{r0,pc}

MEND

這樣就可以在程序的任意位置定義自己的中斷處理函數,而不必擔心因為使用B指令帶來的跳轉范圍的限制問題。以[RQ中斷為例:

HandlerlRQ

HANDLERHandlelRQ

IRQ中斷發生時,PC指向地址0X18處,在此處放一條:B HandlerlRQ,程序跳轉到Handler處,根據宏所定義的操作,PC指向HandlelRQ所代表的地址處。也就是說當IRQ中斷發生時,其中斷向量已經是HandleFlQ所代表的地址了,從這個地址再映射到UCOS IRQHANDLER就可以正確的實現IRQ中斷的響應了。Hms30c7202中其他中斷資源也都有自己固定的中斷向量地址,也可以使用類似的方法進行處理。在需要用到的中斷資源對應的中斷向量處,安放相應中斷處理函數的起始地址即可。

在UCOS中需要用到一個周期性的中斷源來產生系統的時鐘節拍。對于Hms 30c7202,可以選擇使用WATCHDOGTimer、RTC或者是Timer來實現。這三者都可以實現周期中斷,只是操作的難易程度不一樣。如果系統要求高精度實時中斷,使用Timer比較奸。如果系統要求比較低的話,用RTC實現則十分的簡單。不管哪一種方法實現,其中斷處理程序是相似的,給出偽代碼如下:

XXX_IRQ_Handler

{

清除中斷標志位

重新設置中斷條件

OSTimeTick()

}

當周期中斷發生時,Hms30c7202先進入IRQ中斷,再來判別中斷源。所以當進入UCOSIRQHANDLER后,在其中因該調用一個C函數來實現中斷源的判別和相應處理函數的運行。

EXPORT UCOS IRQHandler

UCOS IRQHandler

stmfdsp!,{rO-r3,r12,1r}

blOSIntEnter

b1C IRQHandler

blOSIntExit

ldrr0,=OSIntCtxSwFlag

ldrrl,[rO]

cmprl,#1

beq_IntCtxSw

ldmfdsp!,{r0-r3,r12,1r}

subs pc,lr,#4

至此,整個HAL的框架已經建好,按照先前提出的步驟和上面講到的中斷處理的方法,編寫好整個HAL程序和os cpu a.s和os_cpu_c.c中6個關鍵的移植函數。再跳轉到main()程序入口,初始化UCOS操作系統,創建任務,啟動系統時鐘,啟動系統即可運行自己定義的任務。

結語

對于UCOS來講,在其運行以前HAL就已經把運行操作系統所必需的硬件環境建立好,并且隱藏了UCOS在調用系統硬件資源時實現的具體操作細節。從這點可以認為簡單的HAL其實就是一個硬件資源初始化的程序。然而實際上完全可以基于HAL寫一個普通的監控程序或者是引導/裝入程序,甚至是一個內核。ARM公司為操作系統的開發提供了一個HAL,稱為μHAL。μHAL是一組庫程序。ARM公司向用戶提供LlHAL的源代碼和已經編譯好的兩個二進制文件,分別用于“半寄宿(semihost)“和獨立運行(standalone)。具體內容請見參考文獻當然也可以自己編寫這些代碼,本文就是這種情況。這樣做工作量會變大,但是整個程序也許會更加的簡練,執行的效率會更高。注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。

主站蜘蛛池模板: 一级香蕉视频在线观看| 国产69精品久久久久孕妇大杂乱| jizz国产在线| 自慰高潮喷白浆在线观看| 91青草视频| 在线观看国产小视频| 精品亚洲麻豆1区2区3区| 在线视频亚洲色图| 亚洲精品无码AV电影在线播放| 久久人人97超碰人人澡爱香蕉| 香蕉精品在线| 日韩区欧美区| 日韩A∨精品日韩精品无码| 91久久国产热精品免费| www.狠狠| 婷婷六月激情综合一区| 中文字幕永久在线观看| 国产96在线 | 人妻少妇久久久久久97人妻| 国产杨幂丝袜av在线播放| 中文天堂在线视频| 欧美激情视频二区三区| 日韩中文无码av超清| 91免费国产高清观看| 久久婷婷色综合老司机| 夜夜爽免费视频| 天天视频在线91频| 中文字幕免费视频| 亚洲国产日韩视频观看| 2021国产v亚洲v天堂无码| 91青草视频| 一级片一区| 自慰网址在线观看| AV无码国产在线看岛国岛| 亚洲不卡影院| 精品久久久久久成人AV| 亚洲一区二区三区国产精品| 国产又色又爽又黄| 成人国产一区二区三区| 一级在线毛片| 在线一级毛片| 二级毛片免费观看全程| 噜噜噜久久| 亚洲高清在线播放| 亚洲国产系列| 国产黑丝一区| 久久久久亚洲Av片无码观看| 青青青国产在线播放| 国产激情在线视频| 91午夜福利在线观看| 国产浮力第一页永久地址| 国产成人AV大片大片在线播放 | 精品国产黑色丝袜高跟鞋| 强乱中文字幕在线播放不卡| 国产精女同一区二区三区久| 国产真实乱子伦精品视手机观看| 成年女人18毛片毛片免费| 狼友av永久网站免费观看| 麻豆精品在线| 国产无码高清视频不卡| 国产精品妖精视频| 亚洲一区国色天香| 欧美亚洲一区二区三区在线| 日本一区高清| 久996视频精品免费观看| 制服丝袜在线视频香蕉| 色屁屁一区二区三区视频国产| 欧美影院久久| 人人妻人人澡人人爽欧美一区| 黄片一区二区三区| 国产精品永久久久久| 男女男免费视频网站国产| 国产va视频| 潮喷在线无码白浆| 免费看美女自慰的网站| 国产午夜不卡| 日韩欧美国产三级| 一级高清毛片免费a级高清毛片| 久久婷婷国产综合尤物精品| 波多野结衣视频一区二区| 亚洲国产欧美目韩成人综合| 婷婷色狠狠干|