日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C6000 DSP技术深度探索---链接命令文件(cmd)

發布時間:2024/8/1 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C6000 DSP技术深度探索---链接命令文件(cmd) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一個DSP工程中主要包含如下幾種類型文件:
<1>C文件(*.c及*.h);
<2>匯編文件(*.asm),注意有兩種比較特殊的匯編文件,一種是中斷向量表(vectors.asm-常見于不包含DSP/BIOS的程序中),
另一種是bootloader文件(該文件實現二級啟動功能);
<3>庫文件(*.lib、*.a、*.a64等),該類型文件是對源文件的一種封裝,通常只提供API調用接口,不提供源碼,既可以防止對
源文件的誤修改,也可以起到保護知識產權的作用;
<4>dsp/bios(*.tcf),該文件見于使用DSP/BIOS中的工程中,是DSP/BIOS的配置文件,可以使用圖形或文本方式進行DSP/BIOS的配置
<5>鏈接命令文件,該文件主要是定義存儲器的物理空間(MEMORY)及程序段與物理空間的映射關系(SECTIONS);
? ? 這里先從CMD文件說起,首先說一下MEMORY部分,這里以TMS320C6455的一個實例進行講解:
MEMORY {
? ? L1PRAM: ? ? o = 0x00E00000 ?l = 0x00008000 ?/* 32kB L1 Program SRAM/CACHE */
? ? L1DRAM: ? ? o = 0x00F00000 ?l = 0x00008000 ?/* 32kB L1 Data SRAM/CACHE */
? ? L2RAM: ? ? ? o = 0x00800000 ?l = 0x00200000 ?/* 2MB L2 Internal SRAM */
? ? EMIFA_CE2: ?o = 0xA0000000 ?l = 0x00800000 ?/* 8MB EMIFA CE2 */
? ? EMIFA_CE3: ?o = 0xB0000000 ?l = 0x00800000 ?/* 8MB EMIFA CE3 */
? ? EMIFA_CE4: ?o = 0xC0000000 ?l = 0x00800000 ?/* 8MB EMIFA CE4 */
? ? EMIFA_CE5: ?o = 0xD0000000 ?l = 0x00800000 ?/* 8MB EMIFA CE5 */
? ? DDR2_CE0: ? o = 0xE0000000 ?l = 0x10000000 ?/* 256MB EMIFB CE0 */
}?
上面的MEMORY部分主要分三個部分:存儲器名 ? ?存儲器起始地址 ? ? 存儲器長度;
該段定義與相應DSP芯片及硬件板卡(外部擴展存儲部分)是密切相關的,大家可以查一下6455的手冊的memory map部分,可以看到該部分
與上面的代碼是一一對應的,上面定義的存儲器名部分是用于SECTIONS后面段分配的。
接下來再說說SECTIONS部分,如下:
SECTIONS {
? ? .vector ? ? ? ?> ? ? ?0x00800000, RUN_START(_ISTP_START)
? ? .text ? ? ? ? ?> ?L2RAM
? ? .stack ? ? ? ? > ?L2RAM
? ? .bss ? ? ? ? ? > ?L2RAM
? ? .cio ? ? ? ? ? > ?L2RAM
? ? .const ? ? ? ? > ?L2RAM
? ? .data ? ? ? ? ?> ?L2RAM
? ? .switch ? ? ? ?> ?L2RAM
? ? .sysmem ? ? ? ?> ?L2RAM
? ? .far ? ? ? ? ? > ?L2RAM
? ? .args ? ? ? ? ?> ?L2RAM
? ? .ppinfo ? ? ? ?> ?L2RAM
? ? .ppdata ? ? ? ?> ?L2RAM


? ? /* COFF sections */
? ? .pinit ? ? ? ? > ?L2RAM
? ? .cinit ? ? ? ? > ?L2RAM
}
上面這種是最簡單的一種SECTIONS定義,這個SECTIONS部分的格式如下:
段名 ? ?> ? ?存儲器名
首先說一下什么是“section”,所謂的section是一個目標文件(*.obj)中的最小單元,它通常是占據一段連續存儲空間的代碼或數據,
借助“section”,程序員就可以使用模塊化的編程思想,將相近功能的代碼或數據放在一起(這類似于C語言中過程式編程語言,將一段
代碼放在一個函數中)如果你是一個使用匯編語言編寫代碼的工程師,你對這點一定深有體會。


在上面的代碼段中,段主要有兩種(也可以說三種,因為.bss,.data和.text是匯編器默認創建的段,只是對于C編譯器來說,它會創建自
己的.bss和.text,并且它不使用匯編器創建的.data段),一種是用戶自定義段,一種是編譯器創建的段,上面的.vector段就是用戶自定
義段(該段通常是在vectors.asm中定義的,用于存儲中斷向量表,至于為什么將該段存放在000800000起始的段地址,就要查看6455的啟動
方式(No BOOT方式)了),其余段就是C編譯器創建的段了。
首先說一下如何使用自定義段,如果你使用匯編語言,你有兩種方式創建自定義段,一個是".sect",一個是".usec",前者創建初始化段,
后者創建未初始化段,例如上面.vector段的創建語法如下:
標號(可選) 匯編指令 ? ?(段名)
__vector ? ?.sect ? ? ? ".vector"
在上面的這條語句之后到下一個段名之前的程序將被存儲在.vector段中,然后就可以通過cmd文件中的section將該段
分配到特定存儲空間


如果你使用C語言,你可以使用如下的方式將一些代碼或數據存放到指定存儲段,例如:
<c文件中定義>
#pragma DATA_SECTION (my_array,".self_section")
unsigned char my_array[100];
<cmd文件中>
SECTIONS
{ ? ?
? ? .self_section ? ? ? ? > ?L2RAM
}

這樣就將一個數組分配到了L2RAM。



轉自:http://blog.csdn.net/hanfei410/article/details/50134687


總結

以上是生活随笔為你收集整理的C6000 DSP技术深度探索---链接命令文件(cmd)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。