【工具使用】Keil工具的使用——常用配置介绍

Keil调试具体教程学习

目录

​​​​​​​Keil调试具体教程学习

常用功能总结

(2)目标设置(Target)

①设置晶振频率

②跨模块优化选项

③微库选项

(3)输出设置(Output)

①输出文件路径和输入文件名称

②调试信息——Debug Infomation

③生成.Hex可执行文件——Create HEX File

④浏览信息——Browse Infomation

⑤生成.Lib封装库文件——Create Library

⑥生成.bat编译执行脚本——Create Batch File

(4)生成列表设置(Listing)

红框中:生成Map文件

(5)用户选项(User)

(6)C/C++设置(C/C++)

①预处理符号——Preprocessor Symbols

②语言/代码规则设置

(9)调试设置配置(Debug)

①在线仿真

②离线仿真


Keil调试具体教程学习

常用功能总结

(2)目标设置(Target)

①设置晶振频率

        在Xtal(MHz)后面可以填写当前使用的开发板上芯片系统使用的晶振频率,一般STM32开发板上的晶振都是8Mhz。这个只会在仿真调试中使用,如果直接用 ST-Link仿真器在开发板上在线调试,这个可以不用管。

②跨模块优化选项

        勾选 "Use Cross-Module Optimization" 选择跨模块优化,此选项可在编译链接后对文件链接再进一步进行优化,从而减少一些开销。选择此功能时,可能会导致编译时间变长,但同样的可以使得编译后所使用的空间减少,但一般不勾选。

③微库选项

        勾选 "Use MicroLIB" 可选择使用标准缺省库,勾选这个会导致很多库函数用不了,但换来的是节省了大量的空间。这个跟串口使用 printf 函数有关联,但一般不勾选。

(3)输出设置(Output)

①输出文件路径和输入文件名称

        在 "Select Folder for Objects" 里可以设置输出文件的路径,一般保存在我们创建的OBJ文件夹下;在 "Name of Executable" 后面可以设置输出的文件名。这个输出文件路径和文件名也是Keil工程烧录和调试获取文件的依据。

        比如这里输出路径设置为 /OBJ,文件名为Template,那烧录时,Keil会去查找当前工程路径下 /OBJ 路径下是否存在 Template.axf 这个文件,有就烧录,没有就报错。如果要使用.Hex文件烧录,则文件名这里填写TestPro.Hex。

        如果使用 ST-Link 仿真器下载调试,若勾选 Create HEX File ,点击Download默认烧录的是.Hex文件,无法进入在线调试;若不勾选 Create HEX File ,点击Download烧录的是.axf文件,是可以进入在线调试。

注:调试只能使用.axf文件,因为.Hex文件不带调试信息,另外若调试结束,点击关闭调试时会出现直接关闭工程文件,是因为你的工程文件包含中文,都改成英文就不会出现此问题。

②调试信息——Debug Infomation

        勾选 "Debug Infomation" 可以选择是否生成调试信息,注意去掉此勾选项时,无法打断点调试。一般勾选。

③生成.Hex可执行文件——Create HEX File

        勾选 "Create HEX File" 即可在编译后生成.hex文件。根据上述自己的需求,点击是否勾选。

④浏览信息——Browse Infomation

        勾选 "Browse Infomation" 可以选择是否生成浏览信息,有这个浏览信息时,可以在Keil里索引函数或变量的定义,调用等,没有这个信息就无法把这些信息关联起来。如果不用Keil作为代码编辑器的小伙伴,去掉这个勾选项,可以减少编译的时间。一般勾选。

⑤生成.Lib封装库文件——Create Library

        当需要封装模块或打包 SDK 包时,可以勾选 "Create Library" 这个选项,该选项与"Create Executable"互斥,选择生成.lib文件而不是完整的可执行.axf文件。这种一般是用于提供二次开发的软件包使用。一般不勾选。

⑥生成.bat编译执行脚本——Create Batch File

        勾选 "Create Batch File" 即可在编译后生成.bat的编译执行脚本,即可以不用打开Keil工程,只需要执行编译执行脚本即可编译工程软件。

(4)生成列表设置(Listing)

红框中:生成Map文件

  • Linker Listing: .\Listings\TestPro.map:主要是用来生成代码详细信息的map文件,用于后面的代码分析。这里面有选项建议全部勾选上。
  • Memory Map:包含一个内存映射,其中包含镜像中每个加载区,执行区和输入节的地址和大小,包括调试和链接器生成的输入节。
  • Callgraph:以HTML格式创建函数的静态调用图文件。调用图给出了镜像中所有函数的定义和参考信息。
  • Symbols:列出本地,全局和链接器生成的符号以及符号值。
  • Cross Reference:列出输入节之间的所有交叉引用。
  • Size Info:给出镜像中每个输入对象和库成员的代码和数据(RO数据,RW数据,ZI数据和调试数据)大小的列表。
  • Totals Info:提供输入对象和库的代码和数据(RO数据,RW数据,ZI数据和调试数据)大小的总和。
  • Unused Sections Info:列出从镜像中删除的所有未使用的部分。
  • Veneers Info:提供链接器生成的Thumb/ARM胶合代码的详细信息。

        Map文件主要用于查看你的代码所占空间的大小,如果你用到芯片内部的Flash的话,就需要查看你从哪里开始擦写Flash。

(5)用户选项(User)

Beep When Complete:编译完成发出声音。勾选时在编译完成时会响一下。

(6)C/C++设置(C/C++)

①预处理符号——Preprocessor Symbols

Define:用于做一些工程全局宏定义

注:在这里修改宏定义时,需要 全编译 才可生效,局部编译是不生效的

②语言/代码规则设置


Optimization:优化等级,这个会比较常用,当项目工程较大,对芯片空间比较吃紧时,可以考虑提升优化等级。ST的芯片这里有0~3,4个等级可选。

-O0应用最小优化大多数优化都被关闭,生成的代码具有最佳的调试视图。
-O1应用受限优化例如,删除未使用的内联函数和未使用的静态函数。在这个优化级别,编译器还应用自动优化,例如删除冗余代码和重新排序指令以避免互锁情况。生成的代码经过合理优化,具有良好的调试视图。
-O2应用高优化(这是默认设置)在此级别应用的优化利用了ARM对处理器体系结构的深入了解,利用给定目标的特定于处理器的行为。它生成优化良好的代码,但有限调试视图。
-O3应用最积极的优化优化符合用户的-Ospace / -Otime选择。默认情况下,多文件编译时启用,这会导致更长的编译时间,但会提供最高级别的优化。

        目前就使用经验来看,优化等级2节省的空间最多,具体原理还没去细究。

注:提升优化等级后,对代码的规范严格度提升,调试的友好程度会降低,请适当使用。

One ELF Section per Function:优化每一段函数ELF段(建议都勾选);每个函数都会产生一个ELF段,勾选该功能允许优化每个ELF,可以减少潜在的共享地址、数据和函数之间的字符串;直白说就是可以减少代码量ROM的大小(内存RAM不会减少),一般勾选。

Strict ANSI C:标准(严格)的ANSI C;即编译时严格按照标准的ANSI C进行检查。为了养成良好的编程习惯,写出更具移植性的代码,建议勾选。

Warnings(建议All Warnings):No Warning:不会有警告提示和输出;All Warnings:所有警告提示和输出。建议选All Warnings,很多告警都不是空穴来风,检查下好点。

C99 Mode(看情况选择):C99模式,勾选选择启用C99标准,如不勾选,则按C89标准来。为了高移植性,不建议勾选。

(9)调试设置配置(Debug)

通过单选 "Use Simulator" 和 "Use XXX" 选择是用模拟仿真还是在线仿真 

①在线仿真

Use ST-Link Debugger:选择烧录器类型,根据自己手头的烧录器,选择对应的品牌

Load Application at Startup:启动位置设置,从启动文件开始加载。不勾选时,在进入调试时,不会重新从启动开始执行,但不勾选时,需要手动添加 .ini 文件,把 .axf 的调试信息放到 Keil 里,不然进入调试时无法打断点,也无法追踪到当前程序位置。这点在网上查 “如何不复位进入调试”很多会提到这个勾选项,但很少有提及这个.ini的事情,有也是一带而过。

Initlalization File:初始化文件,承接上文,只要新建一个XXX.ini文件(文件名随意),点击…按钮,添加该文件,点旁边的 "Edit" 按钮,在文件中添加 “LOAD %L INCREMENTAL” 这一句即可。

Run to main():跑进main函数,进入调试后,会在main里停止,相当于是在main的第一行打了第一个断点。如果不勾选时,一进入调试就全速跑。

Restore Debug Session Settings:复位调试会话设置,使用上一次调试过程对Breakpoints,Watchpoints,Memory Display和Toolbox(如果这些项被选中的话)。

  • Breakpoints:断点
  • Watch Windows:变量调试窗口
  • Memory Display:查看内存的窗口
  • Toolbox:工具栏
  • System Viewer:系统视图

Driver DLL: 驱动动态库文件,后面Parameter是其对应参数。
Dialog DLL:会话框动态库文件,后面Parameter是其对应参数。

Parameter 均为:-pSTM32F103ZE,用于设置支持 STM32F103ZE 的软硬件仿真(即可以通过 Peripherals 选择对应外设的对话框观察仿真结果)。最后点击 OK,完成设置。
这些是仿真的时候需要用到的动态库,一般不用修改,使用默认值就行,这些动态库在Keil的安装路径下了可以找得到。

点击进入Settings——Trace追踪选项栏:

Core Clock:核心时钟频率。设置跟当前板子相同的时钟频率,可以在调试时按实际运行时间进行追踪调试。或者在设置晶振频率处 Xtal(MHz)输入与开发板上的晶振相同的频率。否则调试的时间是不对的。

Flash Download下载选项栏:

1.下载动作设置(Download Function)

Erase Full Chip:擦除整片
Erase Sectors:擦除部分
Do not Erase:不擦除
        勾选Erase Full Chip时,每次下载时,都会对整片Flash进行擦除操作。勾选Erase Sectors时,下载时只会擦除使用到的扇区。勾选Do not Erase时,则下载时不擦除原本代码。
Program:烧录
Verify:校验
Reset and Run:复位并运行
        勾选Program时,下载时才会把代码写入Flash,否则不写入。勾选Verify时,则在烧录代码后,对代码进行校验。某些场合下不能检验,比如代码段跟数据段分开下载,代码里不包含数据部分,而工程里配置的代码段又包含数据段时,此时如果进行校验,可能会因为数据内容不一致导致校验失败。勾选Reset and Run时,则在下载完成后立即复位运行代码,不勾选时则需要手动复位运行。

2.烧录算法(RAM for Algorithm)

        RAM for Algorithm:给烧录算法的 RAM 空间,Start 和 Size 分别设置对应 Ram 空间的起始地址和大小,这个一般选择完芯片后按默认就行,不用修改,如果有需要直接烧写的片外Flash的,可能需要自己写烧写算法的,此时就需要关注这个Ram空间是否容得下自己编写的烧录算法大小,需要做适当的调整。 

3.Programming Algorithm

        Programming Algorithm:烧录算法选择,一般选择完芯片后,这里都会自动选择对应的烧录算法,如果不显示则需要手动添加,不然会导致烧录失败。如果是使用国产芯片,也需要手动添加烧录算法。添加方式很简单,把对应的算法文件(后缀是FLM)放到Keil安装根目录Keil_v5/ARM/Flash路径下,点Add按钮,选择对应的文件即可。

        如果选择好芯片型号,这里自动会更新与之相匹配的烧录算法,比如芯片选择STM32F103ZET6这里有512k的选择,若是选择STM32F103C8T6这里会有128K的选择,该文件是在Keil安装目录底下找不到的,都在芯片包里。

②离线仿真

        基本设置跟在线是一样的,多了一个 "Limit Speed to Real-Time" 的选项,意思是把速度限制到实际时间。但Keil怎么知道实际速度是怎么样的呢?所以这里还需要设置一个运行频率,即前文说到,在 Target 里有个频率设置。勾选此选项后,在离线仿真时,代码执行速度就是按设定的运行频率来跑,接近实际板子的速度。如果不勾选,那就直接起飞了(按电脑频率来跑,有多快跑多快)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/167360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

插入排序(形象类比)

最近在看riscv手册的时候,里面有一段代码是插入排序,但是单看代码的时候有点迷,没看懂咋操作的,后来又查资料复习了一下,最终才把代码看明白,所以写篇博客记录一下。 插入排序像打扑克牌 这是我听到过比较形…

list的总结

目录 1.什么是list 1.1list 的优势和劣势 优势: 劣势: 2.构造函数 2.1 default (1) 2.2 fill (2) 2.3 range (3) 2.4 copy (4) 3.list iterator的使用 3.1. begin() 3.2. end() 3.3迭代器遍历 4. list容量函数 4.1. empty() 4.2. siz…

语音合成综述Speech Synthesis

一、语音合成概述 语音信号的产生分为两个阶段,信息编码和生理控制。首先在大脑中出现某种想要表达的想法,然后由大脑将其编码为具体的语言文字序列,及语音中可能存在的强调、重读等韵律信息。经过语言的组织,大脑通过控制发音器…

qRT-PCR相对定量计算详解qPCR相对定量计算方式——2^-(∆∆Ct) deta t

做完转录组分析之后,一般都要求做qRT-PCR来验证二代测序得到的转录本表达是否可靠。荧光定量PCR是一种相对表达定量的方法,他的计算方法有很多,常用的相对定量数据分析方法有双标曲线法,ΔCt法,2^-ΔΔCt法(Livak法)&a…

顺序表基本操作全面解析

文章目录 1.线性表2.顺序表分类2.1 静态顺序表2.2 动态顺序表 3. 顺序表各接口实现1. 定义结构体(Seqlist)2. 结构体初始化(SLInit)3.检查容量 (SLCheckCapacity)4.打印数据 (SLPrintf)5.插入操作5.1 从数据头部插入(SLPushFront)5.2 从数据尾部插入(SLPushBack)5.3 从任意下标…

GEE:基于 Landst 遥感数据计算的 kNDVI 下载 APP

作者:CSDN _养乐多_ 本文记录了在Google Earth Engine(GEE)平台中,使用 Landsat 遥感数据计算并且下载 kNDVI 的应用 APP 链接,并介绍该 APP 的使用方法和步骤。该APP可以为用户展示 NDVI 和 kNDVI 的遥感影像&#…

抽象类, 接口, Object类 ---java

目录 一. 抽象类 1.1 抽象类概念 1.2 抽象类语法 1.3 抽象类特性 1.4 抽象类的作用 二. 接口 2.1 接口的概念 2.2 语法规则 2.3 接口的使用 2.4 接口间的继承 2.5 抽象类和接口的区别 三. Object类 3.1 toString() 方法 3.2 对象比较equals()方法 3.3 hash…

免费获取GPT-4的五种工具

不可否认,由OpenAI带来的GPT-4已是全球最受欢迎的、功能最强大的大语言模型(LLM)之一。大多数人都需要使用ChatGPT Plus的订阅服务去访问GPT-4。为此,他们通常需要每月支付20美元。那么问题来了,如果您不想每月有这笔支…

基于JavaWeb+SpringBoot+Vue医院管理系统小程序的设计和实现

基于JavaWebSpringBootVue医院管理系统小程序的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏[Java 源码获取 源码获取入口 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.1微信小程序 2 2.2 …

井盖位移传感器厂家批发,守护井盖安全

窨井盖广泛分布于城市街道,其管理效果直接反映了城市治理的现代化程度。根据住房和城乡建设部发布的《关于进一步加强城市窨井盖安全管理的通知》,全国各地需加强窨井盖的安全管理。作为市政基础设施的一个重要的组成部分,井盖的管理工作不仅…

去水印网站哪个好?试试这个去水印软件!

在工作中,我们都曾遇到过图片水印的困扰。在众多的在线水印去除工具中,虽然选择看似丰富,但往往很难找到完全满足我们需求的那一个。有些工具操作过程繁复,有些工具在处理复杂水印时力不从心,还有些工具在去水印的过程…

【Spring日志】

一.日志作用 1.定位和发现问题 这是日志的主要用途,通过查看日志,我们可以定位问题发生的位置,从而快速的发现问题,分析问题. 2.系统监控 监控几乎是一个成熟系统的标配,我们可以通过日志记录这个系统的运行状态,比如记录方法的响应时间,响应状态,通过设置不同的规则,超过阈值就…

葡萄酒按酒体如何分类,都有什么特点?

葡萄酒的酒体是指酒液在口腔中的饱满度和分量感,品酒者常用“轻盈”“厚重”“适中”等词汇来形容。所以,云仓酒庄的品牌雷盛红酒分享在葡萄酒分类中还有一个类型,就是按照酒体进行分类。一般分为轻盈型、中等型、饱满型。 轻盈型&#xff1…

海外https代理ip如何保障信息安全?该怎么选择?

海外https代理ip是指通信协议为https的海外真实网络地址ip,通常应用在各种跨境业务中。 一、什么是HTTPS协议 HTTP协议是一个应用层协议,通常运行在TCP协议之上。它是一个明文协议,客户端发起请求,服务端给出响应的响应。由于网…

表单邮箱密码登录 原生+Jquery实现

文章目录 效果代码邮箱验证正则表达式HTMLCSS JS 效果 正确密码为:123456 点击登录按钮校验。 代码 表单校验 - CodeSandbox 邮箱验证正则表达式 /(?:[a-z0-9!#$%&*/?^_{|}~-](?:\.[a-z0-9!#$%&*/?^_{|}~-])*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1…

Excel表中合并两个Sheet的方法?

按AltF11,调出Visual Basic 界面。 在左侧窗口中,右键选择“插入”—“模块”: 将如下代码粘贴进去,点击运行按钮,完成数据表合并。 Sub MergeAllSheetsInThisWorkbook() On Error Resume Next Application.ScreenU…

JOSEF约瑟 热过载保护继电器 JR36-160,整定值100-160A

系列型号 JR36-20 1.0-1.6A热继电器 JR36-20 0.25-0.35A热继电器 JR36-20 0.32-0.5A热继电器 JR36-20 0.45-0.72A热继电器 JR36-20 0.68-1.1A热继电器 JR36-20 1.5-2.4A热继电器 JR36-20 2.2-3.5A热继电器 JR36-20 3.2-5A热继电器 JR36-20 4.5-7.2A热继电器 JR36-20 …

客户案例:保障高校邮件安全,守护教育信息安全堡垒

客户背景 电子科技大学(以下简称“电子科大”),位于四川省成都市,是一所历史悠久、实力雄厚的综合性工业大学。作为我国重点建设的双一流高校,电子科大在国内外均享有盛誉,其学科涵盖了理、工、管、文等多…

7.5 Windows驱动开发:监控Register注册表回调

在笔者前一篇文章《内核枚举Registry注册表回调》中实现了对注册表的枚举,本章将实现对注册表的监控,不同于32位系统在64位系统中,微软为我们提供了两个针对注册表的专用内核监控函数,通过这两个函数可以在不劫持内核API的前提下实…

Android runtime层是如何通过缩减代码来缩减内存的

文章目录 前言:Android 在设备上改进内存的秘密优化编译器101代码大小改进消除写入障碍隐式暂停检查合并回调其他优化改进代码下沉循环优化消除死代码 – SimplifyAlwaysThrows加载存储消除 – 使用 try catch 块加载存储消除 – 使用释放/获取操作新的内联启发式不…