日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【STM32】 keil软件工具--工程目标选项配置(下)

發布時間:2024/4/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【STM32】 keil软件工具--工程目标选项配置(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載至:https://blog.csdn.net/ybhuangfugui/article/details/51501781

Ⅰ、寫在前面

本文接著上一篇文章“工程目標選項配置(Ⅰ)”進行講述工程目標選項中后五項的配置,也就是C/C++、Asm、Linker、Debug、Utilities這五項配置的具體內容。

?

對于工程目標選項中的C/C++選項,不管是初學者,還是資深的軟件工程師都非常重要。初學者要掌握包含路徑、預定義等常規功能。資深軟件工程師對代碼性能有很高要求,就需要掌握代碼優化等各項配置。

?

閱讀本文之前建議先閱讀上一篇文章:

Keil(MDK-ARM)系列教程(三)_工程目標選項配置(Ⅰ)

?

本文內容已經整理成PDF文件,提供給大家下載:

http://pan.baidu.com/s/1nuJ0RDR

?

Ⅱ、C/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 Mode:Thumb模式。

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

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

?

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

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

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

?

C99 Mode:C99標準模式。

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

C語音有標準有多個版本,如C89、C90、C99等。

?

第3處:包含路徑(Include Paths)

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

這個選項在前面文章“Keil(MDK-ARM)系列教程(一)_新建軟件工程詳細過程”中都已經講述過,比較容易理解,也比較簡單。

?

第4處:多功能控件(Misc Controls)

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

?

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

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

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

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

?

Ⅲ、Asm選項

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

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

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

?

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

和上一章節類似。

?

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

?

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

?

Thumb Mode:Thumb模式。

?

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

?

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

?

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

?

Ⅳ、Linker選項

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

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

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

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

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

禁用時:變量區域(包含RW和ZI)位于絕對的內存地址。

?

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 Base:X/O基地址。

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

?

R/O Base:R/O基地址。

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

?

R/W Base:R/W基地址。

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

?

disable Warnings:警用警告。

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

?

第2處:分散文件(Scatter File)

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

?

Ⅴ、Debug選項

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

第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 - Parameter:CPU驅動文件和參數。

?

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

?

第5處:管理組件描述文件

Manage Component Viewer Description Files

這里一般不用去管理。

?

Ⅵ、Utilities選項

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

第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)

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

?

總結

以上是生活随笔為你收集整理的【STM32】 keil软件工具--工程目标选项配置(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。