cmd檔案編寫
cmd:鏈結器配置檔案,存放鏈結器的配置資訊,cmd檔案使開發者可以通過自己定義的儲存器模組來配置系統儲存器,說白點也就是cmd是用來分配rom和ram空間用的,告訴鏈結程式怎樣計算位址和分配空間。
memory命令:描述系統實際的硬體資源
section命令:描述「段」如何定位
其中比較關鍵的就是memory和sections兩個偽指令的使用,memory用來建立目標儲存器的模型,sections指令就可以根據這個模型來安排各個段的位置,memory指令可以定義目標系統的各種型別的儲存器及容量。
把hello world裡的cmd檔案拷上來分析一下:
-heap是堆,我這裡分出3m是因為我把所有段都分配在了share ram(shram)上,l2一共有4m。
-stack 是棧,一般都是這麼大。
memory是l1、l2、shram、emif和ddr3的位址範圍和大小,一般的應用都會用ddr3,由於我的板卡還沒開發ddr3,就只好都用shram了。
section裡的字段:
.cinit 存放程式中的變數初值和常量
.const 存放程式中的字元常量、浮點常量和用const宣告的常量
.switch 存放程式中switch語句的跳轉位址表
.text 存放程式**
.bss 為程式中的全域性和靜態變數保留儲存空間
.far 為程式中用far宣告的全域性和靜態變數保留空間
.stack 為程式系統堆疊保留儲存空間,用於儲存返回位址、函式間的引數傳遞儲存區域性變數和儲存中間結果
.sysmem 用於程式中的malloc 、calloc 、和realoc 函式動態分配儲存空間
-c-heap 0x300000 /*3mb*/
-stack0x10000
memory
local_l2_sram: o = 0x00800000 l = 0x00080000 /* 512kb local l2/sram */
local_l1p_sram: o = 0x00e00000 l =0x00008000 /* 32kb local l1p/sram */
local_l1d_sram: o = 0x00f00000 l =0x00008000 /* 32kb local l1d/sram */
shram: o = 0x0c000000 l = 0x00400000 /* 4mb multicore shared memmory */
emif16_cs2: o = 0x70000000 l = 0x04000000 /* 64mb emif16 cs2 data memory */
emif16_cs3: o = 0x74000000 l = 0x04000000 /* 64mb emif16 cs3 data memory */
emif16_cs4: o = 0x78000000 l = 0x04000000 /* 64mb emif16 cs4 data memory */
emif16_cs5: o = 0x7c000000 l = 0x04000000 /* 64mb emif16 cs5 data memory */
ddr3: o = 0x80000000 l = 0x80000000 /* 2gb ce0 and ce1 external ddr3 sdram */
sections
.text > shram
.stack > shram
.bss > shram
.cio > shram
.const > shram
.data > shram
.switch > shram
.sysmem > shram
.far > shram
.args > shram
.ppinfo > shram
.ppdata > shram
/* coff sections */
.pinit > shram
.cinit > shram
/* eabi sections */
.binit > shram
.init_array > shram
.neardata > shram
.fardata > shram
.rodata > shram
.c6xabi.exidx > shram
.c6xabi.extab > shram
}
C6678多核應用的cache小測試
c6678多核之間在msmc中互動資料,缺省會用到l1d cache 資料一致性問題是很令人困擾的。小測試驗證了關於l1d cache 的linesize 是64byte 初始化 if dnum 0 然後在多核同步中斷程式中 test if dnum 0 else 如此測試條件下,兩個資料始終相差0...
C6678啟動異常排查
c6678外掛程式兩片flash 兩片fpga,每片fpga flash分別占用c6678的乙個emif介面,c6678的加電控制及上電時序均由fpga控制。考慮到觀察到的現象是部分函式的記憶體值為非法值,因此懷疑是dsp程式在boot搬移過程中,出現搬移中的的情況。考慮到dsp是由fpga進行控電...
C6678的中斷控制器
c6678 的中斷控制器 分兩層,一層是每個core內部的中斷控制器,這個叫interruptcontroller,簡寫intc 一層是整個晶元的,屬於晶元級的,在每個core的外面,這個叫chip level interrupt controller,縮寫cic。分兩層其實兩層功能也不同,這個不用...