STM32在Keil MDK5環(huán)境下RAM上代碼調(diào)試
掃描二維碼
隨時(shí)隨地手機(jī)看文章
步驟與圖示:
1.先給個(gè)CPU的數(shù)據(jù),需要注意的是三個(gè)紅圈的地方,架構(gòu),型號(hào),F(xiàn)lash和SRAM大小如圖1
(STM32F107VC 256KB FLASH,64KB SRAM)
圖1
2.Target的設(shè)置
1)勾上可以用微庫(kù),減小生成代碼的大小
2,3)分別定義ROM區(qū)位置及大小和RAM區(qū)位置和大小。在這里需要說明的是,Cortex-M3的架構(gòu)有4G的尋址空間,而Flash的起始地址在0x08000000,RAM地址在0x20000000,在這里進(jìn)行了第一次相關(guān)地址的更改;如圖2
0x1000為4K,這里的0xc000則為48K的ROM分配;RAM的為16K;基本上移植個(gè)uCOS-II都?jí)蛴昧?/p>
圖2
3.Output的設(shè)置
選擇Remout文件夾
強(qiáng)調(diào)一下Name of Executable吧;這里默認(rèn)的應(yīng)該是project的名字,改成output;而且這與編譯后產(chǎn)生的*.axf和*.sct文件名字都有關(guān)聯(lián);沒勾選HEX;見圖3
圖3
4.Listing Label 默認(rèn)
5.User Label 默認(rèn)
6.C/C++ Label 默認(rèn)
7. Asm Label 默認(rèn)
8. Linker Label
最上邊打上勾,是這效果;不打勾,就反白了
先說說打勾的時(shí)候,如圖4;非人為操作,你什么都不用管了,(很多人會(huì)發(fā)現(xiàn),新建的項(xiàng)目,剛開始的時(shí)候下面的Scatter File后的內(nèi)容是空的,當(dāng)你把這勾去掉后會(huì)自動(dòng)出現(xiàn),然后隨你勾與不勾,就都是存在的了,不過此時(shí)還只是個(gè)影子,沒有實(shí)際的文件,什么時(shí)候出現(xiàn)這個(gè)文件呢,法一:自然你可以自己寫;法二:在出現(xiàn)影子后打上勾編譯一次,此文件就產(chǎn)生了;在output的文件夾里;馬上后文還會(huì)有對(duì)此文件內(nèi)容的介紹)
圖4
再說說不打勾的時(shí)候會(huì)反白一些內(nèi)容,如圖5,需要修改兩個(gè)地方
圖5
再來看看output.sct文件內(nèi)容,如圖6~6行內(nèi)容是ROM的地址和大小,11行事RAM的地址和大小,很是一目了然,內(nèi)容根據(jù)Target自動(dòng)生成的,不需要手動(dòng)修改
圖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
再說說這個(gè)RAM.ini文件,內(nèi)容如下,如圖8,有注釋
首先LOAD output.axf,加載啟動(dòng)代碼到RAM,關(guān)關(guān)于hex,bin文件和axf的關(guān)系,是在axf中存有Debug需要的一些調(diào)試語句,所以這文件與前2者內(nèi)容上是不相同的,前兩者屬于其子集的關(guān)系,(這里的output.axf名字對(duì)應(yīng)了我們上邊設(shè)定的output的文件名設(shè)定,此文件在output中設(shè)定的文件夾下生成,跟output.sct在一起)從文件內(nèi)容可以看到,中斷向量表已經(jīng)被映射到0x20000000,PC也指向了0x20000004,說明在RAM中進(jìn)行調(diào)試時(shí)理論上可以的了
圖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)進(jìn)入setting如圖9
圖9
3)然后進(jìn)入了Flash Download label,如圖10~Flash的擦寫有規(guī)矩,需要在有內(nèi)容的情況下擦出一個(gè)扇區(qū)后方可寫入,而此時(shí)的RAM自然不必要這樣做,然后需要點(diǎn)擊add添加Flash編程算法接著進(jìn)入了選擇界面,如圖11
圖10
在這里選擇好屬于自己的芯片F(xiàn)lash大小~256K ~
add后還需要再更改最后一行紅線上的內(nèi)容,此時(shí)需要先點(diǎn)一下剛選好的變成算法就會(huì)反白可編輯,然后編程算法會(huì)自動(dòng)更改其自身的地址
圖11
10.進(jìn)入U(xiǎn)tilities~同Debug一樣,選擇其中的setting其實(shí)剛剛講過,其實(shí)是同一個(gè),如圖12
圖12
RAM調(diào)制到此為止
需要提醒大家注意的幾點(diǎn)是:
1.Debug開始后~不要點(diǎn)reset~因?yàn)檫@樣后走的就是Flash的程序了~容易造成調(diào)試問題~結(jié)果是產(chǎn)生keil被kill掉的PC錯(cuò)誤~
2.重新啟動(dòng)開發(fā)板后一定要build target一次~或者rebuild all一次再燒寫程序~不然~很容易同上