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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > μC/OS-II系統(tǒng)在AVM處理器上的移植

          μC/OS-II系統(tǒng)在AVM處理器上的移植

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

          LDR r6,addr_OSTCBHighRdy

          LDR r6,[r6]

          LDR sp,[r6] ;得到新任務(wù)的堆棧指針

          ;OSTCBCur=OSTCBHighRdy

          STR r6,[r4]

          ;得到當(dāng)前新任務(wù)的TCB地址

          LDMFD sp!,{r4}

          MSR SPSR_cxsf,r4

          LDMFD sp!,{r4}

          MSR SPSR_cxsf,r4

          LDMFD sp!,{r0-r12,lr pc}

          OSIntCtxSw() ;中斷級(jí)的任務(wù)切換函數(shù)

          LDMIA sp!,{al-vl,lr}

          SUBS pc,lr,#4

          SUB lr,lr,#4

          MOV r12,lr

          MRS lr,SPSR

          AND lr,lr,#0XFFFFFE0

          ORR lr,lr,#0XD3

          MSR CPSR_CXSF,lr

          OSTickISR() ;中斷服務(wù)函數(shù)

          STMDB sp!,{r0-r11,lr}

          MRS r0,CPSR

          ORR r0,r0,#0x80; ;設(shè)置中斷禁止標(biāo)志

          MSR CPSR_cxsf,r0 ;中斷結(jié)束

          LDR r0,I_ISPC

          LDR r1,=BIT_TIMER0

          STR r1,{r0}

          BL IrqStart

          BL osTimeTick

          BL IrqFinish

          LDR r0,=need_to_swap_context

          LDR R2,[R0]

          CMP r2,#1

          LDREQ pc,=_CON_SW

          完成上述工作后,μC/OS-II就可以運(yùn)行在ARM處理器上了。

          3 使用μC/OS-II系統(tǒng)應(yīng)注意的問題

          ①μC/OS-II和Linux等分時(shí)操作系統(tǒng)不同,不支持時(shí)間片輪轉(zhuǎn)法。它是一個(gè)基于優(yōu)先級(jí)的實(shí)時(shí)操作系統(tǒng)。每一個(gè)任務(wù)的優(yōu)先級(jí)必須不同(分析它的源碼會(huì)發(fā)現(xiàn),μC/OS-II把任務(wù)的優(yōu)先級(jí)當(dāng)作任務(wù)在標(biāo)識(shí)來使用,如果優(yōu)先級(jí)相同,任務(wù)將無法區(qū)分)。進(jìn)入就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)首先得到CPU的使用權(quán),只有等它交出CPU的使用權(quán)后,其它任務(wù)才可以被執(zhí)行。所以,它只能就是多任務(wù),不能就是多進(jìn)程,至少不是我們所熟悉的那種多進(jìn)程。

          ②μC/OS-II對(duì)共享資源提供了保護(hù)的機(jī)制。μC/OS-II是一個(gè)支持多任務(wù)的操作系統(tǒng)。我們可以把一個(gè)完整的程序劃分成幾個(gè)任務(wù),不同的任務(wù)執(zhí)行不同的功能。對(duì)于共享資源(比如串口),μC/OS-II也提供了很好的解決辦法,一般情況下使用的是信號(hào)量方法。我們創(chuàng)建一個(gè)信號(hào)量并對(duì)它進(jìn)行初始化,當(dāng)一個(gè)任務(wù)需要使用一個(gè)共享資源時(shí),它必須先申請(qǐng)得到這個(gè)信號(hào)量。在這個(gè)過程中即使有優(yōu)先權(quán)更高的任務(wù)進(jìn)入了就緒態(tài),因?yàn)闊o法得到信號(hào)量,也不能使用該資源。在μC/OS-II中稱為優(yōu)先級(jí)反轉(zhuǎn)。簡(jiǎn)單地說,就是高優(yōu)先級(jí)任務(wù)必須等待低優(yōu)先級(jí)任務(wù)的完成。在上述情況下,在兩個(gè)任務(wù)之間發(fā)生優(yōu)先級(jí)后轉(zhuǎn)是無法避免的。所以不在使用μC/OS-II時(shí),必須對(duì)所開發(fā)的系統(tǒng)了解清楚才能選擇對(duì)于某種共享資源是否使用信號(hào)量。

          ③μC/OS-II內(nèi)存管理不夠完善。在分析許多μC/OS-II的應(yīng)用實(shí)例中發(fā)現(xiàn),任務(wù)棧空間和內(nèi)存分區(qū)的創(chuàng)建采用了定義全局?jǐn)?shù)組的方法,這樣實(shí)現(xiàn)起來固然簡(jiǎn)單,但不夠靈活有效。

          編譯器會(huì)將全局?jǐn)?shù)組作為未初始化的全局變量,放到應(yīng)用程序映像的數(shù)據(jù)段。數(shù)組的大小是固定的,生成映像后不可能在使用中動(dòng)態(tài)地改變。對(duì)于任務(wù)??臻g來說,數(shù)組定義大了會(huì)造成內(nèi)存浪費(fèi);定義小了任務(wù)棧溢出,會(huì)造成系統(tǒng)崩潰。對(duì)于內(nèi)存分區(qū),在不知道系統(tǒng)初始化后給用戶留下了多少自由內(nèi)存空間的情況下,很難定義內(nèi)存分區(qū)所使用數(shù)組的大小。此外,現(xiàn)在μC/OS-II只支持固定大小的內(nèi)存分區(qū),容易造成內(nèi)存浪費(fèi)。μC/OS-II將來應(yīng)該被改進(jìn)以支持可變大小的內(nèi)存分區(qū)。因此,系統(tǒng)初始化后能清楚地掌握自由內(nèi)存空間的情況是很重要的。所以,應(yīng)避免使用全局?jǐn)?shù)組分配內(nèi)存空間,關(guān)鍵是要知道整個(gè)應(yīng)用程序在編譯、鏈接后代碼段和數(shù)據(jù)段的大小,在目標(biāo)板內(nèi)存中是如何定位,以及目標(biāo)板內(nèi)存的大小。

          總之,隨著各種智能嵌入式系統(tǒng)的復(fù)雜化和系統(tǒng)實(shí)時(shí)性需求的提高,伴隨應(yīng)用軟件朝著系統(tǒng)化發(fā)展的加速,功能強(qiáng)大的實(shí)時(shí)操作系統(tǒng)μC/OS-II將會(huì)有更大的發(fā)展。


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: μCOS-II S3C44BOX 移植

          評(píng)論


          相關(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); })();