1. 程式人生 > >Keil(MDK-ARM)系列教程(三)_工程目標選項配置(Ⅰ)

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

Ⅰ、寫在前面

Options for Target目標選項其完全意思是工程目標選項配置,或許有些人分不清工作空間、工程、目標這三個名詞的意思和區別,下面章節將簡述工作空間、工程、目標他們的意思。

由於目標配置的選項比較多,我將其分為工程目標選項配置(Ⅰ)工程目標選項配置(Ⅱ)兩篇文章來講述。

目標選項包含了一個工程目標所有的配置資訊,這些資訊是儲存在工程檔案中的,也就是我們每次雙擊開啟工程的檔案(.uvprojx)和對應的(.uvoptx)檔案。看過我(打包)程式碼的人應該知道,我的工程檔案就保留了這兩個檔案,其它生成的檔案我全部刪除了的。

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

Ⅱ、本文要點

本文主要講述的是目標選項的配置,但為了讓更多人明白什麼是目標選項,首先將簡述工作空間、工程、目標的意思和區別。

1.開啟目標選項的兩種方法

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

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

2.本文所講述的目標選項

由於目標選項裡面內容較多,本文只講述前五項,後五項在下一篇文章講述。本文旨在讓大部分人明白目標選項的配置,為了使文章內容精簡過於簡單不常用過於複雜只簡述

Ⅲ、簡述工作空間、工程、目標

本章節內容與主題關係不大,若你掌握了,可以繞過

。主要為了使更多的人明白這幾個詞的意思。本節內容這種複雜的結構,對於初學者基本使用不上,但可以適當瞭解。當以後專案做大了,可能會使用到工作空間。

工作空間、工程、目標它們三個是從大到小依次包含的關係,也就是說:一個工作空間可以有多個工程,一個工程可以有多個目標。工作空間下的工程可以是完全獨立的,工程下的目標基本上都有共同之處(比如:共用某些程式碼),它們工程專案統一管理。簡單示意圖,如下:

舉個例子:一個專案,由主機從機組成,但專案為了區分產品的高低端,將產品做成簡單複雜兩個版本(簡單版只保留複雜版的部分功能)。舉例示意如下圖:

本節內容不過多描述,在大型的實際專案中容易看見,一般不是很大專案,基本就是一個工程,一個目標或多個目標。初學者一般都是一個工程對應一個目標,這樣簡單明瞭。若是初學者,不能理解可以略過。

Ⅳ、工程目標選項配置(Ⅰ)

本節講述工程目標前五項的配置,這裡面有些內容在我們新建工程時都已經使用過,下面將詳細講述每一個選項配置的內容。

1.Device裝置(器件)

這個選項不用多說,新建工程第一個就是選擇裝置(器件)。強調一點就是:器件可以通過輸入查詢,也可以通過列表查詢

2.Target目標

這裡說的目標和上面說的工程目標不一樣,是工程目標目標。從內容可以看得出來是工程目標的除錯晶振頻率、選擇的編譯器、RAM和ROM分配的地址空間等。

第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檔案拷貝到其它地方。

縱觀下圖可以看見,第1、2、3處作用相同,都是讓使用者執行程式,只是執行的條件不同而已。上面說的使用者程式,勾選上,可以“DOS16模式”執行。

第1處編輯之前執行使用者程式。

第2處編譯之前執行使用者程式。

第3處編譯之後執行使用者程式。

第4處:編譯之後執行條件。

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

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

Start Debugging:啟動除錯程式。

Ⅴ、說明

每一種工具的功能都是需要自己親自實踐,並長期使用才能達到靈活運用的地步,不建議死記硬背。若要了解更多關於Keil的系列教程,可以進入我微信公眾號或部落格檢視。

為了照顧大部分人,本文采用標記、主要說明和闡述的方式對每一項內容進行講述。如果內容詳盡,會讓篇幅過於繁雜,且不易找到重點。

以上內容僅供參考,若有不對之處,敬請諒解。

Ⅵ、最後

微信公眾號:EmbeddDeveloper