小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【工具使用】Keil5軟件使用-進(jìn)階工程配置篇

 清涼茶 2023-12-27 發(fā)布于江西

一、概述

????本文面向已經(jīng)懂得軟件基本操作的職業(yè)老手,如果是未使用過(guò)該軟件的小鮮肉,請(qǐng)移步基礎(chǔ)篇。這里以STM32芯片為例對(duì)工具進(jìn)行講解,其他品牌的芯片在工程配置上可能存在差異。

二、軟件說(shuō)明

????Keil提供了包括C編譯器、宏匯編、鏈接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開(kāi)發(fā)方案,通過(guò)一個(gè)集成開(kāi)發(fā)環(huán)境(μVision)將這些部分組合在一起。
????目前軟件對(duì)中文的支持不友好,不建議安裝網(wǎng)上的一些漢化包之類(lèi)的。另外建立的工程文件路徑也盡量不要存在中文,否則可能會(huì)出現(xiàn)一些異常。
演示版本:5.24a

三、軟件使用

1、設(shè)備選擇(Device)

  1. 通過(guò)圖中1位置的"search"框可以輸入芯片名稱,快速找到對(duì)應(yīng)的芯片。
  2. 在圖中2的位置芯片結(jié)構(gòu)圖里也可以選擇芯片,這里芯片是按廠家區(qū)分的。
  3. 選擇完芯片后,在圖中3的位置可以查看芯片簡(jiǎn)介,一般主頻、Flash、Ram大小都會(huì)在這里有所介紹。
  4. 選擇完芯片后,在圖中4的位置,可以查看當(dāng)前芯片包的版本。(有些舊的軟件包可能存在Bug,最好及時(shí)更新到最新版本)

在這里插入圖片描述

2、目標(biāo)設(shè)置(Target)

  • 使用RTX操作系統(tǒng)

????RTX(Real Time eXecutive)是ARM公司針對(duì)ARM7,ARM9,cortex-m內(nèi)核推出的一款嵌入式實(shí)時(shí)操作系統(tǒng)。RTX的源碼跟Keil-MDK綁定在一起,安裝了Keil-MDK之后,可以在 Keil\ARM\RL\RTX\SRC文件夾下找到源碼。
????所以在Keil上移植RTX操作系統(tǒng)十分方便。
????第一步此選項(xiàng)選擇"RTX kernel"。
在這里插入圖片描述
????第二步添加RTX系統(tǒng)的配置文件,配置文件在MDK的安裝目錄C:\Keil_v474\ARM\RL\RTX\Config下面,文件名RTX_Conf_CM.c
在這里插入圖片描述
????注意:工程里面不能有SysTick,PendSV和SVC三個(gè)系統(tǒng)中斷的使用,因?yàn)镽TX系統(tǒng)要使用這三個(gè)中斷。
????其他的移植事項(xiàng)這里就不多贅述了,如果有興趣,可以單獨(dú)出一篇RTX的移植。

  • 選擇編譯器

????在"Code Generation"中的"ARM Compiler"下拉選項(xiàng)框中可以選擇不同的編譯器版本。選擇不同編譯器版本時(shí),工程配置的一些選項(xiàng)會(huì)有相應(yīng)的變化,這里我們一般默認(rèn)選用"Use defalut compiler version 5"即可。如果是全新的工程,可以試下V6的編譯器,速度更快,但缺點(diǎn)就是跟現(xiàn)在大部分主流工程不兼容,因?yàn)槭褂玫木幾g器完全不一樣。
在這里插入圖片描述

  • 設(shè)置晶振頻率

????在Xtal(MHz)后面可以填寫(xiě)當(dāng)前使用的開(kāi)發(fā)板上芯片系統(tǒng)使用的晶振頻率。這個(gè)只會(huì)在仿真調(diào)試中使用,如果直接用開(kāi)發(fā)板在線調(diào)試,這個(gè)可以不用管。
在這里插入圖片描述

  • 跨模塊優(yōu)化選項(xiàng)

????勾選"Use Cross-Module Optimization"選擇跨模塊優(yōu)化,此選項(xiàng)可在編譯鏈接后對(duì)文件鏈接再進(jìn)一步進(jìn)行優(yōu)化,從而減少一些開(kāi)銷(xiāo)。選擇此功能時(shí),可能會(huì)導(dǎo)致編譯時(shí)間變長(zhǎng),但同樣的可以使得編譯后所使用的空間減少。
在這里插入圖片描述

  • 微庫(kù)選項(xiàng)

????勾選"Use MicroLIB"可選擇使用標(biāo)準(zhǔn)缺省庫(kù),勾選這個(gè)會(huì)導(dǎo)致很多庫(kù)函數(shù)用不了,但換來(lái)的是節(jié)省了大量的空間。
在這里插入圖片描述

  • 硬件浮點(diǎn)單元(FPU)

????如果是M3、M4內(nèi)核,且芯片硬件有浮點(diǎn)計(jì)算單元,可通過(guò)勾選"Floating Point Hardware"打開(kāi)硬件浮點(diǎn)計(jì)算功能。
在這里插入圖片描述

  • ROM區(qū)設(shè)置

????注意這里有IROM和ROM的區(qū)別,IROM是指片內(nèi)集成的ROM(上面也有一行小字寫(xiě)了on-chip),也就是查芯片手冊(cè)上規(guī)定好的內(nèi)部Flash的地址段。先講IROM,一般選好芯片后,工程會(huì)默認(rèn)有一套配置,比如現(xiàn)在選的STM32F302RBTx,其片上Flash是0x8000000開(kāi)始,大小是128K,也就是這里的0x20000字節(jié)。這前后有兩個(gè)選項(xiàng),“default"可以勾選啟動(dòng)時(shí)是否對(duì)此段ROM空間進(jìn)行初始化。而"Startup"則可以勾選當(dāng)前程序是要在哪個(gè)Flash段開(kāi)始啟動(dòng)。
????舉個(gè)簡(jiǎn)單的例子,像正常的只用一段App程序的情況下,只要設(shè)置一段ROM即可,起始即為片內(nèi)Flash起始地址,默認(rèn)勾選"default”,也就是程序燒錄時(shí),會(huì)把此段Flash進(jìn)行初始化,并且程序從此地址開(kāi)始運(yùn)行。那如果此時(shí)我有兩段程序呢?也就是現(xiàn)在常用的一種方式,程序分兩段,一段作為引導(dǎo)程序boot,另一段是實(shí)際運(yùn)行的App程序,那么boot應(yīng)設(shè)置在片內(nèi)起始地址段,大小根據(jù)boot實(shí)際占用空間大小來(lái)定義。App接在boot地址段后面,此時(shí)"Startup"應(yīng)勾選在boot段。
在這里插入圖片描述

  • RAM區(qū)設(shè)置

????注意這里有IRAM和RAM的區(qū)別,IRAM是指片內(nèi)集成的RAM(上面也有一行小字寫(xiě)了on-chip),也就是查芯片手冊(cè)上規(guī)定好的內(nèi)部ram的地址段。
在這里插入圖片描述

注:對(duì)于ROM跟RAM的設(shè)置,光靠這個(gè)界面設(shè)置并不全面,最直觀的就是這里IRAM/IROM只有兩段,而STM32H7B0光IRAM就有三段,根本不足以設(shè)置。所以想要設(shè)置全面,應(yīng)該使用.sct文件,這個(gè)后面會(huì)講到。

  • 系統(tǒng)視圖文件

????在"System Viewer File"選項(xiàng)中勾選"Use Custom File",可以自主選擇芯片的視圖文件?,F(xiàn)在國(guó)產(chǎn)化芯片越來(lái)越多,不同廠家芯片支持的視圖可能不同。如果使用ST的芯片,這里不用改,使用默認(rèn)文件即可。
在這里插入圖片描述

3、輸出設(shè)置(Output)

  • 輸出文件路徑和輸入文件名稱

????在"Select Folder for Objects"里可以設(shè)置輸出文件的路徑,在"Name of Executable"后面可以設(shè)置輸出的文件名。這個(gè)輸出文件路徑和文件名也是Keil工程燒錄和調(diào)試獲取文件的依據(jù)。
????比如這里輸出路徑設(shè)置為/Out,文件名為T(mén)estPro,那燒錄時(shí),Keil會(huì)去查找當(dāng)前工程路徑下/Out路徑下是否存在TestPro.axf這個(gè)文件,有就燒錄,沒(méi)有就報(bào)錯(cuò)。如果要使用.Hex文件燒錄,則文件名這里填寫(xiě)TestPro.Hex。
在這里插入圖片描述

注:調(diào)試只能使用.axf文件,因?yàn)?Hex文件不帶調(diào)試信息。

  • 生成.Hex可執(zhí)行文件

????勾選"Create HEX File"即可在編譯后生成.hex文件。

  • 生在.Lib封裝庫(kù)文件

????當(dāng)需要封裝模塊或打包SDK包時(shí),可以勾選"Create Library"這個(gè)選項(xiàng),該選項(xiàng)與"Create Executable"互斥,選擇生成.lib文件而不是完整的可執(zhí)行.axf文件。這種一般是用于提供二次開(kāi)發(fā)的軟件包使用。

  • 生成.bat編譯執(zhí)行腳本

????勾選"Create Batch File"即可在編譯后生成.bat的編譯執(zhí)行腳本,即可以不用打開(kāi)Keil工程,只需要執(zhí)行編譯執(zhí)行腳本即可編譯工程軟件。

  • 調(diào)試信息

????勾選"Debug Infomation"可以選擇是否生成調(diào)試信息,注意去掉此勾選項(xiàng)時(shí),無(wú)法打斷點(diǎn)調(diào)試。

  • 瀏覽信息

????勾選"Browse Infomation"可以選擇是否生成瀏覽信息,有這個(gè)瀏覽信息時(shí),可以在Keil里索引函數(shù)或變量的定義,調(diào)用等,沒(méi)有這個(gè)信息就無(wú)法把這些信息關(guān)聯(lián)起來(lái)。如果不用Keil作為代碼編輯器的小伙伴,去掉這個(gè)勾選項(xiàng),可以減少編譯的時(shí)間。
在這里插入圖片描述

4、生成列表設(shè)置(Listing)

在這里插入圖片描述

  • 設(shè)置鏈接文件輸出路徑

Select Folder for Listings…:選擇列表文件的輸出路徑。
Page Width:定義列表文件每行字符數(shù)量。
Page Length:定義列表文件每頁(yè)字符數(shù)量。
這兩個(gè)基本都用不著,按默認(rèn)設(shè)置即可。
在這里插入圖片描述

  • 生成鏈接文件

Assembler Listing: .\Listings*.lst:為匯編源文件創(chuàng)建列表文件,對(duì)應(yīng)產(chǎn)生源文件名.lst 的文件。
Cross Reference:列出有關(guān)符號(hào)的交叉引用信息,包括它們的定義位置以及宏的內(nèi)部和外部的使用位置。
在這里插入圖片描述

  • 生成過(guò)程文件

C Compiler Listing: .\Listings*.txt:為 C 源文件創(chuàng)建列表文件,對(duì)應(yīng)產(chǎn)生 源文件名.txt 的文件 和 源文件名.lst 的文件。
C Preprocessor Listing: .\Listings*.i:指示編譯器生成預(yù)處理文件。 宏調(diào)用將被展開(kāi)并且注釋將被刪除 對(duì)應(yīng)產(chǎn)生 源文件名.i 的文件。
在這里插入圖片描述

  • 生成Map文件

Linker Listing: .\Listings\TestPro.map:主要是用來(lái)生成代碼詳細(xì)信息的map文件,用于后面的代碼分析。這里面有選項(xiàng)建議全部勾選上。
Memory Map:包含一個(gè)內(nèi)存映射,其中包含鏡像中每個(gè)加載區(qū),執(zhí)行區(qū)和輸入節(jié)的地址和大小,包括調(diào)試和鏈接器生成的輸入節(jié)。
Callgraph:以HTML格式創(chuàng)建函數(shù)的靜態(tài)調(diào)用圖文件。調(diào)用圖給出了鏡像中所有函數(shù)的定義和參考信息。
Symbols:列出本地,全局和鏈接器生成的符號(hào)以及符號(hào)值。
Cross Reference:列出輸入節(jié)之間的所有交叉引用。
Size Info:給出鏡像中每個(gè)輸入對(duì)象和庫(kù)成員的代碼和數(shù)據(jù)(RO數(shù)據(jù),RW數(shù)據(jù),ZI數(shù)據(jù)和調(diào)試數(shù)據(jù))大小的列表。
Totals Info:提供輸入對(duì)象和庫(kù)的代碼和數(shù)據(jù)(RO數(shù)據(jù),RW數(shù)據(jù),ZI數(shù)據(jù)和調(diào)試數(shù)據(jù))大小的總和。
Unused Sections Info:列出從鏡像中刪除的所有未使用的部分。
Veneers Info:提供鏈接器生成的Thumb/ARM膠合代碼的詳細(xì)信息。
在這里插入圖片描述

5、用戶選項(xiàng)(User)

  • 編譯前后執(zhí)行腳本設(shè)置

Before Compile C/C++ File:編輯文件之前
Before Build/Rebuild:編譯工程之前
After Build/Rebuild:編譯工程之后
用戶配置界面

????一般編譯完會(huì)生成.axf文件,如果要生成.bin文件,可以在編譯后調(diào)用keil安裝路徑下/ARM/ARMCC/bin/fromelf.exe這個(gè)工具,提取.axf文件里的.bin文件。為了把這個(gè)操作集成在Keil里,這里可以在"After Build/Rebuild"下面的"Run #1"里添加

$K/ARM/ARMCC/bin/fromelf --bin -o "$L@L.bin" "!L"

????勾選前面的選項(xiàng)框就可以在編譯后執(zhí)行。有時(shí)候如果不想執(zhí)行該命令,可以把勾選去掉。
另外"Before Compile C/C++ File"和"Before Build/Rebuild"這兩個(gè)也同理,只是執(zhí)行腳本命令的時(shí)間不同而已,這個(gè)根據(jù)實(shí)際想要的效果來(lái)定。因?yàn)檫@里只有兩個(gè)選項(xiàng),所以如果要執(zhí)行的腳本有很多,建議自己在外面寫(xiě)個(gè)批處理調(diào)用其他腳本,然后這里只調(diào)用那個(gè)批處理即可。
常用的幾個(gè)語(yǔ)法如下:
$:擴(kuò)展為指定文件的路徑名
@ :表示 Output -> Name of Exectable:定義的工程名,比如test1
!:表示當(dāng)前目錄下的擴(kuò)展路徑
!L:表示編譯(Build)后,就是 .\obj\xx.axf文件
K:keil develop chaintool 工具鏈(fromelf.exe)
L:Linker output file,比如工程名為test1,L.bin 編譯后,生成的就是最終的test1.bin文件
$K:表示當(dāng)前Keil安裝的根目錄
$L:是指axf的文件路徑,不含文件名。
@L:是指axf的文件名,不含axf的后綴。

需要知道所有用法的,可以參考官方手冊(cè)http://www./support/man/docs/uv4/uv4_ut_keysequence.htm

Run “After Build” conditionally:After Build/Rebuild的執(zhí)行條件。沒(méi)整明白這個(gè)有什么用
Beep When Complete:編譯完成發(fā)出聲音。勾選時(shí)在編譯完成時(shí)會(huì)響一下。
Start Debugging:?jiǎn)?dòng)調(diào)試程序。沒(méi)整明白這個(gè)有什么用
用戶配置勾選項(xiàng)

6、C/C++設(shè)置(C/C++)

C/C++設(shè)置視圖

  • 預(yù)處理符號(hào)(PreProcessor Symbols)

Define:用于做一些工程全局宏定義。
在這里插入圖片描述

注:在這里修改宏定義時(shí),需要全編譯才可生效,局部編譯是不生效的哦

  • 語(yǔ)言/代碼規(guī)則設(shè)置

在這里插入圖片描述
Execute-only Code:只生成執(zhí)行代碼,生成執(zhí)行代碼防止編譯器生成任何數(shù)據(jù)訪問(wèn)代碼部分。
Optimization:優(yōu)化等級(jí),這個(gè)會(huì)比較常用,當(dāng)項(xiàng)目工程較大,對(duì)芯片空間比較吃緊時(shí),可以考慮提升優(yōu)化等級(jí)。ST的芯片這里有0~3,4個(gè)等級(jí)可選。
-O0應(yīng)用最小優(yōu)化:
大多數(shù)優(yōu)化都被關(guān)閉,生成的代碼具有最佳的調(diào)試視圖。
-O1應(yīng)用受限優(yōu)化:
例如,刪除未使用的內(nèi)聯(lián)函數(shù)和未使用的靜態(tài)函數(shù)。在這個(gè)優(yōu)化級(jí)別,編譯器還應(yīng)用自動(dòng)優(yōu)化,例如刪除冗余代碼和重新排序指令以避免互鎖情況。生成的代碼經(jīng)過(guò)合理優(yōu)化,具有良好的調(diào)試視圖。
-O2應(yīng)用高優(yōu)化(這是默認(rèn)設(shè)置):
在此級(jí)別應(yīng)用的優(yōu)化利用了ARM對(duì)處理器體系結(jié)構(gòu)的深入了解,利用給定目標(biāo)的特定于處理器的行為。它生成優(yōu)化良好的代碼,但有限調(diào)試視圖。
-O3應(yīng)用最積極的優(yōu)化:
優(yōu)化符合用戶的-Ospace / -Otime選擇。默認(rèn)情況下,多文件編譯時(shí)啟用,這會(huì)導(dǎo)致更長(zhǎng)的編譯時(shí)間,但會(huì)提供最高級(jí)別的優(yōu)化。
目前就使用經(jīng)驗(yàn)來(lái)看,優(yōu)化等級(jí)2節(jié)省的空間最多,具體原理還沒(méi)去細(xì)究。
在這里插入圖片描述

注:提升優(yōu)化等級(jí)后,對(duì)代碼的規(guī)范嚴(yán)格度提升,調(diào)試的友好程度會(huì)降低,請(qǐng)適當(dāng)使用。

Optimize for Time:按時(shí)間性能優(yōu)化,一般對(duì)代碼執(zhí)行時(shí)間比較敏感的,可以勾選這個(gè)選項(xiàng),但勾選后為了提升時(shí)間性能,編譯后可能會(huì)增加一部分空間占用。(魚(yú)與熊掌不可兼得呀)

Split Load and Store Multiple:加載和儲(chǔ)存多個(gè)分裂;非對(duì)其數(shù)據(jù)采用多次訪問(wèn)方式,當(dāng)LMD/STM指令有4個(gè)以上產(chǎn)生時(shí),則分裂LMD和指令,以減小中斷延遲。

One ELF Section per Function:優(yōu)化每一段函數(shù)ELF段(建議都勾選);每個(gè)函數(shù)都會(huì)產(chǎn)生一個(gè)ELF段,勾選該功能允許優(yōu)化每個(gè)ELF,可以減少潛在的共享地址、數(shù)據(jù)和函數(shù)之間的字符串;直白說(shuō)就是可以減少代碼量ROM的大小(內(nèi)存RAM不會(huì)減少)

Strict ANSI C:標(biāo)準(zhǔn)(嚴(yán)格)的ANSI C;即編譯時(shí)嚴(yán)格按照標(biāo)準(zhǔn)的ANSI C進(jìn)行檢查。為了養(yǎng)成良好的編程習(xí)慣,寫(xiě)出更具移植性的代碼,建議勾選。

Enum Container always int:枚舉時(shí)成員變量總為int型。如果空間吃緊,這里就不建議勾選了。

Plain Char is Signed(看情況選擇):字符類(lèi)型為有符號(hào)變量。這個(gè)不得不說(shuō)曾經(jīng)踩過(guò)的坑,原本有個(gè)項(xiàng)目,從C51平臺(tái)移植到ST的平臺(tái),發(fā)現(xiàn)怎么跑都不對(duì)勁,后面發(fā)現(xiàn)代碼里很多8位的變量定義用的是char,在C51平臺(tái)編譯器編譯成無(wú)符號(hào)類(lèi)型,到ST平臺(tái)就變成有符號(hào)類(lèi)型。所以很多教材里說(shuō)signed這個(gè)關(guān)鍵字可以省略,不適用于所有情況。為了可移植性,最好都寫(xiě)上,或者IDE里有類(lèi)似這種選項(xiàng)時(shí),要多留個(gè)心眼。

Read-Only Position Independent:為常量生成獨(dú)立的代碼空間;比如我們可以將字庫(kù)變量定義為常量,勾選該功能后會(huì)將這些字庫(kù)變量放在獨(dú)立的代碼空間中。

Read-Write Position Independent:為可讀寫(xiě)代碼生成獨(dú)立的代碼空間。

Warnings(建議All Warnings):No Warning:不會(huì)有警告提示和輸出;All Warnings:所有警告提示和輸出。建議選All Warnings,很多告警都不是空穴來(lái)風(fēng),檢查下好點(diǎn)。
在這里插入圖片描述

Thumb Mode(注意:在工程中該模式為默認(rèn),即無(wú)法選擇):Thumb模式;指定設(shè)置文件或文件夾(組)為T(mén)humb模式。

No Auto Includes(一般不勾選):不自動(dòng)添加頭文件;不勾選該項(xiàng)則編譯器會(huì)在Keil安裝路徑下尋找工程中的 .h 文件。如果使用了標(biāo)準(zhǔn)庫(kù),勾選后Keil只會(huì)在工程路徑下找?guī)旌瘮?shù)的頭文件,如果沒(méi)自己加進(jìn)來(lái)一般是找不到的。

C99 Mode(看情況選擇):C99模式,勾選選擇啟用C99標(biāo)準(zhǔn),如不勾選,則按C89標(biāo)準(zhǔn)來(lái)。為了高移植性,不建議勾選。
在這里插入圖片描述

  • 環(huán)境設(shè)置及配置

Include Paths:包含路徑,Keil編譯時(shí)查找頭文件,除了Keil本身安裝路徑下和自身工程路徑,還有一個(gè)就是這里添加的路徑。

Misc Controls:多功能控件,比如這里添加–gnu,可以使用gnu編程規(guī)范。

Compiler control string:編譯器控制字符串,這個(gè)只是用來(lái)看當(dāng)前的一些編譯器設(shè)置,通過(guò)上面不同的勾選設(shè)置,這里會(huì)有不同的顯示。如果沒(méi)有Keil這種界面化工具,自己想要給編譯器設(shè)置,就可以使用該窗口中的這些指令。
在這里插入圖片描述

7、匯編設(shè)置(Asm)

在這里插入圖片描述
這一部分基本可以參考上文C/C++的設(shè)置,只不是這里是對(duì)匯編進(jìn)行設(shè)置。

Conditional Assembly Control Symbols(有條件的裝配控制符號(hào))
Define:定義,指定匯編條件。

Language/Code Generation(語(yǔ)言代碼生成)
Read-Only Position Independent:為常量生成獨(dú)立的代碼空間。
Read-Write Position Independent:為可讀寫(xiě)代碼生成獨(dú)立的代碼空間。
Thurmb Mode:Thumb模式;指定設(shè)置文件或文件夾(組)為T(mén)humb模式。
No Warnings:無(wú)警告,勾選后不會(huì)有warning警告提示。
Split Load and Store Multiple:加載和存儲(chǔ)多個(gè)分裂。
Execute-only Code:只生成執(zhí)行代碼。
No Auto Includes:不自動(dòng)添加頭文件(一般不勾選)。
Include Paths:頭文件包含路徑。
Misc Controls:多功能控件。
Assembler control string:編譯器控制字符串。

8、鏈接設(shè)置(Linker)

鏈接器設(shè)置
Use Memory Layout from Target Dialog:使用分散文件加載對(duì)話框Target頁(yè)面,這個(gè)需要配置"Scatter File"一起使用。當(dāng)勾選時(shí),其ROM和RAM的設(shè)置使用的是前文提到的Target里ROM、RAM的設(shè)置。當(dāng)不勾選時(shí),需要在Scatter File里打開(kāi)對(duì)應(yīng)的sct文件進(jìn)行編輯。

Make RW Sections Position Independent:使RW段獨(dú)立。
啟用時(shí):變量區(qū)域(包含RW和ZI)具有獨(dú)立地址。
禁用時(shí):變量區(qū)域(包含RW和ZI)位于絕對(duì)的內(nèi)存地址。
Make RO Sections Position Independent:使RO段獨(dú)立。
啟用時(shí):常量和代碼區(qū)域(RO)具有獨(dú)立地址。
禁用時(shí):常量和代碼區(qū)域(RO)位于絕對(duì)的內(nèi)存地址。

一般這兩項(xiàng)都是禁用狀態(tài),即程序所有編譯出來(lái)的函數(shù)、變量等,都使用絕對(duì)地址,在Map文件中查看到的都是一個(gè)絕對(duì)地址,燒入板子中即可使用。那什么時(shí)候會(huì)把它開(kāi)啟呢?當(dāng)有需要用到多個(gè)App,且App起始地址不固定時(shí),就要使用此功能了。這個(gè)有興趣可以單獨(dú)開(kāi)一篇詳細(xì)討論下。

Don’t Search Standard Libraries:不搜索標(biāo)準(zhǔn)庫(kù)。

Report 'might fail’ Conditions as Errors:報(bào)告’might fail’條件認(rèn)為是錯(cuò)誤。

X/O Base:X/O基地址
R/O Base:R/O基地址
R/W Base:R/W基地址
disable Warnings:禁止告警命令
在這里插入圖片描述

Misc controls:多功能控件。
Linker control string:鏈接器控制字符串。
在這里插入圖片描述

9、調(diào)試設(shè)置(Debug)

通過(guò)單選"Use Simulator"和"Use XXX"選擇是用模擬仿真還是在線仿真
在這里插入圖片描述

1. 在線仿真

Use ST-Link Debugger:選擇燒錄器類(lèi)型
在這里插入圖片描述

  • 啟動(dòng)位置設(shè)置

Load Application at Startup:從啟動(dòng)文件開(kāi)始加載。不勾選時(shí),在進(jìn)入調(diào)試時(shí),不會(huì)重新從啟動(dòng)開(kāi)始執(zhí)行,但不勾選時(shí),需要手動(dòng)添加.ini文件,把.axf的調(diào)試信息放到Keil里,不然進(jìn)入調(diào)試時(shí)無(wú)法打斷點(diǎn),也無(wú)法追蹤到當(dāng)前程序位置。這點(diǎn)在網(wǎng)上查“如何不復(fù)位進(jìn)入調(diào)試”很多會(huì)提到這個(gè)勾選項(xiàng),但很少有提及這個(gè).ini的事情,有也是一帶而過(guò)。

Initlalization File:初始化文件,承接上文,只要新建一個(gè)XXX.ini文件(文件名隨意),點(diǎn)擊…按鈕,添加該文件,點(diǎn)旁邊的"Edit"按鈕,在文件中添加 “LOAD %L INCREMENTAL” 這一句即可。

LOAD %L INCREMENTAL

Run to main():跑進(jìn)main函數(shù),進(jìn)入調(diào)試后,會(huì)在main里停止,相當(dāng)于是在main的第一行打了第一個(gè)斷點(diǎn)。如果不勾選時(shí),一進(jìn)入調(diào)試就全速跑。
在這里插入圖片描述

  • 復(fù)位調(diào)試會(huì)話設(shè)置(Restore Debug Session Settings)

使用上一次調(diào)試過(guò)程對(duì)Breakpoints,Watchpoints,Memory Display和Toolbox(如果這些項(xiàng)被選中的話)
Breakpoints:斷點(diǎn)。
Watch Windows:變量調(diào)試窗口。
Memory Display:查看內(nèi)存的窗口。
Toolbox:工具欄。
System Viewer:系統(tǒng)視圖。
在這里插入圖片描述

  • 動(dòng)態(tài)庫(kù)設(shè)置

Driver DLL:驅(qū)動(dòng)動(dòng)態(tài)庫(kù)文件,后面Parameter是其對(duì)應(yīng)參數(shù)。
Dialog DLL:會(huì)話框動(dòng)態(tài)庫(kù)文件,后面Parameter是其對(duì)應(yīng)參數(shù)。
這些是仿真的時(shí)候需要用到的動(dòng)態(tài)庫(kù),一般不用修改,使用默認(rèn)值就行,這些動(dòng)態(tài)庫(kù)在Keil的安裝路徑下了可以找得到。
在這里插入圖片描述

  • Settings:設(shè)置,對(duì)選擇的燒錄器進(jìn)行設(shè)置。這里以ST-Link為例(不同燒錄器設(shè)置界面不同)。
Debug:調(diào)試選項(xiàng)欄

在這里插入圖片描述

  • 調(diào)試適配器(Debug Adapter)

Unit:當(dāng)前連接的燒錄器設(shè)備,當(dāng)同時(shí)連有多個(gè)設(shè)備時(shí),這里可以切換選擇。如果這里沒(méi)有可選設(shè)備,說(shuō)明當(dāng)前電腦未識(shí)別到燒錄器設(shè)備。
Serial:設(shè)備
Version FW:固件版本
HW:硬件版本號(hào)
在這里插入圖片描述

  • 目標(biāo)通信(Target Com)

Port :端口類(lèi)型,可以選擇SW或JTAG接口,如果用的是Nucleo開(kāi)發(fā)板,這里選SW接口。
Clock:時(shí)鐘設(shè)置,可以設(shè)置調(diào)試的速度。
Req:請(qǐng)求頻率
Selected:實(shí)際頻率
在這里插入圖片描述

  • 調(diào)試設(shè)置(Debug)

連接跟復(fù)位設(shè)置(Connect & Reset Options)
Connect:連接設(shè)置,Normal
Reset:復(fù)位設(shè)置
Reset after Connect:連接后復(fù)位,不勾選時(shí)可以在進(jìn)入調(diào)試時(shí)不中斷當(dāng)前設(shè)備運(yùn)行。
緩存設(shè)置(Cache Options)
Cache Code:緩存代碼,通知調(diào)試器已經(jīng)下載的程序代碼不會(huì)改變,選中的話uVision將不會(huì)從目標(biāo)系統(tǒng)讀取程序代碼。
Cache Memory:緩存內(nèi)存,決定調(diào)試程序期間程序停止運(yùn)行的時(shí)候,是否更新存儲(chǔ)器顯示。
下載設(shè)置(Download Options)
Verify Code Download:下載時(shí)檢驗(yàn)代碼。比較目標(biāo)存儲(chǔ)器和調(diào)試器上的應(yīng)用程序的內(nèi)容。
Download to Flash:下載至Flash。將代碼下載到所有的存儲(chǔ)器區(qū)域,如果不選中,調(diào)試器不會(huì)把代碼下載到Flash Download Setup中指定的存儲(chǔ)器地址范圍。

在這里插入圖片描述

  • 實(shí)際SW連接的設(shè)備(SW Device)

SWDIO:通過(guò)SWD接口連接的設(shè)備列表,其中IDCODE為連接的設(shè)備ID,Device Name為連接的設(shè)備名稱。如果當(dāng)前燒錄器跟芯片之間沒(méi)有正常連接,此處不顯示設(shè)備名稱。
在這里插入圖片描述

Trace:追蹤選項(xiàng)欄

在這里插入圖片描述

Core Clock:核心時(shí)鐘頻率。設(shè)置跟當(dāng)前板子相同的時(shí)鐘頻率,可以在調(diào)試時(shí)按實(shí)際運(yùn)行時(shí)間進(jìn)行追蹤調(diào)試。
Trace Enable:使能追蹤功能。

Flash Download:Flash下載選項(xiàng)欄

在這里插入圖片描述

  1. 下載動(dòng)作設(shè)置(Download Function)

Erase Full Chip:擦除整片
Erase Sectors:擦除部分
Do not Erase:不擦除
勾選Erase Full Chip時(shí),每次下載時(shí),都會(huì)對(duì)整片F(xiàn)lash進(jìn)行擦除操作。勾選Erase Sectors時(shí),下載時(shí)只會(huì)擦除使用到的扇區(qū)。勾選Do not Erase時(shí),則下載時(shí)不擦除原本代碼。
Program:燒錄
Verify:校驗(yàn)
Reset and Run:復(fù)位并運(yùn)行
勾選Program時(shí),下載時(shí)才會(huì)把代碼寫(xiě)入Flash,否則不寫(xiě)入。勾選Verify時(shí),則在燒錄代碼后,對(duì)代碼進(jìn)行校驗(yàn)。某些場(chǎng)合下不能檢驗(yàn),比如代碼段跟數(shù)據(jù)段分開(kāi)下載,代碼里不包含數(shù)據(jù)部分,而工程里配置的代碼段又包含數(shù)據(jù)段時(shí),此時(shí)如果進(jìn)行校驗(yàn),可能會(huì)因?yàn)閿?shù)據(jù)內(nèi)容不一致導(dǎo)致校驗(yàn)失敗。勾選Reset and Run時(shí),則在下載完成后立即復(fù)位運(yùn)行代碼,不勾選時(shí)則需要手動(dòng)復(fù)位運(yùn)行。
在這里插入圖片描述

  1. 燒錄算法

RAM for Algorithm:給燒錄算法的RAM空間,Start和Size分別設(shè)置對(duì)應(yīng)Ram空間的起始地址和大小,這個(gè)一般選擇完芯片后按默認(rèn)就行,不用修改,如果有需要直接燒寫(xiě)的片外Flash的,可能需要自己寫(xiě)燒寫(xiě)算法的,此時(shí)就需要關(guān)注這個(gè)Ram空間是否容得下自己編寫(xiě)的燒錄算法大小,需要做適當(dāng)?shù)恼{(diào)整。
在這里插入圖片描述
Programming Algorithm:燒錄算法選擇,一般選擇完芯片后,這里都會(huì)自動(dòng)選擇對(duì)應(yīng)的燒錄算法,如果不顯示則需要手動(dòng)添加,不然會(huì)導(dǎo)致燒錄失敗。如果是使用國(guó)產(chǎn)芯片,也需要手動(dòng)添加燒錄算法。添加方式很簡(jiǎn)單,把對(duì)應(yīng)的算法文件(后綴是FLM)放到Keil安裝根目錄Keil_v5/ARM/Flash路徑下,點(diǎn)Add按鈕,選擇對(duì)應(yīng)的文件即可。
在這里插入圖片描述

2. 離線模擬仿真

????基本設(shè)置跟在線是一樣的,多了一個(gè)"Limit Speed to Real-Time"的選項(xiàng),意思是把速度限制到實(shí)際時(shí)間。但Keil怎么知道實(shí)際速度是怎么樣的呢?所以這里還需要設(shè)置一個(gè)運(yùn)行頻率,即前文說(shuō)到,在Target里有個(gè)頻率設(shè)置。勾選此選項(xiàng)后,在離線仿真時(shí),代碼執(zhí)行速度就是按設(shè)定的運(yùn)行頻率來(lái)跑,接近實(shí)際板子的速度。如果不勾選,那就直接起飛了(按電腦頻率來(lái)跑,有多快跑多快)。
在這里插入圖片描述
在這里插入圖片描述

10、實(shí)用程序(Utilities)

在這里插入圖片描述

  • 配置FLASH菜單命名(Configure Flash Menu Command)

Use Target Driver for Flash Programming:使用跟調(diào)試一致的燒錄器進(jìn)行Flash下載。
Use Debug Driver:使用調(diào)試設(shè)備,即下載和調(diào)試使用同一種燒錄器設(shè)備。
Update Target before Debugging:在調(diào)試前更新代碼,勾選后一般是只有在剛打開(kāi)工程或編譯后,第一次進(jìn)入調(diào)試時(shí),會(huì)把當(dāng)前代碼燒錄進(jìn)目標(biāo)板再進(jìn)行調(diào)試。不勾選則進(jìn)入調(diào)試時(shí)不更新代碼。

Use External Tool for Flash Programming:使用第三方的工具進(jìn)行Flash下載。
Command:要使用的Flash燒寫(xiě)工具的命令文件(通常是一個(gè).exe文件)。
Arguments:傳遞給Flash燒寫(xiě)工具的參數(shù)。
Run Independent:當(dāng)選中的時(shí)候,uVision不等待Flash燒寫(xiě)完成。不選中的時(shí)候uVision要等待Flash燒寫(xiě)完成并且在輸出窗口顯示燒寫(xiě)結(jié)果。

  • 配置圖像文件的處理(Configure Image File Processing(FCARM))

通過(guò)在編譯過(guò)程中調(diào)用FCARM,輸入配置映像文件處理(FCARM)的選項(xiàng)。這將把鏡像文件轉(zhuǎn)換成c源代碼。其中Output File為輸出的c文件名,Add Output File to Group這個(gè)默認(rèn)不需要修改,Image Files Root Folder填寫(xiě)需要轉(zhuǎn)換的鏡像文件

四、注意事項(xiàng)

  1. 部分工程配置后差異化編譯是不會(huì)識(shí)別進(jìn)去的,需要全編譯才能生效,所以改了工程配置后,建議都全編譯一下。
  2. 使用sct文件的情況下,需要注意sct文件和前面ROM、RAM配置二者選一,通過(guò)"Use Memory Layout from Target Dialog"勾選是否使用sct文件。(不勾選時(shí)使用sct文件)。

五、相關(guān)知識(shí)

????STM32、RTX、FPU、SVD、Hex、Bin、axf、Lib、sct、燒錄算法、啟動(dòng)文件、Map文件。
相關(guān)文章:Keil5軟件使用-基礎(chǔ)使用篇Keil5軟件使用-進(jìn)階調(diào)試篇、Keil軟件包-知識(shí)寶藏庫(kù)

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多