基于ARM的mp3數(shù)字音頻播放系統(tǒng)軟件_第1頁
基于ARM的mp3數(shù)字音頻播放系統(tǒng)軟件_第2頁
基于ARM的mp3數(shù)字音頻播放系統(tǒng)軟件_第3頁
基于ARM的mp3數(shù)字音頻播放系統(tǒng)軟件_第4頁
基于ARM的mp3數(shù)字音頻播放系統(tǒng)軟件_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、吉吉 林林 農(nóng)農(nóng) 業(yè)業(yè) 大大 學學學學 士士 學學 位位 論論 文文 題目名稱: 基于 ARM 的 mp3 數(shù)字音頻播放系統(tǒng)軟件 學生姓名: 胡靖宇 (12083116) 院 系: 信息技術(shù)學院 專業(yè)年級: 08 級電子信息科學與技術(shù) 指導(dǎo)教師: 職 稱: 2012 年 5 月 10 日目錄摘要.IABSTRACT . II1 緒論1.1 課題來源和背景 . (1)1.2 課題研究的現(xiàn)狀與意義 . (2)1.3 數(shù)字音頻解碼算法的實現(xiàn)方法 . (2)1.4 本論文所做工作和以及需解決的關(guān)鍵問題 . (3)2 系統(tǒng)總體設(shè)計方案及其硬件環(huán)境2.1 總體設(shè)計目標. (4)2.2 系統(tǒng)總體設(shè)計方案 .

2、 (4)2.3 系統(tǒng)設(shè)計硬件環(huán)境 . (6)2.4 軟件開發(fā)平臺簡介 . (9)2.5 小結(jié). (10)3 UC/OS-II 操作系統(tǒng)移植3.1 UC/OS-II 簡介. (11)3.2 移植要求. (12)3.3 UC/OS-II 內(nèi)核機制. (13)3.4 UC/OS-II 的移植步驟. (15)3.5 小結(jié). (20)4 數(shù)字音頻播放系統(tǒng)軟件設(shè)計與實現(xiàn)4.1 系統(tǒng)的啟動. (21)4.2 USB 通信的設(shè)計流程. (25)4.3 FLASH 文件系統(tǒng)結(jié)構(gòu)及其存儲管理. (37)4.4 MP3 播放流程設(shè)計. (42)4.5 人機界面的設(shè)計 . (47)4.6 小結(jié). (50)5 總結(jié)與展

3、望5.1 全文總結(jié). (52)5.2 進一步的展望. (52)致謝.(54)參考文獻.(55)基于 ARM 的 mp3數(shù)字音頻播放系統(tǒng)軟件姓 名:胡靖宇 專 業(yè):電子信息科學與技術(shù)指導(dǎo)教師:李建摘摘 要要 隨著超大規(guī)模集成電路和數(shù)字電子技術(shù)的發(fā)展,以 MP3 為代表的消費類電子產(chǎn)品廣泛的應(yīng)用在我們的生活中,數(shù)字音頻技術(shù)得到了長足的發(fā)展,而 ARM 技術(shù)也是當前研究的熱點之一。與傳統(tǒng)的數(shù)字產(chǎn)品相比,利用 ARM 技術(shù)開發(fā)的產(chǎn)品有其自己的特點,結(jié)合 ARM 微處理器和操作系統(tǒng),使 MP3 播放器的數(shù)字音頻處理更加靈活,播放性能更加優(yōu)化,同時使得整個系統(tǒng)的功能更加的全面。本文結(jié)合數(shù)字音頻技術(shù)和 AR

4、M 嵌入式系統(tǒng)兩個前沿技術(shù),以 SG850 微處理器為核心,提出了基于 ARM 嵌入式的 MP3 數(shù)字音頻播放系統(tǒng)解決方案。本文以基于 ARM 嵌入式的 MP3 數(shù)字音頻系統(tǒng)的軟件設(shè)計與實現(xiàn)過程為主要內(nèi)容,闡述了其相關(guān)技術(shù)和具體實現(xiàn)流程,其中重點分析了 uC/OS-II 操作系統(tǒng)的移植以及在其基礎(chǔ)上的 USB 通信的實現(xiàn)過程和 MP3 播放的處理流程。在操作系統(tǒng)移植方面,在研究 uC/OS-II 的內(nèi)核機制的基礎(chǔ)上,分析與處理器相關(guān)的代碼文件并進行了相關(guān)的修改,給出了 uC/OS-II 的具體移植步驟;在 USB 通信方面,將播放系統(tǒng)視作海量存儲設(shè)備,利用 BULK_ONLY 傳輸協(xié)議來實現(xiàn)設(shè)

5、備與主機的 USB 通信,且采用了 Flash 存儲管理機制解決了傳輸數(shù)據(jù)存儲丟失的問題;在 MP3 播放處理方面,研究 DMA 內(nèi)存管理機制,設(shè)計了雙緩沖模式,給出了 MP3 播放處理流程,實現(xiàn)了大數(shù)據(jù)量音頻數(shù)據(jù)的播放。測試結(jié)果表明,本文所實現(xiàn)的 MP3 音頻播放系統(tǒng)達到了預(yù)期的目標,同時因為在系統(tǒng)架構(gòu)上的技術(shù)優(yōu)勢,系統(tǒng)可以方便的進行功能擴充。 關(guān)鍵詞:數(shù)字音頻;ARM;uC/OS-II 操作系統(tǒng); 移植;USB 通信;SG850ARMARM basedbased onon thethe MP3digitalMP3digital audioaudio broadcastingbroadcas

6、ting systemsystem softwaresoftwareName:Hu Jing-yuMajor:Electronics Tutor:Li jianAbstract:With the development of ultra-large-scale integrated circuits and digital electronic technology, MP3 as the representative consumer of the electronics products are widely used in our daily life. Digital Audio Te

7、chnology achieves a considerable development, in which ARM technology is one of the hot one currently. Compared with the traditional digital products, the one by using of ARM technology has its own features. Combining ARM microprocessors and operating systems, MP3 Player Digital Audio processing is

8、more flexible and Performance Optimization is more modified, furthermore, the whole system function is more comprehensive. On the basis of the two advanced technology-Digital Audio Technology and ARM Embedded System, as well as SG850 microprocessoras the core, the present study puts forward the solu

9、tions of MP3 digital audio playing system embedded by ARM. Regarding the design and implementation process of MP3 Digital Audio playing System software based on the ARM Embedded as the main content, this paper describes the related technologies and its specific processes, in which focuses on the ana

10、lysis of the transplantation of the uC/OS-II operating system and the undertaken process of USB Communication on the foundation of this system as well as the manipulation process of MP3 player. In the transplantation of operating system, based on the study of uC/OS-II kernel mechanism, the present s

11、tudy analyzes the code documents related with the Processing equipment and makes the relevant amendments which providing the specific steps of the transplantation of uC/OS-II. In USB communication, regarding the broadcast system as mass storage devices, by the utility of transmission equipment of BU

12、LK_ONLY, it achieves the agreement with the host USB communication. Moreover, this study has resolved the problem of the loss of data transmission by the usage of Flash memory management mechanisms. In MP3 player disposal, this thesis investigates the DMA memory management mechanisms and designs the

13、 double-buffer mode, which proposes the treatment process of MP3 player and achieves the playing of a large volume of audio data.This paper indicates that, the chievement of MP3 audio playing system is the practical products are obtained the desired goals. Meanwhile, as the technical superiority of

14、the systems construction, the system can easily expand the functionality.Keyword: Digital Audio-frequency; ARM; uC/OS-II Operate System; Transplantation;the Communication of the USB Interface; SG8501 緒論1.1 課題來源和背景本課題由深圳迪斯比科技有限公司提供,屬于公司合作項目。現(xiàn)代社會正步入一個信息化的時代,信息技術(shù)以前所未有的速度廣泛地應(yīng)用于社會生活的各個方面,改變著人們的工作、生活和學習方式

15、,并對社會的政治、經(jīng)濟、軍事、文化等各個領(lǐng)域產(chǎn)生深遠影響。信息化發(fā)展水平已成為衡量一個國家、一個城市現(xiàn)代化水平和綜合實力的重要標志。信息技術(shù)在保持和提高一個國家的經(jīng)濟發(fā)展和社會發(fā)展方面,已成為重要因素,信息技術(shù)是經(jīng)濟發(fā)展的關(guān)鍵,也將會引起社會生活的明顯變化。進入 20 世紀 80 年代以來,隨著超大規(guī)模集成電路和數(shù)字電子技術(shù)的發(fā)展,數(shù)字通信設(shè)備、計算機、光器件和視聽產(chǎn)品得到了革命性的發(fā)展,使人們進入了數(shù)字信息時代。在數(shù)字化潮流的驅(qū)動下,消費類電子產(chǎn)品已被視為繼信息產(chǎn)品之后,推動市場成長的重要力量。在提高消費類電子產(chǎn)品的性能與個性化需求的驅(qū)動下,企業(yè)界紛紛加大研發(fā)投入,不斷融入新的技術(shù)。在數(shù)字音

16、頻技術(shù)方面, WAV、MPEG 和 WMA 相繼出現(xiàn)的同時,MP3 也正如暴風雪一般橫掃整個音樂界,可見數(shù)字音頻領(lǐng)域的研究有著非常廣闊的前景1。本文采用了 ARM 微處理器作為整個音頻播放系統(tǒng)的控制和管理單元。ARM(Advanced RISC Machines),既可以認為是一個公司的名字,也可以認為是對一類微處理器的通稱,還可以認為是一種技術(shù)。1991 年 ARM 公司成立于英國劍橋,是一家既不生產(chǎn)芯片也不銷售芯片的公司,主要出售芯片設(shè)計技術(shù)的授權(quán)。目前,采用 ARM 技術(shù)知識產(chǎn)權(quán)(IP)核的微處理器,即我們通常所說的 ARM 微處理器,已遍及工業(yè)控制、消費類電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、

17、無線系統(tǒng)等各類產(chǎn)品市場,基于 ARM 技術(shù)的微處理器應(yīng)用約占據(jù)了 32 位的 RISC 微處理器 75以上的市場份額,ARM 技術(shù)正在逐步滲入到我們生活的各個方面2。本課題的出發(fā)點即為研究數(shù)字音頻技術(shù)在 ARM 嵌入式系統(tǒng)中的應(yīng)用,結(jié)合數(shù)字音頻和 ARM 嵌入式系統(tǒng)這兩個前沿技術(shù),設(shè)計一個基于 ARM 嵌入式系統(tǒng)的數(shù)字音頻播放系統(tǒng)。1.2 課題研究的現(xiàn)狀與意義與傳統(tǒng)的通用計算機,數(shù)字產(chǎn)品相比,利用 ARM 嵌入式系統(tǒng)技術(shù)開發(fā)的產(chǎn)品有其自己的特點,結(jié)合 ARM 微處理器和操作系統(tǒng),使數(shù)字音頻處理更加靈活,數(shù)字音頻的播放性能更加優(yōu)化,同時使得整個系統(tǒng)的功能更加的全面3。在硬件上影響數(shù)字音頻播放器性

18、能的兩個主要因素是中央處理器和解碼芯片。對于軟件解碼方式,沒有解碼芯片,系統(tǒng)硬件采用單芯片模式;對于硬件解碼方式,系統(tǒng)硬件采用含數(shù)字音頻解碼芯片的雙芯片模式。其中雙芯片的好處在于分離解碼芯片與控制芯片,這樣能夠帶來更為出色的解碼效果,但價格昂貴;單芯片為了簡化結(jié)構(gòu)犧牲了音質(zhì),但這樣產(chǎn)品的性價比高,適合中國的國情4。當今國內(nèi)市場上的數(shù)字音頻播放器根據(jù)生產(chǎn)廠商的不同主要分為國內(nèi)和國外兩種。其中國內(nèi)廠商生產(chǎn)的數(shù)字音頻播放器大多數(shù)出于對成本的考慮,在中央處理器只是使用了一些簡單的單片機或?qū)S玫膯螜C處理芯片,解碼芯片也是使用類似 STMicroelectronics 或者 Sigmate 的中低端解碼芯

19、片,這種設(shè)計使得產(chǎn)品的功能簡單、效果不佳;而國外廠商生產(chǎn)的數(shù)字音頻播放器一般定位在高端產(chǎn)品,大多數(shù)使用昂貴的專用處理芯片,采用 Philips 或者Telechips 的高端解碼芯片,這樣雖然使得產(chǎn)品的整體性能有較大的提高,但昂貴的價格使我們望而卻步5。基于以上分析,本課題提出了一個比較優(yōu)化的解決方案,在此采用的 SG850 是基于 ARM7 微處理器的單芯片形式,這里雖然采用了單芯片的硬件簡化形式,但由于 ARM 微處理器芯片相比一般單片機具有更加強大的處理能力,以及其集成了音頻 DSP,使得整體設(shè)計方案的性能達到非常優(yōu)化,同時更加適合符合市場需求。1.3 數(shù)字音頻解碼算法的實現(xiàn)方法各種不同

20、的編解碼算法方案是根據(jù)不同的應(yīng)用制定的,算法方案的實現(xiàn)方式也就與應(yīng)用場合密切相關(guān)。從總體上來講,音頻壓縮算法有三種實現(xiàn)的方案:(1) 軟件實現(xiàn)這種方法使用于計算機上的音頻應(yīng)用和組合多種娛樂功能的便攜式設(shè)備中,只需要進行音頻數(shù)據(jù)的軟件編解碼過程。編解碼算法可以用各種編程語言實現(xiàn),然后按照需要進行相應(yīng)的解碼或者存儲、傳輸操作。計算機之間交互音頻數(shù)據(jù)、播放歌曲時,就使用的這種軟件實現(xiàn)方法。 (2) 硬件實現(xiàn)這種方法使用于應(yīng)用設(shè)備上的算法實現(xiàn)。硬件電路根據(jù)算法原理對原始音頻數(shù)據(jù)進行相應(yīng)的處理變換,以獲得所需要的數(shù)據(jù)格式。在算法比較簡單的情況下,硬件實現(xiàn)的速度非常快。(3) 軟硬件實現(xiàn)這類方法一般是針對

21、在具體應(yīng)用設(shè)備上,需要進行比較復(fù)雜的音頻算法實現(xiàn)的情況。應(yīng)用設(shè)備要求實現(xiàn)相應(yīng)的處理,但純粹的硬件實現(xiàn)復(fù)雜度和技術(shù)難度都比較高,因此在硬件上嵌入處理器,處理器中實現(xiàn)算法的軟件編程,從而實現(xiàn)整個應(yīng)用系統(tǒng)的功能需求。這樣,具體使用哪種實現(xiàn)方案,需要根據(jù)具體情況來確定。本論文實現(xiàn)的音頻播放器解碼采用軟硬件實現(xiàn)方案,以 SG850 作為核心控制器的播放器,解碼采用軟件解碼6。1.4 本論文所做工作以及需解決的關(guān)鍵問題本文的主要工作包括 uc/OS-II 操作系統(tǒng)在 ARM 微處理器上的移植和 ARM 嵌入式 MP3 音頻播放系統(tǒng)的軟件設(shè)計與實現(xiàn)。在本文內(nèi)容安排上,首先對 MP3 音頻播放系統(tǒng)進行總體方案

22、設(shè)計,介紹系統(tǒng)開發(fā)硬件環(huán)境,以及確定開發(fā)平臺;接著介紹了 uC/OS-II 操作系統(tǒng)移植;然后分為 USB 通信,F(xiàn)lash 文件系統(tǒng)結(jié)構(gòu)及其存儲管理,人機界面以及音頻解碼四個部分,詳細分析了各個環(huán)節(jié)的軟件設(shè)計,提出解決方案;最后對該課題設(shè)計作總結(jié)并展望它的未來發(fā)展趨勢。綜觀整個課題設(shè)計,其中擬解決的關(guān)鍵問題有以下四個:(1) uC/ OS-II 嵌入式操作系統(tǒng)在 ARM 微處理器上的移植;(2) 實現(xiàn)數(shù)字音頻文件上傳下載的管理,與上位機(PC 機)之間的 USB 通訊;(3) 實現(xiàn)音頻數(shù)據(jù)在 Flash 上的存儲管理,包括數(shù)據(jù)暫存技術(shù)和壞塊管理技術(shù);(4) 結(jié)合 ARM 微處理器,實現(xiàn) MP

23、3 數(shù)字音頻格式文件的軟件解碼播放。在加速度計信號傳感器接收電路及信號處理方面,盡管已經(jīng)有很多人做過研究,但大都是直接接收從傳感器送來的模擬信號,通過硬件的方法濾波、放大、鎖相、消除干擾等一系列處理來實現(xiàn)。隨著時間的發(fā)展,硬件在某些方面的不足逐漸暴露出來,例如電路一旦固定、難以更改;無法進行微調(diào);價格昂貴等。為了克服這些不足,本課題嘗試將傳感器傳來的模擬信號經(jīng)過一些相關(guān)處理后送入嵌入式微控制器,再通過軟件的方法進行處理,這樣,就可以讓軟件分擔一部分硬件的功能,用于彌補因完全采用硬件處理所產(chǎn)生的不足,提高靈活性,降低成本。第二章 系統(tǒng)總體設(shè)計方案及其硬件環(huán)境2.1 總體設(shè)計目標MP3 數(shù)字音頻播

24、放器以嵌入式微處理器 SG850 為核心進行設(shè)計,要求:(1) 能夠通過 USB 與 PC 機進行通信下載音頻文件;(2) 能夠播放全碼流率的 MP3 格式;(3) 具有鍵盤輸入、LCD 顯示和存儲播放控制功能。2.2 系統(tǒng)總體設(shè)計方案基于 ARM 嵌入式系統(tǒng)的音頻播放系統(tǒng)從總體上可以分為硬件模塊和軟件模塊兩個部分。硬件作為底層支持,主要起著數(shù)據(jù)存儲、任務(wù)實施等功能;而軟件部分主要包括操作系統(tǒng)、USB 通信模塊、音頻解碼模塊和人機界面模塊等,主要協(xié)調(diào)硬件系統(tǒng),起著任務(wù)管理、數(shù)據(jù)通信、音頻播放等功能。本文主要針對 MP3 音頻播放系統(tǒng)的軟件進行研究。2.2.1 軟件總體設(shè)計方案系統(tǒng)軟件模塊主要包

25、括:(1) Bootloader 引導(dǎo)程序7(2) 操作系統(tǒng)軟件(3) USB 固件及文件系統(tǒng)模塊8(4) Flash 存儲管理模塊(5) 數(shù)字音頻解碼模塊(6) 人機界面模塊Bootloader 引導(dǎo)程序是整個程序結(jié)構(gòu)的最底層,它運行在操作系統(tǒng)和文件系統(tǒng)之前,結(jié)束于進入操作系統(tǒng)內(nèi)核之后,主要作用是對 SG850 進行硬件初始化,異常處理程序初始化910,外部存儲器空間初始化,準備好 C 語言運行環(huán)境,并完成存儲空間的重映射,然后將控制權(quán)交給操作系統(tǒng)內(nèi)核。uC/OS- II 嵌入式操作系統(tǒng)是整個軟件系統(tǒng)的核心,它負責調(diào)度各個任務(wù)的當前狀態(tài),在 uC/OS-II 嵌入式操作系統(tǒng)之上的是四個用戶創(chuàng)

26、建的任務(wù),包括 LCD 顯示任務(wù)、USB 通訊任務(wù)、MP3 數(shù)字音頻解碼錄音任務(wù)和按鍵掃描任務(wù),本文所要完成的軟件設(shè)計主要包括 uC/OS-II 嵌入式操作系統(tǒng)的移植和上述四個任務(wù)的程序設(shè)計。軟件結(jié)構(gòu)框圖如圖 2.1 所示:圖 2.1 軟件結(jié)構(gòu)框圖2.2.2 系統(tǒng)軟件工作流程介紹系統(tǒng)上電后,Bootloader 首先進行操作系統(tǒng)內(nèi)核、文件系統(tǒng)加載,在操作系統(tǒng)運行成功后啟動多任務(wù)的調(diào)度。具體系統(tǒng)工作流程如圖 2.2 所示。在本文中,鍵盤是本系統(tǒng)的唯一輸入設(shè)備,它負責控制各任務(wù)之間的通信。作為系統(tǒng)的主任務(wù),不同的按鍵產(chǎn)生不同的消息,系統(tǒng)進行相應(yīng)的任務(wù)調(diào)度,響應(yīng)用戶的操作意圖。當按 power 鍵一

27、下時候,傳遞系統(tǒng)開機消息,系統(tǒng)進行任務(wù)切換,調(diào)用 LCD 任務(wù),進入主菜單模式;開機狀態(tài)任何模式長按 power 鍵 2 秒鐘,產(chǎn)生關(guān)機消息,調(diào)用 LCD 任務(wù),LCD 顯示關(guān)閉,CPU 時鐘關(guān),進入關(guān)機狀態(tài);在主菜單模式 1 分鐘/3 分鐘/5 分鐘無任何按鍵操作且沒有 MP3 放/錄音任務(wù),產(chǎn)生關(guān)機消息,自動進入關(guān)機狀態(tài);在任何情況下 1 分鐘無任何按鍵操作,調(diào)用 LCD 任務(wù),LCD 顯示關(guān)閉,LCD 背光關(guān);當按播放鍵時,系統(tǒng)調(diào)度 LCD 任務(wù)和 MP3 播放任務(wù);當設(shè)備通過 USB 口連接主機時,系統(tǒng)調(diào)度 USB 任務(wù),與主機進行數(shù)據(jù)通信。圖 2.2 系統(tǒng)工作流程框圖2.3 系統(tǒng)設(shè)計

28、硬件環(huán)境2.3.1 SG850 微處理器內(nèi)部結(jié)構(gòu)及其特點SG850 系列芯片是北京 SiGma(希格瑪)公司推出的針對 16/32 位嵌入式微處理器,集成了音頻 DSP,該 MCU (Micro Controller Unit,微處理器)專為數(shù)字多媒體系統(tǒng)而設(shè)計,具有低成本和高性能的特點,其結(jié)構(gòu)如圖 2.3 所示。圖 2.3 SG850 內(nèi)部結(jié)構(gòu)圖SG850 內(nèi)置 ARM 公司設(shè)計的 16/32 位 ARM7TDMI 微處理器核,可執(zhí)行 32 位的ARM 指令,也可執(zhí)行 16 位的 THUMB 指令,集成了多種外圍部件,主要有以下一些主要特點:(1) 32 位低功耗輕巧型 RISC 內(nèi)核,0.

29、9MIPS/MHz,支持小端模式,以及地址重定位;(2) 片內(nèi)集成 64KB SRAM,包含 32KB 緊耦合 SRAM;(3) 96K 內(nèi)置 ROM, 可以存放語音 DSP 固件和相關(guān) API,驅(qū)動等;(4) 支持 MP3 解壓功能,包含 1.2K-32KB 語音解壓,ADPCM 編解碼算法固件;(5) 支持多種代碼啟動方式(可設(shè)置為從 NAND FLASH, NOR FLASH/ROM 等接口啟動) ;(6) 支持 4 通道 DMA 控制器;(7) 可支持 4 個外部中斷,20 個內(nèi)部中斷,2 個可設(shè)置的中斷優(yōu)先級;(8) 為節(jié)省系統(tǒng)功耗,支持睡眠和 IDLE 工作模式,支持 IO 和中斷

30、等喚醒功能;(9) 主 PLL 輸入時鐘 224M,輸出 464MHz 軟件可調(diào);可分頻出 48MHZ USB 時鐘;(10) 8/16 位存儲器接口,支持 SRAM,NOR-FLASH,ROM,NAND FLASH 等存儲器,訪問周期可軟件設(shè)置;(11) 自帶 DMA 功能的 LCD 控制器,可支持單色/彩色 320240 LCD;(12) 支持 USB1.1 接口;(13) 2 個 I2S 主/從控制器、UART 接口、I2C 主模式;(14) 10 位 DAC 和 PWM 語音輸出電路;(15) 10 位 4 通道 ADC;(16) 2 個 16 位預(yù)分頻 TIMER;(17) 支持實時

31、時鐘 RTC 功能,鬧鐘功能,看門狗功能;(18) 支持低電壓安全探測功能。2.3.2 硬件總體結(jié)構(gòu)圖對整個系統(tǒng)需要支持的功能分析可知,硬件模塊包括:(1) 主處理器(2) DC-DC 電源及電壓監(jiān)控電路(3) 存儲器,包括 FLASH、SDRAM 等(4) 通信接口,包括串口功能,USB 口功能(5) 其他。包括 LCD 及鍵盤功能、I2S、JTAG硬件結(jié)構(gòu)框圖如圖 2.4 所示圖 2.4 系統(tǒng)硬件結(jié)構(gòu)框圖 主處理器是整個系統(tǒng)的核心部件,起著系統(tǒng)控制,運算處理等重要的作用,系統(tǒng)選擇的是 SiGma(希格瑪)公司為數(shù)字多媒體系統(tǒng)而設(shè)計的 SG850 微處理器,具有低成本和高性能的特點,該處理器

32、內(nèi)核是 ARM 公司的 ARM7TDMI。DC-DC 電源模塊的作用主要是給系統(tǒng)各部件提供不同要求的電壓,系統(tǒng)用到的電壓等級有:5V、3.3V。多電壓等級就需要多種不同的 DC-DC 電壓轉(zhuǎn)換芯片,本系統(tǒng)選擇了開關(guān)電源和線性電源混合的供電方式。電壓監(jiān)控電路的目的是監(jiān)視主處理器供電電壓,一旦由于各種原因,電壓波動超過了一定范圍,將會產(chǎn)生復(fù)位信號,使主處理器進入復(fù)位狀態(tài),以免錯誤執(zhí)行操作。FLASH 存儲器用于存放 Bootloader 程序、操作系統(tǒng)內(nèi)核、文件系統(tǒng)和音頻數(shù)據(jù)。串口的作用是調(diào)試程序時候與 PC 機上超級終端聯(lián)合使用,在程序中設(shè)置串口通信信息,在 PC 機端可以看到相應(yīng)的調(diào)試信息;U

33、SB 口用于與 PC 機通信,下載或者上傳音頻數(shù)據(jù)1112。LCD 用于顯示系統(tǒng)菜單及曲目信息1314,I2S 用于播放 MP3 格式音頻數(shù)據(jù);JTAG 接口用于下載程序以及系統(tǒng)編程調(diào)試15。2.4 軟件開發(fā)平臺簡介2.4.1 ARM ADS 集成開發(fā)環(huán)境ARM ADS 全稱為 ARM Developer Suite16。是 ARM 公司推出的新一代 ARM 集成開發(fā)工具。現(xiàn)在 ADS 的最新版本是 1.2,它取代了早期的 ADS1.1 和 ADS1.0。它除了可以安裝在 Windows NT4,Windows 2000,Windows 98 和 Windows 95 操作系統(tǒng)下,還支持 Wi

34、ndows XP 和 Windows Me 操作系統(tǒng)。ADS 由命令行開發(fā)工具,ARM 實時庫,GUI 開發(fā)環(huán)境(Code Warrior 和 AXD),實用程序和支持軟件組成。 有了這些部件,用戶就可以為 ARM 系列的 RISC 處理器編寫和調(diào)試自己的開發(fā)應(yīng)用程序了。在本課題中,使用 ADS 1.2 進行編寫、編譯和初步調(diào)試程序。2.4.2 串口調(diào)試工具在本課題后期的調(diào)試中,用串口線連接 PC 機和音頻系統(tǒng),在程序中設(shè)置調(diào)試信息,使用串口調(diào)試工具,可以在 PC 機上看到相應(yīng)的調(diào)試信息。在調(diào)試過程開始之前,必須設(shè)置串口工作在 8 位,無奇偶校驗,1 停止位,115200 波特率下(與軟件中串

35、口模塊的波特率一致,否則,不能得到調(diào)試信息) 。2.5 小結(jié)本章首先簡要的介紹了本項目中給出本課題的總體設(shè)計目標,在對總體目標及系統(tǒng)功能進行需求分析的基礎(chǔ)上,提出了系統(tǒng)總體設(shè)計方案,并分析了系統(tǒng)軟件工作流程,最后簡要的介紹了系統(tǒng)開發(fā)的硬件環(huán)境及其軟件開發(fā)平臺。 第三章 uC/OS-II 操作系統(tǒng)移植ARM 芯片獲得了許多實時操作系統(tǒng)(Real Time Operating System)供應(yīng)商的支持,比較知名的有:Windows CE、Linux、pSOS、VxWorks、Nucleus、ECOS、uC/OS 等。uC/OS-II 是著名的、源碼公開的實時內(nèi)核,是專為嵌入式系統(tǒng)應(yīng)用設(shè)計的,可用

36、于各類 8 位、16 位和 32 位單片機或 DSP。從 uC/OS 算起,該內(nèi)核己有 10 余年應(yīng)用史,在諸多領(lǐng)域得到了廣泛應(yīng)用。在本項目中,采用了 uC/OS-II 實時操作系統(tǒng)171819。3.1 uC/OS-II 簡介uC/OS 最早的版本叫做 COS,關(guān)于 uC/OS 的論文,分兩期連載在美國的“嵌入式系統(tǒng)編程”(Embedded System Programming)雜志的 1992 年第 5 期和第 6 期上,COS 的源碼放在該雜志網(wǎng)頁的留言版(BBS)上供用戶下載。1992 年末,美國的 R&D 出版社出版了, “Micro uC/OS The Real-Time K

37、ernel”一書,書中附有一張軟盤,是 uC/OS 的源代碼。該書后來成為一本暢銷書,發(fā)行量突破了 15000 本。uC/OS 是基于優(yōu)先級的可剝奪型(Preemptive)實時內(nèi)核,可裁剪、可固化。由于與硬件相關(guān)的代碼僅 200 行左右,并寫在兩個單獨的文件中,且注解很清楚,故很容易將 uC/OS 移植到其它類型的 CPU 上。在后來的幾年中,用戶紛紛將 uC/OS 移植到了各種 CPU 上,應(yīng)用領(lǐng)域涵蓋了如照相機、醫(yī)療器械、音響設(shè)施、發(fā)動機控制、網(wǎng)絡(luò)設(shè)備、高速公路電話、自動柜員機、工業(yè)機器人等行業(yè)和設(shè)備。到 1998 年,作者出了他的第二本書“uC/OS-II The Real-Time

38、Kernel” ,給 uC/OS 增加了一些新功能,對源碼進行了整理,說明得更詳盡,書的厚度也增加了 200 頁,Jean J. Labrosse 先生開通了 uC/OS 的商業(yè)網(wǎng)站,并不斷推出新版本。自此,uC/OS-II 開始在各個領(lǐng)域重裝上陣,大顯身手。uC/OS-II 產(chǎn)品在現(xiàn)代商業(yè)應(yīng)用非常廣泛,已被相關(guān)機構(gòu)證實具有非常穩(wěn)定、可靠的性能,并成功應(yīng)用于生命科學、航天工程等重大科研項目中。并且由于其極小的內(nèi)核,特別適用于對程序代碼存儲空間要求極其敏感的嵌入式系統(tǒng)開發(fā)。uC/OS-II 是一款源碼公開的實時操作系統(tǒng)2021,真正支持多個任務(wù)同時運行,各個任務(wù)有獨立的棧空間,并提供系統(tǒng)服務(wù)、中

39、斷管理等功能。作為一個實用的實時操作系統(tǒng),uC/OS-II 還具有以下特點:可移植性(Portable) 、可固化(ROMable) 、可裁剪(Scalable) 、搶占式(Preemptive) 。教學系統(tǒng)已成功運行的 uC/OS-II 系統(tǒng)是 Embest IDE for ARM 工具編譯調(diào)試通過的簡單內(nèi)核和用戶程序,使用 Embest IDE for ARM 可以查看內(nèi)核的各種狀態(tài),包括任務(wù)(Task) 、隊列(Queue)、信號量(Semaphore) 、郵箱(Mailbox) 、事件(Event) 、互斥量(Mutex)等;同時提供時間相關(guān)函數(shù)、棧空間、內(nèi)存(Memory)申請和釋放

40、等操作。在當前各種嵌入式操作系統(tǒng)之中,uC/OS-II 以其優(yōu)異的性能,在各大領(lǐng)域中得到了廣泛的應(yīng)用。uC/OS 和 uC/OS-II 是專門為嵌入式應(yīng)用設(shè)計的實時操作系統(tǒng)內(nèi)核。注解得很詳細的源代碼有 200 頁,其中 95%左右是用 C 語言寫的,與 CPU 類型相關(guān)的代碼用 8088 的匯編語言寫成,不超過 200 行。3.2 移植要求所謂移植,就是使一個實時內(nèi)核能在某個微處理器或微控制器上運行。為了方便移植,大部分的 uC/OS-II 代碼是用 C 語言寫的;但仍需要用 C 和匯編語言寫一些與處理器相關(guān)的代碼,這是因為 uC/OS-II 在讀寫處理器寄存器時只能通過匯編語言來實現(xiàn)。由于

41、uC/OS-II 在設(shè)計時就己經(jīng)充分考慮了可移植性,所以 uC/OS-II 的移植相對來說是比較容易的。要使 uC/OS-II 正常運行,處理器必須滿足以下要求22:處理器的 C 編譯器能產(chǎn)生可重入代碼。可重入的代碼指的是一段代碼可以被多個任務(wù)同時調(diào)用,而不必擔心會破壞數(shù)據(jù)。也就是說,可重入型函數(shù)在任何時候都可以被中斷執(zhí)行,過一段時間以后又可以繼續(xù)運行,而不會因為在函數(shù)中斷的時候被其他的任務(wù)重新調(diào)用,影響函數(shù)中的數(shù)據(jù)。在 程 序 中 可 以 打 開 和 關(guān) 閉 中 斷 。 在 uC/OS-II 中 , 可 以 通 過OS_ENTER_CRITICAL()或者 OS_EXIT_CRITICAL(

42、)宏來控制系統(tǒng)關(guān)閉或者打開中斷,這需要處理器的支持。在 ARM7TDMI 的處理器上,可以設(shè)置相應(yīng)的寄存器來關(guān)閉或者打開系統(tǒng)的所有中斷。處理器支持中斷,并且能產(chǎn)生定時中斷(通常在 10 至 100Hz 之間)。uC/OS-II 是通過處理器產(chǎn)生的定時器中斷來實現(xiàn)多任務(wù)之間的調(diào)度的, ARM7TDMI 的處理器上可以產(chǎn)生定時器中斷。 處理器支持能夠容納一定量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧。 處理器有將堆棧指針和其它 CPU 寄存器讀出和存儲到堆棧或內(nèi)存中的指令。uC/OS-II 進行任務(wù)調(diào)度的時候,會把當前任務(wù)的 CPU 寄存器存放到此任務(wù)的堆棧中,然后,再從另一個任務(wù)的堆棧中恢復(fù)原來的工作寄

43、存器,繼續(xù)運行另一個任務(wù)。所以,寄存器的入棧和出棧是 uC/OS-II 多任務(wù)調(diào)度的基礎(chǔ)。在本項目中,SG850 微處理器完全符合上面要求,所以可以移植 uC/OS-II。3.3.1 uC/OS- II 任務(wù)調(diào)度機制uC/OS- II 總是運行進入就緒態(tài)任務(wù)中優(yōu)先級最高的那一個。確定任務(wù)優(yōu)先級的高低,下面該哪個任務(wù)運行的工作是由調(diào)度器(Scheduler)完成的。任務(wù)級的調(diào)度是由函數(shù) OSSched()完成的,中斷級的調(diào)度是由另一個函數(shù) OSIntExt()完成的。3.3.2 uC/OS- II 任務(wù)管理機制任務(wù)可以是一個無限的循環(huán),也可以在一次執(zhí)行完畢后被刪除掉。這里要注意的是,任務(wù)代碼并不

44、是被真正的刪除了,而只是 uC/OS-II 不再理會該任務(wù)代碼,所以該任務(wù)代碼不會再運行。任務(wù)看起來與任何 C 函數(shù)一樣,具有一個返回類型和一個參數(shù),只是它從不返回。任務(wù)的返回類型必須被定義成 void 型。在本節(jié)中所提到的函數(shù)可以在 OS_TASK.C 文件中找到。uC/OS-II 可以管理多達 64 個任務(wù),并從中保留了四個最高優(yōu)先級和四個最低優(yōu)先級的任務(wù)供自己使用,所以用戶可以使用的只有 56 個任務(wù)。任務(wù)的優(yōu)先級越高,反映優(yōu)先級的值則越低。在最新的 uC/OS-II 版本中,任務(wù)的優(yōu)先級數(shù)也可作為任務(wù)的標識符使用。3.3.3 uC/OS- II 的內(nèi)存管理機制在 ANSI C 中可以用

45、 malloc()和 free()兩個函數(shù)動態(tài)地分配內(nèi)存和釋放內(nèi)存。但是,在嵌入式實時操作系統(tǒng)中,多次這樣做會把原來很大的一塊連續(xù)內(nèi)存區(qū)域,逐漸地分割成許多非常小而且彼此又不相鄰的內(nèi)存區(qū)域,也就是內(nèi)存碎片。由于這些碎片的大量存在,使得程序到后來連非常小的內(nèi)存也分配不到。另外,由于內(nèi)存管理算法的原因,malloc ()和 free()函數(shù)執(zhí)行時間是不確定的。在 uC/OS-II 中,操作系統(tǒng)把連續(xù)的大塊內(nèi)存按分區(qū)來管理。每個分區(qū)中包含有整數(shù)個大小相同的內(nèi)存塊,如圖 3. 1 ( a)所示。利用這種機制,uC/OS-II 對 malloc()和 free()函數(shù)進行了改進,使得它們可以分配和釋放固

46、定大小的內(nèi)存塊。這樣一來,malloc()和 free()函數(shù)的執(zhí)行時間也就固定了。如圖 3. 1 (b),在一個系統(tǒng)中可以有多個內(nèi)存分區(qū)。這樣,用戶的應(yīng)用程序就可以從不同的內(nèi)存分區(qū)中得到大小不同的內(nèi)存塊。但是,特定的內(nèi)存塊在釋放時必須重新放回它以前所屬的內(nèi)存分區(qū)。顯然,采用這樣的內(nèi)存管理算法,上面的內(nèi)存碎片問題就得到了解決。圖 3.1 內(nèi)存分區(qū)示意圖3.3.4 uC/OS- II 的通信與同步機制任務(wù)之間共享數(shù)據(jù)和提供任務(wù)之間的通信,除了利用宏 OS_ENTER_ CRITICAL()和 OS_EXIT_CEITICAL() 來 關(guān) 、 開 中 斷 以 及 利 用 函 數(shù) OSSchedLo

47、ck() 和OSSchedUnlock()對任務(wù)調(diào)度函數(shù)上鎖和開鎖等方法外,還可以通過信號量、郵箱和信息隊列來完成通信。一個任務(wù)或者中斷服務(wù)子程序可以通過事件控制塊 ECB ( Event Control Blocks)來向另外的任務(wù)發(fā)信號。這里,所有的信號都被看成是事件(Event)。一個任務(wù)還可以等待另一個任務(wù)或中斷服務(wù)子程序給它發(fā)送信號。只有任務(wù)可以等待事件發(fā)生,中斷服務(wù)子程序是不能這樣做的。對于處于等待狀態(tài)的任務(wù),可以給它指定一個最長等待時間,以此來防止因為等待的事件沒有發(fā)生而無限期的等下去。多個任務(wù)可以同時等待同一個事件的發(fā)生。在這種情況下,當該事件發(fā)生后,所有等待該事件的任務(wù)中,優(yōu)

48、先級最高的任務(wù)得到了該事件并進入就緒狀態(tài),準備執(zhí)行。這里的事件,可以是信號量、郵箱或者消息隊列等。3.4 uC/OS-II 的移植步驟uC/OS-II 的體系結(jié)構(gòu)2324如圖 3.2 所示。在移植過程中,與處理器相關(guān)的的代碼主要集中在 OS_CPU.H、OS_CPU_C.C 和 OS_CPU_A.ASM 這三個文件中。uC/OS 中的任務(wù)總是處于睡眠態(tài)、就緒態(tài)、運行態(tài)、等待狀態(tài)和中斷服務(wù)態(tài) 5 種狀態(tài)之一。任何任務(wù)必須首先創(chuàng)建處于就緒態(tài)之后才有可能運行,任務(wù)創(chuàng)建函數(shù) OSTaskCreate()和OSTaskCreateExt()會初始化任務(wù)的棧結(jié)構(gòu),使堆棧看起來就像剛剛發(fā)生過中斷一樣,所有寄

49、存器保存在任務(wù)的堆棧之中。若要任務(wù)恢復(fù)執(zhí)行,只需在最后執(zhí)行一條中斷返回指令即可。在 uC/OS-II 的移植文件 OS_CPU_C.C 中,唯一必要的函數(shù)就是OSTaskStkinit()。該函數(shù)會在任務(wù)創(chuàng)建時被調(diào)用,用來初始化任務(wù)的堆棧結(jié)構(gòu)。在uC/OS-II 的另一個移植文件 OS_CPU_A.ASM 中,需要改寫 OSSstartHighRdy() 、OSCtxSW()、OSIntCtxSW()和 OSTickISR()4 個函數(shù)。圖 3.2 uC/OS-II 體系結(jié)構(gòu)圖3.4.1 OS_CPU.H 文件相關(guān)配置這個文件中包含了一些需要根據(jù) CPU 的指令字長和硬件更改的定義。1 定義與

50、編譯器無關(guān)的數(shù)據(jù)類型typedef unsigned char BOOLEAN; /*布爾變量*/typedef unsigned char INTBU; /*無符號 8 位整型變量*/typedef signed char INTBS; /*有符號 8 位整型變量*/typedef unsigned short INT16U; /*無符號 16 位整型變量*/typedefsigned short INT16S; /*有符號 16 位整型變量*/typedef unsigned int INT32U; /*無符號 32 位整型變量*/typedef signed int INT32S; /*

51、有符號 32 位整型變量*/typedef float FP32; /*單精度浮點數(shù)(32 位長度) */typedef double FP64; /*雙精度浮點數(shù)(64 位長度) */typedef INT32U OS_STK; /*堆棧是 32 位寬度*/2 堆棧單位因為處理器現(xiàn)場的寄存器在任務(wù)切換時都將會保存在當前運行任務(wù)的堆棧中,所以 OS_STK 數(shù)據(jù)類型應(yīng)該是和處理器的寄存器長度一致的。typedef INT32U OS_STK; /*堆棧是 32 位寬度*/3 堆棧增長方向堆棧由高地址向低地址增長,這也是和編譯器有關(guān)的。當進行函數(shù)調(diào)用時,入口參數(shù)和返回地址一般都會保存在當前任務(wù)的

52、堆棧中,編譯器的編譯選項和由此生成的堆棧指令就會決定堆棧的增長方向。#define OS_STK_GROWTH 1 /*堆棧是從上往下長的*/4 關(guān)閉中斷和打開中斷OS_ENTER_CRITICAL()宏被定義為 OS_CPU_A.S 中的 ARMDisableInt()關(guān)閉中斷;OS_EXIT_CRITICAL()宏被定義為 OS_CPU_A.S 中的 ARMEnableInt()打開中斷。3.4.2 OS_CPU_C.C 文件相關(guān)配置這個文件包含一個和 CPU 結(jié)構(gòu)相關(guān)的任務(wù)堆棧初始化函數(shù),以及用戶可以利用的一系列鉤子函數(shù),可以處理特殊硬件擴展、MMU、調(diào)試等之用。1 任務(wù)堆棧的初始化每個

53、任務(wù)都需要有自己的堆棧空間,以便進行任務(wù)切換的時候能夠?qū)敃r的處理器現(xiàn)場保存到任務(wù)的堆棧中去,在下一次執(zhí)行的時候能夠恢復(fù)出來。在每次進行處理器現(xiàn)場保存的時候,需要按照一定的順序進行堆棧操作,這個順序就是任務(wù)堆棧設(shè)計。任務(wù)堆棧的設(shè)計是在任務(wù)初始化時進行的,主要是在堆棧增長方向上如何定義每個需要保存的寄存器位置。在 ARM 體系結(jié)構(gòu)中,處理器的現(xiàn)場通常是指PC, LR,RO, , R12, CPSR, SPSR這些寄存器。在系統(tǒng)中,任務(wù)堆棧空間有高至低保存著 PC, LR, R12, R11, R1, CPSR, SPSR。堆棧是任務(wù)上下文(contex)的一部分,OSTaskCreate()和

54、OSTaskCreateExt()通過調(diào)用 OSTaskStkInit()來初始化任務(wù)的堆棧結(jié)構(gòu)。堆棧的初始化結(jié)構(gòu)如圖 3.3 所示。圖 3.3 堆棧初始化結(jié)構(gòu)示意圖uC/OS-II 的任務(wù),在沒有執(zhí)行的時候堆棧看起來就象剛發(fā)生過中斷并將所有的寄存器保存到堆棧中的情形一樣。在用戶建立任務(wù)的時候,用戶傳遞任務(wù)的地址,pdata 指針,任務(wù)的堆棧棧頂和任務(wù)的優(yōu)先級給 OSTaskCreate()和 OSTaskCreateExt()。一旦用戶初始化了堆棧,OSTaskStkInit()就需要返回堆棧指針所指的地址。OSTaskCreate()和 OSTaskCreateExt()會獲得該地址并將它

55、保存到任務(wù)控制塊(OS_TCB)中。2 鉤子函數(shù)在 OS_CPU_C.C 中,有一些鉤子函數(shù)結(jié)構(gòu),如果沒有特殊需求,則只需要簡單地將它們都實現(xiàn)為空函數(shù)就可以了。3.4.3 OS_CPU_A. S 文件相關(guān)配置這個文件是移植的重點,主要需要根據(jù)硬件修改四個函數(shù):OSStartHighRdy()OSCtxSw()OSIntCtxSw()OSTickISR()1 任務(wù)啟動函數(shù) OSStartHighRdy()系統(tǒng)在創(chuàng)建完最初的若干任務(wù)后,系統(tǒng)啟動函數(shù) OSStart()開始運行, OSStart()找到最優(yōu)先的任務(wù),最后就調(diào)用 OSStartHighRdy()來啟動該任務(wù)。在 OSStartHigh

56、Rdy()被調(diào)用之前,優(yōu)先級最高的任務(wù)的 TCB(任務(wù)控制塊)的指針,也是剛才放好的堆棧指針,己經(jīng)被 OSStart()放在全局變量 OSTCBHighRdy 中。OSStartHighRdy()函數(shù)的任務(wù)歸結(jié)如下:進來了之后,先可以調(diào)用一個允許用戶定 HOOK 函數(shù);把全局變量 OSRuning 設(shè)置為 TRUE,標志多任務(wù)系統(tǒng)開始運行;從 OSHighRdy 指向的 TCB(任務(wù)控制塊)中拿到堆棧指針,放在 R13 寄存器里;從堆棧中恢復(fù)所有其他的相關(guān)寄存器,包括程序狀態(tài)寄存器(CPSR) ,通用寄存器(R0-R12) ,連接寄存器(LR) ,程序計數(shù)寄存器(PC) 。這樣,任務(wù)函數(shù)就象被

57、調(diào)轉(zhuǎn)指令(BL)調(diào)用了一樣,從任務(wù)的第一條指令開始執(zhí)行了。2 任務(wù)級切換函數(shù) OSCtxSw()除了最初的調(diào)度之外,系統(tǒng)里還會發(fā)生其他兩種情況的調(diào)度。一,一個任務(wù)調(diào)用OsxxxPend()、OSTimDelay()之類的函數(shù),主動放棄 CPU 的使用權(quán);二,一個任務(wù)正在執(zhí)行,不愿意中止卻被中斷了,這個中斷源恰恰是 OSTimTick 之類,要引起系統(tǒng)重新調(diào)度,這時發(fā)生的是搶占式調(diào)度(preemptive scheduling),搶占式調(diào)度是實時系統(tǒng)實現(xiàn)的法寶,也是 uC/OS-II 的特色。3 中斷級切換函數(shù) OSIntCtxSw()OSIntCtxSw()是剛才提到的第二種情況,在中斷中發(fā)生

58、調(diào)度時用到。如果一個中斷需要從中斷服務(wù)程序中進行調(diào)度,uC/OS-II 的文檔給出了這種調(diào)度的處理方法,具體步驟是:一旦有這種中斷發(fā)生,就保存正在運行任務(wù)的上下文,然后處理中斷,再調(diào)用一個操作系統(tǒng)提供的在中斷服務(wù)程序(ISR)中使用的 Mutex, MailBox 之類的服務(wù)函數(shù),在這些函數(shù)的最后都會調(diào)用 OSIntExit(),在這里發(fā)生了調(diào)度,OSIntExit()找出可以運行的最高優(yōu)先級任務(wù),把他的 TCB 指針放在 OSTCBHighRdy 里,最后如果需要調(diào)度,OSIntCtxSw()被調(diào)用。需要注意,這么多層的調(diào)用,在處理時一定要小心,每一個用匯編語言寫成的函數(shù)都要象一個普通的函數(shù)

59、一樣,現(xiàn)場保存,處理,現(xiàn)場恢復(fù)。當然,這里保存和恢復(fù)的東西多了點,是整個的任務(wù)上下文。4 時鐘節(jié)拍中斷服務(wù)函數(shù) OSTickISR()這是 uC/OS-II 搶占式調(diào)度在中斷服務(wù)程序(ISR)的一個標本。當一個優(yōu)先級高的任務(wù)放棄 CPU 使用權(quán),例如要休眠 10 個 Tick(時鐘節(jié)拍),系統(tǒng)調(diào)度一個低優(yōu)先級的任務(wù)執(zhí)行之。OSTickISR()的具體任務(wù)步驟是:首先為休眠的任務(wù)計時,每次執(zhí)行,就把休眠任務(wù)剩余的睡覺時間減去一個時鐘節(jié)拍。如果發(fā)現(xiàn)一個任務(wù)睡夠了,就順便恢復(fù)它為就緒態(tài)。做完該做的一切,一個對 OSIntExit()的調(diào)用,使調(diào)度發(fā)生了。OSIntExit()從所有已經(jīng)就緒的任務(wù)中,

60、選擇一個優(yōu)先級最高的,恢復(fù)現(xiàn)場并往下執(zhí)行。所以可以相信,10 個時鐘節(jié)拍之后,恢復(fù)到那個高優(yōu)先級的任務(wù)現(xiàn)場,然后執(zhí)行它。需要注意的是,ARM 的 IRQ 中斷發(fā)生后的 PC 保存,程序計數(shù)器 PC=LR-4,而不是前面的 PC=LR。另外,保存的是 SVC 模式下的現(xiàn)場,中斷后處理器進入 IRQ 模式,訪問不到 SVC 模式下的 R13,于是在 IRQ 模式下,只好先保存 SPSR 和 LR,然后盡快退回到 SVC 模式,這時的 R13 是任務(wù)的堆棧指針。立即保存所有寄存器。記住這里除了壓棧所有寄存器,還要保存堆棧指針到當前任務(wù)的 TCB 中,因為在 OSIntCtxSw()里沒有做這個工作。OSIn

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論