當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]隨著信息化技術(shù)的發(fā)展和數(shù)字化產(chǎn)品的普及,以計(jì)算機(jī)技術(shù)、芯片技術(shù)和軟件技術(shù)為核心的嵌入式系統(tǒng)再度成為當(dāng)前研究和應(yīng)用的熱點(diǎn)。對(duì)功能、可靠性、成本、體積和功耗嚴(yán)格要求的嵌入式系統(tǒng)一般由嵌入式微處理器、外圍硬

隨著信息化技術(shù)的發(fā)展和數(shù)字化產(chǎn)品的普及,以計(jì)算機(jī)技術(shù)、芯片技術(shù)和軟件技術(shù)為核心的嵌入式系統(tǒng)再度成為當(dāng)前研究和應(yīng)用的熱點(diǎn)。對(duì)功能、可靠性、成本、體積和功耗嚴(yán)格要求的嵌入式系統(tǒng)一般由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及用戶的應(yīng)用程序等四個(gè)部分組成,其中嵌入式微處理器和嵌入式操作系統(tǒng)分別是其硬件和軟件的核心。
    ARM處理器由于其具有小體積、低功耗、低成本、高性能等特點(diǎn),廣泛應(yīng)用在16/32位嵌入式RISC解決方案中,幾乎占有嵌入式微處理器市場(chǎng)分額的75% ,本文選定三星公司生產(chǎn)的一款基于ARM920T核的高性能低功耗SOC芯片S3C2410作為移植方案的硬件平臺(tái)。市場(chǎng)上主流的嵌入式實(shí)時(shí)操作系統(tǒng)有Vxworks、pSos、WinCE、Linux等,基于實(shí)時(shí)性、成本以及開發(fā)難度方面的考慮,我們選擇uC/OS II——開放源代碼的嵌入式實(shí)時(shí)操作系統(tǒng)。
1 uC/OS II介紹
    uC/OS II(Micro Control Operation System Two)是一個(gè)可以基于ROM運(yùn)行的、可裁減的、搶占式(見圖1)實(shí)時(shí)多任務(wù)內(nèi)核,具有高度可移植性,特別適合于微處理器和控制器,是和很多商業(yè)操作系統(tǒng)性能相當(dāng)?shù)膶?shí)時(shí)操作系統(tǒng)(RTOS)。為了提供最好的移植性能,uC/OS II最大程度上使用ANSI C語言進(jìn)行開發(fā),并且已經(jīng)移植到近40多種處理器體系上,涵蓋了從8位到64位各種CPU(包括DSP)。

 uC/OS II可以簡單的視為一個(gè)多任務(wù)調(diào)度器,在這個(gè)任務(wù)調(diào)度器之上完善并添加了和多任務(wù)操作系統(tǒng)相關(guān)的系統(tǒng)服務(wù),如信號(hào)量、郵箱等。其主要特點(diǎn)有公開源代碼,代碼結(jié)構(gòu)清晰、明了,注釋詳盡,組織有條理,可移植性好,可裁剪,可固化。內(nèi)核屬于搶占式,最多可以管理60個(gè)任務(wù)。從1992年開始,由于高度可靠性、魯棒性和安全性,uC/OS II已經(jīng)廣泛使用在從照相機(jī)到航空電子產(chǎn)品的各種應(yīng)用中。

2 uC/OS II在S3C2410上的可移植性
    所謂移植,就是使這個(gè)實(shí)時(shí)內(nèi)核能在某個(gè)微處理器上運(yùn)行。為了方便移植,大部分的uC/OS II代碼是用c語言寫的,但仍需要用c和匯編語言寫一些與處理器相關(guān)的代碼,這是因?yàn)閡C/OS II在讀寫處理器寄存器時(shí)只能通過匯編語言來實(shí)現(xiàn)。由于uC/OS II在設(shè)計(jì)時(shí)就已經(jīng)充分考慮了可移植性,所以u(píng)C/OS II的移植相對(duì)來說是比較容易的。uC/OS II的框架結(jié)構(gòu)如圖2。

 uC/OSII的正常運(yùn)行需要處理器平臺(tái)滿足以下要求:
a)處理器的C編譯器能產(chǎn)生可重入代碼。
b)用C語言就可以打開和關(guān)閉中斷。
c)處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常在10至100Hz之間)。
d)處理器支持能夠容納一定量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧。
e)處理器有將堆棧指針和其它CPU寄存器讀出和存儲(chǔ)到堆棧或內(nèi)存中的指令。
    S3C2410處理器采用ARM920T內(nèi)核,內(nèi)部共有37個(gè)寄存器,其中R13通常用作堆棧指針,只要系統(tǒng)RAM空間允許,堆??臻g理論上沒有限制。ARM處理器提供ARM指令和Thumb指令兩種指令集,每種指令集都包含有豐富的指令對(duì)堆棧進(jìn)行操作,可以隨意的對(duì)處理器中的寄存器進(jìn)行堆棧操作。根據(jù)堆棧生長方向的不同,可以生成4種不同的堆棧,分別是滿遞增、空遞增、滿遞減(此移植中使用的是滿遞減方式)、空遞減。芯片內(nèi)集成5個(gè)定時(shí)時(shí)鐘,任何一個(gè)都可以產(chǎn)生定時(shí)中斷,滿足第三條要求。ADS集成開發(fā)環(huán)境的內(nèi)置編譯器可以產(chǎn)生可重入代碼,并且支持內(nèi)嵌匯編,C環(huán)境中可任意的進(jìn)行開關(guān)中斷操作。綜上所述uC/OS II完全可以移植到S3C2410上運(yùn)行。

3 主體移植過程
3.1 設(shè)置與處理器及編譯器相關(guān)的代碼[OS_CPU.H]
    不同的編譯器會(huì)使用不同的字節(jié)長度來表示同一數(shù)據(jù)類型,所以要定義一系列數(shù)據(jù)類型以確保移植的正確性。下面是uC/OS II定義的一部分?jǐn)?shù)據(jù)類型。
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;/*無符號(hào)8位*/
typedef signed char INT16S;/*帶符號(hào)8位*/
typedef unsigned int INT16U;/*無符號(hào)16位*/
typedef signed int INT16S;/*帶符號(hào)16位*/
typedef unsigned long INT32U;/*無符號(hào)32位數(shù)*/
typedef signed long INT32S;/*帶符號(hào)32位數(shù)*/
typedef float FP32;/*單精度浮點(diǎn)數(shù)*/
typedef double FP64;/*雙精度浮點(diǎn)數(shù)*/
typedef unsigned int OS_STK;/*堆棧入口寬度*/
typedef unsigned int OS_CPU_SR;/*寄存器寬度*/
    uC/OS II需要先關(guān)中斷再訪問臨界區(qū)的代碼,并且在訪問完后重新允許中斷。uC/OS II定義了兩個(gè)宏來禁止和允許中斷:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),本移植實(shí)現(xiàn)這兩個(gè)宏的匯編代碼。
#define OS_ENTER_CRITICAL()(cpu_sr=OSCPUSaveSR())/*Disable interrupts*/
#define OS_EXIT_CRITICAL()(OSCPURestoreSR(cpu_sr))/*Enable interrupts*/
EXPORT OSCPUSaveSR
OSCPUSaveSR
mrs r1,cpsr
mov r0,r1
orr r1,r1,#0xc0
msr cpsr_cxsf,r1
mov pc,lr
EXPORT OSCPURestoreSR
OSCPURestoreSR
msr cpsr_cxsf,r0
mov pc,lr

3.2 用C語言實(shí)現(xiàn)與處理器任務(wù)相關(guān)的函數(shù)[OS_CPU_C.C]
OSTaskStkInit()
OSTaskCreateHook()
OSTaskDelHook()
OSTaskSwHook()
OSTaskStatHook()
OSTimeTickHook()
    實(shí)際需要修改的只有OSTaskStkInit()函數(shù),其他五個(gè)函數(shù)需要聲明,但不一定有實(shí)際內(nèi)容。這五個(gè)函數(shù)都是用戶定義的,所以O(shè)S_CPU_C.C中沒有給出代碼。如果需要使用這些函數(shù),可以將文件OS_CFG.H中的#define constant OS_CPU_HOOKS_EN設(shè)為1,設(shè)為0表示不使用這些函數(shù)。
    OSTaskStkInit()函數(shù)由OSTaskCreate()或OSTaskCreateExt()調(diào)用,需要傳遞的參數(shù)是任務(wù)代碼的起始地址、參數(shù)指針(pdata)、任務(wù)堆棧頂端的地址和任務(wù)的優(yōu)先級(jí),用來初始化任務(wù)的堆棧,初始狀態(tài)的堆棧模擬發(fā)生一次中斷后的堆棧結(jié)構(gòu)。堆棧初始化工作結(jié)束后,OSTaskStkInit()返回新的堆棧棧頂指針,OSTaskCreate()或OSTaskCreateExt()將指針保存在任務(wù)的OS_TCB中。調(diào)用OSTaskStkInit()給任務(wù)做一個(gè)初始的任務(wù)上下文堆棧,形狀如圖3。

3.3 處理器相關(guān)部分匯編實(shí)現(xiàn)
    整個(gè)uC/OS II移植實(shí)現(xiàn)中,只需要提供一個(gè)匯編語言文件,提供幾個(gè)必須由匯編才能實(shí)現(xiàn)的函數(shù)。
a)OSStartHighRdy()
    該函數(shù)在OSStart()多任務(wù)啟動(dòng)之后,負(fù)責(zé)從最高優(yōu)先級(jí)任務(wù)的TCB控制塊中獲得該任務(wù)的堆棧指針sp,通過sp依次將CPU現(xiàn)場(chǎng)恢復(fù),此時(shí)系統(tǒng)就將控制權(quán)交給用戶創(chuàng)建的該任務(wù)的進(jìn)程,直到該任務(wù)被阻塞或者被其他更高優(yōu)先級(jí)的任務(wù)搶占了CPU。該函數(shù)僅僅在多任務(wù)啟動(dòng)時(shí)被執(zhí)行一次,用來啟動(dòng)第一個(gè),也就是最高優(yōu)先級(jí)的任務(wù)執(zhí)行。
b)OSCtxSw()
    該函數(shù)是任務(wù)級(jí)的上下文切換函數(shù),在任務(wù)因?yàn)楸蛔枞鲃?dòng)請(qǐng)求與CPU調(diào)度時(shí)執(zhí)行,主要工作是先將當(dāng)前任務(wù)的CPU現(xiàn)場(chǎng)保存到該任務(wù)堆棧中,然后獲得最高優(yōu)先級(jí)任務(wù)的堆棧指針,從該堆棧中恢復(fù)此任務(wù)的CPU現(xiàn)場(chǎng),使之繼續(xù)執(zhí)行,從而完成一次任務(wù)切換。
C)OSIntExit()
    該函數(shù)是中斷級(jí)的任務(wù)切換函數(shù),在時(shí)鐘中斷ISR中發(fā)現(xiàn)有高優(yōu)先級(jí)任務(wù)在等待時(shí),需要在中斷退出后不返回被中斷的任務(wù),而是直接調(diào)度就緒的高優(yōu)先級(jí)任務(wù)執(zhí)行。其目的在于能夠盡快讓高優(yōu)先級(jí)的任務(wù)得到響應(yīng),保證系統(tǒng)的實(shí)時(shí)性能。
d)OSTickISR()
    該函數(shù)是時(shí)鐘中斷處理函數(shù),主要任務(wù)是負(fù)責(zé)處理時(shí)鐘中斷,調(diào)用系統(tǒng)實(shí)現(xiàn)的OSTimeTick函數(shù),如果有等待時(shí)鐘信號(hào)的高優(yōu)先級(jí)任務(wù),則需要在中斷級(jí)別上調(diào)度其執(zhí)行。另外兩個(gè)相關(guān)函數(shù)是OSIntEnter()和OSIntExit(),都需要在ISR中執(zhí)行。

4 測(cè)試
    至此代碼移植過程已經(jīng)完成,下一步工作就是測(cè)試。測(cè)試一個(gè)象uC/OS II一樣的多任務(wù)實(shí)時(shí)內(nèi)核并不復(fù)雜,甚至可以在沒有應(yīng)用程序的情況下測(cè)試。換句話說,就是讓這個(gè)實(shí)時(shí)內(nèi)核在目標(biāo)板上跑起來,讓內(nèi)核自己測(cè)試自己。這樣做有兩個(gè)好處:第一,避免使本來就復(fù)雜的事情更加復(fù)雜;第二,如果出現(xiàn)問題,可以知道問題出在內(nèi)核代碼上而不是應(yīng)用程序。剛開始的時(shí)候可以運(yùn)行一些簡單的任務(wù)和時(shí)鐘節(jié)拍中斷服務(wù)例程。一旦多任務(wù)調(diào)度成功地運(yùn)行了,再添加應(yīng)用程序的任務(wù)就是非常簡單的工作了。

5 結(jié)束語
    采用基于ARM9的S3C2410嵌入式微處理器,可以使系統(tǒng)具備高性能的運(yùn)算能力的同時(shí)便于與各種外設(shè)連接擴(kuò)展,簡化了硬件設(shè)計(jì),維持小型化的同時(shí)降低了系統(tǒng)成本。uC/OS II作為一個(gè)源代碼公開的操作系統(tǒng),在具體應(yīng)用中穩(wěn)定可靠,并且支持uIP TCP/IP協(xié)議棧、ucGUI等,可擴(kuò)展性強(qiáng),功能強(qiáng)大。本系統(tǒng)采ARM9+uC/OS II開發(fā)設(shè)計(jì),具有精度高、運(yùn)行穩(wěn)定、實(shí)時(shí)性好、抗干擾能力強(qiáng)、性價(jià)比高的特點(diǎn),可以在各種工業(yè)場(chǎng)合中廣泛應(yīng)用,達(dá)到了設(shè)計(jì)的初衷。

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉