<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          UC/OS II嵌入式技術(shù)

          作者: 時(shí)間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

          3 主體移植過程

          3.1 設(shè)置與處理器及編譯器相關(guān)的代碼[OS_CPU.H]

          不同的編譯器會使用不同的字節(jié)長度來表示同一數(shù)據(jù)類型,所以要定義一系列數(shù)據(jù)類型以確保移植的正確性。下面是uC/OS II定義的一部分?jǐn)?shù)據(jù)類型。

          typedef unsigned char BOOLEAN;

          typedef unsigned char INT8U;

          typedef signed char INT16S;

          typedef unsigned int INT16U;

          typedef signed int INT16S;

          typedef unsigned long INT32U;

          typedef signed long INT32S;

          typedef float FP32;

          typedef double FP64;

          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())

          #define OS_EXIT_CRITICAL()(OSCPURestoreSR(cpu_sr))

          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)先級,用來初始化任務(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ù)啟動之后,負(fù)責(zé)從最高優(yōu)先級任務(wù)的TCB控制塊中獲得該任務(wù)的堆棧指針sp,通過sp依次將CPU現(xiàn)場恢復(fù),此時(shí)系統(tǒng)就將控制權(quán)交給用戶創(chuàng)建的該任務(wù)的進(jìn)程,直到該任務(wù)被阻塞或者被其他更高優(yōu)先級的任務(wù)搶占了CPU。該函數(shù)僅僅在多任務(wù)啟動時(shí)被執(zhí)行一次,用來啟動第一個(gè),也就是最高優(yōu)先級的任務(wù)執(zhí)行。

          b)OSCtxSw()

          該函數(shù)是任務(wù)級的上下文切換函數(shù),在任務(wù)因?yàn)楸蛔枞鲃诱埱笈cCPU調(diào)度時(shí)執(zhí)行,主要工作是先將當(dāng)前任務(wù)的CPU現(xiàn)場保存到該任務(wù)堆棧中,然后獲得最高優(yōu)先級任務(wù)的堆棧指針,從該堆棧中恢復(fù)此任務(wù)的CPU現(xiàn)場,使之繼續(xù)執(zhí)行,從而完成一次任務(wù)切換。

          C)OSIntExit()

          該函數(shù)是中斷級的任務(wù)切換函數(shù),在時(shí)鐘中斷ISR中發(fā)現(xiàn)有高優(yōu)先級任務(wù)在等待時(shí),需要在中斷退出后不返回被中斷的任務(wù),而是直接調(diào)度就緒的高優(yōu)先級任務(wù)執(zhí)行。其目的在于能夠盡快讓高優(yōu)先級的任務(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í)鐘信號的高優(yōu)先級任務(wù),則需要在中斷級別上調(diào)度其執(zhí)行。另外兩個(gè)相關(guān)函數(shù)是OSIntEnter()和OSIntExit(),都需要在ISR中執(zhí)行。

          4 測試

          至此代碼移植過程已經(jīng)完成,下一步工作就是測試。測試一個(gè)象uC/OS II一樣的多任務(wù)實(shí)時(shí)內(nèi)核并不復(fù)雜,甚至可以在沒有應(yīng)用程序的情況下測試。換句話說,就是讓這個(gè)實(shí)時(shí)內(nèi)核在目標(biāo)板上跑起來,讓內(nèi)核自己測試自己。這樣做有兩個(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è)場合中廣泛應(yīng)用,達(dá)到了設(shè)計(jì)的初衷

          μC/OS-II作為一個(gè)嵌入式實(shí)時(shí)操作系統(tǒng),自1992年以來,因其源代碼的完全公開和優(yōu)越性能,已為眾多的愛好者和開發(fā)人員所了解并得到了廣泛應(yīng)用。μC/OS-II是一個(gè)占先式內(nèi)核,執(zhí)行時(shí)間可確定(即函數(shù)的調(diào)用與服務(wù)的時(shí)間是可知的,不依賴于應(yīng)用程序的大小),目前最多支持64個(gè)任務(wù)(8個(gè)為系統(tǒng)保留),總是執(zhí)行處于就緒態(tài)的優(yōu)先級最高的任務(wù)。目前,51系列及其擴(kuò)展型單片機(jī)仍在單片機(jī)應(yīng)用系統(tǒng)占較大比重,因而詳細(xì)介紹μC/OS-II在AT89C51上的移植實(shí)現(xiàn)過程,解決移植過程中出現(xiàn)的問題,有很大的實(shí)用意義。


          上一頁 1 2 3 下一頁

          關(guān)鍵詞:

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();