以前一直使用CCS3.3,因?yàn)檐浖菀讓?dǎo)致藍(lán)屏、死機(jī),用虛擬機(jī)又嚴(yán)重影響仿真器速度。所以改用了CCS5.2。
CCS5使用的ECLIPS架構(gòu),跟以前的CCS3.3幾乎完全接不上茬……DSP/BIOS也升了級,好多函數(shù)都改了名字。甚至以前的gel文件也被包裹成別的樣子…… 好不容易把程序改到可以仿真運(yùn)行了,等下載到SPIFLASH啟動(dòng)的時(shí)候又出現(xiàn)了問題,程序沒能正常啟動(dòng)。 后來測試波形發(fā)現(xiàn)程序已經(jīng)完成了加載,但無法正確運(yùn)行。經(jīng)過幾翻周折,終于找到了原因。發(fā)現(xiàn)編譯后的.map文件有兩個(gè).cinit段和兩個(gè).pinit段。而且其中一個(gè)顯示長度為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文件自動(dòng)生成為linker.cmd文件,用戶自定義另外的.cmd文件不能與其沖突。文檔建議不要使用用戶自定義的cmd文件,如果需要自己配置空間的話,可以修改.cfg或linker.cmd文件。 而之前我延用以前CCS3.3的習(xí)慣,使用了自己定義的.cmd文件,所以出現(xiàn)了兩個(gè).cinit段和兩個(gè).pinit段。于是導(dǎo)致自加載時(shí)變量不能得到初始化,程序不能正常運(yùn)行。 …… .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后能程序正常加載運(yùn)行。 ……
.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
……
|