电竞比分网-中国电竞赛事及体育赛事平台

分享

基于固件庫的STM32F10x程序在Keil v5 MDK 下的RAM調(diào)試方法

 旭日東升4k165w 2019-09-07

為什么要RAM調(diào)試?

  1. 相比于FLASH調(diào)試,在RAM調(diào)試可以很快地裝載代碼,可以節(jié)省將代碼下載到Flash的時間。

  2. RAM的擦寫次數(shù)幾乎無限,RAM調(diào)試可延長Flash的使用壽命。圖1

一、準備(這里以STM32F103C8LED流水燈程序為例)

  1. Keil mdk514

  2. Template模板工程 LED流水燈,V3.5.0版本的固件庫

  3. 示例芯片型號:STM32F103C8,芯片的BOOT引腳必須接地

 二、修改工程:打開Keil mdk工程,修改以下設置

   1.添加一個Project target

   如圖1左Project視圖中右鍵Template_Flash選擇Manage Project Items…出現(xiàn)工程文件管理界面。

                       

圖1 :左為project視圖,右為工程項管理界面 

   在彈出的工程文件管理界面作圖1右圖所示的設置:(1)單擊添加按鈕;(2)輸入Target名稱,如Template_RAM;(3)單擊Set as Current Target按鈕,然后按ok保存。

   這樣做的好處是:可以使用下載按鈕旁邊的下拉列表切換用于Flash下載的配置和進行RAM調(diào)試的配置,如圖2。

圖2 :編譯目標選擇下拉框

   2.分配RAMFlash空間:

     由《STM32數(shù)據(jù)手冊》得知,STM32F103C8RAM大小為20K,根據(jù)自己索要調(diào)試的代碼分配者20K的空間;

     例如:如圖3是流水燈程序編譯后的keil輸出,流水燈程序占Flash1352字節(jié),占RAM268+24+1632,那么可以將STM32F103C820KRAM10kROM,剩下10k作為RAM。

圖3:流水燈程序Build Output

    單擊keil工具欄中的魔術棒按鈕如圖4(Options for Target…)彈出工程選項窗口:

圖4 :工程選項Options forTarget按鈕

     修改工程選項的Target標簽的IROMIRAM如圖5。設置IROMStart=0x20000000Size=0x28000x2800=10k);IRAMStart=0x20002800,Size=0x2800。

圖5 :工程選項-Target標簽設置

    為何這樣設置?

    答:下圖來自《Cortex-M3權威指南(中文)》84頁,據(jù)圖5.1知Cortex-M3內(nèi)核MCU內(nèi)部RAM起始地址為0x20000000,因為STM32F103C8的內(nèi)部RAM=20K,因此地址范圍是:0x20000000~0x20005000。這樣上述設置將10k分給的代碼區(qū)(IROM),將10k分給了數(shù)據(jù)區(qū)(IRAM)。

  3.修改中間文件和鏈接文件保存路徑:(文件路徑跟別的Target不同即可)

     如圖6,打開選項的Output標簽,將objects文件的保存路徑改為工程目錄/OBJ/RAM目錄下;同理,選項的Listing標簽中,將lst文件的保存路徑改為工程目錄/LIST/RAM目錄下;

圖6:工程選項-Output標簽設置

     目的是:避免二、1步中所示的不同配置的Target產(chǎn)生的中間文件和鏈接文件混淆。

   4.添加宏定義:

    在選項的C/C++標簽的Preprocessor Symbolsdefine中添加定義:VECT_TAB_SRAM,若有別的定義,則用英文逗號隔開。

圖7:工程選項-C/C++標簽設置

   5.清除flash編程算法以及添加初始化文件:

  (1)在選項的BEBUG標簽中選擇右側的仿真器如Jlink,圖8左

圖8 :左 工程選項-Debug標簽 ;右 單擊左圖Setting彈出的仿真器設置界面

     然后單擊右邊的Settings按鈕:彈出如圖8右圖所示設置頁,選擇Flash download標簽,設置如下:直到將Programming Algorithm中的內(nèi)容清空。選項的Utilities標簽也有一個Setting按鈕,里面的設置同理。

  (2)在選項的BEBUG標簽中選擇右側的仿真器選擇下方有一個Initialization File,添加Dbg_RAM.ini文件;

    說明Dbg_RAM.ini文件來自Keil安裝目錄\ARM\Pack\Keil\STM32F1xx_DFP\1.1.0\Boards\Keil\MCBSTM32C\Blinky\Dbg_RAM.ini,將其復制到工程目錄的USER子目錄下;不同版本Keil該文件路徑可能不同。該文件可手動創(chuàng)建,內(nèi)容如下:

  1. FUNC void Setup (void) {
  2. SP = _RDWORD(0x20000000); // Setup Stack Pointer
  3. PC = _RDWORD(0x20000004); // Setup Program Counter
  4. _WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register
  5. }
  6. FUNC void OnResetExec (void) { // executes upon software RESET
  7. Setup(); // Setup for Running
  8. }
  9. load %L incremental
  10. Setup(); // Setup for Running
  11. g, main

   6.最后的設置選項的Utilities標簽的 Update Target Before DeBugging項不能選中!

圖9:工程選項-Utilities標簽

   上述設置完成后,注意單擊ok保存設置。

三、enjoy程序調(diào)試:

    重新編譯項目文件,單擊keil工具欄中的Bebug按鈕就可以在RAM中調(diào)試程序。


 注意:

         1.RAM調(diào)試Target不能用于下載,因此不能單擊下載按鈕;

       2.調(diào)試過程中復位后必須退出Debug再重新進入Debug。原因是復位后程序回到了芯片flash的起始地址而非RAM起始地址。

      3.若進入debug程序立即運行,可先在main函數(shù)或需要的地方加好斷點,或者取消圖8工程選項-Debug標簽所示的Run to main().選項  為什么是取消勾選??不得而知。

RAM調(diào)試工程模板下載:

http://download.csdn.net/detail/weboo10000/9085393

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多