以前一直使用CCS3.3,因為軟件太容易導致藍屏、死機,用虛擬機又嚴重影響仿真器速度。所以改用了CCS5.2。
CCS5使用的ECLIPS架構,跟以前的CCS3.3幾乎完全接不上茬……DSP/BIOS也升了級,好多函數都改了名字。甚至以前的gel文件也被包裹成別的樣子…… 好不容易把程序改到可以仿真運行了,等下載到SPIFLASH啟動的時候又出現了問題,程序沒能正常啟動。 后來測試波形發現程序已經完成了加載,但無法正確運行。經過幾翻周折,終于找到了原因。發現編譯后的.map文件有兩個.cinit段和兩個.pinit段。而且其中一個顯示長度為0,并且處于UNINITIALIZED狀態:
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
經過查看“TI SYS/BIOS v6.33 Real-timeOperating System User's Guide”文檔,發現內存配置工作已經由新的.cfg文件自動生成為linker.cmd文件,用戶自定義另外的.cmd文件不能與其沖突。文檔建議不要使用用戶自定義的cmd文件,如果需要自己配置空間的話,可以修改.cfg或linker.cmd文件。 而之前我延用以前CCS3.3的習慣,使用了自己定義的.cmd文件,所以出現了兩個.cinit段和兩個.pinit段。于是導致自加載時變量不能得到初始化,程序不能正常運行。 …… .vecs> IRAM_Code .text > IRAM_Code /* Common Code */ .bss > IRAM_Data /* 變量 */ .cinit > DDR2 _Code .switch> IRAM_Data .far > IRAM_Data /* 數組 */ .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文件內的相關段刪掉,編譯后.map文件中只有一組.cinit和.pinit,燒寫到SPI FLASH后能程序正常加載運行。 ……
.vecs> IRAM_Code .text > IRAM_Code /* Common Code */ .bss > IRAM_Data /* 變量 */ .switch> IRAM_Data .far > IRAM_Data /* 數組 */ .const > IRAM_Data/*DDR2_L2Shadow IRAM3*/ .bootload> IRAM_Code .printf> IRAM_Data .cio > IRAM_Data .data > IRAM_Data .system> IRAM_Data
……
|