μC/OS-II在DSP Flash存儲器中運行的關(guān)鍵問題
b)對μC/OS-Ⅱ.H函數(shù)進行修改:將外部變量弓用的定義
c)在主程序的main()函數(shù)中的多任務(wù)調(diào)度函數(shù)執(zhí)行前調(diào)用前面的兩個初始化函數(shù),如下:
此方法用一句話總結(jié),就是將常量定義成變量,以賦值語句的方式初始化到RAM中。
2.2方法3:修改數(shù)據(jù)段的定位方式和庫函數(shù)
這種方式除了要修改.const段的裝載地址和運行地址外,還要對CCS自帶的初始化函數(shù)進行修改。但是這種方法是一勞永逸的。
對.const段的修改如下:
即采用了裝載地址與運行地址分離的方式,將.const載入ROM段,而運行時在RAM區(qū)。為了使程序正常運行,在初始化時,需要將.const段的內(nèi)容從裝載地址拷貝到運行地址內(nèi)。這段程序可以在編譯時由編譯器自動生成。這還需要對軟件所使用的庫文件作簡單的修改。該庫名稱即是rts.lib(表示不同類型的DSP,有2xx、25、50等)。修改該庫的方法是將源文件從庫中提取出來進行修改,編譯后再替代原有的文件。具體操作如下:
a)將庫函數(shù)rts2xx.lib、源文件rts.src、兩個工具函數(shù)dspar.exe和dspa.exe找到,放在同意個目錄下,打開ms_dos命令窗。
b)執(zhí)行DOS命令:
這句的功能是從rts.src文件中提取出boot.asm文件。這個rts.src即是rts.lib的源文件。在boot.asm文件中能找到CONST_COPY這個標(biāo)志量,為了實現(xiàn)所需要的功能,它應(yīng)被賦值為1。對boot.asm文件的編輯完成之后,就可以將其編譯生成目標(biāo)文件,執(zhí)行語句:
其中對于不同的DSP需要使用不同的參數(shù),對于240xA來說,應(yīng)該使用2xx來代替“”。語句執(zhí)行完后會生成boot.obj文件。再執(zhí)行語句:
這時它就替換了庫里的同名文件。在編譯時編譯器就會自動增加拷貝.const段到數(shù)據(jù)空間的語句。這種方法不必修改程序,代價是犧牲了一定的數(shù)據(jù)存儲空間,時間開銷主要出現(xiàn)在初始化中。這應(yīng)該是最經(jīng)濟實用的方法。
3結(jié)束語
對常量處理的3種方法中,第方法1和方法3相對較容易實現(xiàn)。其中方法1對于自己編寫的少量代碼修改起來比較方便,但是如果碰到庫函數(shù)中用到.const的情況,就需要像第方法3一樣提取庫函數(shù)中的代碼,來修改這個庫函數(shù),在挖掘機軌跡控制程序中用到atan函數(shù)就是這種情況。這種做法對每個這樣的函數(shù)都要執(zhí)行同樣的操作,顯然不是最佳解決辦法。
方法3雖然必須修改cmd文件和庫文件,但是它是一勞永逸的。生成相應(yīng)的庫函數(shù)和cmd文件以后,對任何帶有const的代碼都不再需要做任何修改。所以這種方法也是TI推薦的方法,在TI的數(shù)據(jù)手冊TMS320C2x/C2xx/C5x Optimizing C Compiler User’sGuide(SPRU024E)中有對它的說明。
本課題已經(jīng)通過國家863計劃專家組的驗收,該智能化挖掘機軌跡控制系統(tǒng)已經(jīng)交付柳工使用。
評論