KEIL工程目標選項配置


打開目標選項的兩種方法

1.點擊目標選項快捷按鈕,如下圖:

 

2.從菜單中打開,Project -> Options for Target,如下圖:

 

1.Device設備(器件)

新建工程第一個就是選擇設備(器件)。強調一點就是:器件可以通過 輸入查找 ,也可以通過 列表查找

   

2.Target目標

 

1處:晶振頻率。

   

這個值主要用於仿真調試用,一般我們使用硬件調試可以不用管這個值。

   

   

2處:操作系統。

   

很好理解,是否選擇Keil自帶的RTX操作系統,一般我們都不選。

   

   

3處:系統預覽文件。

   

這里我們一般是默認使用系統自帶,不選擇自己定義的。

   

   

4處:生成代碼所選擇的編譯器。

   

   

5處:使用交叉模塊優化、使用微庫。

   

交叉模塊一般我們不使用,微庫這個功能常用與printf函數。

   

   

6處:ROM存儲地址。

   

這里的ROM存儲指的是程序儲存的地址,分片外和片內兩種。

   

程序存儲在片內好理解(初學者一般下載程序都是下載到片內FLASH,片外存儲程序對於初學者來說比較少見,一般都是項目做大了,或有特殊要求時,片內不夠使用了才將程序存儲在片外。常見使用片外的例子"外部NorFlash存儲程序代碼"就會用到片外的存儲地址。

   

   

7處:RAM存儲地址。

   

RAM存儲地址和ROM道理一樣,可以分片內和片外。常見例子"外部SRAM作為運行內存"。

   

   

3.Output輸出

從選項名"Output"可以知道該選項里面內容的主要意思,就是輸出一系列相關的內容。輸出分兩類:

   

1.輸出(創建)可執行文件,我們下載到處理器里面的程序就是該類;

   

2.輸出庫,對於初學者來說一般不使用庫,但對於很多從事特殊行業技術開發的公司來說,可能比較常用該功能。

   

   

1處:輸出路徑。

   

輸出路徑就是在工程編譯的過程中,輸出這些文件保存的文件夾。Keil V5一般默認是保存在Objects文件夾下面,我建立工程一般也使用這個默認的路徑。【其內容可以全部刪除,最好配置在單獨一個文件夾下面,代碼備份時方便刪除】

   

   

2處:輸出可執行文件名。

   

輸出的可執行文件和庫的名稱就是在這里定義。比如我們常見輸出Hex文件,其名稱就是這里定義的。

   

 

   

3處:輸出可執行文件(重點)。

   

這里和輸出庫是二選一,選擇了輸出可執行文件就不能選擇輸出庫。重要一點:輸出這些信息都很費時間,如果都不勾選這些選項,編譯速度會很快。

   

Debug Infomation:輸出調試信息。勾選上這個選項,我們才可以進行調試。

   

Create HEX File:輸出可執行Hex文件,很多初學的朋友問:"在哪里設置生成Hex?",這里勾選上就行了。

   

Browse Information:輸出瀏覽信息。勾選上這個我們才能使用go to definition of這個功能。很多人問:"為什么我不能跟蹤代碼了",原因就在這里。

   

   

   

4處:輸出庫。

   

拓展一點:這里輸出(生成)的是靜態庫,並非動態庫。初學者可以不用去理解。

   

4.Listing列表

這個選項 是關於生成列表相關的選項,對代碼分析比較透徹的工程師就需要了解這個選項。常見的就是 map 地址的分布,就是在這里配置生成的

   

1處:輸出路徑、寬高。

   

選擇列表文件輸出的文件夾。可設置文件頁面的寬度,長寬。

   

   

2處:輸出匯編列表。

   

勾選上會輸出匯編列表信息(產生后綴為 .lst的文件)。如果工程中沒匯編文件,則不會輸出信息。

   

3處:C編譯列表。

   

C編譯程序列表選項,勾選上可生成.txt, .i文件。

   

   

4處:鏈接列表。

   

可選擇生成或禁止生成.map文件。可設置生成代碼的詳細信息。可選擇性的選取輸出MAP文件。

   

   

5.User用戶選項

這個選項是針對用戶而設計的,一般不常用,方便用戶執行一些程序。比如:編譯完代碼之后,我要將生成的Hex文件拷貝到其它地方。

   

   

縱觀下圖可以看見,第123處作用相同,都是讓用戶運行程序,只是運行的條件不同而已。上面說的用戶程序,勾選上,可以"DOS16模式"運行。

   

   

1處:編輯之前運行用戶程序。

   

   

2處:編譯之前運行用戶程序。

   

   

3處:編譯之后運行用戶程序。

   

   

4處:編譯之后執行條件。

   

Run "After Build" conditionally:執行條件;

   

Beep When Complete:編譯完成發出聲音;

   

Start Debugging:啟動調試程序。

   

   

   

   

6C/C++選項

C/C++ 選項最為重要,因此部分功能需要 重點強調 。看選項標題 "C/C++",針對的主要就是C/C++ ,和后一個選項" Asm "有類似之處。

   

   

   

1處:預處理(Preprocessor Symbols

這里主 要就是預定義功能, 相當於在程序中的#define xxxx 。我上面預定義 STM32F10X_HD ,在 stm32f10x.h 文件中就不用定義了。

   

2處:語言代碼生成(Language / Code Generation

Language/code Generation語言代碼生成,可以理解成編譯、鏈接到最后生成代碼。這部分功能對於代碼優化比較重要,初學者可以不用過多理解,對代碼大小、運行速度等性能要求較高的人就需要深入理解

   

   

Execute only Code:只生成執行代碼;

   

【設置編譯器命令行:--execute_only

   

只生成執行代碼防止編譯器生成任何數據訪問代碼部分。

   

 

   

Optimize:優化選擇項,有Level0 - Level3四個選項。

   

【設置編譯器命令行:-Onum

   

初學者、在線調試建議使用Level0,也就是不優化,這樣執行的效果才和代碼一樣。如果配置成Level3,在線調試可能有些地方優化而不能打斷點。

   

 

   

Optimize for Time:優化時間,即優化代碼中費時的地方。

   

【設置編譯器命令行:-Otime --split_sections

   

比如有些算法,本身代碼量就比較大,運行需要很長時間(假如需要2秒),這個時候勾選上該功能,會發現運行時間有比較明顯的減少(或許不到1秒時間)。

   

 

   

Split Load and Store Multiple:加載和存儲多個分裂。

   

【設置編譯器命令行:--split_ldm

   

非對齊數據采用多次訪問方式。當 LMD/STM 指令有 4 個以上產生時,列分裂LMD STM 指令,以減不中斷延遲。

   

 

   

One ELF Section per Function:優化每一個函數 ELF 段(建議都勾選上)。

   

【設置編譯器命令行:--split_sections

   

每個函數都會產生一個 ELF 段,勾選上,允許優化每一個 ELF 段。這個選項可以減少潛在的共享地址、數據和函數之間的字符串。

   

直白的意思:可以減少代碼量ROM的大小(內存RAM不會減小)。

   

 

   

舉一個例子,勾選之前和勾選之后,編譯后存儲大小對比:

   

勾選之前:

   

Program Size: Code=2540 RO-data=336 RW-data=40 ZI-data=1024

   

勾選之后:

   

Program Size: Code=908 RO-data=320 RW-data=40 ZI-data=1024

   

 

   

Strict ANSI C:標准(嚴格)的ANSC

   

【設置編譯器命令行:--strict

   

也就是說:編譯時嚴格按照標准的ANSI C進行檢查。

   

 

   

Enum Container always int:枚舉總是int

   

【設置編譯器命令行:--enum_is_int

   

很容易理解,我們枚舉時成員變量類型為int型。

   

 

   

Plain Char is Signed:純字符標記為字符。

   

【設置編譯器命令行:--signed_chars

   

代碼舉例:char a[] = "abcd"; 也就是說將"abcd"標記為字符型。

   

 

   

Read-Only Position Independent:為常量生成獨立的代碼空間。

   

【設置編譯器命令行:--apcs=/ropi

   

比如:我們定義字庫變量為常量,勾選該選項,會將這些字庫變量放在獨立的代碼空間。

   

 

   

Read-Write Position Independent:為可讀寫代碼生成獨立的代碼空間。

   

【設置編譯器命令行:--apcs=/rwpi

   

 

   

Warnings:警告

   

No Warnings設置編譯器命令行:-W

   

No Warnings:不會有警告提示和輸出;

   

All Warnings:所有警告提示和輸出。

   

 

   

Thumb ModeThumb模式。

   

指定設置文件或文件夾(組)為Thumb模式。

   

【注意:在工程中該模式為默認,也就是不能選擇】

   

 

   

No Auto Includes:不自動添加頭文件(一般不勾選)。

   

不勾選該選項,編譯器就會在Keil安裝路徑尋找你工程中.h文件。

   

舉例:我們定義uint8_t是定義在stdint.h文件里面的,但是我們工程目錄下一般是沒有stdint.h文件。這時候,編譯器就會在Keil路徑下去尋找stdint.h文件。

   

 

   

C99 Mode:C99標准模式。

   

【設置編譯器命令行:--c99

   

C語言有標准有多個版本,如C89C90C99等。

   

 

   

3處:包含路徑(Include Paths

包含路徑 是使 Keil (及類似)軟件必須掌握的一項。包含路徑就是 指定我們工程中使用文件所在的位置,讓編譯器找到相應的文件 。是初學者、高級軟件工程師都必須掌握的一項。

   

   

4處:多功能控件(Misc Controls

指定沒有單獨的對話框控件。例如:錯誤消息用日本語言來顯示消息。【不常用】

   

 

   

5處:編譯器控制字符串(Compiler control string

這里是針對編譯器執行的命名,顯示當前在編譯器命令行指令。

   

在上面"第2處:語言代碼生成"中有一個中括號【設置編譯器命令行:】

   

里面的命名就顯示在這里。

   

7Asm選項

從這個選項的排版和結構可以知道,和前面一個選項"C/C++"類似,只是這里針對的是Asm。因此,這一章節只簡述,不會重點強調,可以參看上一章節進行對比,第345處和C/C++選項一樣,這里不講述。

   

   

1處:有條件的裝配控制符號(Conditional Assembly Control Symbols

指定匯編條件,這里類似上一章節C/C++選項中的預處理。

   

 

   

2處:語言代碼生成(Language / Code Generation

和上一章節類似。

   

 

   

Read-Only Position Independent:為常量生成獨立的代碼空間。

   

 

   

Read-Write Position Independent:為可讀寫代碼生成獨立的代碼空間。

   

 

   

Thumb ModeThumb模式。

   

 

   

Split Load and Store Multiple:加載和存儲多個分裂。

   

 

   

Execute only Code:只生成執行代碼;

   

 

   

No Auto Includes:不自動添加頭文件(一般不勾選)。

   

 

   

8Linker選項

這個選項Linker鏈接,也就是是鏈接器配置選項。可以修改、編輯和查看鏈接的文件。第12處是重點,第34處和C/C++選項一樣,這里不講述。

   

   

1處:使用分散文件加載對話框Target頁面(Use Memory Layout from Target Dialog

Make RW Sections Position Independent:使RW段獨立。

   

【設置編譯器命令行:--rwpi

   

啟用時:變量區域(包含RWZI)具有獨立地址。

   

禁用時:變量區域(包含RWZI)位於絕對的內存地址。

   

 

   

Make RO Sections Position Independent:使RO段獨立。

   

【設置編譯器命令行:--ropi

   

啟用時:常量和代碼區域(RO)具有獨立地址。

   

禁用時:常量和代碼區域(RO)位於絕對的內存地址。

   

 

   

Don't Search Standard Libraries:不搜索標准庫。

   

【設置編譯器命令行:--noscanlib

   

禁用默認編譯器運行時庫的掃描。

   

 

   

Report 'might fail' Conditions as Errors:報告'might fail'條件認為是錯誤。

   

【設置編譯器命令行:--strict

   

報告的條件可能導致失敗的錯誤,而不是警告。

   

 

   

X/O BaseX/O基地址。

   

【設置編譯器命令行:--xo_base=address

   

 

   

R/O BaseR/O基地址。

   

【設置編譯器命令行:--ro_base=address

   

 

   

R/W BaseR/W基地址。

   

【設置編譯器命令行:--rw_base=address

   

 

   

disable Warnings:警用警告。

   

【設置編譯器命令行:--diag_suppress

   

 

   

2處:分散文件(Scatter File

這里可以加載、查看和編輯分散文件。點擊后面就的三點"..."可以加載文件;點擊"Edit..."查看和編輯對應的文件。

   

   

 

   

9Debug選項

這個選項比較重要,主要用於(軟件仿真、硬件在線)調試使用。由於軟件仿真和硬件在線調試配置界面基本一致,而現在我們基本都是硬件在線調試。因此,只選擇硬件在線調試界面進行講述。

   

   

1處:選擇硬件在線調試

下載調試器的選擇不用多說,主要說一下后面"Setting"。很多人常用J-Link下載調試器,而調試STM32時,可以使用四線SWD模式。如果使用J-Link進行SWD調試。這個時候就需要在"Setting"里面選擇"SW"模式,如下如:

   

   

   

2處:選擇硬件在線調試

Load Application at Startup:啟動時加載應用程序。

   

 

   

Run to main():程序執行到main()函數。

   

進入調試模式時,程序自動運行到main函數處。

   

Initialization File:加載、編輯初始化文件。

   

這里在某些情況下可以使用,比如:在RAM中調試代碼。可以參看我的文章:STM32內部RAM在線調試配置方法及詳細說明(基於Keil開發工具)。

   

 

   

3處:復位調試會話設置(Restore Debug Session Settings

這里復位設置就是恢復設置的意思,如果勾選上,點擊一下"復位"就會恢復到之前的狀態。包括:斷點Breakpoints、窗口Watch Windows、性能分析器 Performance Analyzer、內存窗口Memory Window、工具箱Toolbox、系統查閱器System Viewer等。

   

 

   

4處:DLL文件(最好默認)

這里的配置屬於Keil自身的配置,最好不要修改。

   

CPU/Driver DLL - ParameterCPU驅動文件和參數。

   

 

   

Dialog DLL - Parameter:會話框DLL文件和參數。

   

 

   

5處:管理組件描述文件

Manage Component Viewer Description Files

   

這里一般不用去管理。

   

 

   

10Utilities選項

本章節內容公共選項,內容比較簡單。

   

   

1處:配置FLASH菜單命名(Configure Flash Menu Command

這里是二選一選項,一般我們使用上面的"Update Target Driver for Flash Programming"

   

 

   

Use Debug Driver:使用調試驅動。

   

Update Target Before Debugging:調試之前更新目標。

   

一般都勾選上,因為我們下載程序之前檢測到代碼修改了,就會重新編譯程序(也就是更新目標)

   

Setting:設置。

   

很多人下載程序之后,需要復位一下程序才運行,原因在於沒有勾選"Reset and Run",如下圖:

   

   

 

   

2處:配置圖像文件的處理(Configure Image File Processing

這個選項我們不常用,感興趣的朋友可以自行了解一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM