STM32工程模板建立之 FLASH 目標(biāo)(四)

在前面的基礎(chǔ)上開始建立 FLASH 目標(biāo)。

打開工程管理面板:

新建目標(biāo),然后可以發(fā)現(xiàn)右邊的 group 和 Files 自動將 Simulation 目標(biāo)的內(nèi)容復(fù)制過來了,注意這只是它們的包含關(guān)系,并不是將實(shí)際的文件進(jìn)行了復(fù)制(在實(shí)際的文件夾中你會發(fā)現(xiàn) main.c 文件還是只有一個)。點(diǎn)擊 OK,即完成了目標(biāo)的創(chuàng)建。(可以拖動工程目標(biāo)、組、文件以更改排列順序,不過在一個目標(biāo)里更改,另一個目標(biāo)也會進(jìn)行相應(yīng)的更改)

這樣一來,在一個工程內(nèi)就存在兩個目標(biāo)了:Simulation & Flash(Debug)。如下圖:

注意兩個目標(biāo)之間的文件關(guān)系是一樣的,如果將一個目標(biāo)文件移除,那么另一目標(biāo)也會移除。比如說在 Flash(Debug) 目標(biāo)中將 main.c 通過以下方式移除。

那么在 Simulation 中也會顯示已移除該文件。

那么文件都一樣,這樣兩個目標(biāo)有什么用呢?據(jù)我所知有兩種方式可以得到兩個不同的目標(biāo):

1、
增加宏定義

在 Options 中增加宏定義(事實(shí)上 Options 的所有設(shè)置都是針對所選擇的目標(biāo)而言的,比如當(dāng)前 Flash(Debug)目標(biāo)的 Options 更改了,另外一個目標(biāo) Simulation 是不會改變的)。

但是使用宏定義的前提是你的代碼中必須有相關(guān)的切換代碼,比如宏定義 ENABLE_USART1,那么代碼必須能夠根據(jù)這個宏來分別編譯的你的代碼,否則的話,你設(shè)置的這個宏將沒有一點(diǎn)意義。注意,在 Options 中定義的宏是全局有效的,也就是說你,目標(biāo)內(nèi)的所有文件都能識別到這個宏,所以這個宏必須是獨(dú)一無二的才可。

2、
配置文件屬性

通過如下方法可以配置文件的屬性,可以讓你的文件不屬于某一個目標(biāo),這樣它就不會參與編譯了。

打開文件的 Options

去掉 Include in Target Build 勾選(再介紹一下另外幾個選項(xiàng):是否總是編譯、總是不編譯、改變時編譯。如果有工程比較龐大,編譯速度很慢,而有些代碼一般情況下是不修改的,如官方庫函數(shù),此時也可以去掉 Always Build 勾選,這樣它就不會總是編譯了,事實(shí)上如果你使用點(diǎn)擊“全部編譯”按鈕的話,它還是會對它們進(jìn)行編譯):

然后你可以看到你的文件增加了下面這樣一個圖標(biāo)(一個文件的 Options 是否是默認(rèn)的配置,可以通過這個文件圖標(biāo)來看出,灰色部分表示文件和默認(rèn)的 Options 不一致,如果看到了這個標(biāo)志,而這個工程你又不熟悉,那么最好打開文件的 Options 選項(xiàng)看看到底有何不同才是,而紅色標(biāo)志表示這個文件已不包含在目標(biāo)里了,不會參與編譯):

之前說過在目標(biāo)的 Options 的宏定義是影響目標(biāo)文件的,那么有沒有讓你的宏定義只設(shè)置單獨(dú)對一個文件有效呢?有,就是在文件的 Options 的 C/C++ 界面中設(shè)置即可。

這樣你設(shè)置的宏定義只對本文件有效。

查看一個文件是否定義(或識別)了某一個宏定義,可以在對應(yīng)的文件內(nèi)加入以下宏來確定一個定義是否存在于這個文件中。比如看一個文件是否認(rèn)識 Debug 這個宏:

這樣如果這個文件能識別 Debug,那么就會在編譯窗口輸出警告,如果這個定義很關(guān)鍵,也可以輸出 error 信息,如 #error ?“Debug is defined”,這樣你就不得不重視它了。因?yàn)槿绻悴辉O(shè)法解決掉這個錯誤的話,是不能輸出目標(biāo)文件的。

這些都是基本的知識,接下來繼續(xù)設(shè)置和 Simulation 不一樣的目標(biāo)。

Flash(Debug)目標(biāo)和 Simulation 目標(biāo)最大的區(qū)別就是下載。和 RAM 目標(biāo)不同,掉電不會消失,因?yàn)檫@個目標(biāo)的代碼是會下載到 Flash(Debug)中的。

這個是配置下載的 FLASH 地址和 RAM 地址,一般采用默認(rèn)即可。如果你需要固件升級功能則需要修改這里。

在 Debug 選項(xiàng)中選擇硬件調(diào)試,調(diào)試工具選擇 ST-Link,勾選 Run to main(),這樣下載完成后自動運(yùn)行到 main 函數(shù)中。為了充分利用 KEIL 強(qiáng)大的調(diào)試功能,需要添加如下參數(shù):

TARMSTM.DLL

-pSTM32F103RE

現(xiàn)在進(jìn)入 Setting 界面。如果連接了 ST-Link,那么這里是會顯示信息的。并且我一般使用串行下載,所以選擇 SW 模式。其他默認(rèn)即可。

再看另一個 Trace 選項(xiàng),這個是用來進(jìn)行代碼和數(shù)據(jù)跟蹤的。????詳情看這里:ITM調(diào)試

然后是 Flash Download 選項(xiàng):

一般來說都會勾選 Reset and Run,這樣下載后就會自動運(yùn)行,否則你只能重新上電或者按復(fù)位按鍵才能運(yùn)行程序了。而添加的編程算法最好和實(shí)際的芯片容量一致,比如 STM32F103RET6 FLASH 大小為 512K,這里就選擇這個。當(dāng)然這個編程算法我記得是可以自己編寫的,以后有時間可以研究一下。

這樣一來,F(xiàn)lash(Debug)目標(biāo)就算完成了。

現(xiàn)在需要在上面版本的基礎(chǔ)上再增加一個 Release 版本,就是用于產(chǎn)品代碼正式發(fā)布的版本,這個版本要求運(yùn)行效率高,所以可以從兩個方面入手:參數(shù)檢查功能關(guān)閉和提高代碼的優(yōu)化程度。

但是現(xiàn)在有個問題,就是已經(jīng)有兩個目標(biāo)了,如何才能在 Flash(Debug)目標(biāo)基礎(chǔ)上建立而不是在 Simulation 基礎(chǔ)上建立呢?

通過選擇當(dāng)前目標(biāo)即可:

通過以上四步即可在 Flash(Debug)目標(biāo)的基礎(chǔ)上增加一個 Flash(Release)目標(biāo)了。

目標(biāo)建立好了,現(xiàn)在首先關(guān)閉該目標(biāo)的參數(shù)檢查功能。先選擇當(dāng)前目標(biāo)為 Flash(Release),然后進(jìn)行配置:

還可以通過以下方法設(shè)置當(dāng)前目標(biāo):

這樣一個新的目標(biāo)就誕生了。但是因?yàn)檫@個目標(biāo)的代碼優(yōu)化級別更高,代碼量更少,所以如果代碼書寫不嚴(yán)謹(jǐn),那么可能就會出現(xiàn)問題,主要可能就是有的數(shù)據(jù)沒有使用 volatile 申明,那么代碼運(yùn)行過程中就可能出現(xiàn)問題,這一點(diǎn)要引起注意,如果在 Debug 版本運(yùn)行沒有問題,但是在 Release 版本出現(xiàn)了問題,很可能是這個原因。

提前看文章,歡迎關(guān)注公眾號:魚鷹談單片機(jī)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 首先從最基本的 Sim 目標(biāo)開始,其他目標(biāo)都將在此基礎(chǔ)進(jìn)行更改。 根據(jù)本筆記的仿真一節(jié)進(jìn)行設(shè)置,獲得基本的仿真功能...
    魚鷹談單片機(jī)閱讀 788評論 0 2
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,697評論 1 32
  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 8,146評論 0 27
  • 目錄結(jié)構(gòu) 在得到一份代碼后我們最先應(yīng)當(dāng)了解一下它的目錄結(jié)構(gòu),這里用ESP8266_RTOS_SDK_V1.5.0為...
    云華兄閱讀 4,719評論 0 5
  • 從今天開始恢復(fù)更新淘寶運(yùn)營系列文章,每周最少更新2篇,手把手教大家如何利用淘寶店鋪從0開始賺錢。最近剛把一個店鋪從...
    夢天護(hù)閱讀 350評論 0 0

友情鏈接更多精彩內(nèi)容