STM32在Keil MDK5環(huán)境下RAM上代碼調(diào)試
步驟與圖示:
1.先給個CPU的數(shù)據(jù),需要注意的是三個紅圈的地方,架構,型號,F(xiàn)lash和SRAM大小如圖1
(STM32F107VC 256KB FLASH,64KB SRAM)
圖1
2.Target的設置
1)勾上可以用微庫,減小生成代碼的大小
2,3)分別定義ROM區(qū)位置及大小和RAM區(qū)位置和大小。在這里需要說明的是,Cortex-M3的架構有4G的尋址空間,而Flash的起始地址在0x08000000,RAM地址在0x20000000,在這里進行了第一次相關地址的更改;如圖2
0x1000為4K,這里的0xc000則為48K的ROM分配;RAM的為16K;基本上移植個uCOS-II都夠用了
圖2
3.Output的設置
選擇Remout文件夾
強調(diào)一下Name of Executable吧;這里默認的應該是project的名字,改成output;而且這與編譯后產(chǎn)生的*.axf和*.sct文件名字都有關聯(lián);沒勾選HEX;見圖3
圖3
4.Listing Label 默認
5.User Label 默認
6.C/C++ Label 默認
7. Asm Label 默認
8. Linker Label
最上邊打上勾,是這效果;不打勾,就反白了
先說說打勾的時候,如圖4;非人為操作,你什么都不用管了,(很多人會發(fā)現(xiàn),新建的項目,剛開始的時候下面的Scatter File后的內(nèi)容是空的,當你把這勾去掉后會自動出現(xiàn),然后隨你勾與不勾,就都是存在的了,不過此時還只是個影子,沒有實際的文件,什么時候出現(xiàn)這個文件呢,法一:自然你可以自己寫;法二:在出現(xiàn)影子后打上勾編譯一次,此文件就產(chǎn)生了;在output的文件夾里;馬上后文還會有對此文件內(nèi)容的介紹)
圖4
再說說不打勾的時候會反白一些內(nèi)容,如圖5,需要修改兩個地方
圖5
再來看看output.sct文件內(nèi)容,如圖6~6行內(nèi)容是ROM的地址和大小,11行事RAM的地址和大小,很是一目了然,內(nèi)容根據(jù)Target自動生成的,不需要手動修改
圖6
LR_IROM1 0x20000000 0x0000C000 { ;load region size_region
ER_IROM1 0x20000000 0x0000C000{ ;load address = executionaddress
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x2000C000 0x00004000{ ;RW date
.ANY (+RW +ZI )
}
}
9.Debug的配置
分成幾部分,原界面和Setting界面
1)原界面,如圖7,首先選好J-link ,在keil5下,選擇“CMSIS-DAP Debugger”,取消Load Application at Startup的勾選
圖7
再說說這個RAM.ini文件,內(nèi)容如下,如圖8,有注釋
首先LOAD output.axf,加載啟動代碼到RAM,關關于hex,bin文件和axf的關系,是在axf中存有Debug需要的一些調(diào)試語句,所以這文件與前2者內(nèi)容上是不相同的,前兩者屬于其子集的關系,(這里的output.axf名字對應了我們上邊設定的output的文件名設定,此文件在output中設定的文件夾下生成,跟output.sct在一起)從文件內(nèi)容可以看到,中斷向量表已經(jīng)被映射到0x20000000,PC也指向了0x20000004,說明在RAM中進行調(diào)試時理論上可以的了
圖8
RAM.INI文件:
/******************************************************************************/
/* RAM.INI: RAM Initialization File */
/******************************************************************************/
/* This file is part of the uVision/ARMdevelopment tools. */
/* Copyright (c) 2010 Keil - An ARMCompany. All rights reserved.*/
/* This software may only be used under theterms of a valid, current, */
/* end user licence from KEIL for acompatible version of KEIL software*/
/* development tools. Nothing else givesyou the right to use this software. */
/******************************************************************************/
FUNC void Setup (void) {
SP= _RDWORD(0x20000000); // SetupStack Pointer
PC= _RDWORD(0x20000004); // SetupProgram Counter
_WDWORD(0xE000ED08, 0x20000000);// Setup Vector Table Offset Register
}
LOAD..RemoutProject.axfINCREMENTAL //Download
Setup(); // Setup forRunning
g, main
()
2)進入setting如圖9
圖9
3)然后進入了Flash Download label,如圖10~Flash的擦寫有規(guī)矩,需要在有內(nèi)容的情況下擦出一個扇區(qū)后方可寫入,而此時的RAM自然不必要這樣做,然后需要點擊add添加Flash編程算法接著進入了選擇界面,如圖11
圖10
在這里選擇好屬于自己的芯片F(xiàn)lash大小~256K ~
add后還需要再更改最后一行紅線上的內(nèi)容,此時需要先點一下剛選好的變成算法就會反白可編輯,然后編程算法會自動更改其自身的地址
圖11
10.進入Utilities~同Debug一樣,選擇其中的setting其實剛剛講過,其實是同一個,如圖12
圖12
RAM調(diào)制到此為止
需要提醒大家注意的幾點是:
1.Debug開始后~不要點reset~因為這樣后走的就是Flash的程序了~容易造成調(diào)試問題~結果是產(chǎn)生keil被kill掉的PC錯誤~
2.重新啟動開發(fā)板后一定要build target一次~或者rebuild all一次再燒寫程序~不然~很容易同上