www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀] 本文首先介紹了實時內(nèi)核μCOS-II和微處理器ATmega128的特點,論述了在此基礎上進行移植,編寫API函數(shù),建立自己的RTOS,和用這些API函數(shù)建立嵌入式應用系統(tǒng)的方法和步驟

 本文首先介紹了實時內(nèi)核μCOS-II和微處理器ATmega128的特點,論述了在此基礎上進行移植,編寫API函數(shù),建立自己的RTOS,和用這些API函數(shù)建立嵌入式應用系統(tǒng)的方法和步驟。最后總結了運用這一嵌入式應用系統(tǒng)開發(fā)便攜式醫(yī)療設備的優(yōu)點。

引 言

本文介紹μC/OS-Ⅱ移植到ATMEL公司的8位微控制器ATmega128上的過程。所謂移植,就是使一個實時內(nèi)核可以在某個微處理器上運行,并在此基礎上進行驅動程序開發(fā),使之成為一個實用的嵌入式系統(tǒng)。嵌入式系統(tǒng)包括了硬件和軟件兩部分,由于系統(tǒng)硬件資源的限制和實際應用的要求,應用系統(tǒng)對軟件的基本要求是體積小,執(zhí)行速度快,具有較好的裁減性和可移植性。

嵌入式系統(tǒng)的軟件一般由嵌入式操作系統(tǒng)和應用軟件組成,通過在操作系統(tǒng)之上開發(fā)應用軟件,可以屏蔽掉很多底層硬件細節(jié),使得應用程序調(diào)試方便,移植簡單,易維護,同時開發(fā)周期也短。多數(shù)實時操作系統(tǒng)為用戶提供一些標準的API函數(shù),程序開發(fā)人員可以利用這些API函數(shù)進行應用程序開發(fā)。但是現(xiàn)在商用型的實時操作系統(tǒng)價格非常昂貴,而免費型的實時操作系統(tǒng)μCOS-II作為一個源代碼公開的實時內(nèi)核已經(jīng)有了10余年使用實踐,許多行業(yè)都有成功應用該內(nèi)核的實例。但由于μCOS-II只是一個實時內(nèi)核,它沒有像商用型實時操作系統(tǒng)那樣提供API函數(shù)接口,有很多工作需要用戶去完成,還需要根據(jù)實際應用需要進行功能擴展,包括底層的硬件驅動、文件系統(tǒng)、用戶圖形接口等程序的編寫。

μC/OS-II嵌入式實時操作系統(tǒng)簡介

μC/OS-II是著名的、源碼公開的實時內(nèi)核,可用于各類8位、16 位、32位單片機或DSP。μC/OS-II是一個完整、可移植、可固化、可裁減的占先式實時多任務內(nèi)核。它用ANSIC語言編寫,包含小部分與硬件有關的匯編代碼,使之便于移植,可以在不同架構的微處理器上使用。到目前為止,該內(nèi)核已有10多年的應用史,在醫(yī)療、網(wǎng)絡、通信等許多領域得到了廣泛應用。μC/OS-II內(nèi)核可以分為幾個獨立的部分,分別是任務管理、時間管理、任務間通信、內(nèi)存管理幾個獨立的部分,他的許多功能都是可配置的,這樣可以根據(jù)應用的需要對操作系統(tǒng)進行裁減。μC/OS-II是占先式實時內(nèi)核,他總是運行在就緒條件下優(yōu)先級最高的任務,μC/OS-II總共可以管理64個任務,賦予每個任務的優(yōu)先級必須是不同的,每個任務都有自己獨立的堆棧,可以壓低用戶程序對內(nèi)存的需求。全部μC/OS-II的函數(shù)調(diào)用與服務執(zhí)行時間具有可確定性,它的系統(tǒng)服務的執(zhí)行時間不依賴于應用程序任務的多少。μC/OS-II中的任務可以是一個無限的循環(huán),也可以在執(zhí)行完一次后被刪除掉,任務在休眠、就緒、運行、等待和掛起等幾個狀態(tài)之間進行轉換。μC/OS-II要求用戶提供定時中斷來實現(xiàn)延時和超時控制等功能,這個定時中斷稱為時鐘節(jié)拍,他的實際頻率由用戶的應用程序決定,一般為10~100Hz 。節(jié)拍頻率越高,系統(tǒng)的負荷越重。μC/OS-II中有三種用于數(shù)據(jù)共享和任務通信的方法:信號量、郵箱和消息隊列。一個任務或者中斷服務子程序可以通過事件控制塊向另外的任務發(fā)信號;一個任務可以等待另一個任務或中斷服務子程序給它發(fā)送信號;或者是多個任務等待同一個信號的發(fā)生,在這種情況下,優(yōu)先級最高的任務將得到這一信號并進入就緒狀態(tài)準備執(zhí)行。

ATmega128微處理器的硬件特點

ATmega128的MCU包括一個算術邏輯單元(ALU) ,一個狀態(tài)寄存器(SREG) ,一個通用工作寄存器組和一個堆棧指針。狀態(tài)寄存器(SREG) 的最高位I是全局中斷允許位。如果全局中斷允許位為零,則所有中斷都被禁止。當系統(tǒng)響應一個中斷后,I位將由硬件自動清“0”;當執(zhí)行中斷返回(RETI) 指令時,I位由硬件自動置“1”,從而允許系統(tǒng)再次響應下一個中斷請求。通用工作寄存器組是由32個8位的通用工作寄存器組成。其中R26~R31這6 個寄存器還可以兩兩合并為3 個16位的間接地址寄存器,這些寄存器可以用來對數(shù)據(jù)存儲空間和程序存儲空間進行間接尋址的寄存器。堆棧指針(SP) 是一個指示堆棧頂部地址的16 位寄存器。ATmega128單片機的硬件堆棧的生長方向是向下的(從高地址向低地址生長) ,所以軟件堆棧在定義的時候,也要采取相同的生長方向。ATmega128單片機的數(shù)據(jù)存儲器是線形的,從低地址到高地址依次是CPU寄存器區(qū)(32個通用寄存器) ,I/O寄存器區(qū),數(shù)據(jù)存儲區(qū)。

ATmega128的中斷響應機制

ATmega128有34個不同的中斷源,每個中斷源和系統(tǒng)復位在程序存儲空間都有一個獨立的中斷向量(中斷入口地址) 。每個中斷源都有各自獨立的中斷允許控制位,當某個中斷源的中斷允許控制位為“1”且全局中斷允許位I也為“1”時,系統(tǒng)才響應該中斷。當系統(tǒng)響應一個中斷請求后,會自動將全局中斷允許位I清零,此時,后續(xù)中斷響應被屏蔽。當系統(tǒng)執(zhí)行中斷返回指令RETI時,會將全局中斷允許位I置“1”,以允許響應下一個中斷。若用戶想實現(xiàn)中斷嵌套,必須在中斷服務子程序中將全局中斷允許位I置“1”。在中斷向量表中,處于低地址的中斷具有高的優(yōu)先級。優(yōu)先級高只是表明在多個中斷同時發(fā)生的時候,系統(tǒng)先響應優(yōu)先級高的中斷,并不含有高優(yōu)先級的中斷能打斷低優(yōu)先級的中斷處理工作的意思。由于μC/OS-Ⅱ的任務切換實際上是模擬一次中斷,因此需要知道CPU的中斷響應機制。中斷發(fā)生時,ATmega128按以下步驟順序執(zhí)行:

(1) 全局中斷允許位I清零。

(2) 將指向下一條指令的PC值壓入堆棧,同時堆棧指針SP減2。

(3) 選擇最高優(yōu)先級的中斷向量裝入PC,程序從此地址繼續(xù)執(zhí)行中斷處理。

(4) 當執(zhí)行中斷處理時,中斷源的中斷允許控制位清零。中斷結束后,執(zhí)行RETI指令,此時:

①全局中斷允許位I置“1”。

② PC從堆棧推出,程序從被中斷的地方繼續(xù)執(zhí)行。特別要注意的是:ATmega128A單片機在響應中斷及從中斷返回時,并不會對狀態(tài)寄存器SREG 和通用寄存器自動進行保存和恢復操作,因此,對狀態(tài)寄存器SREG 和通用寄存器的中斷保護工作必須由用戶來完成。

ATmega128的定時器中斷

ATmega128有三個定時器:T0,T1,T2,可以為μCOS-II提供精確的時鐘源。ATmega128的三個定時器都有計數(shù)溢出中斷功能,而且T1和T2還有匹配比較中斷,即定時器計數(shù)到設定的值時,產(chǎn)生中斷并自動清零。若系統(tǒng)采用這種中斷方式,其好處是在中斷服務程序ISR中不需要重新裝載定時器的值。[!--empirenews.page--]

將μCOS-II移植到ATmega128單片機上

移植就是使一個實時內(nèi)核能在ATmega128上運行。μCOS-II大部分的代碼是用ANSIC編寫的,因此移植性很好。但是對不同的微處理器,仍然需要使用C和匯編語言來編寫其中與處理器相關的代碼,寄存器的讀、寫只能通過匯編語言的存儲和加載指令來實現(xiàn)。要使μCOS-II能夠正常工作,處理器必須滿足以下要求:

①處理器的C編譯器能產(chǎn)生可重入代碼;可重入代碼是指可以被一個以上的任務調(diào)用,而不必擔心其數(shù)據(jù)會被破壞的代碼??芍厝氪a任何時候都可以被中斷,一段時間以后又可以重新運行,而相應的數(shù)據(jù)不會丟失,不可重入代碼則不行。本文所使用ImageCrafT公司的ICCAVRV6. 30編譯器能產(chǎn)生可重入代碼;

②用C語言可以打開和關閉中斷,本文所使用的ICCAVRV6. 30編譯器支持在C語言中內(nèi)嵌匯編語句且提供專門開關中斷的宏:CLI() 和SEI() 。這樣,使得在C語言中開關中斷非常方便;

③處理器支持中斷,并且能夠產(chǎn)生定時中斷(通常在10-100Hz 之間) ,ATmega128,有3 個定時器,能產(chǎn)生μC/OS-Ⅱ所需的定時中斷;

④ 處理器能夠支持容納一定數(shù)量的硬件堆棧,ATmega128有4KRAM,硬件堆棧可以開辟在這4KRAM中;

⑤處理器有將堆棧指針和其他寄存器讀取和存儲到堆?;騼?nèi)存的指令,一般的單片機都滿足這個要求(如PUSH、POP指令) ,且ATmega128還具有直接訪問I/O寄存器的指令( IN、OUT等) 。

移植的實現(xiàn)μC/OS-Ⅱ的移植工作包括以下幾個內(nèi)容:

(1) 用Typedef聲明與編譯器相關的數(shù)據(jù)類型(在OS-CPU. H文件中) ,由于不同的微處理器有不同的字長,在μC/OS-Ⅱ代碼中不能使用C語言的shORT、inT、lOng 等數(shù)據(jù)類型,而采用INT8U、INT16U、INT32U等直觀又可移植的數(shù)據(jù)類型來代換相應數(shù)據(jù)類型。

(2) 用# definE設置一個常量OS-STK-GROWTH的值(OS-CPU. H) ,決定堆棧的生長方向,置0表示堆棧從下往上生長,置1表示堆棧從上往下生長。

(3) # definE聲明三個宏(OS-CPU. H) 。即進入臨界代碼段(criTicaLcOdEsecTiOn) 的方法OS-CRITICAL-METHOD定義為3 ,在宏OS-ENTER-CRITICAL() 中得到當前處理器狀態(tài)字的值,并將其保存在C函數(shù)的局部變量中,這個變量在宏OS-EXIT-CRITICAL( ) 中用于恢復PSW。宏OS-TASK-SW() 是在內(nèi)核從低優(yōu)先級任務切換到高優(yōu)先級任務時用到的,它總是在任務級代碼中被調(diào)用。在ATMEGA128上移植,直接調(diào)用OSCTxSw () 任務切換函數(shù)就可以了。

(4) 用C語言編寫十個簡單的函數(shù)(OS-CPU-C. C) ,OS2TAskSTKIniT() ;OSIniTHoOkBegiN() ;OSIniTHoOKEnd () ; OSTAskCreaTeHoOK( ) ;OSTAskDelHoOK( ) ;OSTAskSw HoOK();OSTAskSTaTHoOK() ;OSTimETickHoOk () ;OSTCB IniTHoOK() ;OSTAsKIdleHoOK() ;實際需要修改的只有OSTAskSTKIniT() 函數(shù),其它九個函數(shù)都是由用戶定義的。如果用戶需要使用這九個函數(shù),可將文件OS-CFG. H中的# definEcOnsTAnTOS-CPU-HOOKS-EN設為1,設為0表示不使用這些函數(shù)。函數(shù)OSTAskSTKIniT( ) 是由OSTAskCreaTE() 或OSTAskCreaTEExT() 調(diào)用,用來初始化任務堆棧的。經(jīng)初始化后的任務堆棧應該跟發(fā)生過一次中斷后任務的堆棧結構一樣。由前敘述可知,ATmega128在發(fā)生中斷后,自動保存了程序計數(shù)器PC。為了保存全部現(xiàn)場,還需要保存狀態(tài)寄存器SREG ,R0~R31這32個通用寄存器及SP的值。

(5) 編寫四個匯編語言函數(shù)(OS-CPU-A. S) ,OSSTARTHighRdy () 使就緒態(tài)任務中優(yōu)先級最高的任務開始運行;OSCTxSw () 完成將處理器的寄存器保存到堆棧中的任務后,將任務指針指向要恢復運行的任務,復制新任務的優(yōu)先級,得到新任務的堆棧指針,恢復將運行任務的寄存器;OSIntC2TxSw () 完成在ISR中執(zhí)行任務的切換;OSTicKISR() 提供系統(tǒng)時鐘節(jié)拍服務;這些函數(shù)涉及到出棧和入棧操作,因此需要用匯編語言編寫。做完以上工作,就是測試內(nèi)核的移植是否正確。測試一個實時內(nèi)核,可以運行一些簡單的任務和時鐘節(jié)拍中斷任務,一旦調(diào)試成功就可以在上面擴展功能。

硬件驅動程序的編寫

μCOS-II移植完成以后,就要在實時內(nèi)核之上編寫外設驅動程序。外設驅動程序可以提供訪問外圍設備的接口,把操作系統(tǒng)和外圍設備硬件分離開來,當外設改變時,只需修改設備驅動程序,不影響操作系統(tǒng)內(nèi)核。外設驅動程序主要完成以下功能:

(1) 對設備初始化和釋放;

(2) 把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);

(3) 讀取應用程序傳送給設備文件的數(shù)據(jù)和回送應用程序請求的數(shù)據(jù);

(4) 檢測和處理設備出現(xiàn)的錯誤。對于擴展相應的API函數(shù),不同的應用有不同的要求,可以根據(jù)硬件結構和實際應用,編寫操作系統(tǒng)的API函數(shù)。

基于μCOS-II進行擴展的RTOS的總體結構。在內(nèi)核上開發(fā)應用,在把內(nèi)核移植到自己的硬件目標板上后,在實時內(nèi)核的基礎上寫出相應的驅動程序、內(nèi)存操作等API函數(shù),建立實時操作系統(tǒng),最后利用這些API函數(shù)編寫用戶自己的應用程序,就構成了嵌入式系統(tǒng)軟件。而應用程序處于整個系統(tǒng)的頂層,根據(jù)具體應用要求,其功能有多個任務完成,每個任務可以調(diào)用API函數(shù),也可以調(diào)用與處理器無關的代碼提供的系統(tǒng)服務。

總 結

采用μCOS-II內(nèi)核開發(fā)的RTOS具有良好的實時性,可裁剪性,應用它可以使產(chǎn)品更可靠,功能更強大,開發(fā)周期更短。該系統(tǒng)目前已在我院開發(fā)的護理用體態(tài)語言機上成功應用。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉