STM32工程模板建立之 FLASH 目标(四)

在前面的基础上开始建立 FLASH 目标。

打开工程管理面板:

新建目标,然后可以发现右边的 group 和 Files 自动将 Simulation 目标的内容复制过来了,注意这只是它们的包含关系,并不是将实际的文件进行了复制(在实际的文件夹中你会发现 main.c 文件还是只有一个)。点击 OK,即完成了目标的创建。(可以拖动工程目标、组、文件以更改排列顺序,不过在一个目标里更改,另一个目标也会进行相应的更改)

这样一来,在一个工程内就存在两个目标了:Simulation & Flash(Debug)。如下图:

注意两个目标之间的文件关系是一样的,如果将一个目标文件移除,那么另一目标也会移除。比如说在 Flash(Debug) 目标中将 main.c 通过以下方式移除。

那么在 Simulation 中也会显示已移除该文件。

那么文件都一样,这样两个目标有什么用呢?据我所知有两种方式可以得到两个不同的目标:

1、
增加宏定义

在 Options 中增加宏定义(事实上 Options 的所有设置都是针对所选择的目标而言的,比如当前 Flash(Debug)目标的 Options 更改了,另外一个目标 Simulation 是不会改变的)。

但是使用宏定义的前提是你的代码中必须有相关的切换代码,比如宏定义 ENABLE_USART1,那么代码必须能够根据这个宏来分别编译的你的代码,否则的话,你设置的这个宏将没有一点意义。注意,在 Options 中定义的宏是全局有效的,也就是说你,目标内的所有文件都能识别到这个宏,所以这个宏必须是独一无二的才可。

2、
配置文件属性

通过如下方法可以配置文件的属性,可以让你的文件不属于某一个目标,这样它就不会参与编译了。

打开文件的 Options

去掉 Include in Target Build 勾选(再介绍一下另外几个选项:是否总是编译、总是不编译、改变时编译。如果有工程比较庞大,编译速度很慢,而有些代码一般情况下是不修改的,如官方库函数,此时也可以去掉 Always Build 勾选,这样它就不会总是编译了,事实上如果你使用点击“全部编译”按钮的话,它还是会对它们进行编译):

然后你可以看到你的文件增加了下面这样一个图标(一个文件的 Options 是否是默认的配置,可以通过这个文件图标来看出,灰色部分表示文件和默认的 Options 不一致,如果看到了这个标志,而这个工程你又不熟悉,那么最好打开文件的 Options 选项看看到底有何不同才是,而红色标志表示这个文件已不包含在目标里了,不会参与编译):

之前说过在目标的 Options 的宏定义是影响目标文件的,那么有没有让你的宏定义只设置单独对一个文件有效呢?有,就是在文件的 Options 的 C/C++ 界面中设置即可。

这样你设置的宏定义只对本文件有效。

查看一个文件是否定义(或识别)了某一个宏定义,可以在对应的文件内加入以下宏来确定一个定义是否存在于这个文件中。比如看一个文件是否认识 Debug 这个宏:

这样如果这个文件能识别 Debug,那么就会在编译窗口输出警告,如果这个定义很关键,也可以输出 error 信息,如 #error  “Debug is defined”,这样你就不得不重视它了。因为如果你不设法解决掉这个错误的话,是不能输出目标文件的。

这些都是基本的知识,接下来继续设置和 Simulation 不一样的目标。

Flash(Debug)目标和 Simulation 目标最大的区别就是下载。和 RAM 目标不同,掉电不会消失,因为这个目标的代码是会下载到 Flash(Debug)中的。

这个是配置下载的 FLASH 地址和 RAM 地址,一般采用默认即可。如果你需要固件升级功能则需要修改这里。

在 Debug 选项中选择硬件调试,调试工具选择 ST-Link,勾选 Run to main(),这样下载完成后自动运行到 main 函数中。为了充分利用 KEIL 强大的调试功能,需要添加如下参数:

TARMSTM.DLL

-pSTM32F103RE

现在进入 Setting 界面。如果连接了 ST-Link,那么这里是会显示信息的。并且我一般使用串行下载,所以选择 SW 模式。其他默认即可。

再看另一个 Trace 选项,这个是用来进行代码和数据跟踪的。    详情看这里:ITM调试

然后是 Flash Download 选项:

一般来说都会勾选 Reset and Run,这样下载后就会自动运行,否则你只能重新上电或者按复位按键才能运行程序了。而添加的编程算法最好和实际的芯片容量一致,比如 STM32F103RET6 FLASH 大小为 512K,这里就选择这个。当然这个编程算法我记得是可以自己编写的,以后有时间可以研究一下。

这样一来,Flash(Debug)目标就算完成了。

现在需要在上面版本的基础上再增加一个 Release 版本,就是用于产品代码正式发布的版本,这个版本要求运行效率高,所以可以从两个方面入手:参数检查功能关闭和提高代码的优化程度。

但是现在有个问题,就是已经有两个目标了,如何才能在 Flash(Debug)目标基础上建立而不是在 Simulation 基础上建立呢?

通过选择当前目标即可:

通过以上四步即可在 Flash(Debug)目标的基础上增加一个 Flash(Release)目标了。

目标建立好了,现在首先关闭该目标的参数检查功能。先选择当前目标为 Flash(Release),然后进行配置:

还可以通过以下方法设置当前目标:

这样一个新的目标就诞生了。但是因为这个目标的代码优化级别更高,代码量更少,所以如果代码书写不严谨,那么可能就会出现问题,主要可能就是有的数据没有使用 volatile 申明,那么代码运行过程中就可能出现问题,这一点要引起注意,如果在 Debug 版本运行没有问题,但是在 Release 版本出现了问题,很可能是这个原因。

提前看文章,欢迎关注公众号:鱼鹰谈单片机

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容