一、状态栏的解析
Compile:只对目前打开的c文件进行语法检查,不对它进行link;
Make:对工程所有打开的c文件进行语法检查和link(只编译有改动的文件或者设置变动的文件);
Rebuild All:编译链接当前工程(不管文件或者设置是否有变动);
Clean:清除当前工程的编译状态;
Batch buil:批量编译,打开Batch build 批量编译后,需要给批量编译起个名字,然后将本工程中的三个分类都添加到“Configurations to build”中,然后单击“Make” 就可以对这工程中的三个分类全部进行编译。
二、代码优化的设置
a.不优化,最适合调试,所有变量都可以看到;
b.Low类似于不优化,特别之处在于变量如果不再被使用时,即使仍然在有效的作用域内,调试时也观测不到;
c.中等优化的特点;
d.高等级优化:最平衡、代码量优先(最少代码)、代码执行速度优先(最快速度运行),可以选择某一模式;
e.中高级优化可选额外配置:
编译后会把静态变量和全局变量地址重新组合,同一函数的变量地址尽量靠近,这样编译器就可以用同一个基址访问多个变量;
结论:优化选型次序是从低到高,从部分到全局;可以使用#pragma optimize预处理命令,可以精确调整单个c函数的编译器优化方向与级别;
有时,程序员希望不要调整运算的次序,不要编译器删除它自己认为没有用的代码,不要将变量分配在通用寄存器里等等,可以使用volatile对操作的对象进行申明;
三、关于头文件包含的位置:
四、 工具栏的解析:从左到右依次是:
- 新建text文件;Ctrl + N
- 打开text文件;Ctrl + O
- 保存显示的文件;Ctrl + S
- 全部保存
- 打印;Ctrl + P
- 剪切;Ctrl + X
- 复制;Ctrl + C
- 粘贴;Ctrl + V
- undo the last action 撤销编辑 Ctrl + Z
- redo the last undo action 恢复编辑 Ctrl + Y
- 搜索框;Quick Search Text Box 快速搜索文本框;
- 搜索上一个Shift + F3;
- 搜索详细功能打开;
- 搜索下一个;F3
- 替换;Ctrl + H;
- goto某一行某一列Ctrl + G ;
- 上一个书签;跳转到上一个书签 Shift + F2;
- 增加删除书签;标记/取消书签 Ctrl + F2;
- 下一个书签;跳转到下一个书签 F2;
- 跳转到上一步 Alt + 左箭头;
- 跳转到下一步 Alt + 右箭头;
- compile;Ctrl + F7;
- make;F7;
- 设置和删除断点;Ctrl + F9;
- 仿真与下载程序;Ctrl + D;
- 仿真不下载程序;
1)书签:书签在编译的时候比较实用,可以快速找到标记书签所在行。可以使用快捷按钮,也可以使用快捷键。
2)跳转到上/下一步:跳转是在编译代码通过跟踪代码留下的“脚步”,我们可以通过该方式找到这些“脚步”,同样也可以通过快捷键操作 - 3)下载和调试:Download and Debug:是下载代码之后再进行调试。Debug without Downloading:只调试不下载。也就是说你之前下载过了代码,只需要再点击该按钮即可,否则会出现错误。
对工程编译完的警告和错误进行定位查看方法;
五、API解释
Application Program Interface:函数接口,库是架设在寄存器和用户驱动层之间的代码,向下处理与寄存器直接相关的配置,向上为用户提供配置寄存器的接口;库开发的优点:开发速度快,可读性好;寄存器开发的优点:更直观,程序运行占用资源少;
六、启动文件.s的解析:
启动文件是任何处理器在上电复位之后最先运行的一段汇编程序,在C代码运行之前,需要由汇编为 C的运行建立一个合适的环境;作用是:初始化堆栈指针SP、初始化程序计数器指针PC、设置堆栈的大小、设置异常向量表的入口地址、配置外部SRAM作为数据存储器地址(用户配置)、设置C库的分支入口main(用于调用main函数)、新版本的还可能调用系统函数配置时钟函数;
七、字体的问题总结:
1、如何使用操作系统自带而IAR没有的字体?
常见的单片机开发环境,IAR和Keil使用较为广泛。相较于Keil,IAR在编译速度,编译效率,支持的芯片范围等一些方便具有优势。但是IAR的默认编辑界面视觉效果不友好,自带的字体有限,且基本上不怎么好看。但是可以设置出自己满意的字体;
在IAR的APPDATA文件目录中找到IarIdePm.ini文件,编辑选择自己要使用的字体名。其中Common是通用字体,TextEditor是编辑器代码字体。代码字体选用了Keil默认的;(在控制面板里找到字体名称)
2、部分文件字体显示与设置的字体不一致?不要勾选“Auto-detect character encoding”
八、IAR快捷键
1、显示行号:在代码段点击右键,找到Options->Editor,将右面的Show Line Numbers勾选上就可以了;
2、注释的快捷键:Ctrl+K;取消注释:Ctrl+Shfit+K;
3、Ctrl+Alt+V,可以使用IAR提供的内部代码的编写,如if语句;
4、格式化源码:选择代码段,然后CTRL + T;TOOLS->OPTIONS->EDITER->Auto Indent->CONFIGS;
注意:a,b,c三个参数;
5、程序{ }花括号的配对内容查找:智能选择光标所在括弧内的区域,CTRL + B则自动的把这段内容反色的选中;
6、自动往后:选中某些行,然后使用TAB键,可以实现自动的后退;
7、F9 光标处添加/删除断点;Ctrl+F9 使能/失能断点;
8、Ctrl + H替换字符串;
9、Ctrl + G跳到指定行;
10、Ctrl+Shift+F 在文件中搜索;
11、Ctrl+F4 关闭当前窗口打开的文件;
12、Ctrl+D进入下载程序和仿真页面;
13:逐行调试(单语句或者单函数):F10;
14:进入函数或者单行:F11;
15:程序全速运行:F5;
16:退出调试:Ctrl+Shift+D;
17:返回上个界面:Ctrl+Tab;解释:打开多个.c文件之后,进行.c文件查看切换;
18:代码左移:Shift+Tab;
19:取消Debugger(调试):Ctrl+shift+D;
20:自动补全:Ctrl+ Alt +Space;
九、IAR操作小技巧
1:复制和粘贴几行的部分代码(后半部分) 按住Alt键,再用鼠标拖动就可以复制和粘贴后半部分;
2:复制一行技巧 从上一行的最后开始复制,这样粘贴的时候只需要从放在最后就可以粘贴到下一行了;
3:有时IAR中右键不能跳转函数的问题;我们应该放在函数前面然后单击右键跳转,而不是选中函数!
4:在线调试:Live Watch
只有全局变量才可以在Live Watch中查看,可以实时看到变量的变化情况,刷新时间可以修改,在tool->option里设置;
5:Navigate导航功能
可以通过“Go to…”功能直接跳转到当前源文件中的某一行、某一列的某一个字符的位置;还可以在程序的某一行设置标签“Toggle BookMark”,然后通过“Go to BookMark”跳转到标签的位置(上一个、下一个)
6:Find and Replace查找和替换功能
查找和替换是我们在编程中使用最频繁的功能。如果定义的变量在多个文件中使用,但是在此时并不清楚这些变量的具体位置时,我们可以使用全局搜索功能,将变量的位置在Message中罗列出来,这样可以快速找到变量,加强了程序的可读性。这种情况适用于程序代码超多并且整个工程包含大量源文件时使用。具体步骤为:“Find and Replace”→ “Find in Files”在其中输入要查找的变量名或者字符串,然后点击“Find”即可。快捷键“Ctrl+Shift+F”。
7:仿真几个试图调出方法
寄存器视图:View-->>Registers-->>Registers 1;
内存视图:View-->>Memory-->>Memory 1;
栈区视图:View-->>Stack-->>Stack 1;
Symbol存储视图:View-->>Symbolic Memory;
8:批量操作断点
前面打的√去掉可以暂时屏蔽断点功能,可以打钩再次恢复断点;
可以使能和禁止所有的断点;可以删除全部的断点;
9:调试期间修改程序,重新生成仿真方法
10:两种模式:Debug&Release Release模式下不可以进行仿真(发布状态);
11:一个c文件拆分为4个窗口的方法;注:只在自己的.c文件中有用,拖动边界即可恢复界面;
12:全局静态变量查看
13:内存调出查看:地址的读取方式可选(16位、32位等等);注意小端模式和大端模式;
14:Call Stack(查看当前栈空间,既此时正在执行的函数及Context)的妙用,比MDK好用;
注意:call back就是当前函数执行过程的空间展示;
在Debug模式下,IAR菜单栏选择View -> Call Stack,执行到某一断点,或者程序暂停时,就可以清晰的看到当前时刻的栈空间信息,既所调用的函数等信息;代码从复位函数开始执行,可以非常直观的看到函数的调用顺序,可以看到即将跳入的函数,在程序跑飞是特别好用,比如知道程序调到了某个硬件算法出错(比如数组越界、非法修改内存、未初始化就使用某个外设等等),那就在此处加个断点,然后通过这个call stack查到前面那个函数,就是有可能出问题的函数;
Call Stack可以让调试在没有运行损失的情况下显示完整的函数调用链。这通常会帮助我们确定目前函数的上下文,跟踪变量和参数中的不正确值的来源从而定位出现的问题。
当发生函数调用的时候,栈空间中存放的数据是这样的:
1、调用者函数把被调函数所需要的参数按照与被调函数的形参顺序相反的顺序压入栈中,即:从右向左依次把被调函数所需要的参数压入栈;
2、调用者函数使用call指令调用被调函数,并把call指令的下一条指令的地址当成返回地址压入栈中(这个压栈操作隐含在call指令中);
3、在被调函数中,被调函数会先保存调用者函数的栈底地址(push ebp),然后再保存调用者函数的栈顶地址,即:当前被调函数的栈底地址(mov ebp,esp);
4、在被调函数中,从ebp的位置处开始存放被调函数中的局部变量和临时变量,并且这些变量的地址按照定义时的顺序依次减小,即:这些变量的地址是按照栈的延伸方向排列的,先定义的变量先入栈,后定义的变量后入栈;
所以,发生函数调用时,入栈的顺序为:参数N、参数N-1、参数N-2…参数3、参数2、参数1、函数返回地址、上一层调用函数的EBP/BP、局部变量1、局部变量2…局部变量N
15:设置页面右边线的距离,可对齐注释等等,也提醒程序员一行不要太长,不然打印出来就会越界;
注意:Tab size和Indent size的设置,见上右图;
Tab size表示在非行头缩进时跳动的字节数量;Indent size表示缩进的字符宽度,一般设为4;
Tab key function里的Insert tab表示插入制表符;Indent with spaces表示插入空格,一般选这个,为了移植到别的编译器对齐;
16:虚拟空格,行末是否会出现虚拟的空格;
注:scan for changes files 表示去;外部编译器更改文件后自动加载到IAR软件里
注:show bookmarks 表示显示书签;
17:删除行末没有用到的空格
用于换行符\后删除空格,因为\后如果有空格的话会报错,一般和enable virtual space一起勾选;
十、调试快捷键按钮
a.步过,执行当前这句话,如果这句话是函数调用,就把整个函数执行完,停在下一句;
b.步进,执行当前这句话,如果这句话是函数调用,就进入到函数里,停在函数的第一句话;
c.步出,一直执行到从当前的函数返回,停在函数返回后的下一句话;
d.下一条语句,执行C语言的一条语句,停在下一句代码上,运行到下一语句和逐行运行类似;
e. 一直运行到光标所在行,并停在这一行上;
f.全速运行到遇到断点;
g.暂停调试,使正在奔跑的程序立定;
h.复位,指令指针回到开头;
###:注意事项总结
(1)变量的值在Debug时可以随时修改;
(2)在live watch里才可以实时查看全局变量的值的变化(全速运行时),在watch里全速运行时,全局变量反而无效 ;
(3)watch窗口里查看局部变量时,有时会显示err是因为局部变量在栈区,函数运行完销毁,不调用时无效;
(4)可以在IAR文件里直接修改工程名进行移植程序,可以打开工程文件名所在的位置,修改到对应的文件名上即可;
(5)软件右上角有个f()功能,可以查看当前c文件的所有函数;
(6)debug里可以设置断点选择,一般如果选择硬件断点的话,不要超过3个(3个足够);也可以使用软件断点,但是软件断点跑起来比较慢,所以及时取消断点;
(7)空白部分显示点点点
(8)几个单词的解释
①Breakpoints:也就是断点;
②Disassembly:反汇编,也就是你写的程序经过编译烧写之后,在单片机中的样子;
③Memory:内存,可以查看全部内存中的数据,看起来就像一般的16进制编辑器;
④Symbolic Memory:符号内存,不但能看到内存数据,还能看出来对应程序中的什么变量;
⑤Register:寄存器,查看全部寄存器的内容;
⑥Watch:观察,可以根据你的需要,指定查看什么,根据楼主的经验,查看全局变量方便一些,在变量可见范围内,也可以查看局部变量和静态变量(static);
⑦Locals:查看函数局部(变量等)内容,包括函数的参数;
⑧Statics:查看静态内存变量,注意不是指静态变量(static),而是生命周期是整个程序生命期的变量,原则上不在堆栈中的局部变量,应该都是静态内存变量;
⑨auto:自动,指的不是C语言中的自动变量,而是指根据指令指针当前的位置,自动显示出相关的变量;
⑩Call Stack:调用栈,表示到当前位置的函数调用顺序图;
⑪Stack:栈,就是栈的数据表示;
(9)修改程序运行起点的方法:可以指定程序中IAR识别的任意标号或者函数名称;
在工程中Project>Options>Debugger>Setup>Run to;
(10)在反汇编窗口和内存窗口中快速定位函数位置和变量位置的方法:
我们经常需要在Disassembly窗口中找到指定函数的位置,或者需要在Memory窗口中找到指定变量的位置,一般情况下选中函数名称然后把函数名称拖放到Disassembly窗口,相关函数就会显示在Disassembly窗口中,也可以把变量名称用相同的操作显示在Memory窗口中。
(11)单步调试速度缓慢的问题的解决方法:
①硬件仿真系统需要为单步调试留下足够的硬件断点,在调试中的单步运行通常是用断点来实现的,通过把断点设置在下一个语句后,来完成单步调试的功能。硬件的断点数量是有限的,如果没有可用的硬件断点,调试器就会在每个汇编指令处停止一下,这样完成一条完整的语句的所有汇编代码越多时间就越长。
②在Trace和Function Profiling窗口中使用Enable/Disable按钮关闭数据跟踪功能。因为在每个单步之后要收集这些跟踪的数据,所以数据跟踪可能会降低单步的速度。需要注意的是,紧紧关闭相关的窗口是不能关闭数据跟踪功能的,必须通过Enable/Disable按钮来完成。
③只打开有限数量的SFR寄存器窗口,这可以通过2种方法实现。一种是通过在Watch窗口中手动输入SFR寄存器的名字;另一种是创建自定义的特殊功能寄存器组,操作步骤如下,Tools>Options>Register Filter>Use register filter;
④如果不需要Memory和Symbolic Memory窗口,关闭它们,因为在每个单步之后要读出这些内存数据,如果不需要Watch,Live Watch,Locals,Statics窗口,关闭它们,原因同上。
⑤关闭Stack窗口和相关的设置,Tools>Options>Stack,去掉Enable graphical stack display and stack usage tracking的选择;
⑥提高调试器和目标板的通讯速度;
(12)无法go to define的解决方法:
首先,Project -->Clean,清理所有编译信息,然后重新编译一下;然后等待编译完成,会看到右下角有个绿色的进度条在跑,这是IAR在同步所有的文件,建立联系,等待这个进度完成,就可以跳转了;
(13)右键功能的几个解释
①Go to Definition of XXX: 查找XXX的定义 快捷键:F12
②Go to Declaration of XXX:查找XXX的声明
③Find All Reference to XXX:查找XXX所有被调用的地方
④Find All Calls to XXX : 查找所有调用XXX的函数(XXX必须是函数)
⑤Find All Calls from XXX :查找所有XXX调用的函数(XXX必须是函数)
(14)window窗口解释
1.Close Document:关闭选项卡(关闭选中的一个窗口)
2.Close Window:关闭某一窗口(比如工作空间、view里的某一示图)
3.Split:拆分窗口就是将一个窗口拆分为上下左右四个窗口
4.Move Tabs to New Vertical Editor Window:新建垂直编辑窗口
5.Move Tabs to New Horizontal Editor Window:新建水平编辑窗口
6.Move Tabs to the Next Window:移动标签去之后的窗口
7.Move Tabs to the Previous Window:移动标签去之前的窗口
8.Close All Tabs Except Active:关闭除了活跃的所有选项卡
9.Close All Tabs to the Right of Active:关闭活跃窗口右边所有标签
10.Close All Editor Tabs:关闭所有编辑选项卡
(15)使用数据断点的方法
选择要打断点的代码行,或在Memory中选中某一个要监测的数据,点击右键->Set Data Breakpoint:
在弹出页面选择该Data断点实现的条件,例如该Data的读、写,或者可以在Conditions中设置断点产生条件,如Data == 100时进入断点。以及通过Action 在断点执行时产生相应的动作。
(16)Set next statement:手动执行到某行代码
如果断点已经执行完,还想继续跳到该断点,或者想手动执行到某行代码,可以在断点处右键,选择Set next statement
(17)设置堆栈大小的方法
依次选择Linker -> config,然后点击Edit,选项卡选择Stack/Heap Size,编辑实际堆栈大小:更改后需要rebuild;
(18)如何静态查看程序Stack栈使用详情,以及栈深度?
在Option->linker中勾选Enable stack usage analysis,之后Rebuild编译完,可以在.map中查找Stack Usage栈使用分析;
上图分析:可以清晰的看到Program程序里使用最大的stack大小为1392bytes, Uncalled function(如中断)使用的stack大小为最大1824bytes和其他所占用的bytes。所以,程序里要设置比Program 1392+Uncalled Function占用的stack空间才行,否则会导致overwrite或程序跑飞等异常。
公式如下;CSTACK Size >= maxstack(“Program entry”) + totalstack(“interrupt”) + safety margin(100);
Maximum call chain: 最大调用链所占Stack大小;
(19)动态查看程序运行中Stack占用情况的方法
程序运行中,可以查看Stack的当前占用量,以及总量;在Tools->Option->Stack中勾选如下图:程序运行时(Debug),选中View->Stack;
在程序运行中,打断点或者暂停程序,Stack窗口就会显示栈使用情况,如下图:可以看到当前栈指针位置、(该断点时刻栈的使用情况)、当前栈空间内容及地址、全部已使用的Stack空间、以及未使用的Stack空间。
(20)使用Memory查看程序运行中各种过程数据的方法
例如查看某个指针指向的数据内容:Debug模式下,右键Watch 一个char *的指针dataC,这时只能看到指针指向的第一个数据:
同样在View菜单下,点击Memory1,将dataC指针存放的地址放到Goto的内容栏中,即可查看数据内容:
(21)IAR Map文件解析堆栈信息:
通过Option->Linker勾选 map,则编译后会生成.map文件,包含了项目各种编译信息,如下图:
编译后,在编译目录中/list/文件夹中,找到并打开.map文件,文件最上面可以看到编译时间、Linker的版本、编译的程序文件等,堆栈信息都在"PLACEMENT SUMMARY" 的"P2"中,我们向下拉,找到"P2"最后一个part,可以看到堆Heap 栈Stack的起始地址;
再往下ENTRY LIST之后就是程序中各种函数/变量编译的信息:
可以看到函数名,地址等信息,其中Code Gb代表全局函数:,其中code说明为代码,Gb说明为“全局的”函数(Global)
可以看到除了中断向量表,第一个编译的出的Object文件为 cmain.o,该入口函数位于main.c文件。
分析如下:
静态函数:类型为Code Lc,即静态(局部Local)函数;
全局变量也叫“全局数据”,因为它的类型为“Data Gb”。(文件内)静态变量:“Data Lc ” 使用static关键字定义的变量,只有在当前文件内使用,所以它属于静态(“局部”Local)变量。
全局变量也叫“全局数据”,因为它的类型为“Data Gb”。(文件内)静态变量:“Data Lc ” 使用static关键字定义的变量,只有在当前文件内使用,所以它属于静态(“局部”Local)变量。
注意:(函数内的)静态变量:定义在函数体内的静态变量,如上图中的,xxx::byteCounter;
(22)IAR xx.icf存储资源文件解析:
IAR中使用.icf文件 划分存储资源
(23)IAR各编译文件含义:
.dep文件:ide所使用的文件依赖信息,这个会自动生成的,可以删掉
.ewp文件:工程文件/project,包含代码,编译,链接选项等,不包含调试设置等信息,这个不能删
.ewd文件:工程调试设置,保存的是IAR设置中的Debugger选项,这个最好不要删
.eww文件:解决方案/工作空间/workspace,可以直接双击打开,可以放多个工程文件,最好也不要删
(24)六大数据监控窗口详细解析
①6个视图子菜单窗口的显示内容都类似,总共四个属性
Expression:表达式名称,一般指变量和函数等。Value:对应的值;
Location:对应所在位置,寄存器、RAM、Flash等。Type:变量/函数类型
②Watch:普通查看表达式/变量值窗口
Watch菜单下面有4个子菜单:Watch1 ~4,但都是一样的,可以分别开4个窗口出来同时查看表达式/变量值。一般这个窗口我们比较常用,添加自己想要查看的变量值。特点:A.通过手动添加需要查看的表达式/变量;B.只有暂停调试才会更新对应的值;
③Live Watch:查看实时表达式/变量值窗口
Live可以翻译成“现场”、“活的”,所以我就称为查看实时变量。Live窗口与上面Watch窗口类似,差别在于:A.变量须为静态(全局);
B.变量实时更新(程序在运行时)
④Quick Watch:快速查看表达式/变量值窗口
快速浏览变量窗口主要结合另外一个视图菜单Macro Quicklaunch一起使用,达到精确地控制变量值。
⑤Auto:自动显示表达式/变量窗口
当程序暂停在某一个地方,自动显示暂停坐在位置的表达式/变量,而不需要像Watch要手动添加。
⑥Locals:局部变量窗口
这个子菜单和Atuo类似,也是自动显示,区别在于:Locals是显示的局部表达式变量,而静态/全局变量不会显示。
⑦Statics:静态变量窗口
该子菜单同样具有Atuo的特性,自动显示。但是,它显示的内容是静态变量(静态局部、静态全局、全局变量)。所以,通过该视图窗口就可以查看给内存分配了哪些静态变量。
(25)菜单栏详细解析:
1.Undo:撤销编辑 Ctrl + Z;2.Redo:恢复编辑 Ctrl + Y;3.Cut:剪切 Ctrl + X;
4.Copy:复制 Ctrl + C;5.Paste:粘贴 Ctrl + V;6.Select All:全选 Ctrl + A;
7.Find and Replace>Find:查找 Ctrl + F;Find and Replace>Find Next:查找下一目标 F3;Find and Replace>Find Previous:查找上一目标 Shift + F3;Find and Replace>Find Next (Selected) :在选中对象里查找下一目标 Ctrl + F3;Find and Replace>Find Previous (Selected):在选中对象里查找上一目标 Ctrl + Shift + F3;Find and Replace>Replace:替换 Ctrl + H;Find and Replace>Find in Files:在对话框中指定条件查找;Find and Replace>Replace in Files:在对话框中指定条件替换;Find and Replace>Incremental Search:在对话框中查找字符 Ctrl + I;
8.Navigate>Go To:前往行列 Ctrl + G;Navigate>Toggle Bookmark:标记/取消书签 Ctrl + F2;Navigate>Previous Bookmark:跳转到上一个书签 Shift + F2;Navigate>Next Bookmark:跳转到下一个书签 F2;Navigate>Navigate Backward:跳转到上一步 Alt + 左箭头;Navigate>Navigate Forward:跳转到下一步 Alt + 右箭头;Navigate>Go to Definition:跳转到定义 F12;
9.Code Templates>Insert Template:插入模板 Ctrl + Alt + V;Code Templates>Edit Templates:编辑模板;
10.Next Error/Tag:显示下一错误/目标 F4;11.Previous Error/Tag:显示上一错误/目标 Shift + F4;
12.Complete Word:完型语句 Ctrl + Alt + 空格;13.Complete Code:完型类/结构体代码 Ctrl + 空格;
14.Parameter Hint:参数提示 Ctrl + Shift + 空格;15.Match Brackets:括号匹配;
16.Toggle All Folds:折叠/打开当面编辑代码 Ctrl + Alt + F;17.Auto Indent:自动缩进(对齐) Ctrl + T
18.Block Comment:块注释 Ctrl + K;19.Block Uncomment:块取消注释 Ctrl + Shift + K;
20.Toggle Breakpoint:添加/取消断点 F9;21.Enable/Disable Breakpoint:使能/失能断点 Ctrl + F9;
应用举例1:插入/编辑模板;经常使用同样一段代码,就可以使用这个功能。IAR默认只有if、for这两个模板,我们可以自己添加(编辑)模板,比如添加一个while模板,点击“编辑模板”菜单就可以进入编辑状态,编辑的语法很简单,可以参考自带模板。
应用举例2:完型语句;小学时学习过完型填空,这里相当于就是那个意思,也就是将单词补全。比如完整的代码为USART_Initializes,而实际只需要输入USA字母就可以补全。
应用举例3:自动缩进;这个功能比较实用,在你代码比较凌乱(也就是不对齐的情况),使用该功能就可使代码自动对齐。
(26)File文件菜单
1.New:新建文件/工作空间 Ctrl + N;2.Open:打开文件/工作空间 Ctrl + O;3.Close:关闭文件;4.Save Workspace:保存工作空间;
5.Save Workspace As:另存工作空间;6.Close Workspace:关闭工作空间;7.Save:保存文件 Ctrl + S;8.Save As:另存文件;
9.Save All:保存所有文件/工作空间;10.Page Setup:打印页面设置;11.Print:打印 Ctrl + P;12.Recent Files:最近打开文件;
13.Recent Workspaces:最近打开工作空间;14.Exit:退出软件;
(27)View视图菜单
1.Messages>Build:编译信息;
Messages>Find in Files:查找信息;
Messages>Tool Output:工具信息;
Messages>Debug Log:调试信息;
2.Workspace:工作空间窗口;
3.Source Browser>Source Browser:源码浏览器;
Source Browser>References:引用窗口;
Source Browser>Declarations:声明窗口;
Source Browser>Call Graph:调用图窗口;
4.Breakpoints:查看断点窗口;
5.Disassembly:反汇编窗口;
6.Memory:内存窗口;
7.Symbolic Memory:内存标记窗口;
8.Register:寄存器窗口;
9.Watch:变量/参数查看窗口;
10.Locals:局部变量窗口;
11.Statics:静态变量窗口;
12.Auto:自动显示变量/参数窗口;
13.Live Watch:实时监视窗口;
14.Quick Watch:快速查看窗口;
15.Call Stack:调用堆栈窗口;
16.Stack:堆栈地址窗口;
17.Terminal I/O:终端窗口;
18.Images:图片窗口;
19.Cores:内核状态窗口;
20.Code Coverage:代码利用率窗口;
21.Toolbars>Main:主工具栏;
Toolbars>Debug:调试工具栏;
22.Status bar:状态栏;
(28)Projcet工程菜单
1.Add Files:添加文件;
2.Add Group:添加组;
3.Import File List:导入文件列表;
4.Add Project Connection:添加工程链接;
5.Edit Configurations:编辑配置;
6.Remove:移除工作空间工程;
7.Create New Project:创建新项目;
8.Add Existing Project:添加已存在工程;
9.Options:目标选项配置 Alt + F7;
10.Version Control System:版本控制系统;
11.Make:编译工程 F7;
12.Compile:编译文件/组 Ctrl + F7;
13.Rebuild All:重新编译;
14.Clean:清除编译等中间文件;
15.Batch Build:构建批处理 F8;
16.C-STAT Static Analysis:静态分析;
17.Stop Build:停止编译 Ctrl + Break;
18.Download and Debug:下载并调试 Ctrl + D;
19.Debug without Downloading:调试(不下载);
20.Attach to Running Target:附加运行目标;
21.Make & Restart Debugger:编译并重新调试 Ctrl + R;
22.Restart Debugger:重新调试 Ctrl + Shift + R;
23.Download:下载;
24.SFR Setup:SFR设置;
25.Open Device Description File:打开设备描述文件;
26.Save List of Registers:保存寄存器列表;
(29)软件主窗口界面分析
Menu Bar菜单栏:该窗口是IAR比较重要的一个窗口,里面包含IAR所有操作及内容,在编辑模式和调试模式下存在一些不同。
Tool Bar工具栏:该窗口是一些常见的快捷按钮。
Workspace Window工作空间窗口:一个工作空间可以包含多个工程,该窗口主要显示工作空间下面工程项目的内容。
Edit Window编辑空间:代码编辑区域。
Message Window信息窗口:该窗口包括编译信息、调试信息、查找信息等一些信息的窗口。
Status Bar状态栏:该窗口包含错误警告、光标行列等一些状态信息。
(30)Debug调试菜单(调试模式才显示)
1.Go:全速运行 F5;
2.Break:停止运行;
3.Reset:复位;
4.Stop Debugging:停止调试 Ctrl + Shift + D;
5.Step Over:逐行运行 F10;
6.Step Into:跳入运行 F11;
7.Step Out:跳出运行 Shift + F11;
8.Next Statement:运行到下一语句;
9.Run to Cursor:运行到光标行;
10.AutoSetp:自动步骤运行;
11.Set Next Statement:设置下一条语句;
12.C++ Exceptions:C++异常;
13.Memory:内存保存/复位;
14.Refresh:调试更新;
15.Logging:调试日志;
注意:AutoSetp自动步骤运行:这个功能可以设定自动运行的xx模式,间隔xx时间运行,实践测试一下即明白,查看程序运行很方便;
(31)Disassembly反汇编菜单
这个菜单其实很简单,就是选择反汇编的模式,总共四种,我们一般选择自动模式(默认)。
(32)下载调试工具
这个菜单的内容会随你工程配置的下载调试改变而改变,可以看见上面截图中有两种类型(ST-Link和Simulator)。这个菜单里面的内容使用频率较少,可以这么说,初学者和一般的工程师都使用不到。
(33)Tools工具菜单:这个菜单主要是针对编辑代码相关的配置,对于自定义不同风格比较实用。
1.Options:工具配置选项;
Options工具配置选项是比较重要的一个菜单,里面包含了我们字体大小、颜色、快捷键、工程输出信息等一系列比较实用的内容。
2.Filename Extension:文件扩展名;
3.Configure Viewers:配置预览;
4.Configure Custom Argument Variables:配置自定义参数变量;
5.Configure Tools:配置工具;
Configure Tools配置工具可以增加一些相关的命令,有点类似于Keil目标配置选项中User里面用户添加命令。
6.Project Converter:工程转换;
Project Converter工程转换这个对于同时在Keil和IAR两个工具上开发的人比较实用,可以直接从Keil工程转换为IAR工程。操作很简单,找到需要转换的Keil工程,直接转换就是了,如下图:
(34)Help帮助菜单:非常有用
Content内容、Index索引、Search搜索是对应帮助文档里面的内容,如上:
Lincense Manager许可证管理,注册的时候就是这里。
About关于软件的版本信息。