資料介紹
在一個(gè)C/C++程序能正常運(yùn)行之前,相關(guān)的C/C++運(yùn)行時(shí)(run-time)環(huán)境首先要正確建立。在CCS軟件編程的情況下,C/C++的實(shí)時(shí)運(yùn)行庫(kù)RTS的源程序庫(kù)rts.src中包含了名為boot.c或者boot.asm的啟動(dòng)程序(在一些TI的例子里,則使用了CodeStartBranch.asm來完成啟動(dòng)工作,它會(huì)自動(dòng)調(diào)用庫(kù)文件中的boot.asm),用于在系統(tǒng)啟動(dòng)后調(diào)用c_int00函數(shù),并通過其中的操作來完成運(yùn)行時(shí)環(huán)境的建立。通常情況下,c_int00函數(shù)位于rts2800.lib庫(kù)函數(shù)中的boot.obj(即TI官方編譯boot.c或者boot.asm生成的目標(biāo)文件)下,這也就是為什么我們?cè)贑28x編程的情況下通常要把rts2800.lib庫(kù)函數(shù)加入工程中的原因(其它器件則根據(jù)型號(hào)、系列添加對(duì)應(yīng)的庫(kù)文件;否則就會(huì)出現(xiàn)初學(xué)者經(jīng)常遇到的找不到boot.c之類的錯(cuò)誤)。
注:小型內(nèi)存模型含義是已初始化的段被鏈接至低 64Kw(字)可尋址空間內(nèi)的非易失性內(nèi)存,它使用rts2800.lib。對(duì)于定點(diǎn)器件,如果使用大內(nèi)存模型(超過64K字),則需要使用庫(kù) rts2800_ml.lib;對(duì)于含有FPU的器件,用于標(biāo)準(zhǔn) C 語言代碼的為 rts2800_fpu32.lib,或者用于 C++ 代碼的 rts2800_fpu32_eh.lib(沒有針對(duì)浮點(diǎn)器件的較小內(nèi)存模型庫(kù))。在 CCS v5/v6 中,有一個(gè)針對(duì)庫(kù)的“自動(dòng)”設(shè)置,此設(shè)置可據(jù)項(xiàng)目的設(shè)置(例如,浮點(diǎn)支持和內(nèi)存模型選擇)讓 CCS 自動(dòng)選擇正確的庫(kù)來使用。對(duì)于 DSP/BIOS 項(xiàng)目,DSP/BIOS 將負(fù)責(zé)將所需的庫(kù)包括在內(nèi),我們用戶不需要在項(xiàng)目中包含任何運(yùn)行支持庫(kù)。
如果在鏈接器選項(xiàng)中我們使用了--ram_model或者--rom_mode,則_c_int00函數(shù)自動(dòng)被配置為整個(gè)程序執(zhí)行的入口點(diǎn)。此外,在CPU復(fù)位之后(相當(dāng)于一個(gè)軟件或者硬件的復(fù)位中斷),我們也可以把整個(gè)程序的入口點(diǎn)指向_c_int00,例如:
.def _Reset
.ref _c_int00
_Reset: .vec _c_int00, USE_RETA
則在執(zhí)行CPU復(fù)位操作之后,系統(tǒng)自動(dòng)跳轉(zhuǎn)到_c_int00函數(shù)。
在c_int00函數(shù)中完成的功能主要有:
1. 設(shè)置/初始化CPU的狀態(tài)和配置寄存器。
2. 為系統(tǒng)的棧定義一個(gè).stack段,然后建立并初始化棧的指針。其中,棧需要被分配在單一的、連續(xù)的一段地址中,起始點(diǎn)為低地址,終點(diǎn)為高地址,棧指針SP的初始化值指向棧的頂端。
3. 從初始化表中,把數(shù)據(jù)復(fù)制到.bss段中,從而初始化全局變量。如果使用了—ram_model選項(xiàng)在加載程序時(shí)就初始化變量,則在程序運(yùn)行前,會(huì)首先運(yùn)行一個(gè)加載程序來完成變量的初始化。如果使用了--rom_model選項(xiàng),則使用.cinit中的運(yùn)行時(shí)初始化表來完成變量的初始化。
默認(rèn)情況下,鏈接器使用--rom_model選項(xiàng),在程序運(yùn)行時(shí)完成變量的自動(dòng)初始化。在程序運(yùn)行時(shí),.cinit段和其它初始化的段會(huì)被一起加載到內(nèi)存中,從而使得C/C++的啟動(dòng)程序可以自動(dòng)把.cinit中的初始化表格復(fù)制到.bss段中,完成全局變量的自動(dòng)初始化。這種方法的特點(diǎn)在于,初始化的表格可以被存放在更加便宜且大容量的ROM或者FLASH,而不是RAM中,并且可以在程序啟動(dòng)時(shí)再自動(dòng)加載到RAM中,這種方法在我們把程序燒寫到FLASH中再運(yùn)行的時(shí)候是經(jīng)常使用的。關(guān)于Flash運(yùn)行的更多信息,可以參考TI的的一個(gè)應(yīng)用報(bào)告:http://www.ti.com.cn/cn/lit/an/zhca550l/zhca550l.pdf,從 TMS320F28xxx 數(shù)字信號(hào)處理器 (DSP) 上的內(nèi)部閃存存儲(chǔ)器上運(yùn)行一個(gè)應(yīng)用。
如果使用—ram_model的鏈接器選項(xiàng),則鏈接器會(huì)在.cinit段的開頭中配置STYP_COPY位(0010h),告訴加載器不要把.cinit段自動(dòng)加載到內(nèi)存中,并且把cinit這個(gè)符號(hào)設(shè)置為-1(默認(rèn)情況下符號(hào)cinit指向初始化表格),從而向啟動(dòng)程序表明,內(nèi)存中沒有初始化表格,在啟動(dòng)時(shí)不需要執(zhí)行運(yùn)行時(shí)的初始化工作。在這種情況下,需要我們自定義一個(gè)加載程序,從而在加載程序時(shí)就完成初始化,它的主要內(nèi)容包括:
ü 在目標(biāo)文件中檢測(cè).cinit段的存在;
ü 在.cinit段的開頭配置STYP_COPY位,使得該段不會(huì)被自動(dòng)復(fù)制到內(nèi)存中;
ü 需要我們理解并正確遵循初始化表格的格式。
這三個(gè)注意點(diǎn)貌似比較復(fù)雜,不過有讀者可能會(huì)問,我們?cè)谥苯影殉绦蛲ㄟ^JTAG下載到DSP的RAM中并運(yùn)行的時(shí)候,貌似并沒有配置這么麻煩的步驟???那是因?yàn)镃CS編程環(huán)境已經(jīng)幫我們承擔(dān)了這一重要任務(wù),在我們用仿真器來調(diào)試、運(yùn)行的時(shí)候經(jīng)常會(huì)使用到這個(gè)方式。
注意:在C/C++程序運(yùn)行之前,一些全局變量必須被賦予初始值。在ANSI/ISO C中,未明確初始化的全局和靜態(tài)變量在程序執(zhí)行前都需要被初始化為0,C/C++的編譯器并不會(huì)對(duì)它們進(jìn)行自動(dòng)初始化。在把程序加載到RAM而不是ROM中的情況下,比較方便的方法是直接把.bss段初始化為0。
- 單片機(jī) keil調(diào)試的時(shí)候進(jìn)入不了main函數(shù)
- DSP軟件編程與算法實(shí)現(xiàn) 25次下載
- 在CCSv5內(nèi)建立DSP庫(kù) 29次下載
- DSP的開發(fā)工具及開發(fā)環(huán)境的詳細(xì)資料說明 23次下載
- MDK main函數(shù)運(yùn)行前的詳細(xì)資料分析 11次下載
- C語言程序的main函數(shù)免費(fèi)下載 3次下載
- DSP的編程指令全集詳細(xì)資料(免費(fèi)下載) 8次下載
- TMS320C54xC語言編程和運(yùn)行環(huán)境的詳細(xì)中文資料概述 18次下載
- DSP編程技巧之運(yùn)行時(shí)模型以及鉤子函數(shù)與庫(kù)函數(shù) 2次下載
- DSP編程技巧之編譯流程與處理器選項(xiàng) 2次下載
- ARM啟動(dòng)文件中的__main, 介紹了C啟動(dòng)函數(shù)的設(shè)計(jì) 9次下載
- DSP正弦函數(shù)程序 22次下載
- DSP之AD教程 18次下載
- DSP之CMD文件 18次下載
- DSP環(huán)境下C語言的編程優(yōu)化 22次下載
- 如何查看及更改函數(shù)/函數(shù)塊的調(diào)用環(huán)境 1018次閱讀
- main函數(shù)的三個(gè)參數(shù) 1348次閱讀
- main函數(shù)不一定就是程序入口 666次閱讀
- KUKA建立函數(shù)的方法和例子 1413次閱讀
- 如何搭建Python編程環(huán)境 5209次閱讀
- 單片機(jī)main()函數(shù)退出之后,程序會(huì)跑去哪里? 818次閱讀
- 深入理解函數(shù)式編程(下) 813次閱讀
- 深入理解函數(shù)式編程(上) 746次閱讀
- C語言編程中main()函數(shù)退出之后程序去哪兒了 2748次閱讀
- 單片機(jī)led模塊定義函數(shù)的問題 1690次閱讀
- main函數(shù)的末尾沒有return語句會(huì)有什么影響 6077次閱讀
- 如何解決STM32調(diào)試無法進(jìn)入main函數(shù)的問題? 1.5w次閱讀
- 淺談C語言return語句和main 函數(shù)的返回值 5340次閱讀
- Curiosity PIC32MZEF學(xué)習(xí)教程之:如何建立獨(dú)立的工程 2240次閱讀
- 詳解單片機(jī)程序的運(yùn)行過程 9709次閱讀
下載排行
本周
- 1DC電源插座圖紙
- 0.67 MB | 2次下載 | 免費(fèi)
- 2AN158 GD32VW553 Wi-Fi開發(fā)指南
- 1.51MB | 2次下載 | 免費(fèi)
- 3AN148 GD32VW553射頻硬件開發(fā)指南
- 2.07MB | 1次下載 | 免費(fèi)
- 4AN111-LTC3219用戶指南
- 84.32KB | 次下載 | 免費(fèi)
- 5AN153-用于電源系統(tǒng)管理的Linduino
- 1.38MB | 次下載 | 免費(fèi)
- 6AN-283: Σ-Δ型ADC和DAC[中文版]
- 677.86KB | 次下載 | 免費(fèi)
- 7SM2018E 支持可控硅調(diào)光線性恒流控制芯片
- 402.24 KB | 次下載 | 免費(fèi)
- 8AN-1308: 電流檢測(cè)放大器共模階躍響應(yīng)
- 545.42KB | 次下載 | 免費(fèi)
本月
- 1ADI高性能電源管理解決方案
- 2.43 MB | 450次下載 | 免費(fèi)
- 2免費(fèi)開源CC3D飛控資料(電路圖&PCB源文件、BOM、
- 5.67 MB | 138次下載 | 1 積分
- 3基于STM32單片機(jī)智能手環(huán)心率計(jì)步器體溫顯示設(shè)計(jì)
- 0.10 MB | 130次下載 | 免費(fèi)
- 4使用單片機(jī)實(shí)現(xiàn)七人表決器的程序和仿真資料免費(fèi)下載
- 2.96 MB | 44次下載 | 免費(fèi)
- 53314A函數(shù)發(fā)生器維修手冊(cè)
- 16.30 MB | 31次下載 | 免費(fèi)
- 6美的電磁爐維修手冊(cè)大全
- 1.56 MB | 24次下載 | 5 積分
- 7如何正確測(cè)試電源的紋波
- 0.36 MB | 17次下載 | 免費(fèi)
- 8感應(yīng)筆電路圖
- 0.06 MB | 10次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935121次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420062次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233088次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191367次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73810次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評(píng)論