日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式硬件
[導讀]O 引言目前,市場以及院校科研用嵌入式系統(tǒng)產(chǎn)品,如Vxworks,Linux和Windows CE等都已經(jīng)相當成熟,提供了有力的開發(fā)和調試工具,但有些開發(fā)成本昂貴,周期較長,而μC/O

O 引言

目前,市場以及院??蒲杏们度胧较到y(tǒng)產(chǎn)品,如Vxworks,Linux和Windows CE等都已經(jīng)相當成熟,提供了有力的開發(fā)和調試工具,但有些開發(fā)成本昂貴,周期較長,而μC/OS-Ⅱ是一種多任務實時源代碼的公開操作系統(tǒng),內核精簡,移植性較強,非常適合用于一些小型控制和實驗系統(tǒng)的開發(fā)。

1 操作系統(tǒng)及CPU介紹

μC/OS-Ⅱ是基于優(yōu)先級的占先式實時多任務操作系統(tǒng),包含有任務管理、時間管理、任務間同步通信(信號量,郵箱,消息隊列)和內存管理等功能。絕大部分代碼用C語言寫成,極少部分與處理器密切相關的代碼用匯編語言編寫,便于移植。作為一個源代碼公開的實時操作系統(tǒng),最多可以管理64個任務,并支持信號量、郵箱、消息隊列等多種進程間的通信機制,同時用戶可以根據(jù)需求對內核中的功能模塊進行裁剪。

LPC2378是一款基于ARM7TDMI-S內核的嵌入式精簡指令集微控制器,包含了1個支持仿真的ARM7TDMI-SCPU,適用于為了各種目的而需要進行串行通信的應用。該體系機構支持用戶、軟中斷、中斷、管理、中止、未定義、系統(tǒng)等7種處理器模式,ARM7TDMI-S處理器內部有31個通用32位寄存器,6個狀態(tài)寄存器。LPC2378包含了1個10/100 EthernetMAC,USB 2.0全速接口,4個UART接口,2路CAN通道,1個SPI接口,2個同步串行端口(SSP),3個I2C接口,1個I2S接口和 MiniBus(MiniBus僅用于LPC2378,它是8位數(shù)據(jù)/16位地址并行的總線)。下面以μC/OS-Ⅱ在工業(yè)級芯片LPC2378上的移植為例,通過分析操作系統(tǒng)內核來介紹μC/OS-Ⅱ操作系統(tǒng)移植的一般方法和過程及相關問題的解決。

2 μC/OS-Ⅱ內核結構及工作原理

2.1 內核基本結構

圖1是接近μC/OS-Ⅱ的簡單內核體系結構圖,內核保留給上層應用的接口有3個,分別是軟保護、ITC和DSR。由于μC/OS-Ⅱ操作系統(tǒng)內核是可剝奪型實時多任務內核,因此最高優(yōu)先級的任務一旦就緒,總能得到CPU的使用權。如果是中斷服務子程序使一個高優(yōu)先級的任務進入就緒態(tài),則中斷完成時,中斷了的任務被掛起,優(yōu)先級高的任務開始運行。

 

2.2 μC/OS-Ⅱ內核基本工作原理

多任務系統(tǒng)中,操作系統(tǒng)內核負責管理各個任務,或者說為每個任務分配CPU,并且負責各任務之間的通信和協(xié)同,任務切換是內核提供的基本服務。μC/OS-Ⅱ多任務操作系統(tǒng)的基本工作原理如下:

(1)在使用μC/OS-Ⅱ的所有服務之前,必須調用初始化函數(shù)OSInit(),初始化所有的變量和數(shù)據(jù)結構,同時創(chuàng)建空閑任務 OSTaskIdle(),并賦予最低的優(yōu)先級別和永遠的就緒態(tài),同時完成任務控制塊(TCB)的初始化、TCB優(yōu)先級表的初始化、TCB鏈表的初始化和事件控制塊(ECB)鏈表的初始化。

(2)調用OSTaskCreate()或OSTaskCreateExt()創(chuàng)建至少一個新任務,并給任務賦予一定的優(yōu)先級,而且它們有各自的一套CPU寄存器和自己的??臻g。

(3)調用OSSTART()函數(shù),通過從任務就緒表中找出用戶建立的優(yōu)先級別最高的任務控制塊,然后開始多任務調度。

3 μC/OS-Ⅱ在LPC2378上的移植過程及相關問題分析

現(xiàn)以LPC2378微控制器上的移植為例,分析μC/OS-Ⅱ操作系統(tǒng)移植的一般方法,所采用的開發(fā)環(huán)境為ARM公司的集成開發(fā)環(huán)境ADS1.2。

3.1 移植代碼

(1)μC/OS-Ⅱ與CPU類型無關的代碼有μC/OS-Ⅱ.H,μC/OS- Ⅱ.C,OS_CORE.C,OS_TASK.C,OS_TIME.C,OS_SEM.C,OS_MBOX.- C,OS_MUTEX.C,OS_FLAG.C,也就是說這些文件可以不用修改就直接添加。

(2)μC/OS-Ⅱ與CPU類型有關的代碼有OSCPU.H,OS_CPU_A.ASM,OS_CPU_C.C,也就是說用戶需要根據(jù)所選CPU的類型將這些函數(shù)進行修改后才能添加入內核。

3.2 OS_CPU.H文件的定義與修改

OS_CPU.H文件定義了與編譯器及CPU相關的數(shù)據(jù)類型、堆棧的寬度和增長方式以及開關中斷的宏定義。由于微處理器和微控制器所支持的堆棧增長方式不同,這里需要根據(jù)所選芯片LPC2378支持的類型對宏OS_STK_GRWOTH進行定義,由于ARM7 TD-MI-S內核堆棧支持從上往下的生長方式,所以應做如下定義:

#define OS_STK_GROWTH 1 //堆棧是從上往下長的OS_CPU.H文件中另外3個宏 OS_CRITICAL_METHOD,OS_ENTER_CRITICAL(),OS_EXIT_CRITICAL()用于定義開關中斷的方式及開關中斷的實現(xiàn)。通過調用開關中斷2個宏來保護臨界代碼如下:

 

3.3 OS_CPU_C.C文件中主要函數(shù)的定義及編寫

OS_CPU_C.C中要求用戶編寫10個簡單的函數(shù):

 

結合要移植的CPU內核的硬件和寄存器特性,簡要對任務堆棧初始化函數(shù)進行分析和創(chuàng)建:

 


其他9個函數(shù)必須聲明,但并不一定包含任務代碼。

3.4 μC/OS-Ⅱ的移植

μC/OS-Ⅱ的移植,還要求編寫4個簡單的匯編語言函數(shù);即OSStartHighRdy(),OSintCtxSw(),OSTIckISR(),OSCtxSw()。

3.4.1 函數(shù)OSStart()調用OSStartHighRdy()

函數(shù)OSStart()用于調用OSStartHighRdy(),以使使就緒態(tài)任務中優(yōu)先級最高的任務開始運行:

 


3.4.2 時鐘節(jié)拍中斷服務程序

μC/OS-Ⅱ要求用戶提供一個周期性的時鐘源,以實現(xiàn)時間延遲和超時確認功能,時鐘節(jié)拍每秒發(fā)生10~100次。必須在開始多任務后,啟動時鐘節(jié)拍中斷,但由于Osatart()函數(shù)不會返回,用戶無法實現(xiàn)這一操作,所以可以在OSStart()運行之后,μC/OS啟動的第1個任務中初始化節(jié)拍中斷。基于LPC2378移植下OSTicklSR()的簡易代碼編寫如下:[!--empirenews.page--]

 


當時鐘節(jié)拍中斷發(fā)生時,CPU會自動把CPU寄存器推入堆棧,但并不包括存儲頁面寄存器PPAGE,如果單片機系統(tǒng)的尋址范圍超過64 KB,則需要通過給PPAGE賦值來區(qū)分不同的16 KB地址,需要把PPAGE也推入堆棧。當某任務的任務控制塊中時間延時項OSTCBDly減到了零,OSTi-mtick()就進入了就緒態(tài)。 OSIntExit()會調用中斷級的任務切換函數(shù)OSIntCtxSw執(zhí)行任務切換,而不再執(zhí)行后面的指令。如果沒有更高優(yōu)先級的任務進入就緒態(tài),則 CPU會返回中斷前狀態(tài)。

3.4.3 任務級任務切換

實際上任務級的切換就是通過執(zhí)行軟中斷指令,或者根據(jù)處理器的不同,執(zhí)行TRAP指令來實現(xiàn)。中斷服務子程序、TRAP或者異常處理的向量地址必須指向OSCtXSW(),利用系統(tǒng)在跳轉到中斷服務程序時會自動把斷點指針壓入堆棧的功能,把斷點指針存入堆棧,而利用中斷返回指令IRET,能把斷點指針推入CPU的PC寄存器功能,恢復待運行任務的斷點,這樣就可以實現(xiàn)斷點的保存和恢復。

 


3.4.4 中斷級任務切換

OSIntExit()通過調用OSIntSw(),在ISR中執(zhí)行任務切換函數(shù)。因為OSIntCtxSw()是在ISR中被調用的,所以假定所有的處理器寄存器都被正確地保存到了被中斷任務的堆棧中。OSIntSw()函數(shù)的絕大多數(shù)代碼與OSCtxSw()函數(shù)是一樣的,區(qū)別只是:因為 ISR已經(jīng)保存了CPU的寄存器,而不再需要在OSIntSw()函數(shù)中保存CPU的寄存器。在進行操作系統(tǒng)移植時,該段程序的代碼如下:

 

 


3.5 移植中的問題

ARM處理器的軟件調試通過JTAG口直接在系統(tǒng)的外部SRAM運行,因此在程序調試之前,ARM處理器的開發(fā)環(huán)境軟件首先調用初始化文件 (*.ini),用戶可以根據(jù)自己系統(tǒng)的外部存儲器和設備的地址來修改文件。如果該文件有誤,開發(fā)環(huán)境軟件將無法通過JTAG與處理器通信。系統(tǒng)調試過程中,經(jīng)常會出現(xiàn)程序跑飛的現(xiàn)象,經(jīng)過測試與分析,主要有4個方面原因:

(1)中斷處理程序的中斷矢量地址沒有正確賦值,從而導致發(fā)生中斷后CPU無法運行到中斷處理程序位置;

(2)在OsctxSw和OSIntctxSw中的任務切換語句后加人幾條NOP空語句,確保任務切換的相應指令執(zhí)行結束,如果在這些位置沒有加相應的空操作指令,也會導致程序跑飛;

(3)由于堆棧的空間分配不夠,以及沒有給CPU的各個工作模式分配空間,導致任務切換時,堆棧溢出;

(4)μC/OS-Ⅱ要求用戶提供一個時鐘資源來實現(xiàn)時鐘節(jié)拍,時鐘節(jié)拍應該每秒鐘發(fā)生10~100次,用戶必須在開始多任務調度后(即調用 OSStart后)允許時鐘節(jié)拍中斷。通常的錯誤是在調用OSlnit()和OSStart()之間允許時鐘節(jié)拍中斷,同時用戶不要單純地追求實時性,而將系統(tǒng)的時鐘節(jié)拍頻率增加太高。以上幾個方面的問題解決后,系統(tǒng)的工作非常穩(wěn)定。

4 系統(tǒng)測試

移植完成后的系統(tǒng)包括4個部分:自啟動程序、μC/OS-Ⅱ系統(tǒng)文件、移植代碼、應用程序。開發(fā)環(huán)境是ARM公司提供的ADSl.2(ARM Dev-eloper Suite)。該系統(tǒng)創(chuàng)建了以下3個任務來驗證μC/OS-Ⅱ的移植成功:

 

 

在為自己的微處理器做完μC/OS-Ⅱ的移植后,首先建立3個任務,之后不加任何其他應用代碼來測試移植好的μC/OS-Ⅱ,也就是說應該先測試內核自身的運行狀況。這樣做有2個原因:不希望將事情復雜化;如果有些地方?jīng)]有工作可以明白是移植本身的問題,而不是應用代碼產(chǎn)生的問題。經(jīng)過測試和修改,無相關錯誤產(chǎn)生,說明移植成功。

5 結語

μC/OS-Ⅱ具有很強的移植性,具有多任務實時可剝奪型內核,而且代碼量較小,源代碼開放,可被廣泛移植到8位、16位等許多微處理器上。國外諸如APC,ROTEK等企業(yè)都在產(chǎn)品中成功地使用了μC/OS-Ⅱ內核,不僅開發(fā)成本低,而且系統(tǒng)精簡,因此將μC/OS-Ⅱ移植到LPC-2378 這種工業(yè)級的芯片上,具有相當?shù)纳虡I(yè)價值。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(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驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: 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 隧道燈 驅動電源
關閉