很多小伙伴在下载使用 KEIL 过程中发现,用户界面那么多的选项,我到底该用哪些?在编译过程只用到了一小部分功能,剩下等需要用到了再百度了解一下? 一个实用的工具软件不该对它一知半解,下面就跟随脚步一起探索 KEIL 5 的使用吧!
Overview
从图片中可以看到有6部分,分别是标题,菜单,工具,导航,工作区,输出;工具类软件大致都是这个模式。
假设哪个界面突然不见了,或者界面形式变了,不要慌,都可以在菜单中找到修改。
菜单
接下来,我们来认识下菜单栏:
前后查看:当你使用 goto definition ,打开新文件时,你希望能够跳到上一次查看的地方,就可以使用向后查看。
插入/移除标记点:可以插入一个类似书签,可以顺序的跳转,方便查看代码逻辑。
结构:显示函数,if,while,#ifdef & #endif,等范围,如下:
高级功能:
Select Text between matching braces:快速选择一对括号里面的文字,用来Copy非常方便(ctrl+shift+E):
Go to Matching (ctrl+E):跳转到相匹配的括号的另一半。
Tabify selection:未知功能
缩进和取消缩进,注释与取消注释:能够快速缩进某段代码,使用将光标放置该段或者部分选择即可。注释亦然。
Indent/unIdent text with text:使用某段字符缩进代码:
实际上快速注释就是这个功能衍生过来的,只要使用“//”去缩进即可。
Delete trailing space:删除尾巴的空白。这个功能实际用途在使用“\”时大有用途,在使用“\”有时候因为其后面有space而报错,增加工作量,使用该功能一键除去:
好的,相信你已经学会了一点点小技巧了,无论是快速编辑代码和查看代码了。接下来我们继续深入。
View
这就是开启主界面某些窗口的集合开关。假设界面少了什么别慌。
工程
基本功能不作解释。
管理工程:对工程的组,包安转,运行时的驱动环境,RTOS进行配置,里面可导入官方提供代码进入工程。(使用不大多,大多数人使用ST的cubemax)
option for target 等会单独讲。
批处理工程:里面允许同时建立多个工程,并且支持批处理编译。
Flash
下载:使用配置好的工具进行下载,理论上可以配置自己的工具到这里来一键下载(如51串口下载)。
擦除:擦除片上所有数据。
配置下载工具下面单独讲。
调试(Debug)
进入调试按钮,有软件和硬件调试两种。
工具类(tools)
PC-Lint:这个工具好像很牛逼的样子,据说它声称可以通过不运行代码找出80%的BUG,软件在附件中。配置方法。。。如果有需求在留言中提,配置起来有点麻烦(英文…)。
定制化工具:是不是支持自己写一款工具(exe的)然后在这里运行(没试过)? 比如自动将头文件中声明的函数,直接在对应C文件中添加定义框架。又或者是通信软件。
版本控制工具(SVCS)
版本控制软件,若使用git工具,可以是gitlab,或者github。详细配置见附件
窗口(window)
好像没什么了不得的功能,分屏就是这样:
有点骚气而已,骚操作的华丽外表下,体现的是买不起屏幕的实质。
帮助(help)
这个帮助挺大的,尤其是那个book。
到了这里,我们就要在认识一点知识,很多小白的误区,错把IDE与编译器混淆,IDE是Integrated Development Environment,集成开发环境,我们看到的界面叫做IDE,而编译时则是使用的编译器。按照这逻辑,IDE只不过是一个界面而已,是不是我可以换一个界面,只要用对应的编译器。答案是肯定的,你可以换成VS,IAR,eclipse。只要配置好工具就行。当然,能不能换编译工具,可以的,还有一个GCC是支持的ARM,主要是这个免费。
仔细看图中,是不是有很多工具,那我们来了解下这些工具是怎样完成一次从代码到二进制可执行文件的输出:
图片来源:keil中按F1唤出帮助界面,然后在:
另外一个图也能帮助大家认识:
按下编译按钮,keil干了什么?
我们可以看到,在使用过程中,我们有如下工具:armcc,armasm,armlink,fromelf。好的我们来描述下整体的流程:
首先,我们在keil中编辑C,asm(汇编)文件后,交给armcc与armasm来进行翻译,翻译后的文件可在文件夹OBJ中看到:
接着有很多个object文件,然后armlink将其连接起来,组成一个文件得到:
里面还含有调试信息,这就是图中的image。
最后经过fromelf处理成没任何修饰的,意思就是,直接能够使用的文件bin或者hex文件。可直接烧录,运行。
我们再来回顾下整体:先是有两个翻译器,把其他的文字(abC)翻译成中文,但是文字是一段一段翻译(每段一个.O文件),我们需要组织成一篇文章,就请出我们的编辑给文章修改下结构,最后通过机器(fromelf),把不需要的批注,冗余去掉,印成文章这样会中文的人可以直接看了。
那有没有不使用armcc的呢 ? 有。可以使用GUN工具来
图片来自:CM-3权威指南中文版
文本配置
我们发现,如果自己不爱经常按ctrl+s(保存),可以在这里设置自动保存。
自动补全功能使我们提高开发,我们可以在这里开启它,(美式键盘)使用crtl+空格。
魔术棒工具
这里配置是大家最关心的了,因为很多时候我们工程报错,无法下载,debug出现的东西和我们想的不一样,都是这里出的问题,那我们掰开了这些东西来理解keil是一个怎样的IDE。
这里是选择相应芯片,如果没有的话,那么要去keil官网下载,51的话用flyMCU软件注入就行:
https://www.keil.com/dd2/Pack/
指出一个常常出的错误,当你的system view file没有使用custom file时,debug时是这样的:
所以经常有很多人问:为什么 debug system view 没有寄存器。
我们勾上那个就可以,还不可以?确认下有没有那个 SVD 文件,这个文件为 system view 提供具体内容。
使用微库能够减少代码容量,但有时也会造成编译错误(我反正没遇到)。
ROM与RAM配置,它帮助编译器定义下ROM,RAM的范围,使得编译时不会把数据放在范围外。当然你也可以将ROM或者RAM切成两部分使用,这里我是特殊使用所以和平常数据不一样。我把ROM分成了4部分,这里没看出来? 我通过scatter文件代码实现的。当使用手动分配的话,这里设置的IROM1和IROM2就失效了。具体在linker这里配置。
这里告诉我们,我们控制通过某些手段,将代码指定到ROM的任何位置,那么我们再次推,是不是数据也是一样。是的,我们可以设置精确到一个字符都能指定到ROM的某个位置(当然支持flash program,STM32基本都支持)。比如我实现了一个小功能将ROM指定某个1K位置空出来给用户平时存配置数据,掉电还能存在,代替EEROM。
这部分不要求掌握,默认设计即可。若想自己琢磨,参考官网的armlink手册。
在这里我们能够控制输出了。若我们想要在AXF文件中加入debug信息的话就勾上Debug Information。若你想输出lib你就可以点击下面这个create library,具体使用可参考下附件2。
清单文件:编译器生成出的文件是这样:
链接器生成的文件:
从map文件中,我们可以找到很多有用的信息,比如数据放在ROM中那个位置,函数属于哪个section。
这里是设置armcc的部分,实际核心是使用命令行,而界面的设置只是在编译执行命令行时添加参数而已。如:
上图是关于汇编的设置。
链接器,它的设置基本是默认的,所以我们基本不动除非有特殊需要,去掉勾use memory layout from Target Dialog。(如有需要可在评论提出,我会给出特殊使用)。
数据的RO/RW/ZI等,我在附件的专业词汇有解释。
这里设置的是软件仿真,和硬件仿真。有许多的朋友这里会出问题,调试中system view什么都没。主要问题是,在TARSTM.DLL(动态库这个文件中有许多的函数,我使用反编译打开看过,应该是一个程序),然后-p这个指的是parameter(参数),我们再命令行中*惯用“-”来说明是一个程序的输入选项。这里一开始是-pCM3,需要修改,所以我们选择STM32F103ZE(我的芯片),其他按照实际情况来。
跟踪调试,这里是使用CM3得到内核的trace功能,效果是:
用来追踪异常(中断),比如,我可以看到进入了多少次的SysTick,或者调度程序,又或是查看哪个中断有没有触发,触发多少次。例如:在自己写RTOS时,你可以通过这个来查看PendSV(关于调度的一个异常,查看CM3内核可知)有没有被设置。
很多朋友会遇到:“no algorithm found”,如下:
问题在于你的下载算法没有设置,设置一个算法即可。我不得不解释下全片擦除和扇区擦除:
首先,在STM32上(可能大部分都是)ROM是分扇区(section)的,假设要在某个位置写一个数据,先必须找到该位置所处的扇区,然后擦除整个扇区,最后写入。
所以全片擦除,就是整个ROM都擦掉。
扇区擦除,就是你代码到哪个扇区就擦掉哪个。
应用
以上都能看完的同学想必对 KEIL 已经有了深入的理解了,接下来就开始进入编程的学习了!