標題: CCS5.2下CMD文件導致的DM648自啟動問題 [打印本頁]
作者: liuyy 時間: 2015-1-12 23:14
標題: CCS5.2下CMD文件導致的DM648自啟動問題
以前一直使用CCS3.3,因為軟件太容易導致藍屏、死機,用虛擬機又嚴重影響仿真器速度。所以改用了CCS5.2。
CCS5使用的ECLIPS架構(gòu),跟以前的CCS3.3幾乎完全接不上茬……DSP/BIOS也升了級,好多函數(shù)都改了名字。甚至以前的gel文件也被包裹成別的樣子……
好不容易把程序改到可以仿真運行了,等下載到SPIFLASH啟動的時候又出現(xiàn)了問題,程序沒能正常啟動。
后來測試波形發(fā)現(xiàn)程序已經(jīng)完成了加載,但無法正確運行。經(jīng)過幾翻周折,終于找到了原因。發(fā)現(xiàn)編譯后的.map文件有兩個.cinit段和兩個.pinit段。而且其中一個顯示長度為0,并且處于UNINITIALIZED狀態(tài):
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.pinit 0 e0400000 00000000 UNINITIALIZED
.cinit 0 e0300000 00000000 UNINITIALIZED
.pinit 0 00a10000 00000000 UNINITIALIZED
……
.cinit 0 e15840b0 0000148c
經(jīng)過查看“TI SYS/BIOS v6.33 Real-timeOperating System User's Guide”文檔,發(fā)現(xiàn)內(nèi)存配置工作已經(jīng)由新的.cfg文件自動生成為linker.cmd文件,用戶自定義另外的.cmd文件不能與其沖突。文檔建議不要使用用戶自定義的cmd文件,如果需要自己配置空間的話,可以修改.cfg或linker.cmd文件。
而之前我延用以前CCS3.3的習慣,使用了自己定義的.cmd文件,所以出現(xiàn)了兩個.cinit段和兩個.pinit段。于是導致自加載時變量不能得到初始化,程序不能正常運行。
……
.vecs> IRAM_Code
.text > IRAM_Code /* Common Code */
.bss > IRAM_Data /* 變量 */
.cinit > DDR2 _Code
.switch> IRAM_Data
.far > IRAM_Data /* 數(shù)組 */
.const > IRAM_Data/*DDR2_L2Shadow IRAM3*/
.bootload> IRAM_Code
.printf> IRAM_Data
.pinit > IRAM_Data /* Common Code */
.cio > IRAM_Data
.data > IRAM_Data
.system> IRAM_Data
……
將自定義的.cmd文件內(nèi)的相關(guān)段刪掉,編譯后.map文件中只有一組.cinit和.pinit,燒寫到SPI FLASH后能程序正常加載運行。
……
.vecs> IRAM_Code
.text > IRAM_Code /* Common Code */
.bss > IRAM_Data /* 變量 */
.switch> IRAM_Data
.far > IRAM_Data /* 數(shù)組 */
.const > IRAM_Data/*DDR2_L2Shadow IRAM3*/
.bootload> IRAM_Code
.printf> IRAM_Data
.cio > IRAM_Data
.data > IRAM_Data
.system> IRAM_Data
……
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |