C6678多核DSP CMD檔案介紹

2021-10-02 18:28:51 字數 2387 閱讀 1734

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。分兩層其實兩層功能也不同,這個不用...