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

news2024/11/15 21:24:36

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.coloradmin.cn/o/1247929.html

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

相关文章

【自主探索】基于 frontier_exploration 的单个机器人自主探索建图

文章目录 一、概述1、功能2、要求 二、使用方法1、用于运行演示2、用于开发人员2.1. 探索无/地图数据2.2. 使用 /map 数据进行探索 三、提供的组件1、explore_client1.1. 调用的操作1.2. 订阅主题1.3. 发布主题 2、explore_server2.1. 提供的操作2.2. 调用的操作2.3. 调用的服务…

手把手教你,怎么制作出满意的组织架构图

组织架构图在企业管理中起着重要的作用,它可以清晰地展示一个组织的层级结构、职责分工和工作流程。通过组织架构图,领导者可以更好地了解和掌握企业的人员组成和管理情况,帮助他们做出更明智的决策。此外,组织架构图也可以提高企…

首先啊骚年们我们必须先了解网络安全这个行业究竟是干啥的。

导 读 近年来,人工智能、5G、量子信息技术、工业互联网、大数据、云计算、物联网、虚拟现实、区块链等具有颠覆性的战略性新技术突飞猛进,但伴随着互联网技术的发展,网络安全问题也日趋多样化,甚至严重威胁到国家、企业&#xff…

03.依赖倒置原则(Dependence Inversion Principle)

概述 高层模块不应依赖低层模块,二者都应该依赖其抽象。而抽象不应依赖细节,细节应该依赖抽象。依赖倒置原则的中心思想其实就是面向接口编程。 相对于细节的多变性,抽象的东西会稳定的多,所以以抽象为基础搭建的架构自然也会比以…

【Tiny_CD】Tiny_CD变化检测网络详解(含python代码)

题目:TinyCD: A (Not So) Deep Learning Model For Change Detection 论文:paper 代码:code 目录 🍟 🍟1.摘要 🍗🍗 2.贡献 🍖🍖 3.网络结构

语音合成综述Speech Synthesis

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

python中pprint()与print()

平常经常使用print(),今天突然看到pprint(),好奇查了下,记录。 统而言之,pprint()更适合打印结构化数据,对于可读性有很大的提升 这里有两个对象在一个arry里面,普通的print直接全部打印出来,而…

贝锐花生壳:无需公网IP、简单3步,远程访问群晖NAS

面对NAS远程访问难题,贝锐花生壳一招搞定!并且无需公网IP、简单3步,即可实现固定域名远程访问NAS。 步骤1: 目前,群晖NAS已在套件中心内置花生壳客户端。 浏览器进入群晖NAS的DSM管理界面,点击【套件中心】…

机器学习算法(1)——简单线性回归

一、说明 在在这篇文章中,我们将学习我们的第一个机器学习算法,称为简单线性回归。这是一个重要的算法,因为当您可能正在学习第一个神经网络(称为人工神经网络)时,在此算法中学习的技术也适用于深度学习。我…

OpenStack云计算平台

目录 一、OpenStack 1、简介 2、硬件需求 3、网络 二、环境搭建 1、安全 2、主机网络 3、网络时间协议(NTP) 4、OpenStack包 5、SQL数据库 6、消息队列 7、Memcached 一、OpenStack 1、简介 官网:https://docs.openstack.org/2023.2/ OpenStack系统由…

简单使用YOLOv5自己训练模型

使用YOLOv5自己训练模型 前言:本文基于我的另一篇文章作为基础,文章戳这里,主要还是实操为主,让大家能快速上手使用。 数据集构建 1.准备工作 数据收集: 图片类型数据 视频类型数据(使用opencv进行视频…

矩阵论(Matrix)

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

【MATLAB源码-第88期】基于matlab的灰狼优化算法(GWO)的栅格路径规划,输出做短路径图和适应度曲线

操作环境: MATLAB 2022a 1、算法描述 灰狼优化算法(Grey Wolf Optimizer, GWO)是一种模仿灰狼捕食行为的优化算法。灰狼是群居动物,有着严格的社会等级结构。在灰狼群体中,通常有三个等级:首领&#xff…

java中 自动装箱与拆箱,基本数据类型,java堆与栈,面向对象与面向过程

文章目录 自动装箱与拆箱基本数据类型与包装类的区别(int 和 Integer 有什么区别)应用场景的区别: 堆和栈的区别重点来说一下堆和栈:那么堆和栈是怎么联系起来的呢? 堆与栈的区别 很明显:延伸:关于Integer…

python opencv 边缘检测(sobel、沙尔算子、拉普拉斯算子、Canny)

python opencv 边缘检测(sobel、沙尔算子、拉普拉斯算子、Canny) 这次实验,我们分别使用opencv 的 sobel算子、沙尔算子、拉普拉斯算子三种算子取进行边缘检测,然后后面又使用了Canny算法进行边缘检测。 直接看代码,代…

【腾讯云云上实验室-向量数据库】基于向量数据的客户价值体系推荐系统设计

【腾讯云云上实验室-向量数据库】深入浅出-基于向量分析的客户价值体系推荐系统设计 前言 很早之前就有过想写推荐系统系列文章了,本人曾任职高级大数据工程师全程参与过推荐系统的搭建,故在搭建推荐系统算得上是有一定的经验。推荐系统搭建有相当多的…

UI自动化(selenium+python)之元素定位的三种等待方式!

前言 在UI自动化过程中,常遇到元素未找到,代码报错的情况。这种情况下,需要用等待wait。 在selenium中可以用到三种等待方式即sleep,implicitly_wait,WebDriverWait 一、固定等待(sleep) 导入time模块,设定固定的等待时间 缺…

【点云surface】无序点云快速三角化

1 介绍 GreedyProjectionTriangulation 是一种基于局部二维投影的三维点贪婪三角剖分算法的实现。它假定局部表面光滑,不同点密度区域之间的过渡相对平滑。 GreedyProjectionTriangulation算法的基本思想是通过逐步投影点云数据到一个三角化网格上来进行重建。它首…

Pycharm创建项目新环境,安装Pytorch

在python项目中,很多项目使用的各类包的版本是不一致的。所以我们可以对每个项目有专属于它的环境。所以这个文章就是教你如何创建新环境。 一、创建新环境 二、下载安装包 在下载安装包时,可以加入清华源,这样下载更快!不然有时…

消息推送到微信,快速实现WxPusher

文章目录 前言一、平台二、代码总结 前言 我的博客里也有其他方法,测试了下感觉这个方法还是比较实用。 一、平台 先仔细阅读下平台的使用方法。 平台地址请点击 二、代码 import requests text 孪生网络模型已经训练完成,请注意查阅相关信息。 req…