版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 第九章第九章 dsp集成軟件開(kāi)發(fā)環(huán)境集成軟件開(kāi)發(fā)環(huán)境 第九章第九章 dsp集成軟件開(kāi)發(fā)環(huán)境集成軟件開(kāi)發(fā)環(huán)境 9.1 ccs集成開(kāi)發(fā)環(huán)境集成開(kāi)發(fā)環(huán)境 9.2 c語(yǔ)言程序基礎(chǔ)語(yǔ)言程序基礎(chǔ) 9.3 混合語(yǔ)言編程混合語(yǔ)言編程 9.4 芯片支持庫(kù)芯片支持庫(kù)( (csl) ) 9.1 ccs集成開(kāi)發(fā)環(huán)境集成開(kāi)發(fā)環(huán)境 ccs(code composer studio)是ti公司為dsp推出的 集成軟件開(kāi)發(fā)環(huán)境(ide),提供了配置、建立、調(diào) 試、跟蹤和分析的工具,包括了應(yīng)用程序開(kāi)發(fā)必需 的所有功能,便于對(duì)實(shí)時(shí)信號(hào)處理程序的編制和測(cè) 試,能夠加速開(kāi)發(fā)進(jìn)程,提高工作效率。 ccs是是dsp領(lǐng)域第一個(gè)領(lǐng)域第一個(gè)
2、 完整的、開(kāi)放型集成完整的、開(kāi)放型集成 開(kāi)發(fā)環(huán)境開(kāi)發(fā)環(huán)境(ide) 直觀、易用直觀、易用 無(wú)需停止無(wú)需停止dsp運(yùn)行即運(yùn)行即 可觀察可觀察dsp的信息的信息 具有實(shí)時(shí)分析功能開(kāi)具有實(shí)時(shí)分析功能開(kāi) 放的環(huán)境放的環(huán)境 可加入第三方插件可加入第三方插件 (plug-ins) ccs調(diào)試界面調(diào)試界面 ccs調(diào)試界面調(diào)試界面 菜單條菜單條標(biāo)題區(qū)標(biāo)題區(qū) 編輯工具條編輯工具條編譯工具條編譯工具條 數(shù)據(jù)顯示數(shù)據(jù)顯示 窗口窗口 圖形顯示圖形顯示 窗口窗口 變量觀察窗變量觀察窗 口口 c源程序編源程序編 輯窗口輯窗口 反匯編調(diào)試反匯編調(diào)試 窗口窗口 編譯運(yùn)行結(jié)果編譯運(yùn)行結(jié)果 顯示窗口顯示窗口 調(diào)試調(diào)試 工具條工具
3、條 工程管理工程管理 窗口窗口 信號(hào)分析圖形化信號(hào)分析圖形化 u以自然的格式觀察信號(hào)以自然的格式觀察信號(hào) u在變量有效時(shí)修改其值在變量有效時(shí)修改其值 并觀察它們的影響并觀察它們的影響 u多種專用的畫圖工具多種專用的畫圖工具 n時(shí)域頻域圖時(shí)域頻域圖 nfft neye diagram nconstellation plot nimage displays 可視化圖形可視化圖形 ccs集成環(huán)境的組成集成環(huán)境的組成 軟件開(kāi)發(fā)流程軟件開(kāi)發(fā)流程 ccs集成開(kāi)發(fā)環(huán)境集成開(kāi)發(fā)環(huán)境 提供一些類似提供一些類似vc的代碼編輯功能的代碼編輯功能 語(yǔ)法高亮顯示,自動(dòng)縮近,文字查找等等語(yǔ)法高亮顯示,自動(dòng)縮近,文字查找等
4、等 原程序可以與反匯編同時(shí)顯示原程序可以與反匯編同時(shí)顯示 ccs項(xiàng)目管理項(xiàng)目管理 應(yīng)用程序按項(xiàng)目來(lái)管理,應(yīng)用程序按項(xiàng)目來(lái)管理, 按層次以圖形化的方式按層次以圖形化的方式 顯示顯示 *.cmd 文件文件 *.h 頭文件頭文件 *.lib 庫(kù)文件庫(kù)文件 *.c 源程序源程序 ccs圖形化設(shè)置圖形化設(shè)置 各種編譯選項(xiàng),如各種編譯選項(xiàng),如c 編譯器選項(xiàng),連接編譯器選項(xiàng),連接 器選項(xiàng)等通過(guò)圖形器選項(xiàng)等通過(guò)圖形 化方式來(lái)設(shè)置,不化方式來(lái)設(shè)置,不 需要手工添加選項(xiàng)需要手工添加選項(xiàng) 1、設(shè)置斷點(diǎn)、設(shè)置斷點(diǎn) 將光標(biāo)放置在需要設(shè)置斷點(diǎn)的程序行前,點(diǎn)擊將光標(biāo)放置在需要設(shè)置斷點(diǎn)的程序行前,點(diǎn)擊debug breakp
5、oints,或點(diǎn),或點(diǎn) 擊工具欄按鈕擊工具欄按鈕 ,即可完成一個(gè)斷點(diǎn)的設(shè)置,點(diǎn)擊工具欄按鈕,即可完成一個(gè)斷點(diǎn)的設(shè)置,點(diǎn)擊工具欄按鈕 可清除可清除 所有的斷點(diǎn)。所有的斷點(diǎn)。 2、復(fù)位的、復(fù)位的3種方法種方法 (1) reset dsp:點(diǎn)擊:點(diǎn)擊debug reset cpu,初始化所有的寄存器內(nèi)容并暫停,初始化所有的寄存器內(nèi)容并暫停 運(yùn)行中的程序。使用此命令后,要重新裝載運(yùn)行中的程序。使用此命令后,要重新裝載.out 文件后,再執(zhí)行程序。文件后,再執(zhí)行程序。 (2) restart:點(diǎn)擊:點(diǎn)擊debug restart ,將,將pc 值恢復(fù)到當(dāng)前載入程序的入口地值恢復(fù)到當(dāng)前載入程序的入口地 址
6、。址。 (3) go main:點(diǎn)擊:點(diǎn)擊debug go main,將程序運(yùn)行到主程序的入口處暫停。,將程序運(yùn)行到主程序的入口處暫停。 3、執(zhí)行程序的、執(zhí)行程序的4種方法種方法 (1) 連續(xù)連續(xù) 執(zhí)行:點(diǎn)擊執(zhí)行:點(diǎn)擊debug run ,程序運(yùn)行直到遇到斷點(diǎn)為止。,程序運(yùn)行直到遇到斷點(diǎn)為止。 (2) 暫停執(zhí)行:點(diǎn)擊暫停執(zhí)行:點(diǎn)擊debug halt ,程序停止運(yùn)行。,程序停止運(yùn)行。 (3) 動(dòng)畫執(zhí)行:點(diǎn)擊動(dòng)畫執(zhí)行:點(diǎn)擊debug animate,用戶反復(fù)運(yùn)行程序,直到遇到斷點(diǎn),用戶反復(fù)運(yùn)行程序,直到遇到斷點(diǎn) 為止。為止。 (4) 自由執(zhí)行:點(diǎn)擊自由執(zhí)行:點(diǎn)擊debug run free ,禁
7、止所有斷點(diǎn)運(yùn)行程序。,禁止所有斷點(diǎn)運(yùn)行程序。 ccs 常用功能常用功能 ccs 常用功能常用功能 4、單步執(zhí)行的、單步執(zhí)行的4 種方法種方法 (1) 單步進(jìn)入:快捷鍵單步進(jìn)入:快捷鍵f8,debug step into,當(dāng)調(diào)試語(yǔ)句不是基本的匯,當(dāng)調(diào)試語(yǔ)句不是基本的匯 編指令時(shí),此操作進(jìn)入語(yǔ)句內(nèi)部編指令時(shí),此操作進(jìn)入語(yǔ)句內(nèi)部 (2) 單步執(zhí)行:點(diǎn)擊單步執(zhí)行:點(diǎn)擊debug step over,此命令將函數(shù)或子函數(shù)當(dāng)作一條,此命令將函數(shù)或子函數(shù)當(dāng)作一條 語(yǔ)句執(zhí)行,不進(jìn)入內(nèi)部調(diào)試語(yǔ)句執(zhí)行,不進(jìn)入內(nèi)部調(diào)試 (3) 單步跳出:點(diǎn)擊單步跳出:點(diǎn)擊debug step out,此命令作用為從子程序中跳出,此
8、命令作用為從子程序中跳出 (4) 執(zhí)行到光標(biāo)處:快捷鍵執(zhí)行到光標(biāo)處:快捷鍵crtl+f10,debug run to cursor,此命令作,此命令作 用為將程序運(yùn)行到光標(biāo)處用為將程序運(yùn)行到光標(biāo)處 5、查看內(nèi)存與變量、查看內(nèi)存與變量 (1) 查看變量:使用查看變量:使用view watch window 命令命令 (2) 查看寄存器:使用查看寄存器:使用view registers cpu registers 命令命令 (3) 查看內(nèi)存:使用查看內(nèi)存:使用view memory 命令命令 6、探針(、探針(probe point) 1)適合于算法的開(kāi)發(fā),功能驗(yàn)證適合于算法的開(kāi)發(fā),功能驗(yàn)證 2)
9、可以完成這樣的功能可以完成這樣的功能 從一個(gè)文件中讀入數(shù)據(jù)到一個(gè)從一個(gè)文件中讀入數(shù)據(jù)到一個(gè)dsp的緩沖區(qū)的緩沖區(qū) 將一個(gè)將一個(gè)dsp的緩沖區(qū)內(nèi)容寫到文件中的緩沖區(qū)內(nèi)容寫到文件中 3)探點(diǎn)類似于斷點(diǎn),又不同于斷點(diǎn)探點(diǎn)類似于斷點(diǎn),又不同于斷點(diǎn) 運(yùn)行到運(yùn)行到probe point,dsp會(huì)停頓下來(lái)會(huì)停頓下來(lái) 完成一些動(dòng)作后(讀寫文件),程序繼續(xù)運(yùn)行完成一些動(dòng)作后(讀寫文件),程序繼續(xù)運(yùn)行 4)文件輸入輸出的設(shè)置:文件輸入輸出的設(shè)置:filefile i/o 5) probe的設(shè)置:類似斷點(diǎn)的設(shè)置(用工具條)的設(shè)置:類似斷點(diǎn)的設(shè)置(用工具條) 示例示例0901 ccs 常用功能常用功能 7. 圖形顯示
10、圖形顯示 ccs支持一維圖形,二維圖象(標(biāo)準(zhǔn)的數(shù)據(jù)格支持一維圖形,二維圖象(標(biāo)準(zhǔn)的數(shù)據(jù)格 式),眼圖等顯示方式式),眼圖等顯示方式 有放大、縮小等功能有放大、縮小等功能 可以方便直觀地判斷算法執(zhí)行的效果可以方便直觀地判斷算法執(zhí)行的效果 ccs 常用功能常用功能 ccs 常用功能常用功能 在ccs中可以將數(shù)據(jù)按圖形化方式顯示出來(lái),包 括時(shí)頻圖、星圖、眼圖時(shí)頻圖、星圖、眼圖和和圖像圖像4種類型。 各種圖形方式都是采用雙緩沖區(qū)(采集緩沖區(qū)和采集緩沖區(qū)和 顯示緩沖區(qū)顯示緩沖區(qū))分別存儲(chǔ)和顯示圖形的。 采集緩沖區(qū)在目標(biāo)處理器上,包含需要顯示的數(shù) 據(jù)。顯示緩沖區(qū)在主機(jī)上,用于保存采集緩沖區(qū) 數(shù)據(jù)的拷貝。圖
11、形是由顯示緩沖區(qū)的數(shù)據(jù)生成的。 當(dāng)刷新圖形時(shí),采集緩沖區(qū)內(nèi)容會(huì)被讀到顯示緩 沖區(qū)中。設(shè)置好顯示參數(shù)后,ccs就可以從采集 緩沖區(qū)讀取acquisition buffer size長(zhǎng)度的數(shù)據(jù)到顯 示緩沖區(qū)并顯示數(shù)據(jù)了。 gelgeneral extension language 一種類似一種類似c的解釋型語(yǔ)言,可實(shí)現(xiàn)循環(huán)等程序結(jié)的解釋型語(yǔ)言,可實(shí)現(xiàn)循環(huán)等程序結(jié) 構(gòu)構(gòu) 提供基本的程序控制命令,類似以前提供基本的程序控制命令,類似以前emulator提提 供的命令,供的命令,gel_go(), gel_reset() 等等等等 可以制作菜單(可以加入到可以制作菜單(可以加入到ccs主菜單),對(duì)主菜單
12、),對(duì) 話框,滑動(dòng)條話框,滑動(dòng)條 ccs 常用功能常用功能 9.2 c語(yǔ)言程序基礎(chǔ)語(yǔ)言程序基礎(chǔ) 一個(gè)最小的c應(yīng)用程序至少要包含如下幾個(gè)文件: 1. 主程序文件program.c:這個(gè)文件必需包含一個(gè)main()函數(shù)作為c程序的 入口點(diǎn); 2. 鏈接器命令文件link.cmd:這個(gè)文件定義了dsp的存儲(chǔ)空間以及代碼段、 數(shù)據(jù)段是如何分配到這些存儲(chǔ)空間的; 3. c運(yùn)行庫(kù)rts6700.lib:c運(yùn)行庫(kù)提供了標(biāo)準(zhǔn)c函數(shù),以及c環(huán)境下的初始化 函數(shù)c_int00()函數(shù)。庫(kù)文件及其源代碼位于ccs安裝目錄下的 c6000cgtoolslib子目錄下。 4. 中斷向量表文件vectors.asm:這個(gè)
13、文件的代碼作為中斷服務(wù)表,必須由 鏈接命令文件分配到0地址,或由istp指向的地址。dsp復(fù)位后,首先從0 地址開(kāi)始運(yùn)行,然后跳轉(zhuǎn)到rts6700.lib庫(kù)內(nèi)c運(yùn)行環(huán)境的入口點(diǎn)_c_int00, 完成初始化操作,再調(diào)用main()函數(shù),執(zhí)行用戶的程序。 ccs 常用文件常用文件 文件名文件名描述描述 program.cc程序源文件程序源文件 program.asm匯編程序源文件匯編程序源文件 program.sa線性匯編程序源文件線性匯編程序源文件 vectors.asm中斷向量表文件中斷向量表文件 filename.hc程序的頭文件,包含程序的頭文件,包含dsp/bios api 模塊的頭文
14、件模塊的頭文件 filename.lib庫(kù)文件庫(kù)文件 project.cmd鏈接命令文件鏈接命令文件 program.obj由源文件編譯或匯編而得的目標(biāo)文件由源文件編譯或匯編而得的目標(biāo)文件 program.out經(jīng)完整的編譯、匯編以及鏈接后生成的可執(zhí)行文件經(jīng)完整的編譯、匯編以及鏈接后生成的可執(zhí)行文件 program.map經(jīng)完整的編譯、匯編以及鏈接后生成的空間分配文件經(jīng)完整的編譯、匯編以及鏈接后生成的空間分配文件 project.pjt存儲(chǔ)環(huán)境設(shè)置信息的工程文件存儲(chǔ)環(huán)境設(shè)置信息的工程文件 cmd文件 cmd文件由文件由3部分組成:部分組成: 輸入輸出定義:輸入輸出定義: v *.obj文件:文
15、件: 鏈接器要鏈接的目標(biāo)文件鏈接器要鏈接的目標(biāo)文件 v *.lib文件:文件: 鏈接器要鏈接的庫(kù)文件鏈接器要鏈接的庫(kù)文件 v *.map文件:鏈接器生成的交叉索引文件文件:鏈接器生成的交叉索引文件 v *.out文件:文件: 鏈接器生成的可執(zhí)行代碼鏈接器生成的可執(zhí)行代碼 v 鏈接器選項(xiàng)鏈接器選項(xiàng) memory命令:描述系統(tǒng)實(shí)際的硬件資源命令:描述系統(tǒng)實(shí)際的硬件資源 sections命令:描述命令:描述“段段”如何定位如何定位 memory命令描述目標(biāo)系統(tǒng)的存儲(chǔ)空間命令描述目標(biāo)系統(tǒng)的存儲(chǔ)空間 memory pmem: o = 00000000h, l = 00010000h bmem: o =
16、00010000h, l = 00030000h memory 命命 令令 namesoriginslengths memory 存儲(chǔ)器空間名: o = 十六進(jìn)制存儲(chǔ)器起始地址 , l = 十六進(jìn)制存儲(chǔ)器長(zhǎng)度 sections命令描述命令描述“段段”如何定位如何定位 sections .text pmem .csldata pmem .stack pmem .far pmem .switch bmem .tables bmem .data bmem .bss bmem .sysmem bmem .cinit pmem .const bmem .cio bmem sections 段名段名 存儲(chǔ)
17、器空間名存儲(chǔ)器空間名 -o sample.out/定義輸出文件名定義輸出文件名 -m sample.map/定義存儲(chǔ)器空間分配文件名定義存儲(chǔ)器空間分配文件名 -stack 100 /定義堆棧大小定義堆棧大小 -l rts6700.lib /引用庫(kù)文件引用庫(kù)文件 memory pmem:o = 00000000hl = 00010000h bmem:o = 00010000hl = 00030000h sections .text pmem .csldata pmem .stack pmem .far pmem .switch bmem .tables bmem .data bmem .bss
18、bmem .sysmem bmem .cinit pmem .const bmem .cio bmem cmd 文件示例文件示例 cmd 文件常用段名含義文件常用段名含義 段名段名描述描述 .cinit存放存放c程序中的變量初值和常量程序中的變量初值和常量 .const 存放存放c程序中的字符常量、浮點(diǎn)常量和用程序中的字符常量、浮點(diǎn)常量和用const 聲明聲明 的常量的常量 .text存放存放c程序的代碼程序的代碼 .bss為為c程序中的全局和靜態(tài)變量保留存儲(chǔ)空間程序中的全局和靜態(tài)變量保留存儲(chǔ)空間 .far為為c程序中用程序中用far 聲明的全局和靜態(tài)變量保留空間聲明的全局和靜態(tài)變量保留空間
19、.stack 為為c程序系統(tǒng)堆棧保留存儲(chǔ)空間,用于保存返回地址、程序系統(tǒng)堆棧保留存儲(chǔ)空間,用于保存返回地址、 函數(shù)間的參數(shù)傳遞、存儲(chǔ)局部變量和保存中間結(jié)果函數(shù)間的參數(shù)傳遞、存儲(chǔ)局部變量和保存中間結(jié)果 .sysmem 用于用于c 程序中程序中malloc、calloc 和和realloc 函數(shù)動(dòng)態(tài)分配函數(shù)動(dòng)態(tài)分配 存儲(chǔ)空間存儲(chǔ)空間 section “段段” section “段段”概念:一塊連續(xù)的存儲(chǔ)空間,用于存放代概念:一塊連續(xù)的存儲(chǔ)空間,用于存放代 碼塊或數(shù)據(jù)塊,目標(biāo)文件的每一段都是單獨(dú)的、獨(dú)有的。碼塊或數(shù)據(jù)塊,目標(biāo)文件的每一段都是單獨(dú)的、獨(dú)有的。 在編程時(shí),在編程時(shí),“段段”沒(méi)有絕對(duì)定位,
20、每個(gè)沒(méi)有絕對(duì)定位,每個(gè)“段段”都認(rèn)為是都認(rèn)為是 從從0地址開(kāi)始的一塊連續(xù)的儲(chǔ)存空間,所以軟件開(kāi)發(fā)人地址開(kāi)始的一塊連續(xù)的儲(chǔ)存空間,所以軟件開(kāi)發(fā)人 員只需要將不同代碼塊和數(shù)據(jù)塊放到不同的員只需要將不同代碼塊和數(shù)據(jù)塊放到不同的“段段”中,中, 而無(wú)需關(guān)心這些而無(wú)需關(guān)心這些“段段”究竟定位于系統(tǒng)何處究竟定位于系統(tǒng)何處 優(yōu)點(diǎn):便于程序的模塊化編程;便于工程化管理:可將優(yōu)點(diǎn):便于程序的模塊化編程;便于工程化管理:可將 軟件開(kāi)發(fā)人員和硬件開(kāi)發(fā)人員基本上分離開(kāi)軟件開(kāi)發(fā)人員和硬件開(kāi)發(fā)人員基本上分離開(kāi) 重定位:由于所有的重定位:由于所有的“段段”都是從都是從0地址開(kāi)始,所以程地址開(kāi)始,所以程 序編譯完成后無(wú)法直接
21、運(yùn)行,要讓程序正確運(yùn)行,必須序編譯完成后無(wú)法直接運(yùn)行,要讓程序正確運(yùn)行,必須 對(duì)對(duì)“段段”進(jìn)行重新定位,這個(gè)工作由鏈接器完成進(jìn)行重新定位,這個(gè)工作由鏈接器完成 cmd文件:文件: memory命令描述系統(tǒng)硬件資源,命令描述系統(tǒng)硬件資源, sections命令描述軟件人員程序中用到的命令描述軟件人員程序中用到的“段段”如何如何 定位到恰當(dāng)?shù)挠布Y源上定位到恰當(dāng)?shù)挠布Y源上 匯編語(yǔ)言程序中,coff目標(biāo)文件總是包含三 個(gè)默認(rèn)段: .text段:通常包含可執(zhí)行代碼; .data段:通常包含已初始化的變量; .bss段:通常為未初始化的變量保留空間。 匯編器和鏈接器允許用戶創(chuàng)建、命名和鏈接自 定義的段
22、,這些段的使用與.data,.text和.bss段 相同。 section “段段” 鏈接器的功能之一是將段重新定位到目標(biāo)系 統(tǒng)的存儲(chǔ)器映射,這一功能稱作重定位。 section 偽指令偽指令 匯編語(yǔ)言程序中,有匯編語(yǔ)言程序中,有5個(gè)個(gè)section偽指令偽指令 .bsssymbol,size in word:在:在.bss段內(nèi)保留空間段內(nèi)保留空間 .text:創(chuàng)建已初始化的段:創(chuàng)建已初始化的段 .data:創(chuàng)建已初始化的段:創(chuàng)建已初始化的段 .sect“section name”:創(chuàng)建初始化段,像:創(chuàng)建初始化段,像.text和和.data段那樣可以包段那樣可以包 含代碼和數(shù)據(jù)。含代碼和數(shù)據(jù)。
23、 symbol .usect“section name”,size in word:創(chuàng)建未初始化段,可:創(chuàng)建未初始化段,可 以象以象.bss段那樣使用。段那樣使用。 其中其中symbol相當(dāng)于變量名,相當(dāng)于變量名,size in word保留的存儲(chǔ)單元長(zhǎng)度(以字為單保留的存儲(chǔ)單元長(zhǎng)度(以字為單 位)位) 初始化段和未初始化段:初始化段和未初始化段: .bss和和.usect為未初始化段,用于為變量、堆棧等為未初始化段,用于為變量、堆棧等 保留一塊存儲(chǔ)空間保留一塊存儲(chǔ)空間 .text、.data和和.sect為初始化段,用于存放代碼塊為初始化段,用于存放代碼塊 或有初值的數(shù)據(jù)塊或有初值的數(shù)據(jù)塊
24、系統(tǒng)定義的段和用戶定義的段:系統(tǒng)定義的段和用戶定義的段: .text、.data和和.bss為系統(tǒng)已定義好的段名為系統(tǒng)已定義好的段名 用戶根據(jù)需要用用戶根據(jù)需要用. sect和和.usect偽指令來(lái)定義段名,偽指令來(lái)定義段名, 創(chuàng)建相應(yīng)的創(chuàng)建相應(yīng)的“段段” 匯編程序中,程序員用匯編程序中,程序員用“段段”偽指令來(lái)組織程序的偽指令來(lái)組織程序的 代碼和數(shù)據(jù)代碼和數(shù)據(jù) section 偽指令偽指令 匯編器對(duì)匯編器對(duì)“段段”的處理的處理 匯編器第一次遇到新匯編器第一次遇到新“段段”時(shí),將該時(shí),將該“段段”的段程序計(jì)的段程序計(jì) 數(shù)器(數(shù)器(spc)置為)置為0,并將隨后的程序代碼或數(shù)據(jù)順序,并將隨后的程
25、序代碼或數(shù)據(jù)順序 編譯進(jìn)該編譯進(jìn)該“段段”中中 匯編器遇到同名匯編器遇到同名“段段”時(shí),將它們合并,然后將隨后的時(shí),將它們合并,然后將隨后的 程序代碼或數(shù)據(jù)順序編譯進(jìn)該程序代碼或數(shù)據(jù)順序編譯進(jìn)該“段段”中中 當(dāng)匯編器遇到當(dāng)匯編器遇到.text、.data和和.sect偽指令時(shí),匯編器停止偽指令時(shí),匯編器停止 將隨后的程序代碼或數(shù)據(jù)順序編譯進(jìn)當(dāng)前將隨后的程序代碼或數(shù)據(jù)順序編譯進(jìn)當(dāng)前“段段”中,而中,而 是順序編譯進(jìn)遇到的是順序編譯進(jìn)遇到的“段段”中中 當(dāng)匯編器遇到當(dāng)匯編器遇到.bss和和.usect偽指令時(shí),匯編器并不結(jié)束當(dāng)偽指令時(shí),匯編器并不結(jié)束當(dāng) 前前“段段”,而只是簡(jiǎn)單地暫時(shí)脫離當(dāng)前,而只
26、是簡(jiǎn)單地暫時(shí)脫離當(dāng)前“段段”,隨后的,隨后的 程序代碼或數(shù)據(jù)仍將順序編譯進(jìn)當(dāng)前程序代碼或數(shù)據(jù)仍將順序編譯進(jìn)當(dāng)前“段段”中。中。 .bss和和.usect偽指令,可以出現(xiàn)在偽指令,可以出現(xiàn)在.text、.data或或.sect“段段” 中的任何位置,它們不會(huì)影響這些中的任何位置,它們不會(huì)影響這些“段段”的內(nèi)容的內(nèi)容 以上程序最終創(chuàng)建了4個(gè)段: .text段包含12個(gè)16位的目標(biāo)代碼。 .data包含712個(gè)16位的目標(biāo)代碼。 .bss段在存儲(chǔ)器中保留10個(gè)字的空間。 newvars段為.usect偽指令創(chuàng)建的自定義段,在存儲(chǔ)器中保留8個(gè)字存儲(chǔ)空間。 鏈接器對(duì)鏈接器對(duì)“段段”的處理的處理 鏈接器對(duì)
27、鏈接器對(duì)“段段”的處理有的處理有2個(gè)方面:個(gè)方面: 將輸入將輸入“段段”組合產(chǎn)生輸出組合產(chǎn)生輸出“段段” v 將多個(gè)將多個(gè).obj文件中的同名文件中的同名“段段”合并一個(gè)輸出合并一個(gè)輸出“段段” v 也可將不同名的也可將不同名的“段段”合并產(chǎn)生一個(gè)輸出合并產(chǎn)生一個(gè)輸出“段段” 將輸出將輸出“段段”定位到實(shí)際的存儲(chǔ)空間中定位到實(shí)際的存儲(chǔ)空間中 v memory命令:命令: 用于掃描系統(tǒng)實(shí)際的硬件資源用于掃描系統(tǒng)實(shí)際的硬件資源 v sections命令:用于描述程序中定義了哪些命令:用于描述程序中定義了哪些“段段”,這,這 些些“段段”是否需要合并?如何合并?合并產(chǎn)生的輸出是否需要合并?如何合并?
28、合并產(chǎn)生的輸出“段段” 定位到實(shí)際硬件資源的何處?定位到實(shí)際硬件資源的何處? 鏈接器通過(guò)鏈接器通過(guò)*.cmd文件來(lái)獲得上述這些信息文件來(lái)獲得上述這些信息 鏈接器還將檢查各輸出鏈接器還將檢查各輸出“段段”是否重疊、是否是否重疊、是否 超界,避免了人工檢查邊界帶來(lái)的隱患超界,避免了人工檢查邊界帶來(lái)的隱患 在代碼生成工具程序中,除了匯編器和鏈接器等程序外,ti還提供了 可將c語(yǔ)言程序編譯為匯編語(yǔ)言程序的c編譯器。c編譯器對(duì)編譯器對(duì)c程序編譯后程序編譯后 也產(chǎn)生已初始化段和未初始化段兩種,具體的段名稍有不同。除了不使也產(chǎn)生已初始化段和未初始化段兩種,具體的段名稍有不同。除了不使 用用.data段之外,
29、還產(chǎn)生了一些新的段。段之外,還產(chǎn)生了一些新的段。 已初始化段包括:已初始化段包括:.text段、段、.cinit段、段、.const段和段和.switch段。段。 未初始化段包括:未初始化段包括:.bss段、段、.stack段和段和.sysmem段。段。 .cinit存放存放c程序中的變量初值和常程序中的變量初值和常 .const存放存放c程序中的字符常量、浮點(diǎn)常量和程序中的字符常量、浮點(diǎn)常量和const聲明的常量聲明的常量 .switch 存放存放c程序中程序中switch語(yǔ)句的跳針表語(yǔ)句的跳針表 .text存放存放c程序的代碼程序的代碼 .bss為為c程序中的全局和靜態(tài)變量保留存儲(chǔ)空間程序
30、中的全局和靜態(tài)變量保留存儲(chǔ)空間 .far為為c程序中用程序中用far聲明的全局和靜態(tài)變量保留空間聲明的全局和靜態(tài)變量保留空間 .stack為為c程序系統(tǒng)堆棧保留存儲(chǔ)空間,用于保存返回地址、函數(shù)間的參程序系統(tǒng)堆棧保留存儲(chǔ)空間,用于保存返回地址、函數(shù)間的參 數(shù)傳遞、存儲(chǔ)局部變量和保存中間結(jié)果數(shù)傳遞、存儲(chǔ)局部變量和保存中間結(jié)果 .sysmem 用于用于c程序中程序中malloc、calloc和和realloc函數(shù)動(dòng)態(tài)分配存儲(chǔ)空間函數(shù)動(dòng)態(tài)分配存儲(chǔ)空間 c運(yùn)行環(huán)境運(yùn)行環(huán)境 棧(棧(stack)是系統(tǒng)自動(dòng)管理的一片內(nèi)容,用于保存返回地址、)是系統(tǒng)自動(dòng)管理的一片內(nèi)容,用于保存返回地址、 函數(shù)間的參數(shù)傳遞、存
31、儲(chǔ)局部變量和保存中間結(jié)果。函數(shù)間的參數(shù)傳遞、存儲(chǔ)局部變量和保存中間結(jié)果。 堆(堆(heap)是用戶想要自己獨(dú)立靈活地控制一些內(nèi)存時(shí),用)是用戶想要自己獨(dú)立靈活地控制一些內(nèi)存時(shí),用 malloc( )、calloc()() 和和realloc()等函數(shù)開(kāi)辟的一些動(dòng)態(tài)內(nèi)()等函數(shù)開(kāi)辟的一些動(dòng)態(tài)內(nèi) 存區(qū),將這些動(dòng)態(tài)內(nèi)存區(qū)稱為堆。存區(qū),將這些動(dòng)態(tài)內(nèi)存區(qū)稱為堆。 c語(yǔ)言中有三種情況會(huì)產(chǎn)生語(yǔ)言中有三種情況會(huì)產(chǎn)生.const段:段: 由關(guān)鍵字由關(guān)鍵字const限定的帶有全局變量的初始化值,如限定的帶有全局變量的初始化值,如“const int a=100;”,但由關(guān)鍵字,但由關(guān)鍵字const限定的局部變量的
32、初始化值限定的局部變量的初始化值 不會(huì)產(chǎn)生不會(huì)產(chǎn)生.const段,局部變量都是運(yùn)行時(shí)開(kāi)辟在段,局部變量都是運(yùn)行時(shí)開(kāi)辟在.bss段中的。段中的。 出現(xiàn)在表達(dá)式中的字符串常數(shù)和用來(lái)初始化指針變量的字出現(xiàn)在表達(dá)式中的字符串常數(shù)和用來(lái)初始化指針變量的字 符串常數(shù),如符串常數(shù),如“strcpy(s,“abc”);”及及“char *p=“abc”;”。 但當(dāng)字符串常數(shù)用來(lái)初始化數(shù)組變量時(shí),無(wú)論是全局還是局但當(dāng)字符串常數(shù)用來(lái)初始化數(shù)組變量時(shí),無(wú)論是全局還是局 部數(shù)組變量,都不會(huì)產(chǎn)生部數(shù)組變量,都不會(huì)產(chǎn)生.const段,此時(shí)字符串常數(shù)生成的段,此時(shí)字符串常數(shù)生成的 是是.cinit段。如段。如“char s
33、4=“abc”;”。 數(shù)組和結(jié)構(gòu)體的初始值。數(shù)組和結(jié)構(gòu)體是局部變量,其初數(shù)組和結(jié)構(gòu)體的初始值。數(shù)組和結(jié)構(gòu)體是局部變量,其初 始值會(huì)產(chǎn)生始值會(huì)產(chǎn)生.const段。如段。如“int a8=1,2,3;”。但當(dāng)數(shù)組。但當(dāng)數(shù)組 和結(jié)構(gòu)體是全局變量時(shí),其初始值不會(huì)產(chǎn)生和結(jié)構(gòu)體是全局變量時(shí),其初始值不會(huì)產(chǎn)生.const段,此時(shí)生段,此時(shí)生 成的是成的是.cinit段。段。 c運(yùn)行環(huán)境運(yùn)行環(huán)境 用戶定義用戶定義 #pragma是標(biāo)準(zhǔn)是標(biāo)準(zhǔn)c中保留的預(yù)處理命令。用戶可以中保留的預(yù)處理命令。用戶可以 通過(guò)通過(guò)#pragma來(lái)定義自己的段。來(lái)定義自己的段。 #pragma的語(yǔ)法是:的語(yǔ)法是: v #pragma
34、code_section (symbol, section name) v #pragma data_section (symbol, section name) 說(shuō)明: symbol是符合,可以是函數(shù)名也可以是全局變量名。 section name是用戶自己定義在程序空間或數(shù)據(jù)空間的段名。 code_section用來(lái)定義代碼段,data_section用來(lái)定義 數(shù)據(jù)段。 #pragma必須在符合被定義和使用前使用,并且不能在函數(shù)體內(nèi) 聲明#pragma。 下例程序?qū)⑷肿兞繑?shù)組a100單獨(dú)編譯成一個(gè)新 的段,取名為“newsection” #pragma data_section(a ,“
35、newsection”) unsigned int a100; main( ) 程序內(nèi)容 c運(yùn)行環(huán)境運(yùn)行環(huán)境 寄存器使用規(guī)則寄存器使用規(guī)則 c編譯器如何使用編譯器如何使用dsp的寄存器的寄存器 函數(shù)進(jìn)入和返回前,寄存器的保護(hù)函數(shù)進(jìn)入和返回前,寄存器的保護(hù) 函數(shù)調(diào)用規(guī)則函數(shù)調(diào)用規(guī)則 函數(shù)間的參數(shù)傳遞通過(guò)寄存器和系統(tǒng)堆棧進(jìn)行函數(shù)間的參數(shù)傳遞通過(guò)寄存器和系統(tǒng)堆棧進(jìn)行 調(diào)用函數(shù)與被調(diào)用函數(shù)必須對(duì)各自的寄存器進(jìn)行保護(hù)調(diào)用函數(shù)與被調(diào)用函數(shù)必須對(duì)各自的寄存器進(jìn)行保護(hù) 從被調(diào)用函數(shù)返回前,被調(diào)用函數(shù)必須歸還所有已占用的堆從被調(diào)用函數(shù)返回前,被調(diào)用函數(shù)必須歸還所有已占用的堆 ??臻g??臻g c和和asm混合編程混
36、合編程 c和和asm混合編程時(shí),必須遵循寄存器使用規(guī)則和函數(shù)調(diào)用混合編程時(shí),必須遵循寄存器使用規(guī)則和函數(shù)調(diào)用 規(guī)則規(guī)則 被被c調(diào)用的調(diào)用的asm函數(shù),其函數(shù)名前應(yīng)加函數(shù),其函數(shù)名前應(yīng)加“_” 中斷服務(wù)程序中斷服務(wù)程序 asm編寫的中斷服務(wù)程序必須對(duì)所有用到寄存器進(jìn)行保護(hù),編寫的中斷服務(wù)程序必須對(duì)所有用到寄存器進(jìn)行保護(hù), 以免破壞以免破壞c運(yùn)行環(huán)境運(yùn)行環(huán)境 c編寫的中斷服務(wù)程序應(yīng)用編寫的中斷服務(wù)程序應(yīng)用interrupt關(guān)鍵字聲明關(guān)鍵字聲明 c運(yùn)行環(huán)境運(yùn)行環(huán)境 系統(tǒng)初始化系統(tǒng)初始化 在運(yùn)行在運(yùn)行c程序前,必須建立程序前,必須建立c運(yùn)行環(huán)境,此任務(wù)由運(yùn)行環(huán)境,此任務(wù)由c引導(dǎo)引導(dǎo) 程序程序c _ i
37、nt00完成完成 _c_int00包含在庫(kù)函數(shù)中,包含在庫(kù)函數(shù)中,build時(shí)自動(dòng)將其鏈接進(jìn)可執(zhí)時(shí)自動(dòng)將其鏈接進(jìn)可執(zhí) 行程序中,程序的入口地址必須設(shè)為行程序中,程序的入口地址必須設(shè)為_(kāi)c_int00起始地址起始地址 _c_int00的源程序存放在由的源程序存放在由rts.src分離出來(lái)的分離出來(lái)的boot.asm中,中, 用戶可根據(jù)需要修改用戶可根據(jù)需要修改 v 設(shè)置堆棧指針設(shè)置堆棧指針 v 初試化全局變量:將初試化全局變量:將.cinit”段段“中數(shù)據(jù)拷貝到中數(shù)據(jù)拷貝到.bss段中段中 v 調(diào)用調(diào)用c程序的主函數(shù)程序的主函數(shù)main( ) 軟件編譯流程軟件編譯流程 .cpp file.asm
38、 file .c file.asm file .asm file .obj file assembler .obj file .obj file.out file.hex filelinker 目標(biāo)文件地址是浮動(dòng)的,能被重定位目標(biāo)文件地址是浮動(dòng)的,能被重定位 鏈接器用鏈接器用.cmd文件對(duì)鏈接目標(biāo),進(jìn)行重定位文件對(duì)鏈接目標(biāo),進(jìn)行重定位 列出目標(biāo)文件、庫(kù)文件和鏈接器選項(xiàng)列出目標(biāo)文件、庫(kù)文件和鏈接器選項(xiàng) 用用memory命令描述目標(biāo)系統(tǒng)存儲(chǔ)空間配置命令描述目標(biāo)系統(tǒng)存儲(chǔ)空間配置 用用sections命令描述命令描述“段段”如何定位如何定位 hex轉(zhuǎn)換程序也使用轉(zhuǎn)換程序也使用cmd文件,配置轉(zhuǎn)換選項(xiàng)文
39、件,配置轉(zhuǎn)換選項(xiàng) 中斷向量表中斷向量表 .ref _timer0_isr .ref _exint4_isr .ref _exint6_isr .ref _c_int00 .global reset_rst .sect vectors“ reset_rst: mvkl .s2 _c_int00, b0 mvkh .s2 _c_int00, b0 b .s2 b0 nop 5 nmi_rst: nop 8 resv1: nop 8 resv2: nop 8 int4: b _exint4_isr nop 7 int5: nop 8 int6: b _exint6_isr nop 7 int7: n
40、op 8 int8: nop 8 int9: nop 8 int10: nop 8 int11: nop 8 int12: nop 8 int13: nop 8 int14: b _timer0_isr nop 7 int15: nop 8 c 語(yǔ)言語(yǔ)法接近自然語(yǔ)言,其可讀性強(qiáng)、便于理解,在編語(yǔ)言語(yǔ)法接近自然語(yǔ)言,其可讀性強(qiáng)、便于理解,在編 制、修改、實(shí)現(xiàn)算法方面比用匯編語(yǔ)言開(kāi)發(fā)容易。制、修改、實(shí)現(xiàn)算法方面比用匯編語(yǔ)言開(kāi)發(fā)容易。 匯編語(yǔ)言掌控系統(tǒng)硬件的能力強(qiáng)于匯編語(yǔ)言掌控系統(tǒng)硬件的能力強(qiáng)于c 語(yǔ)言,設(shè)計(jì)出來(lái)的程語(yǔ)言,設(shè)計(jì)出來(lái)的程 序更加貼近硬件特性,能將硬件效能發(fā)揮到極致。序更加貼近硬件特性,
41、能將硬件效能發(fā)揮到極致。 因此,一般情況下用因此,一般情況下用c 語(yǔ)言設(shè)計(jì)應(yīng)用程序的總體框架、解語(yǔ)言設(shè)計(jì)應(yīng)用程序的總體框架、解 決人機(jī)接口和對(duì)速度效率要求不太高的復(fù)雜算法,用匯編決人機(jī)接口和對(duì)速度效率要求不太高的復(fù)雜算法,用匯編 語(yǔ)言設(shè)計(jì)強(qiáng)調(diào)速度的算法。語(yǔ)言設(shè)計(jì)強(qiáng)調(diào)速度的算法。 9.3 混合語(yǔ)言編程混合語(yǔ)言編程 c語(yǔ)言和匯編語(yǔ)言的混合編程有三種形式:語(yǔ)言和匯編語(yǔ)言的混合編程有三種形式: 1. 在編寫在編寫c語(yǔ)言代碼中插入?yún)R編語(yǔ)句,只需在匯編語(yǔ)句兩語(yǔ)言代碼中插入?yún)R編語(yǔ)句,只需在匯編語(yǔ)句兩 邊加上雙引號(hào)和括號(hào),在括號(hào)前面加上標(biāo)識(shí)邊加上雙引號(hào)和括號(hào),在括號(hào)前面加上標(biāo)識(shí)asm,如:,如: asm(“
42、nop 5”); 2. 在編寫在編寫c代碼的過(guò)程中調(diào)用直接映射為內(nèi)聯(lián)的代碼的過(guò)程中調(diào)用直接映射為內(nèi)聯(lián)的c6000指指 令的特殊函數(shù),內(nèi)聯(lián)函數(shù)用前下劃線表示,使用時(shí)同調(diào)用令的特殊函數(shù),內(nèi)聯(lián)函數(shù)用前下劃線表示,使用時(shí)同調(diào)用 c語(yǔ)言的庫(kù)函數(shù)一樣調(diào)用它,如:語(yǔ)言的庫(kù)函數(shù)一樣調(diào)用它,如: m = _int_abs(n); 3. 用匯編代碼編寫?yīng)毩⒌暮瘮?shù),在用匯編代碼編寫?yīng)毩⒌暮瘮?shù),在c代碼中直接調(diào)用代碼中直接調(diào)用 混合編程的方法混合編程的方法 1. 采用采用c語(yǔ)言和匯編語(yǔ)言混合編程時(shí),定義了一套嚴(yán)格的寄語(yǔ)言和匯編語(yǔ)言混合編程時(shí),定義了一套嚴(yán)格的寄 存器規(guī)則,調(diào)用函數(shù)保護(hù)了寄存器存器規(guī)則,調(diào)用函數(shù)保護(hù)了寄
43、存器a0a9和和b0b9,但當(dāng)使,但當(dāng)使 用到寄存器用到寄存器a10a15或或b10b15的時(shí)候,則必須自行對(duì)它們的時(shí)候,則必須自行對(duì)它們 進(jìn)行保護(hù)。在默認(rèn)情況下:進(jìn)行保護(hù)。在默認(rèn)情況下: a3用作返回結(jié)構(gòu)指針寄存器用作返回結(jié)構(gòu)指針寄存器 b3用作被調(diào)用函數(shù)返回地址寄存器用作被調(diào)用函數(shù)返回地址寄存器 a15用作幀指針寄存器用作幀指針寄存器 b14用作數(shù)據(jù)頁(yè)指針寄存器用作數(shù)據(jù)頁(yè)指針寄存器 b15用作堆棧指針寄存器用作堆棧指針寄存器 混合編程的接口規(guī)范混合編程的接口規(guī)范 2. 調(diào)用函數(shù)將參數(shù)傳遞到被調(diào)用函數(shù)中,前十個(gè)參數(shù)將被調(diào)用函數(shù)將參數(shù)傳遞到被調(diào)用函數(shù)中,前十個(gè)參數(shù)將被 從左到右依次放入寄存器從
44、左到右依次放入寄存器a4、b4、a6、b6、a8、b8、a10、 b10、a12和和b12,如果傳遞的參數(shù)是長(zhǎng)型、雙精度型或者如果傳遞的參數(shù)是長(zhǎng)型、雙精度型或者 是長(zhǎng)雙精度型,則將參數(shù)依次放入寄存器組是長(zhǎng)雙精度型,則將參數(shù)依次放入寄存器組a5:a4、b5: b4、a7:a6等,并將剩下的變量按相反的順序放在堆棧里。等,并將剩下的變量按相反的順序放在堆棧里。 注意,如果傳遞的參數(shù)是一個(gè)結(jié)構(gòu)類型的參數(shù),則傳遞的注意,如果傳遞的參數(shù)是一個(gè)結(jié)構(gòu)類型的參數(shù),則傳遞的 是該結(jié)構(gòu)類型的地址。是該結(jié)構(gòu)類型的地址。 3. 如果在如果在c/c+調(diào)用函數(shù)中做了正確的函數(shù)返回聲明,則被調(diào)用函數(shù)中做了正確的函數(shù)返回聲明
45、,則被 調(diào)用的匯編函數(shù)可以返回有效值。如果返回值是整型或調(diào)用的匯編函數(shù)可以返回有效值。如果返回值是整型或32 位的浮點(diǎn)型,則放在寄存器位的浮點(diǎn)型,則放在寄存器a4中返回;如果返回值是雙精中返回;如果返回值是雙精 度或是長(zhǎng)雙精度型,則放在度或是長(zhǎng)雙精度型,則放在a5:a4中返回;如果返回值是中返回;如果返回值是 一個(gè)結(jié)構(gòu)類型,則將其結(jié)構(gòu)的地址放在一個(gè)結(jié)構(gòu)類型,則將其結(jié)構(gòu)的地址放在a3中返回。中返回。 混合編程的接口規(guī)范混合編程的接口規(guī)范 4. 對(duì)于只在匯編語(yǔ)言模塊中用到的變量的標(biāo)識(shí)符,不能從下對(duì)于只在匯編語(yǔ)言模塊中用到的變量的標(biāo)識(shí)符,不能從下 劃線開(kāi)始。劃線開(kāi)始。 任何一個(gè)在匯編語(yǔ)言中聲明的對(duì)象
46、都要使其在任何一個(gè)在匯編語(yǔ)言中聲明的對(duì)象都要使其在c/c+中是可中是可 訪問(wèn)的,那么在匯編語(yǔ)言中必須用訪問(wèn)的,那么在匯編語(yǔ)言中必須用.def 或或.global將其聲明為將其聲明為 外部變量。外部變量。 同樣在匯編語(yǔ)言中要引用同樣在匯編語(yǔ)言中要引用c/c+函數(shù)或?qū)ο髸r(shí),必須用函數(shù)或?qū)ο髸r(shí),必須用.ref 或或.global將將c/c+對(duì)象聲明。對(duì)象聲明。 中斷子程序必須把該子程序?qū)⒁玫降乃屑拇嫫鬟M(jìn)行入棧中斷子程序必須把該子程序?qū)⒁玫降乃屑拇嫫鬟M(jìn)行入棧 處理;處理; 除了全局變量的初始化外,匯編語(yǔ)言的模塊不得因?yàn)槿魏文砍巳肿兞康某跏蓟?,匯編語(yǔ)言的模塊不得因?yàn)槿魏文?的而使用的而使用
47、.cinit段;段; 匯編代碼的結(jié)束需用指令匯編代碼的結(jié)束需用指令 “b b3” 將程序執(zhí)行從被調(diào)用函數(shù)將程序執(zhí)行從被調(diào)用函數(shù) 返回到返回到c語(yǔ)言調(diào)用函數(shù)中。語(yǔ)言調(diào)用函數(shù)中。 混合編程的接口規(guī)范混合編程的接口規(guī)范 打開(kāi)工程打開(kāi)工程complexdelay.pjt,可以看到該工程包含如下文,可以看到該工程包含如下文 件:件: umain.c:c語(yǔ)言編寫的主程序文件,調(diào)用使用匯編語(yǔ)言語(yǔ)言編寫的主程序文件,調(diào)用使用匯編語(yǔ)言 編寫的延時(shí)程序編寫的延時(shí)程序asm_delay()函數(shù)進(jìn)行精確延時(shí)函數(shù)進(jìn)行精確延時(shí) udelay.asm:匯編語(yǔ)言編寫的延時(shí)函數(shù):匯編語(yǔ)言編寫的延時(shí)函數(shù) 示例示例0903 混合編
48、程示例程序混合編程示例程序 9.4 芯片支持庫(kù)芯片支持庫(kù)csl u 為什么要設(shè)計(jì)為什么要設(shè)計(jì)csl dsp片上外設(shè)種類及其應(yīng)用日趨復(fù)雜片上外設(shè)種類及其應(yīng)用日趨復(fù)雜 提供一組標(biāo)準(zhǔn)的方法用于訪問(wèn)和控制片上外設(shè)提供一組標(biāo)準(zhǔn)的方法用于訪問(wèn)和控制片上外設(shè) 免除用戶編寫配置和控制片上外設(shè)所必需的定義和免除用戶編寫配置和控制片上外設(shè)所必需的定義和 代碼代碼 u 什么是什么是csl:chip support library 用于配置、控制和管理用于配置、控制和管理dsp片上外設(shè)片上外設(shè) 已為已為c6000和和c5000系列系列dsp設(shè)計(jì)了各自的設(shè)計(jì)了各自的csl庫(kù)庫(kù) csl庫(kù)函數(shù)大多數(shù)是用庫(kù)函數(shù)大多數(shù)是用c語(yǔ)
49、言編寫的,并已對(duì)代碼語(yǔ)言編寫的,并已對(duì)代碼 的大小和速度進(jìn)行了優(yōu)化的大小和速度進(jìn)行了優(yōu)化 csl庫(kù)是可裁剪的:即只有被使用的庫(kù)是可裁剪的:即只有被使用的csl模塊才會(huì)模塊才會(huì) 包含進(jìn)應(yīng)用程序中包含進(jìn)應(yīng)用程序中 csl庫(kù)是可擴(kuò)展的:每個(gè)片上外設(shè)的庫(kù)是可擴(kuò)展的:每個(gè)片上外設(shè)的api相互獨(dú)立,相互獨(dú)立, 增加新的增加新的api,對(duì)其他片上外設(shè)沒(méi)有影響,對(duì)其他片上外設(shè)沒(méi)有影響 csl 的特點(diǎn)的特點(diǎn) u 片上外設(shè)編程的標(biāo)準(zhǔn)協(xié)議:片上外設(shè)編程的標(biāo)準(zhǔn)協(xié)議: 定義一組標(biāo)準(zhǔn)的定義一組標(biāo)準(zhǔn)的apis:函數(shù)、數(shù)據(jù)類型、宏:函數(shù)、數(shù)據(jù)類型、宏 u 對(duì)硬件進(jìn)行抽象,提取符號(hào)化的片上外設(shè)描述對(duì)硬件進(jìn)行抽象,提取符號(hào)化的片
50、上外設(shè)描述 定義一組宏,用于訪問(wèn)和建立寄存器及其域值定義一組宏,用于訪問(wèn)和建立寄存器及其域值 u 基本的資源管理基本的資源管理 對(duì)多資源的片上外設(shè)進(jìn)行管理對(duì)多資源的片上外設(shè)進(jìn)行管理 u 已集成到已集成到dsp/bios中中 通過(guò)圖形用戶接口通過(guò)圖形用戶接口gui對(duì)對(duì)csl進(jìn)行配置進(jìn)行配置 u 使片上外設(shè)容易使用使片上外設(shè)容易使用 縮短開(kāi)發(fā)時(shí)間,增加可移植性縮短開(kāi)發(fā)時(shí)間,增加可移植性 csl 的結(jié)構(gòu)的結(jié)構(gòu) csl中,中,每一個(gè)外設(shè)都有一個(gè)對(duì)應(yīng)的每一個(gè)外設(shè)都有一個(gè)對(duì)應(yīng)的api模塊,如:模塊,如: 直接存取器存?。ㄖ苯哟嫒∑鞔嫒。╡dma)api模塊模塊 多通道緩沖串行端口(多通道緩沖串行端口(ms
51、bcp)api模塊模塊 這種結(jié)構(gòu)允許對(duì)這種結(jié)構(gòu)允許對(duì)csl進(jìn)行擴(kuò)展,因?yàn)榭梢蕴砑有碌倪M(jìn)行擴(kuò)展,因?yàn)榭梢蕴砑有碌腶pi模模 塊作為新的外設(shè)形式。塊作為新的外設(shè)形式。 通用外設(shè)模塊通用外設(shè)模塊 外設(shè)外設(shè) (per) 描述描述 include file module support symbol edma enhanced direct memory access module csl_edma.h edma_support emif external memory interface module csl_emif.h emif_support gpio general-purpose input
52、/output module csl_gpio.h gpio_support hpi host port interface module csl_hpi.h hpi_support i2c interintegrated circuit module csl_i2c.h i2c_support irq interrupt controller module csl_irq.h irq_support mcasp multichannel audio serial port module csl_mcasp.h mcasp_support mcbsp multichannel buffered
53、 serial port module csl_mcbsp.h mcbsp_support timer timer module csl_timer.h timer_support csl 命名規(guī)則和數(shù)據(jù)類型命名規(guī)則和數(shù)據(jù)類型 對(duì)象對(duì)象類型類型 名稱名稱 naming convention function per_funcname() variable per_varname macro per_macro_name typedef per_typename function argument funcarg structure member membername data type des
54、cription uint8 unsigned char uint16 unsigned short uint32 unsigned int uint40 unsigned long int8 char int16 short int32 int int40 long 通用的通用的csl 函數(shù)函數(shù) handle = per_open( channelnumber, priority flags ) 功能:打開(kāi)一個(gè)外設(shè)功能:打開(kāi)一個(gè)外設(shè) 通道,根據(jù)標(biāo)志執(zhí)行相應(yīng)的操作。使用通道前必須調(diào)用此通道,根據(jù)標(biāo)志執(zhí)行相應(yīng)的操作。使用通道前必須調(diào)用此 函數(shù),返回一個(gè)唯一的設(shè)備句柄用于后續(xù)函數(shù),返回一個(gè)唯一的設(shè)
55、備句柄用于后續(xù)api調(diào)用。優(yōu)先級(jí)調(diào)用。優(yōu)先級(jí)(priority)參數(shù)僅適用參數(shù)僅適用 于于dat模塊。模塊。 per_config( handle, *configstructure ) 功能:將配置結(jié)構(gòu)的值寫入外設(shè)寄存器。使用整型常量、整型變量、功能:將配置結(jié)構(gòu)的值寫入外設(shè)寄存器。使用整型常量、整型變量、csl符號(hào)符號(hào) 常量常量 per_reg_default 、per_reg_rmk宏生成的合并域值進(jìn)行初始化。宏生成的合并域值進(jìn)行初始化。 per_configargs( handle, regval_1, . . . regval_n ) 功能:寫值功能:寫值 (regval_n) 到外設(shè)
56、寄存器??蓪懼蛋ǎ赫统A?、整型變量、到外設(shè)寄存器??蓪懼蛋ǎ赫统A?、整型變量、csl 符號(hào)常量符號(hào)常量 per_reg_default 、per_reg_rmk宏生成的合并域值。宏生成的合并域值。 per_reset( handle ) 功能:復(fù)位外設(shè),將其所有值恢復(fù)到上電缺省值。功能:復(fù)位外設(shè),將其所有值恢復(fù)到上電缺省值。 per_close( handle ) 功能:關(guān)閉由功能:關(guān)閉由per_open()函數(shù)打開(kāi)的外設(shè)通道。通道寄存器恢復(fù)上電初始值,函數(shù)打開(kāi)的外設(shè)通道。通道寄存器恢復(fù)上電初始值, 清除所有未執(zhí)行的中斷。清除所有未執(zhí)行的中斷。 通過(guò)寄存器來(lái)實(shí)現(xiàn)外設(shè)初始化通過(guò)寄存器來(lái)實(shí)
57、現(xiàn)外設(shè)初始化 csl提供了兩種函數(shù)來(lái)初始化外設(shè)的寄存器:提供了兩種函數(shù)來(lái)初始化外設(shè)的寄存器: 1、per-config() 用來(lái)初始化控制用來(lái)初始化控制per 外設(shè)的寄存器,其中外設(shè)的寄存器,其中 per 是是csl模塊之一。這個(gè)函數(shù)需要一個(gè)地址來(lái)作為他的模塊之一。這個(gè)函數(shù)需要一個(gè)地址來(lái)作為他的 參數(shù)。這個(gè)地址指出了這個(gè)結(jié)構(gòu)的位置,他代表了外設(shè)寄參數(shù)。這個(gè)地址指出了這個(gè)結(jié)構(gòu)的位置,他代表了外設(shè)寄 存器的值。每一個(gè)外設(shè)模塊都定義了他的配置結(jié)構(gòu)數(shù)據(jù)類存器的值。每一個(gè)外設(shè)模塊都定義了他的配置結(jié)構(gòu)數(shù)據(jù)類 型,包括型,包括per-config()函數(shù)。函數(shù)。 per_config myconfig =
58、reg0, reg1, ; per_config( 2、per-configargs() 允許將個(gè)別寄存器的值傳給函數(shù)的變?cè)试S將個(gè)別寄存器的值傳給函數(shù)的變 量,然后將獨(dú)立的值傳給寄存器。量,然后將獨(dú)立的值傳給寄存器。 per_configargs(reg0, reg1, ); 通用通用csl宏宏 1、per 表示外設(shè),如表示外設(shè),如 edma 2、reg 表示寄存器名,如表示寄存器名,如prictl0,auxctl 3、field 表示寄存器域,如表示寄存器域,如 esize 4、regval 表示外設(shè)域生成宏表示外設(shè)域生成宏per-fmk( )產(chǎn)生的整型常量,產(chǎn)生的整型常量, 整型變量,符號(hào)
59、常量整型變量,符號(hào)常量(per_reg_default),或者融合,或者融合 域值域值 5、fieldval 表示的是整常量,整型變量,或者符號(hào)常數(shù)表示的是整常量,整型變量,或者符號(hào)常數(shù) (per_reg_field_symval) 6、x 表示整型常量,整型變量表示整型常量,整型變量 7、sym 表示符號(hào)常量表示符號(hào)常量 通用通用csl宏宏 per_reg_rmk( fieldval_n, . . . fieldval_0 ) 功能:產(chǎn)生外設(shè)寄存器值;功能:產(chǎn)生外設(shè)寄存器值;_rmk宏基于位域,使構(gòu)建寄存器值變得很簡(jiǎn)單。宏基于位域,使構(gòu)建寄存器值變得很簡(jiǎn)單。_rmk宏使用宏使用 規(guī)則:域必須
60、可寫。首先指定域參數(shù)的最高有效位(規(guī)則:域必須可寫。首先指定域參數(shù)的最高有效位(msb),不管用到與否,必須包含所有),不管用到與否,必須包含所有 可寫域的值。如果所傳值超出特定域所允許的位寬,可寫域的值。如果所傳值超出特定域所允許的位寬,_rmk宏將截?cái)嘣撚蛑?。宏將截?cái)嘣撚蛑怠?per_rget(reg ) 功能:返回外設(shè)寄存器值。功能:返回外設(shè)寄存器值。 per_rset(reg, regval ) 功能:將值寫入外設(shè)寄存器。功能:將值寫入外設(shè)寄存器。 per_fmk(reg, field , fieldval ) 功能:可與其他功能:可與其他_fmk宏的結(jié)果進(jìn)行宏的結(jié)果進(jìn)行或或(or)操
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 甘肅中醫(yī)藥大學(xué)《中國(guó)特色社會(huì)主義建設(shè)狀況的調(diào)查研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛南科技學(xué)院《工程師職業(yè)素養(yǎng)》2023-2024學(xué)年第一學(xué)期期末試卷
- 七年級(jí)科學(xué)上冊(cè)11.1生物的感覺(jué)11.1.2人體具有的感覺(jué)學(xué)案無(wú)答案牛津上海版
- 七年級(jí)語(yǔ)文上冊(cè)第一單元1春課后習(xí)題新人教版
- 七年級(jí)道德與法治上冊(cè)第二單元友誼的天空第五課交友的智慧第2框網(wǎng)上交友新時(shí)空說(shuō)課稿新人教版
- 小學(xué)生開(kāi)學(xué)課件背景
- 2021中級(jí)經(jīng)濟(jì)師 工商管理 真題速攻-案例題合集(附有答案解析)
- 美術(shù)教室培訓(xùn)課件
- 發(fā)音不清改正培訓(xùn)課件
- 餐飲加盟合作協(xié)議書范本7篇
- 醫(yī)院十八項(xiàng)核心制度(四篇)
- 物流部安全培訓(xùn)內(nèi)容
- RBA社會(huì)責(zé)任商業(yè)聯(lián)盟準(zhǔn)則(管理手冊(cè)+程序+記錄+培訓(xùn))
- 電大《旅游工作者素質(zhì)修養(yǎng)》期末考試復(fù)習(xí)資料
- 中職《基礎(chǔ)會(huì)計(jì)》期末試題及答案
- GB/T 41168-2021食品包裝用塑料與鋁箔蒸煮復(fù)合膜、袋
- GB/T 37741-2019信息技術(shù)云計(jì)算云服務(wù)交付要求
- GB/T 34697-2017含氟蝕刻廢液處理處置方法
- GB/T 16935.1-2008低壓系統(tǒng)內(nèi)設(shè)備的絕緣配合第1部分:原理、要求和試驗(yàn)
- 33全自動(dòng)打包機(jī)URS
評(píng)論
0/150
提交評(píng)論