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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > μC/OS-II在80x86上的移植

          μC/OS-II在80x86上的移植

          作者: 時間:2016-10-08 來源:網(wǎng)絡 收藏

          OS_CPU_C.C中未定義,此函數(shù)為用戶定義。其用法請參考例程3。

          9.05.06 OSTimeTickHook()

          OS_CPU_C.C中未定義,此函數(shù)為用戶定義。

          9.06 內(nèi)存占用

          表9.1列出了指定初始化常量的情況下,μC/OS-II占用內(nèi)存的情況,包括數(shù)據(jù)和程序代碼。如果μC/OS-II用于嵌入式系統(tǒng),則數(shù)據(jù)指RAM的占用,程序代碼指ROM的占用。內(nèi)存占用的說明清單隨磁盤一起提供給用戶,在安裝μC/OS-II后,查看SOFTWAREuCOS-

          IIIx836LDOC目錄下的ROM-RAM.XLS文件。 該文件為MicrosoftExcel文件, 需要Office97

          或更高版本的Excel打開。

          表9.1中所列出的內(nèi)存占用大小都近似為25字節(jié)的倍數(shù)。筆者所用的BorlandC/C++V3.1設定為編譯產(chǎn)生運行速度最快的目標代碼,所以表中所列的數(shù)字并不是絕對的,但可以給讀者一個總的概念。例如,如果不使用消息隊列機制,在編譯前將OS_Q_EN設為0,則編譯后的目標代碼長度6,875字節(jié),可減小大約1,475字節(jié)。

          此外,空閑任務(idle)和統(tǒng)計任務(statistics)的堆棧都設為1,024字節(jié)(1Kb)。根據(jù)您自己的要求可以增減。μC/OS-II的數(shù)據(jù)結構最少需要35字節(jié)的RAM。

          表9.2說明了如何裁減μC/OS-II,應用在更小規(guī)模的系統(tǒng)上。此處的小系統(tǒng)有16個任務。

          并且不采用如下功能:

          ?郵箱功能(OS_MBOX_EN設為0)

          ?內(nèi)存管理機制(OS_MEM_EN設為0)

          ?動態(tài)改變?nèi)蝿諆?yōu)先級(OS_TASK_CHANGE_PRIO_EN設為0)

          ?舊版本的任務創(chuàng)建函數(shù)OSTaskCreate()(OS_TASK_CREATE_EN設為0)

          ?任務刪除(OS_TASK_DEL_EN設為0)

          ?掛起和喚醒任務(OS_TASK_SUSPEND_EN設為0)

          采取上述措施后, 程序代碼空間可以減小3Kb, 數(shù)據(jù)空間可以減小2,200字節(jié)。 由于只有16個任務運行,節(jié)省了大量用于任務控制塊OS_TCB的空間。在80x86的大模式編譯條件下,每一個OS_TCB將占用45字節(jié)的RAM。

          9.07 運行時間

          表9.3到9.5列出了大部分μC/OS-II函數(shù)在80186處理器上的運行時間。 統(tǒng)計的方法是將C原程序編譯為匯編代碼,然后計算每條匯編指令所需的時鐘周期,根據(jù)處理器的時鐘頻率,最后算出運行時間。表中的I 欄為函數(shù)包含有多少條指令,C 欄為函數(shù)運行需要多少時鐘周期,μs為運行所需的以微秒為單位的時間。表中有3類時間,分別是在函數(shù)中關閉中斷的時間、函數(shù)運行的最小時間和最大時間。如果您不使用80186處理器,表中的數(shù)據(jù)就沒有什么實際意義,但可以使您理解每個函數(shù)運行時間的相對大小。

          表 9.1μC/OS-II 內(nèi)存占用( 80186).

          表 9.2 壓縮后的μC/OS-II配置.

          以上各表中的時間數(shù)據(jù)都是假設函數(shù)成功運行,正常返回;同時假定處理器工作在最大總線速度。平均來說,80186處理器的每條指令需要10個時鐘周期。

          對于80186處理器,μC/OS-II中的函數(shù)最大的關閉中斷時間是33.3μs,約1,100個時鐘周期。

          N/A是指該函數(shù)的運行時間長短并不重要,例如一些只執(zhí)行一次初始化函數(shù)。

          如果您用的是x86系列的其他CPU,您可以根據(jù)表中每個函數(shù)的運行時鐘周期項估計當前CPU的執(zhí)行時間。例如,如果用80486,且知80486的指令平均用2個時鐘周期;或者知道80486總線頻率為66MHz(比80186的33MHz快2倍),都可以估計出函數(shù)在80486上的執(zhí)行時間。

          表 9.3μC/OS-II函數(shù)在33MHz80186上的執(zhí)行時間.

          表9.3μC/OS-II函數(shù)在33MHz80186上的執(zhí)行時間.(續(xù)表)內(nèi)存管理

          表9.3μC/OS-II函數(shù)在33MHz80186上的執(zhí)行時間.(續(xù)表)

          下面我們將討論每個函數(shù)的關閉中斷時間,最大、最小運行時間是如何計算的,以及這樣計算的先決條件。

          OSSchedUnlock()

          最小運行時間是當變量OSLockNesting減為0,且系統(tǒng)中沒有更高優(yōu)先級的任務就緒,SSchedUnlock()正常結束返回調(diào)用者。

          最大運行時間是也是當變量OSLockNesting減為0,但有更高優(yōu)先級的任務就緒,函數(shù)中需要進行任務切換。

          OSIntExit()

          最小運行時間是當變量OSLockNesting減為0,且系統(tǒng)中沒有更高優(yōu)先級的任務就緒,OSIntExit()正常結束返回被中斷任務。

          最大運行時間是也是當變量OSLockNesting減為0,但有更高優(yōu)先級的任務就緒,OSIntExit()將不返回調(diào)用者,經(jīng)過任務切換操作后,將直接返回就緒的任務。

          OSTickISR()

          此函數(shù)假定在當前μC/OS-II中運行有最大數(shù)目的任務(64個)。

          最小運行時間是當64個任務都不在等待延時狀態(tài)。也就是說,所有的任務都不需要OSTickISR()處理。

          最大運行時間是當63個任務(空閑進程不會延時等待)都處于延時狀態(tài),此時OSTickISR()需要逐個檢查等待中的任務,將計數(shù)器減1,并判斷是否延時結束。這種情況對于系統(tǒng)是一個很重的負荷。例如在最壞的情況,設時鐘節(jié)拍間隔10ms,OSTickISR()需要625μs,占了約6%的CPU利用率。但請注意,此時所有的任務都沒有執(zhí)行,只是內(nèi)核的開銷。

          OSMboxPend()

          最小運行時間是當郵箱中有消息需要處理的時候。

          最大運行時間是當郵箱中沒有消息,任務需要等待的時候。此時調(diào)用OSMboxPend()的任務將被掛起,進行任務切換。最大運行時間是同一任務執(zhí)行OSMboxPend()的累計時間,這個過程包括OSMboxPend()查看郵箱,發(fā)現(xiàn)沒有消息,再調(diào)用任務切換函數(shù)OSSched(),切換到新任務。當由于某種原因調(diào)用OSMboxPend()的任務又被喚醒執(zhí)行,從OSSched()中返回,發(fā)現(xiàn)返回的原因是由于延時結束(處理延時結束情況的代碼最長—譯者注),最后返回調(diào)用任務。OSMboxPend()的最大運行時間是上述時間的總和。



          關鍵詞:

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();