新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > μC/OS-II在DSP Flash存儲(chǔ)器中運(yùn)行的關(guān)鍵問題

μC/OS-II在DSP Flash存儲(chǔ)器中運(yùn)行的關(guān)鍵問題

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

  b)對(duì)μC/OS-Ⅱ.H函數(shù)進(jìn)行修改:將外部變量弓用的定義

程序

  c)在主程序的main()函數(shù)中的多任務(wù)調(diào)度函數(shù)執(zhí)行前調(diào)用前面的兩個(gè)初始化函數(shù),如下:

程序

  此方法用一句話總結(jié),就是將常量定義成變量,以賦值語句的方式初始化到RAM中。

  2.2方法3:修改數(shù)據(jù)段的定位方式和庫函數(shù)

  這種方式除了要修改.const段的裝載地址和地址外,還要對(duì)CCS自帶的初始化函數(shù)進(jìn)行修改。但是這種方法是一勞永逸的。

  對(duì).const段的修改如下:

程序

  即采用了裝載地址與地址分離的方式,將.const載入ROM段,而時(shí)在RAM區(qū)。為了使程序正常運(yùn)行,在初始化時(shí),需要將.const段的內(nèi)容從裝載地址拷貝到運(yùn)行地址內(nèi)。這段程序可以在編譯時(shí)由編譯器自動(dòng)生成。這還需要對(duì)軟件所使用的庫文件作簡(jiǎn)單的修改。該庫名稱即是rts.lib(表示不同類型的,有2xx、25、50等)。修改該庫的方法是將源文件從庫中提取出來進(jìn)行修改,編譯后再替代原有的文件。具體操作如下:

  a)將庫函數(shù)rts2xx.lib、源文件rts.src、兩個(gè)工具函數(shù)dspar.exe和dspa.exe找到,放在同意個(gè)目錄下,打開ms_dos命令窗。

  b)執(zhí)行DOS命令:

程序

  這句的功能是從rts.src文件中提取出boot.asm文件。這個(gè)rts.src即是rts.lib的源文件。在boot.asm文件中能找到CONST_COPY這個(gè)標(biāo)志量,為了實(shí)現(xiàn)所需要的功能,它應(yīng)被賦值為1。對(duì)boot.asm文件的編輯完成之后,就可以將其編譯生成目標(biāo)文件,執(zhí)行語句:

程序

  其中對(duì)于不同的需要使用不同的參數(shù),對(duì)于240xA來說,應(yīng)該使用2xx來代替“”。語句執(zhí)行完后會(huì)生成boot.obj文件。再執(zhí)行語句:

程序

  這時(shí)它就替換了庫里的同名文件。在編譯時(shí)編譯器就會(huì)自動(dòng)增加拷貝.const段到數(shù)據(jù)空間的語句。這種方法不必修改程序,代價(jià)是犧牲了一定的數(shù)據(jù)存儲(chǔ)空間,時(shí)間開銷主要出現(xiàn)在初始化中。這應(yīng)該是最經(jīng)濟(jì)實(shí)用的方法。

  3結(jié)束語

  對(duì)常量處理的3種方法中,第方法1和方法3相對(duì)較容易實(shí)現(xiàn)。其中方法1對(duì)于自己編寫的少量代碼修改起來比較方便,但是如果碰到庫函數(shù)中用到.const的情況,就需要像第方法3一樣提取庫函數(shù)中的代碼,來修改這個(gè)庫函數(shù),在挖掘機(jī)軌跡控制程序中用到atan函數(shù)就是這種情況。這種做法對(duì)每個(gè)這樣的函數(shù)都要執(zhí)行同樣的操作,顯然不是最佳解決辦法。

  方法3雖然必須修改cmd文件和庫文件,但是它是一勞永逸的。生成相應(yīng)的庫函數(shù)和cmd文件以后,對(duì)任何帶有const的代碼都不再需要做任何修改。所以這種方法也是TI推薦的方法,在TI的數(shù)據(jù)手冊(cè)TMS320C2x/C2xx/C5x Optimizing C Compiler User’sGuide(SPRU024E)中有對(duì)它的說明。

  本課題已經(jīng)通過國(guó)家863計(jì)劃專家組的驗(yàn)收,該智能化挖掘機(jī)軌跡控制系統(tǒng)已經(jīng)交付柳工使用。


上一頁 1 2 下一頁

評(píng)論


相關(guān)推薦

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

關(guān)閉