為什么要RAM調(diào)試,?
一,、準(zhǔn)備(這里以STM32F103C8的LED流水燈程序?yàn)槔?
二,、修改工程:打開Keil mdk工程,修改以下設(shè)置 1.添加一個(gè)Project target: 如圖1左Project視圖中右鍵Template_Flash選擇Manage Project Items…出現(xiàn)工程文件管理界面,。
圖1 :左為project視圖,,右為工程項(xiàng)管理界面 在彈出的工程文件管理界面作圖1右圖所示的設(shè)置:(1)單擊添加按鈕;(2)輸入Target名稱,,如Template_RAM,;(3)單擊Set as Current Target按鈕,然后按ok保存,。 這樣做的好處是:可以使用下載按鈕旁邊的下拉列表切換用于Flash下載的配置和進(jìn)行RAM調(diào)試的配置,,如圖2。 圖2 :編譯目標(biāo)選擇下拉框 2.分配RAM和Flash空間: 由《STM32數(shù)據(jù)手冊》得知,STM32F103C8的RAM大小為20K,,根據(jù)自己索要調(diào)試的代碼分配者20K的空間,; 例如:如圖3是流水燈程序編譯后的keil輸出,流水燈程序占Flash:1352字節(jié),,占RAM:268+24+1632,,那么可以將STM32F103C8的20K的RAM分10k給ROM,剩下10k作為RAM,。 圖3:流水燈程序Build Output 單擊keil工具欄中的魔術(shù)棒按鈕如圖4(Options for Target…)彈出工程選項(xiàng)窗口: 圖4 :工程選項(xiàng)Options forTarget按鈕 修改工程選項(xiàng)的Target標(biāo)簽的IROM和IRAM如圖5,。設(shè)置IROM的Start=0x20000000,Size=0x2800(0x2800=10k),;IRAM的Start=0x20002800,,Size=0x2800。 圖5 :工程選項(xiàng)-Target標(biāo)簽設(shè)置 為何這樣設(shè)置,? 答:下圖來自《Cortex-M3權(quán)威指南(中文)》84頁,,據(jù)圖5.1知Cortex-M3內(nèi)核MCU內(nèi)部RAM起始地址為0x20000000,因?yàn)?/span>STM32F103C8的內(nèi)部RAM=20K,,因此地址范圍是:0x20000000~0x20005000,。這樣上述設(shè)置將10k分給的代碼區(qū)(IROM),將10k分給了數(shù)據(jù)區(qū)(IRAM),。 3.修改中間文件和鏈接文件保存路徑:(文件路徑跟別的Target不同即可) 如圖6,,打開選項(xiàng)的Output標(biāo)簽,將objects文件的保存路徑改為工程目錄/OBJ/RAM目錄下,;同理,,選項(xiàng)的Listing標(biāo)簽中,將lst文件的保存路徑改為工程目錄/LIST/RAM目錄下,; 圖6:工程選項(xiàng)-Output標(biāo)簽設(shè)置 目的是:避免二,、1步中所示的不同配置的Target產(chǎn)生的中間文件和鏈接文件混淆。 4.添加宏定義: 在選項(xiàng)的C/C++標(biāo)簽的Preprocessor Symbols的define中添加定義:VECT_TAB_SRAM,,若有別的定義,,則用英文逗號隔開。 圖7:工程選項(xiàng)-C/C++標(biāo)簽設(shè)置 5.清除flash編程算法以及添加初始化文件: (1)在選項(xiàng)的BEBUG標(biāo)簽中選擇右側(cè)的仿真器如Jlink,,圖8左,; 圖8 :左 工程選項(xiàng)-Debug標(biāo)簽 ;右 單擊左圖Setting彈出的仿真器設(shè)置界面 然后單擊右邊的Settings按鈕:彈出如圖8右圖所示設(shè)置頁,,選擇Flash download標(biāo)簽,,設(shè)置如下:直到將Programming Algorithm中的內(nèi)容清空。選項(xiàng)的Utilities標(biāo)簽也有一個(gè)Setting按鈕,,里面的設(shè)置同理,。 (2)在選項(xiàng)的BEBUG標(biāo)簽中選擇右側(cè)的仿真器選擇下方有一個(gè)Initialization File,,添加Dbg_RAM.ini文件; 說明:Dbg_RAM.ini文件來自Keil安裝目錄\ARM\Pack\Keil\STM32F1xx_DFP\1.1.0\Boards\Keil\MCBSTM32C\Blinky\Dbg_RAM.ini,,將其復(fù)制到工程目錄的USER子目錄下,;不同版本Keil該文件路徑可能不同。該文件可手動(dòng)創(chuàng)建,,內(nèi)容如下:
6.最后的設(shè)置:選項(xiàng)的Utilities標(biāo)簽的 Update Target Before DeBugging項(xiàng)不能選中! 圖9:工程選項(xiàng)-Utilities標(biāo)簽 上述設(shè)置完成后,,注意單擊ok保存設(shè)置。 三,、enjoy程序調(diào)試: 重新編譯項(xiàng)目文件,,單擊keil工具欄中的Bebug按鈕就可以在RAM中調(diào)試程序。 注意: 1.RAM調(diào)試Target不能用于下載,,因此不能單擊下載按鈕,; 2.調(diào)試過程中復(fù)位后必須退出Debug再重新進(jìn)入Debug。原因是復(fù)位后程序回到了芯片flash的起始地址而非RAM起始地址,。 3.若進(jìn)入debug程序立即運(yùn)行,,可先在main函數(shù)或需要的地方加好斷點(diǎn),或者取消圖8工程選項(xiàng)-Debug標(biāo)簽所示的Run to main().選項(xiàng) 為什么是取消勾選,?,?不得而知。 RAM調(diào)試工程模板下載: |
|