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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式實時操作系統(tǒng)μC/OS-II在LPC2378上的移植及

          嵌入式實時操作系統(tǒng)μC/OS-II在LPC2378上的移植及

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

          3.jpg

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

          3.4.3 任務(wù)級任務(wù)切換

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

          4.jpg

          3.4.4 中斷級任務(wù)切換

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

          程序

          6.jpg

          3.5 中的問題

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

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

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

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

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

          4 系統(tǒng)測試

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

          程序

          程序

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

          5 結(jié)語

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


          上一頁 1 2 下一頁

          評論


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