版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第4章 如何構(gòu)建一個完整的工程,4.1 一個完整的工程由哪些文件構(gòu)成,頭文件庫文件源文件CMD文件,4.1.1頭文件,頭文件是以.h為后綴的文件。h即為“head”的縮寫。,4.1.2 庫文件,庫文件是以.lib為后綴的文件Lib即“l(fā)ibrary”的縮寫CCS中庫文件的默認(rèn)路徑為:C:\CCStudio_v3.3\c2000\cgtools\lib\庫文件不僅包含了寄存器的地址與對應(yīng)標(biāo)示符的定義,還包含了C/C++運
2、行支持庫函數(shù),如系統(tǒng)啟動函數(shù)_c_int00等。,靜態(tài)庫與動態(tài)庫的區(qū)別(1),lib是編譯時需要的,而dll是運行時需要的。如果要完成源代碼的編譯,有l(wèi)ib就夠了。如果要使動態(tài)鏈接的程序運行起來,有dll就夠了。當(dāng)然,在開發(fā)和調(diào)試階段,最好兩者都有。,靜態(tài)庫與動態(tài)庫的區(qū)別(2),一般的動態(tài)庫程序有l(wèi)ib文件和dll文件。lib文件是必須在編譯期就連接到應(yīng)用程序中的,而dll文件是運行期才會被調(diào)用的。如果有dll文件,那么對應(yīng)的lib文件
3、一般是一些索引信息,具體的實現(xiàn)在dll文件中。如果只有l(wèi)ib文件,那么這個lib文件是靜態(tài)編譯出來的,索引和實現(xiàn)都在其中。靜態(tài)編譯的lib文件優(yōu)點是給用戶安裝時就不需要再掛動態(tài)庫了。但也有缺點,就是導(dǎo)致應(yīng)用程序比較大,而且失去了動態(tài)庫的靈活性,在版本升級時,同時要發(fā)布新的應(yīng)用程序才行。,靜態(tài)庫與動態(tài)庫的區(qū)別(3),在動態(tài)庫的情況下,有兩個文件,一個是引入庫(.lib)文件,一個是dll文件,引入庫文件包含被dll導(dǎo)出的函數(shù)的名稱和位置,
4、dll包含實際的函數(shù)和數(shù)據(jù),應(yīng)用程序使用lib文件鏈接到所需要使用的dll文件,庫中的函數(shù)和數(shù)據(jù)并不復(fù)制到可執(zhí)行文件中,因此在應(yīng)用程序的可執(zhí)行文件中,存放的不是被調(diào)用的函數(shù)代碼,而是dll中所要調(diào)用的函數(shù)的內(nèi)存地址,這樣當(dāng)一個或多個應(yīng)用程序運行是再把程序代碼和被調(diào)用的函數(shù)代碼鏈接起來,從而節(jié)省了內(nèi)存資源。,4.1.3 源文件,源文件是以.c為后綴的文件C即為“source”的縮寫源文件是整個工程的核心,包含了所有需要實現(xiàn)的功能的代碼
5、,F2812常用的源文件,CMD文件,CMD文件的作用是為代碼和數(shù)據(jù)分配存儲空間CMD文件有兩種:一種是分配RAM空間,用于將程序下載到RAM空間一種是分配FLASH空間,用于將程序固化到FLASH空間,4.2 通用擴展語言GEL,GEL是General Extended Language的縮寫,即通用擴展語言,是一種類似于C的解釋性語言。用戶可以通過在文件中使用GEL語言來創(chuàng)建函數(shù),從而擴展CCS的功能。通過GEL,可以訪問目標(biāo)
6、板的存儲器,并為CCS的GEL菜單添加選項。,7.1 存儲器相關(guān)的總線知識,地址總線,PAB (Program Address Bus)程序地址總線,它是一個22位的總線,用于傳送程序空間的讀寫地址。程序在運行的時候,假如CPU執(zhí)行到了某一個指令,那么需要去找到這段代碼的地址,就是用PAB來傳送。DRAB(Data-Read Address Bus)數(shù)據(jù)讀地址總線,它是個32位的總線,用于傳送數(shù)據(jù)空間的讀地址。假如CPU要讀取
7、數(shù)據(jù)空間某一個單元的內(nèi)容,那么這個單元的地址就是通過DRAB來傳送。DWAB(Data-Write Address Bus)數(shù)據(jù)寫地址總線,它也是個32位的總線,用于傳送數(shù)據(jù)空間的寫地址。類似的,如果CPU要對數(shù)據(jù)空間的某一個單元進行寫操作,那么這個單元的地址就是通過DWAB來傳送,數(shù)據(jù)總線,PRDW(Program-Read Data Bus)程序讀數(shù)據(jù)總線,它是一個32位的總線,用于傳送讀取程序空間時的指令或者數(shù)據(jù)。CP
8、U在執(zhí)行代碼的時候,首先是通過PAB傳送并找到了存放該指令的存儲單元,但是這個存儲單元下的具體內(nèi)容就要由PRDW來傳送了。DRDB(Data-Read Data Bus)數(shù)據(jù)讀數(shù)據(jù)總線,它是一個32位的總線,在讀取數(shù)據(jù)空間時用來傳送數(shù)據(jù)。CPU在進行讀操作時,先通過DRAB總線確定了需要進行讀操作的數(shù)據(jù)單元的地址,接下來傳送這個數(shù)據(jù)單元下面的具體內(nèi)容時就需要DRDB了。DWDB(Data/Program-Write D
9、ata Bus)數(shù)據(jù)寫數(shù)據(jù)總線,它是一個32位的總線,在進行寫操作時,向數(shù)據(jù)空間/程序空間傳送相應(yīng)的數(shù)據(jù)。也就是假如CPU要對數(shù)據(jù)空間的某一個單元進行寫操作,通過DWAB傳送了這一個單元的地址,同時需要DWDB來傳送寫入的內(nèi)容。,7.2.1 F2812片內(nèi)存儲器資源,7.2.2 映像與統(tǒng)一編址的理解,7.2.2 F2812的存儲器映像,“映像”用英文單詞來表示是“Map”,“Map”在中文里又是“地圖”的意思。地圖應(yīng)該都比較熟悉吧
10、,在地圖上,建筑物都有自己詳細的地址,根據(jù)地圖的指引,按照地址,就能找到相應(yīng)的地方。類似的,當(dāng)存儲器單元的地址在設(shè)計時都確定下來后,就形成了存儲器的“地圖”,也就是存儲器映像,根據(jù)存儲單元的地址,就能找到相應(yīng)的存儲單元。,7.2.3-1 片內(nèi)SRAM,總共18K*16位大小H0 8K*16位L0 4K*16位 受CSM保護L1 4K*16位 受CSM保護M0 1K*16位M1 1K*16位,7.2.3-2 片
11、內(nèi)OTP,片內(nèi)OTP實質(zhì)是ROM空間。OTP是One Time Programmable的縮寫,即一次性可編程的ROM,其大小為2K*16位,其中1K*16位由TI公司保留作為系統(tǒng)測試使用,剩余1K*16位用戶可以使用,這部分空間也均可以作為程序空間或者數(shù)據(jù)空間。OTP里面的內(nèi)容受到CSM的保護。,7.2.3-3 Boot ROM,Boot ROM,可以叫做引導(dǎo)ROM。該存儲空間內(nèi)由TI公司裝載了產(chǎn)品的版本號、發(fā)布的數(shù)據(jù)、校驗求和信息、
12、復(fù)位矢量、CPU矢量(僅為測試)及數(shù)學(xué)表等。,7.2.3-4 片內(nèi)Flash,7.2.3-5 代碼安全模塊CSM,CSM是Code Security Module的縮寫,即代碼安全模塊。在開發(fā)完程序,將代碼燒寫進芯片的存儲器后,常常會擔(dān)心別人通過JTAG口從存儲器中將代碼讀出來,為了保護代碼安全,F(xiàn)2812設(shè)計有代碼安全模塊CSM,其地址為0x3F 7FF8~0x3F 7FFF,共128位。受到CSM保護的模塊有FLASH、OTP、
13、L0及L1。,FLASH燒寫界面,7.3 CMD文件,連接命令文件(Linker Command Files), 以后綴.cmd結(jié)尾,簡稱為CMD文件。,COFF概念,通用目標(biāo)文件格式COFF(Common Object File Format),是一種很流行的二進制可執(zhí)行文件格式。二進制可執(zhí)行文件包括了庫文件(以后綴.lib結(jié)尾),目標(biāo)文件(以后綴.obj結(jié)尾),最終的可執(zhí)行文件(以后綴.out結(jié)尾)等,平時燒寫程序時使用的就
14、是.out結(jié)尾的文件。,段概念,使用段的好處是鼓勵模塊化編程,提供更強大而又靈活的方法來管理代碼和目標(biāo)系統(tǒng)的存儲空間。這里模塊化編程的意思是指程序員可以自由決定愿意把哪些代碼歸屬到哪些段,然后加以不同的處理。比如,把已經(jīng)初始化的數(shù)據(jù)放到一個段里,未初始化的數(shù)據(jù)放到另一個段里,而不是混雜的放在一起。,編譯器處理段的過程,1.把每個源文件都編譯成獨立的目標(biāo)文件(以后綴.obj結(jié)尾),每個目標(biāo)文件都含有自己的段。2.連接器把這些目標(biāo)文件中相
15、同段名的部分連接在一起,生成最終的可執(zhí)行文件(以后綴.out結(jié)尾)。,7.3.2-1 已初始化的段,text:編譯C語言中的語句時,生成的匯編指令代碼存放于此。cinit:存放用來對全局和靜態(tài)變量初始化的常數(shù)。const:包含字符串常量和初始化的全局變量和靜態(tài)變量(由const聲明)的初始化和說明。econst:包含字符串常量和初始化的全局變量和靜態(tài)變量(由far const聲明)的初始化和說明。pinit:全局構(gòu)造器(C++)
16、程序列表。switch:存放switch語句產(chǎn)生的常數(shù)表格。,7.3.2-2 未初始化的段,bss:為全局變量和局部變量保留的空間,在程序上電時,.cinit空間中的數(shù)據(jù)復(fù)制出來并存儲在.bss空間中。ebss:為使用大寄存器模式時的全局變量和靜態(tài)變量預(yù)留的空間,在程序上電時,.cinit空間中的數(shù)據(jù)復(fù)制出來并存儲在.ebss中。stack:為系統(tǒng)堆棧保留的空間,主要用于和函數(shù)傳遞變量或為局部變量分配空間。system:為動態(tài)存
17、儲分配保留的空間。如果有宏函數(shù),此空間被宏函數(shù)占用,如果沒有的話,此空間保留為0。esysmem:為動態(tài)存儲分配保留的空間。如果有far函數(shù),此空間被相應(yīng)的占用,如果沒有的化,此空間保留為0。,預(yù)處理命令#pragma語法,#pragma CODE_SECTION(symbol,”section name”);#pragma DATA_SECTION(symbol,”section name”);,例7-1,#pragma DAT
18、A_SECTION(s,”newsect”); unsigned int s[100]; void main(void) { …… },將全局?jǐn)?shù)組變量s[100]單獨編譯成一個新的段,取名為”newsect”。,段的存儲特性,7.3.3 CMD文件的編寫,CMD文件支持C語言中的塊注釋符“/*”和“*/”,但不支持行注釋符“//”。CMD文件會使用到為數(shù)不多的幾個關(guān)鍵字,下面會根
19、據(jù)需要來介紹一些常用的關(guān)鍵字。 CMD文件的兩大主要功能是指示存儲空間和分配段到存儲空間 。,1.通過MEMORY偽指令來指示存儲空間,MEMORY偽指令語法如下:MEMORY{ PAGE0:name0[(attr)]:origin=constant,length=constant PAGEn:namen[(attr)]:origin=constant,length=constant},2.通過SECTIONS偽指令
20、來分配到存儲空間,SECTIONS{ name:[property,property,property,…] name:[property,property,property,…] ……},SECTIONS偽指令語法如下:,程序是什么?,組成:由代碼和數(shù)據(jù)組成運行:要運行的程序其代碼必須存放在可由CPU尋址的存儲空間存放:以代碼塊和數(shù)據(jù)塊的形式存放代碼塊和數(shù)據(jù)塊是程序的最小單元一個代碼塊或數(shù)據(jù)塊
21、在存儲空間中連續(xù)、順序存放不同的代碼塊或數(shù)據(jù)塊,可以存放于不同的存儲空間中定位:,編譯時定位:MCU系統(tǒng)采用編程時由ORG語句確定代碼塊和數(shù)據(jù)塊的絕對地址編譯器以此地址為首地址,連續(xù)、順序地存放該代碼塊或數(shù)據(jù)塊鏈接時定位:DSP系統(tǒng)采用編程時由“SECTION”偽指令,以區(qū)分不同的代碼塊或數(shù)據(jù)塊編譯器每遇到一個“SECTION”偽指令,從0地址重新開始一個代碼 塊或數(shù)據(jù)塊鏈接器將同名的“SECTION”合并,并按.cmd
22、文件中的“SECTION”命令進行實際的定位加載時定位:PC機系統(tǒng)采用編程、編譯和鏈接時均未對程序進行絕對定位程序運行前,由操作系統(tǒng)對程序進行重定位,并加載到存儲空間中,,程序定位方式的比較,編譯時定位ORG xxxx,絕對定位優(yōu)點:簡單、容易上手缺點:程序員必須熟悉硬件資源、模塊化編程差、工程化不支持,鏈接時定位SECTION,相對定位缺點:靈活、上手較難優(yōu)點:程序員不必熟悉硬件資源、模塊化編程強、工程化管理支持,加
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 如何構(gòu)建一個完整的web服務(wù)器
- 如何構(gòu)建一個優(yōu)秀的團隊
- 淺析如何構(gòu)建一個強工會
- 如何設(shè)計一個完整的團體心理輔導(dǎo)方案
- 如何管理好一個團隊怎樣管理好一個團隊如何帶領(lǐng)一個團隊
- 一個完整的項目管理流程
- 如何分析一個論證
- 如何成為一個優(yōu)秀的電子工程師
- 如何管理一個團隊
- 如何成為一個優(yōu)秀的電子工程師97951
- 如何養(yǎng)一個健康的寶寶
- 如何成為一個成功的下屬
- 如何設(shè)計一個合適的電源?
- 一個完整的軟件開發(fā)流程
- 【招聘方法和策略】如何構(gòu)建一個有效的面試-45頁
- 如何生一個漂亮的寶寶
- 如何編寫一個簡單的程序
- 如何管理一個好的團隊
- 如何成為一個優(yōu)秀的主管
- 新手如何建一個網(wǎng)站
評論
0/150
提交評論