為什么要RAM調(diào)試?
一、準(zhǔn)備(這里以STM32F103C8的LED流水燈程序?yàn)槔?
二、修改工程:打開(kāi)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ù)手冊(cè)》得知,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è)置? 答:下圖來(lái)自《Cortex-M3權(quán)威指南(中文)》84頁(yè),據(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,打開(kāi)選項(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,若有別的定義,則用英文逗號(hào)隔開(kāi)。 圖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è)置頁(yè),選擇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文件; 說(shuō)明:Dbg_RAM.ini文件來(lái)自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)試過(guò)程中復(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)試工程模板下載: |
|
來(lái)自: 旭日東升4k165w > 《文件夾1》