【工具使用】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 里有个频率设置。勾选此选项后,在离线仿真时,代码执行速度就是按设定的运行频率来跑,接近实际板子的速度。如果不勾选,那就直接起飞了(按电脑频率来跑,有多快跑多快)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java枚举详解

一、什么是枚举类型 枚举类型是一种特殊的数据类型,用于定义一组固定的命名常量。枚举类型提供了一种更强大、更安全和更易读的方式来表示一组相关的常量。 在Java中,枚举类型是通过使用enum关键字来定义的。枚举类型可以包含一个或多个枚举常量&#xf…

P1028 [NOIP2001 普及组] 数的计算

时刻记住一句话:写递归,1画图,2大脑放空!!! 意思是,自己写递归题目,先用样例给的数据画图,然后想一个超级简单的思路,直接套上去就可以了。 上题干&#xff…

Theta*: Any-Angle Path Planning on Grids 原文翻译

Theta*: Any-Angle Path Planning on Grids 文章目录 Theta*: Any-Angle Path Planning on Grids翻译摘要1.Introduction2. Path-Planning Problem and Notation3. Existing Terrain Discretizations4.Existing Path-Planning Algorithms4.1 A* on GridsA* with Post-Smoothed …

EFAK-v3.0.1版部署与使用

一、前言 EFAK((Eagle For Apache Kafka,以前称为Kafka Eagle)用于在使用 Topic 的情况下监控 Kafka 集群。包含Offset 的产生、Lag的变化、Partition的分布、Owner、Topic的创建以及修改的时间等信息。 二、环境&安装包 官方下载连接E…

2023年【R1快开门式压力容器操作】考试资料及R1快开门式压力容器操作复审考试

题库来源:安全生产模拟考试一点通公众号小程序 R1快开门式压力容器操作考试资料参考答案及R1快开门式压力容器操作考试试题解析是安全生产模拟考试一点通题库老师及R1快开门式压力容器操作操作证已考过的学员汇总,相对有效帮助R1快开门式压力容器操作复…

运动鞋品牌识别

一、前期工作 1. 设置GPU from tensorflow import keras from tensorflow.keras import layers,models import os, PIL, pathlib import matplotlib.pyplot as plt import tensorflow as tfgpus tf.config.list_physical_devices("GPU")if gpus:gpu0 …

【Spring Boot 源码学习】自定义 Banner 信息打印

Spring Boot 源码学习系列 自定义 Banner 信息打印 引言往期内容主要内容1. ResourceBanner 打印1.1 添加默认的 banner.txt 资源文件1.2 指定任意路径的资源文件1.3 添加自定义的信息 2. ImageBanner 打印2.1 添加默认的图像资源文件2.2 指定任意路径的图像资源文件2.3 添加自…

网站监控是什么

在当今高度互联的世界中,网站已成为企业和个人成功的关键因素。无论是提供产品或服务,还是建立品牌形象,网站都是不可或缺的工具。然而,随着互联网用户对访问速度和用户体验的高要求,保持网站的稳定性和可用性变得至关…

旋转的数组

分享今天看到的一个题目,不同思路解法 题目 思路1:时间复杂度0(N*k) void rotate(int *a,int N,int k)//N为数组元素个数 { while(k--) { int tema[N-1]; for(int rightN-2;right>0;right--) { a[right1]a[right]; } a[0]tem; …

Seata的部署和集成

文章目录 一、部署Seata的tc-server1.下载2.解压3.修改配置4.在nacos添加配置5.创建数据库表6.启动TC服务 二、微服务集成seata1.引入依赖2.修改配置文件 三、TC服务的高可用和异地容灾1.模拟异地容灾的TC集群2.将事务组映射配置到nacos3.微服务读取nacos配置 一、部署Seata的t…

静态web服务器开发之HTTP协议

文章目录 版权声明HTTP协议网址HTTPS补充:HTTP的无状态特性浏览器访问Web服务器流程HTTP协议请求报文HTTP GET请求报文分析POST请求方式要点总结 HTTP协议响应报文HTTP 响应报文分析HTTP 状态码要点总结 HTTP协议通信过程查看 版权声明 本博客的内容基于我个人学习…

矩阵论(Matrix)

​ 大纲 矩阵微积分:多元微积分的一种特殊表达,尤其是在矩阵空间上进行讨论的时候逆矩阵(inverse matrix)矩阵分解:特征分解(Eigendecomposition),又称谱分解(Spectral decomposition&#xf…

Spark SQL 时间格式处理

初始化Spark Sql package pbcp_2023.clear_dataimport org.apache.spark.SparkConf import org.apache.spark.sql.SparkSession import org.apache.spark.sql.functions.{current_date, current_timestamp}object twe_2 {def main(args: Array[String]): Unit {val con new …

优秀的时间追踪软件Timemator for Mac轻松管理时间!

在现代社会,时间管理成为了我们工作和生活中的一大挑战。如果你经常感到时间不够用,无法高效地完成任务,那么Timemator for Mac将成为你的得力助手。 Timemator for Mac是一款出色的时间追踪软件,它可以帮助你精确记录和管理你的…

Codeforces Round 786 (Div. 3) D. A-B-C Sort

D. A-B-C Sort 步骤 1 :当 a不为空时,从 a中取出最后一个元素,并将其移动到数组 b的中间。如果 b 当前长度为奇数,则可以选择:将 a 中的元素放到 b 中间元素的左边或右边。结果, a 变空, b 由 n…

【2023.11.24】Mybatis基本连接语法学习➹

基本配置 1.如果使用Maven管理项目&#xff0c;需要在pom.xml中配置依赖。 2.安装Mybatis-3.5.7.jar包 3.进行XML配置&#xff1a;这里将文件命名为mybatis-config.xml 配置数据库连接XML文件 <?xml version"1.0" encoding"UTF-8" ?> <!DO…

数据结构-归并排序+计数排序

1.归并排序 基本思想&#xff1a; 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列有序&#xff0c;再使子序列段间有序。若将两个有序表合并成一个…

Relabel与Metic Relabel

Prometheus支持多种方式的自动发现目标&#xff08;targets&#xff09;&#xff0c;以下是一些常见的自动发现方式&#xff1a; 静态配置&#xff1a;您可以在Prometheus配置文件中直接列出要监测的目标。这种方式适用于目标相对稳定的情况下&#xff0c;例如固定的服务器或设…

【多线程】Thread类的使用

目录 1.概述 2.Thread的常见构造方法 3.Thread的几个常见属性 4.启动一个线程-start() 5.中断一个线程 5.1通过共享的标记来进行沟通 5.2 调用 interrupt() 方法来通知 6.等待一个进程 7.获取当前线程引用 8.线程的状态 8.1所有状态 8.2线程状态和转移的意义 1.概述 …

字节序

计算机硬件有两种储存数据的方式&#xff1a;大端字节序big endian 和 小端字节序 little endian。 数值0x2211使用两个字节储存&#xff1a;高位字节是0x22&#xff0c;低位字节是0x11。 大端字节序&#xff1a;低位放高地址&#xff0c;高位字节在低地址&#xff0c;地址空间…