μCOSII在DSPFlash存儲器中運(yùn)行關(guān)鍵問題_第1頁
μCOSII在DSPFlash存儲器中運(yùn)行關(guān)鍵問題_第2頁
μCOSII在DSPFlash存儲器中運(yùn)行關(guān)鍵問題_第3頁
μCOSII在DSPFlash存儲器中運(yùn)行關(guān)鍵問題_第4頁
μCOSII在DSPFlash存儲器中運(yùn)行關(guān)鍵問題_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

μC/OS-II在DSPFlash儲存器中運(yùn)轉(zhuǎn)的要點(diǎn)問題朱愛軍,戴群亮(1.桂林電子科技大學(xué)電子工程學(xué)院,廣西壯族自治區(qū)桂林市541004;2.廣西柳工機(jī)械股份有限企業(yè),廣西壯族自治區(qū)柳州市545007)0引言在作為國家863計劃子項目發(fā)掘機(jī)智能化控制系統(tǒng)的開發(fā)中,出現(xiàn)了智能化發(fā)掘機(jī)軌跡控制系統(tǒng)不依據(jù)早先設(shè)定好的軌跡運(yùn)轉(zhuǎn)和嵌入式及時多任務(wù)操作系統(tǒng)μC/OS-Ⅱ調(diào)動雜亂等失控問題。該智能化系統(tǒng)中采納了μC/OS-Ⅱ,經(jīng)過位移傳感器及時收集發(fā)掘機(jī)的鏟斗、斗桿和動臂等3路角度信號,經(jīng)過朱愛軍,戴群亮(1.桂林電子科技大學(xué)電子工程學(xué)院,廣西壯族自治區(qū)桂林市541004;2.廣西柳工機(jī)械股份有限企業(yè),廣西壯族自治區(qū)柳州市545007)前言在作為國家863計劃子項目發(fā)掘機(jī)智能化控制系統(tǒng)的開發(fā)中,出現(xiàn)了智能化發(fā)掘機(jī)軌跡控制系統(tǒng)不依據(jù)早先設(shè)定好的軌跡運(yùn)轉(zhuǎn)和嵌入式及時多任務(wù)操作系統(tǒng)C/OS-Ⅱ調(diào)動雜亂等失控問題。該智能化系統(tǒng)中采納了μC/OS-Ⅱ,經(jīng)過位移傳感器及時收集發(fā)掘機(jī)的鏟斗、斗桿和動臂等3路角度信號,經(jīng)過算法例劃路徑驅(qū)動液壓比率閥實(shí)現(xiàn)平行推動、鏟斗發(fā)掘等典型作業(yè)。本文主要針對課題碰到的問題,要點(diǎn)論述μC/OS-Ⅱ在芯片內(nèi)Flash儲存器運(yùn)轉(zhuǎn)時要點(diǎn)問題的剖析與解決方法。1μC/OS-Ⅱ在Flash儲存器中的運(yùn)轉(zhuǎn)1.1μC/OS-Ⅱ的特色與功能C/OS-Ⅱ是一個及時多任務(wù)的嵌入式操作系統(tǒng),它采納可剝奪型內(nèi)核。全部的任務(wù)都有優(yōu)先級,多任務(wù)之間優(yōu)先級高的能夠中止履行中的低優(yōu)先級任務(wù)而優(yōu)先履行。它的特色主要有:公然源代碼、可移植性、可固化、可裁汰、支持多任務(wù)、擁有可確立性等。μC/OS-Ⅱ是鑒于優(yōu)先級搶占式的及時多任務(wù)操作系統(tǒng),包括了及時內(nèi)核、任務(wù)管理、時間管理、任務(wù)間通訊同步(信號量、郵箱、信息行列)和內(nèi)存管理等功能。1.2要點(diǎn)問題在達(dá)成了智能控制軟件后,就是將之嵌入到μC/OS-Ⅱ系統(tǒng)中。碰到的主要問題是移植好的μC/OS-Ⅱ源代碼在聞亭的目標(biāo)板上在線仿真時,把.out文件下載到RAM中能正常履行,可是用CCS燒寫到Flash儲存器中就不可以正常履行,出現(xiàn)智能化發(fā)掘機(jī)軌跡控制系統(tǒng)不依據(jù)早先設(shè)定好的軌跡運(yùn)轉(zhuǎn)和μC/OS-Ⅱ及時多任務(wù)調(diào)動雜亂等失控問題,特別是在課題的后期查收階段問題尤其棘手。1.3原由剖析程序固化的要點(diǎn)問題是怎樣在程序儲存器中分派儲存空間給常量和用const要點(diǎn)字定義的靜態(tài)、全局變量。經(jīng)過認(rèn)真研究,發(fā)現(xiàn)與TI的C編譯器功能有關(guān)。CCS的編譯器依據(jù)標(biāo)準(zhǔn)C,沒有對FlashROM中常數(shù)數(shù)據(jù)進(jìn)行直接接見的功能。所以一定讓const段的常量數(shù)據(jù)在RAM中。實(shí)現(xiàn)這一條件的方法有3種:方法1:解決μC/OS-Ⅱ在Flash中運(yùn)轉(zhuǎn)的方法,采納去除const要點(diǎn)字,在程序中賦初值使用,并且需要在.cmd文件中將.cinit段分派到程序區(qū)Flash儲存空間,而后在編譯器的編譯選項中選中“-C”,即ROM初始化(C編譯器默認(rèn)就是這樣的)。方法2:不對定義作改正,.const段保存在Flash儲存器中,數(shù)據(jù)不向數(shù)據(jù)儲存器挪動,程序運(yùn)轉(zhuǎn)時直接在程序儲存空間中接見這些量。因?yàn)閏語言缺少接見程序區(qū)數(shù)據(jù)的有效手段,所以這些語句只好使用匯編語言編寫。因?yàn)樵诿恳惶幗右娺@些常量時都一定使用這些語句,所以這樣編寫程序變動量較大。方法3:不需要改正常量定義,也不用編寫特意的程序,主要的工作是改正.cmd文件并對工程中使用的庫文件作簡單的改正,改正工作量小并且集中,極大地方便了程序的編寫。較以前兩種方法,這類方法運(yùn)用起來要方便得多。要點(diǎn)問題的解決與實(shí)現(xiàn)以下分別介紹方法1和方法3的詳細(xì)實(shí)現(xiàn)。2.1方法1解決μC/OS-Ⅱ在Flash儲存器中運(yùn)轉(zhuǎn)的方法,即去除const要點(diǎn)字,在程序中賦初值使用,以μC/OS-Ⅱ的改正為例:問題的發(fā)現(xiàn)C/OS-Ⅱ的程序燒寫到Flash中的問題,剛開始思疑是分派儲存器的cmd文件有問題,而后有關(guān)的又想到程序的大小問題,特別是在咨詢聞亭的技術(shù)人員見告大于1kB的程序要分開燒后,甚至思疑聞亭的仿真器和開發(fā)板。此后實(shí)驗(yàn)使用合眾達(dá)的板子是相同的成效,并且發(fā)現(xiàn)不帶μC/OS的大小程序都能正常履行,基本清除了程序大小的問題以及硬件問題。此后經(jīng)過對μC/OS系統(tǒng)任務(wù)調(diào)動前加LED函數(shù),發(fā)現(xiàn):直到多任務(wù)調(diào)動前都能正常履行,開始多任務(wù)調(diào)度后就出了問題。到這里確立問題出在μC/OS-Ⅱ上,可是μC/OS-Ⅱ的移植是其余人員做的,其余自己沒有做過嚴(yán)格測試,也沒有燒到Flash儲存器中運(yùn)行過,對整個課題產(chǎn)生致命的影響。最后課題組剖析了程序在Flash儲存器中運(yùn)轉(zhuǎn)與在RAM中運(yùn)轉(zhuǎn)的實(shí)質(zhì)差別,提出一個重要的建議:可能有系統(tǒng)需要的常量定義在擴(kuò)展RAM區(qū)了,當(dāng)?shù)綦姾螅琑AM區(qū)的內(nèi)容沒有了,常量也就沒有了,影響了系統(tǒng)的運(yùn)轉(zhuǎn)。經(jīng)過查察工程的cmd文件和編譯輸出的map文件,發(fā)現(xiàn)的確有系統(tǒng)內(nèi)核的常量放在8000h此后的擴(kuò)展RAM區(qū)。見下邊map文件引用:而后在OS_CORE.C中找到了常量的地點(diǎn),分別是掩碼表:INT8UconstOSMapTbl[]和任務(wù)優(yōu)先級判斷表:INT8UconstOSUnMapTbl[]經(jīng)過實(shí)驗(yàn)發(fā)現(xiàn),燒寫程序到Flash儲存器中以后,假如不關(guān)電源,而直接拔掉USB,從Flash儲存器指引,復(fù)位后程序能正常履行,可是關(guān)電后就不可以了。經(jīng)查察,F(xiàn)lash儲存器燒寫過程是先將程序裝載到RAM,再搬移到Flash儲存器中,所以不掉電全部程序都在RAM中有保存,可是程序確能從Flash儲存器指引。這樣,就確立了的確是這些常量放在RAM中惹起的??墒瞧鋵?shí)不像開始想象的那樣,把常量直接定義在Flash儲存器區(qū)就能解決,但能夠經(jīng)過程序賦值來初始化這些常量,而不經(jīng)過編譯來初始化,這是一個不必定最好但很有效的辦法。改正方法依據(jù)上邊的思路,對μC/OS作了以下3處改正:a)OS_CORE.C文件中上邊兩個數(shù)組的上邊的初始化定義改為下邊兩個初始化函數(shù):對μC/OS-Ⅱ.H函數(shù)進(jìn)行改正:將外面變量弓用的定義在主程序的main( )函數(shù)中的多任務(wù)調(diào)動函數(shù)履行前調(diào)用前面的兩個初始化函數(shù),以下:此方法用一句話總結(jié),就是將常量定義成變量,以賦值語句的方式初始化到RAM中。2.2方法3:改正數(shù)據(jù)段的定位方式和庫函數(shù)這類方式除了要改正.const段的裝載地點(diǎn)和運(yùn)轉(zhuǎn)地點(diǎn)外,還要對CCS自帶的初始化函數(shù)進(jìn)行改正??墒沁@類方法是一勞久逸的。對.const段的改正以下:即采納了裝載地點(diǎn)與運(yùn)轉(zhuǎn)地點(diǎn)分別的方式,將.const載入ROM段,而運(yùn)轉(zhuǎn)時在RAM區(qū)。為了使程序正常運(yùn)轉(zhuǎn),在初始化時,需要將.const段的內(nèi)容從裝載地點(diǎn)拷貝到運(yùn)轉(zhuǎn)地點(diǎn)內(nèi)。這段程序能夠在編譯時由編譯器自動生成。這還需要對軟件所使用的庫文件作簡單的改正。該庫名稱即是rts.lib(表示不一樣種類的DSP,有2xx、25、50等)。改正該庫的方法是將源文件從庫中提拿出來進(jìn)行改正,編譯后再代替原有的文件。詳細(xì)操作以下:將庫函數(shù)rts2xx.lib、源文件rts.src、兩個工具函數(shù)dspar.exe和dspa.exe找到,放在贊同個目錄下,翻開ms_dos命令窗。履行DOS命令:這句的功能是從rts.src文件中提拿出boot.asm文件。這個rts.src即是rts.lib的源文件。在boot.asm文件中能找到CONST_COPY這個標(biāo)記量,為了實(shí)現(xiàn)所需要的功能,它應(yīng)被賦值為1。對boot.asm文件的編寫達(dá)成以后,就能夠?qū)⑵渚幾g生成目標(biāo)文件,履行語句:此中關(guān)于不一樣的DSP需要使用不一樣的參數(shù),關(guān)于240xA來說,應(yīng)當(dāng)使用2xx來取代“”。語句履行完后會生成boot.obj文件。再履行語句:這時它就代替了庫里的同名文件。在編譯時編譯器就會自動增添拷貝.const段到數(shù)據(jù)空間的語句。這類方法不用改正程序,代價是犧牲了必定的數(shù)據(jù)儲存空間,時間開支主要出此刻初始化中。這應(yīng)當(dāng)是最經(jīng)濟(jì)適用的方法。結(jié)束語對常量辦理的3種方法中,第方法1和方法3相對較簡單實(shí)現(xiàn)。此中方法1對于自己編寫的少許代碼改正起來比較方便,可是假如碰到庫函數(shù)頂用到.const的狀況,就需要像第方法3相同提取庫函數(shù)中的代碼,來改正這個庫函數(shù),在發(fā)掘機(jī)軌跡控制程序頂用到atan函數(shù)就是這類狀況。這類做法對每個這樣的函數(shù)都要履行相同的操作,明顯不是最正確解決方法。方法3固然一定改正cmd文件和庫文件,可是它

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論