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