新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > uCOS II在SkyEye上的移植分析

uCOS II在SkyEye上的移植分析

——
作者: 時(shí)間:2010-01-13 來源:電子產(chǎn)品世界 收藏

  仿真調(diào)試器是基于ARM7TDMI 核的,因此移植 uC/OS-II 到 上可以借鑒網(wǎng)上已有的例如 Sansung S3C3410X的移植代碼,這在 uC/OS-II的主頁上很容易找到。 當(dāng)然自己動(dòng)手做移植也是對(duì) ARM 體系結(jié)構(gòu)和匯編語言的進(jìn)一步熟悉,同時(shí)對(duì)于 uC/OS-II 內(nèi)核的調(diào)度機(jī)制會(huì)有更深的認(rèn)識(shí)。

本文引用地址:http://m.butianyuan.cn/article/104873.htm

  整個(gè)移植工作可以分為兩個(gè)方面,一部分是和 ARM 相關(guān),一部分是和移植原理相關(guān)。在開始實(shí)際的移植工作前,需要對(duì)這兩部分有一定的背景知識(shí),尤其是和側(cè)重于和移植工作相關(guān)的概念和原理,下面分別做一些介紹。

  ARM的體系結(jié)構(gòu)

  ARM(Advanced RISC Machines)是目前在嵌入式領(lǐng)域里應(yīng)用最廣泛的RISC微處理器結(jié)構(gòu),以其低成本、低功耗、高性能的特點(diǎn)占據(jù)了嵌入式系統(tǒng)應(yīng)用領(lǐng)域的領(lǐng)先地位。ARM系列的處理器當(dāng)前有ARM7、ARM9、ARM9E、ARM10等多個(gè)產(chǎn)品,此外ARM公司合作伙伴,例如Intel 也提供基于XScale微體系結(jié)構(gòu)的相關(guān)處理器產(chǎn)品。所有的ARM處理器都共享ARM通用的基礎(chǔ)體系結(jié)構(gòu),所以開發(fā)者在不同的ARM處理器上做操作系統(tǒng)移植時(shí),可以將節(jié)省相當(dāng)多的工作量,這無疑將大大降低軟件開發(fā)成本。

  要詳細(xì)完整的了解ARM的體系結(jié)構(gòu),當(dāng)然是去讀 ARM Architectur Reference Manual ,這是一個(gè)13M 的pdf 文檔,有800多頁,可以從ARM的網(wǎng)站下載,也可以到北京亞嵌教育研究中心的FTP服務(wù)器( http://www.akae.cn/ftp/ )上找到。北航出的一本《ARM 嵌入式處理器結(jié)構(gòu)與應(yīng)用基礎(chǔ)》基本上翻譯了這個(gè)pdf中大部分重要的內(nèi)容,可以作為入門的中文教材。這里我們僅僅對(duì)其中和移植工作密切相關(guān)的概念做簡(jiǎn)要介紹。

  1.處理器模式: ( cpu mode )

  ARM 的處理器可以工作在 7 種模式,如圖1所示。

  

 

  圖1

  這里除 usr 模式以外的其他模式都叫做特權(quán)模式,除 usr 和 sys 外的其他5種模式叫做異常模式。在 usr 模式下對(duì)系統(tǒng)資源的訪問是受限制的,也無法主動(dòng)地改變處理器模式。異常模式通常都是和硬件相關(guān)的,例如中斷或者是試圖執(zhí)行未定義指令等。這里需要強(qiáng)調(diào)的是和移植相關(guān)的兩種處理器模式:svc態(tài)和 irq 態(tài),分別指操作系統(tǒng)的保護(hù)模式和通用中斷處理模式。這兩種模式之間的轉(zhuǎn)換可以通過硬件的方式,也可以通過軟件的方式。uC/OS-II內(nèi)核在執(zhí)行過程中,大部分時(shí)間都是工作在 svc 態(tài),當(dāng)有硬件中斷,例如時(shí)鐘中斷到來時(shí),cpu 硬件上會(huì)自動(dòng)完成從svc態(tài)進(jìn)入 irq態(tài),在中斷處理程序的結(jié)束處,則需要通過編程的方法使得 cpu 從irq 態(tài)恢復(fù)到 svc 態(tài),這個(gè)在移植代碼中可以找到。

  2.程序狀態(tài)寄存器: ( PSR:Program status register )

  在任何一種處理器模式中,都使用同一個(gè)寄存器來標(biāo)識(shí)當(dāng)前處理器的工作模式:這個(gè)寄存器叫做CPSR ( Current Program Status Register ),它的 [0--4] 位用來表示cpu mode,如圖2、圖3所示。

  

 

  圖2

  

 

  圖3

  3.ARM寄存器:( register )

  ARM處理器一共有37個(gè)寄存器,其中31個(gè)是通用寄存器,包括一個(gè)程序計(jì)數(shù)器 PC。另外6個(gè)就是上面提到的程序狀態(tài)寄存器。

  a)通用寄存器:

  i.R0-R7:與所有處理器模式無關(guān)的寄存器,可以用作任何用途。

  ii.R8-R14:與處理器模式有關(guān)的寄存器,在不同的模式下,對(duì)應(yīng)到不同的物理寄存器。其中 R13又叫做 sp,一般用于堆棧指針。R14又叫做lr,一般用于保存返回地址。這兩個(gè)寄存器在每種異常模式下都對(duì)應(yīng)到不同的物理寄存器上,例如lr_irq、lr_svc、lr_fiq 等。

  iii.R15:又叫做程序計(jì)數(shù)器,即pc,所有的模式下都使用同一個(gè) pc。

  b)狀態(tài)寄存器:

  i.CPSR:當(dāng)前程序狀態(tài)寄存器,所有的模式下都使用同一個(gè) CPSR。

  ii.SPSR:保存的程序狀態(tài)寄存器,每種異常模式下都有自己的SPSR,一共有5種SPSR,即SPSR_irq、SPSR_fiq、SPSR_svc、SPSR_abt、SPSR_und。usr和sys 態(tài)下沒有 SPSR 。

  所有的ARM寄存器的命名和含義,可以用下面的這張表來說明,其中相同命名的都是同一個(gè)物理寄存器,不同命名的寄存器都對(duì)應(yīng)不同的物理寄存器,如圖4所示。

  

 

  圖4

  -II 移植工作介紹

  -II 實(shí)際上可以簡(jiǎn)單地看作是一個(gè)多任務(wù)的調(diào)度器,在這個(gè)任務(wù)調(diào)度器之上完善并添加了和多任務(wù)操作系統(tǒng)相關(guān)的一些系統(tǒng)服務(wù),如信號(hào)量、郵箱等。它的90%的代碼都是用C語言寫的,因此只要有相應(yīng)的C語言編譯器,基本上就可以直接移植到特定處理器上,這也是uC/OS-II具有良好的可移植性的原因。移植工作的絕大部分都集中在多任務(wù)切換的實(shí)現(xiàn)上,因?yàn)檫@部分代碼主要是用來保存和恢復(fù)處理器現(xiàn)場(chǎng)(即相關(guān)寄存器),因此不能用C語言,只能使用特定的處理器匯編語言完成。

  -II的全部源代碼量大約是6000-7000行,一共有15個(gè)文件。將 uC/OS-II 移植到ARM處理器上,需要完成的工作也非常簡(jiǎn)單,只需要修改三個(gè)和ARM體系結(jié)構(gòu)相關(guān)的文件,代碼量大約是500行。以下分別介紹這三個(gè)文件的移植工作:

  1.OS_CPU.H 文件

  數(shù)據(jù)類型定義

  這部分的修改是和所用的編譯器相關(guān)的,不同的編譯器會(huì)使用不同的字節(jié)長(zhǎng)度來表示同一數(shù)據(jù)類型,比如int,同樣在x86平臺(tái)上,如果用GNU的gcc 編譯器,則編譯為4 bytes,而使用MS VC++則編譯為2 bytes。我們這里使用的是 GNU 的 arm-elf-gcc,這是一個(gè)免費(fèi)并且開放源碼的編譯器。相關(guān)的數(shù)據(jù)類型的定義如下,如圖5所示。



關(guān)鍵詞: uCOS SkyEye

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉