| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 【工具使用】Keil5软件使用-进阶工程配置篇 -> 正文阅读 |
|
[嵌入式]【工具使用】Keil5软件使用-进阶工程配置篇 |
一、概述????本文面向已经懂得软件基本操作的职业老手,如果是未使用过该软件的小鲜肉,请移步基础篇。这里以STM32芯片为例对工具进行讲解,其他品牌的芯片在工程配置上可能存在差异。 二、软件说明????Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。 三、软件使用1、设备选择(Device)
2、目标设置(Target)
????RTX(Real Time eXecutive)是ARM公司针对ARM7,ARM9,cortex-m内核推出的一款嵌入式实时操作系统。RTX的源码跟Keil-MDK绑定在一起,安装了Keil-MDK之后,可以在 Keil\ARM\RL\RTX\SRC文件夹下找到源码。
????在"Code Generation"中的"ARM Compiler"下拉选项框中可以选择不同的编译器版本。选择不同编译器版本时,工程配置的一些选项会有相应的变化,这里我们一般默认选用"Use defalut compiler version 5"即可。如果是全新的工程,可以试下V6的编译器,速度更快,但缺点就是跟现在大部分主流工程不兼容,因为使用的编译器完全不一样。
????在Xtal(MHz)后面可以填写当前使用的开发板上芯片系统使用的晶振频率。这个只会在仿真调试中使用,如果直接用开发板在线调试,这个可以不用管。
????勾选"Use Cross-Module Optimization"选择跨模块优化,此选项可在编译链接后对文件链接再进一步进行优化,从面减少一些开销。选择此功能时,可能会导致编译时间变长,但同样的可以使得编译后所使用的空间减少。
????勾选"Use MicroLIB"可选择使用标准缺省库,勾选这个会导致很多库函数且不了,但换来的是节省了大量的空间。
????如果是M3、M4内核,且芯片硬件有浮点计算单元,可通过勾选"Floating Point Hardware"打开硬件浮点计算功能。
????注意这里有IROM和ROM的区别,IROM是指片内集成的ROM(上面也有一行小字写了on-chip),也就是查芯片手册上规定好的内部Flash的地址段。先讲IROM,一般选好芯片后,工程会默认有一套配置,比如现在选的STM32F302RBTx,其片上Flash是0x8000000开始,大小是128K,也就是这里的0x20000字节。这前后有两个选项,“default"可以勾选启动时是否对此段ROM空间进行初始化。而"Startup"则可以勾选当前程序是要在哪个Flash段开始启动。
????注意这里有IRAM和RAM的区别,IRAM是指片内集成的RAM(上面也有一行小字写了on-chip),也就是查芯片手册上规定好的内部ram的地址段。 注:对于ROM跟RAM的设置,光靠这个界面设置并不全面,最直观的就是这里IRAM/IROM只有两段,而STM32H7B0光IRAM就有三段,根本不足以设置。所以想要设置全面,应该使用.sct文件,这个后面会讲到。
????在"System Viewer File"选项中勾选"Use Custom File",可以自主选择芯片的视图文件。现在国产化芯片越来越多,不同厂家芯片支持的视图可能不同。如果使用ST的芯片,这里不用改,使用默认文件即可。 3、输出设置(Output)
????在"Select Folder for Objects"里可以设置输出文件的路径,在"Name of Executable"后面可以设置输出的文件名。这个输出文件路径和文件名也是Keil工程烧录和调试获取文件的依据。 注:调试只能使用.axf文件,因为.Hex文件不带调试信息。
????勾选"Create HEX File"即可在编译后生成.hex文件。
????当需要封装模块或打包SDK包时,可以勾选"Create Library"这个选项,该选项与"Create Executable"互斥,选择生成.lib文件而不是完整的可执行.axf文件。这种一般是用于提供二次开发的软件包使用。
????勾选"Create Batch File"即可在编译后生成.bat的编译执行脚本,即可以不用打开Keil工程,只需要执行编译执行脚本即可编译工程软件。
????勾选"Debug Infomation"可以选择是否生成调试信息,注意去掉此勾选项时,无法打断点调试。
????勾选"Browse Infomation"可以选择是否生成浏览信息,有这个浏览信息时,可以在Keil里索引函数或变量的定义,调用等,没有这个信息就无法把这些信息关联起来。如果不用Keil作为代码编辑器的小伙伴,去掉这个勾选项,可以减少编译的时间。 4、生成列表设置(Listing)
Select Folder for Listings…:选择列表文件的输出路径。
Assembler Listing: .\Listings*.lst:为汇编源文件创建列表文件,对应产生源文件名.lst 的文件。
C Compiler Listing: .\Listings*.txt:为 C 源文件创建列表文件,对应产生 源文件名.txt 的文件 和 源文件名.lst 的文件。
Linker Listing: .\Listings\TestPro.map:主要是用来生成代码详细信息的map文件,用于后面的代码分析。这里面有选项建议全部勾选上。 5、用户选项(User)
Before Compile C/C++ File:编辑文件之前 ????一般编译完会生成.axf文件,如果要生成.bin文件,可以在编译后调用keil安装路径下/ARM/ARMCC/bin/fromelf.exe这个工具,提取.axf文件里的.bin文件。为了把这个操作集成在Keil里,这里可以在"After Build/Rebuild"下面的"Run #1"里添加
????勾选前面的选项框就可以在编译后执行。有时候如果不想执行该命令,可以把勾选去掉。 Run “After Build” conditionally:After Build/Rebuild的执行条件。没整明白这个有什么用 6、C/C++设置(C/C++)
Define:用于做一些工程全局宏定义。 注:在这里修改宏定义时,需要全编译才可生效,局部编译是不生效的哦
注:提升优化等级后,对代码的规范严格度提升,调试的友好程度会降低,请适当使用。 Optimize for Time:按时间性能优化,一般对代码执行时间比较敏感的,可以勾选这个选项,但勾选后为了提升时间性能,编译后可能会增加一部分空间占用。(鱼与熊掌不可兼得呀) Split Load and Store Multiple:加载和储存多个分裂;非对其数据采用多次访问方式,当LMD/STM指令有4个以上产生时,则分裂LMD和指令,以减小中断延迟。 One ELF Section per Function:优化每一段函数ELF段(建议都勾选);每个函数都会产生一个ELF段,勾选该功能允许优化每个ELF,可以减少潜在的共享地址、数据和函数之间的字符串;直白说就是可以减少代码量ROM的大小(内存RAM不会减少) Strict ANSI C:标准(严格)的ANSI C;即编译时严格按照标准的ANSI C进行检查。为了养成良好的编程习惯,写出更具移植性的代码,建议勾选。 Enum Container always int:枚举时成员变量总为int型。如果空间吃紧,这里就不建议勾选了。 Plain Char is Signed(看情况选择):字符类型为有符号变量。这个不得不说曾经踩过的坑,原本有个项目,从C51平台移植到ST的平台,发现怎么跑都不对劲,后面发现代码里很多8位的变量定义用的是char,在C51平台编译器编译成无符号类型,到ST平台就变成有符号类型。所以很多教材里说signed这个关键字可以省略,不适用于所有情况。为了可移植性,最好都写上,或者IDE里有类似这种选项时,要多留个心眼。 Read-Only Position Independent:为常量生成独立的代码空间;比如我们可以将字库变量定义为常量,勾选该功能后会将这些字库变量放在独立的代码空间中。 Read-Write Position Independent:为可读写代码生成独立的代码空间。 Warnings(建议All Warnings):No Warning:不会有警告提示和输出;All Warnings:所有警告提示和输出。建议选All Warnings,很多告警都不是空穴来风,检查下好点。 Thumb Mode(注意:在工程中该模式为默认,即无法选择):Thumb模式;指定设置文件或文件夹(组)为Thumb模式。 No Auto Includes(一般不勾选):不自动添加头文件;不勾选该项则编译器会在Keil安装路径下寻找工程中的 .h 文件。如果使用了标准库,勾选后Keil只会在工程路径下找库函数的头文件,如果没自己加进来一般是找不到的。 C99 Mode(看情况选择):C99模式,勾选选择启用C99标准,如不勾选,则按C89标准来。为了高移植性,不建议勾选。
Include Paths:包含路径,Keil编译时查找头文件,除了Keil本身安装路径下和自身工程路径,还有一个就是这里添加的路径。 Misc Controls:多功能控件,比如这里添加–gnu,可以使用gnu编程规范。 Compiler control string:编译器控制字符串,这个只是用来看当前的一些编译器设置,通过上面不同的勾选设置,这里会有不同的显示。如果没有Keil这种界面化工具,自己想要给编译器设置,就可以使用该窗口中的这些指令。 7、汇编设置(Asm)
Conditional Assembly Control Symbols(有条件的装配控制符号) Language/Code Generation(语言代码生成) 8、链接设置(Linker)
Make RW Sections Position Independent:使RW段独立。 一般这两项都是禁用状态,即程序所有编译出来的函数、变量等,都使用绝对地址,在Map文件中查看到的都是一个绝对地址,烧入板子中即可使用。那什么时候会把它开启呢?当有需要用到多个App,且App起始地址不固定时,就要使用此功能了。这个有兴趣可以单独开一篇详细讨论下。 Don’t Search Standard Libraries:不搜索标准库。 Report ‘might fail’ Conditions as Errors:报告’might fail’条件认为是错误。 X/O Base:X/O基地址 Misc controls:多功能控件。 9、调试设置(Debug)通过单选"Use Simulator"和"Use XXX"选择是用模拟仿真还是在线仿真 1. 在线仿真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的第一行打了第一个断点。如果不勾选时,一进入调试就全速跑。
使用上一次调试过程对Breakpoints,Watchpoints,Memory Display和Toolbox(如果这些项被选中的话)
Driver DLL:驱动动态库文件,后面Parameter是其对应参数。
Debug:调试选项栏
Unit:当前连接的烧录器设备,当同时连有多个设备时,这里可以切换选择。如果这里没有可选设备,说明当前电脑未识别到烧录器设备。
Port :端口类型,可以选择SW或JTAG接口,如果用的是Nucleo开发板,这里选SW接口。
连接跟复位设置(Connect & Reset Options)
SWDIO:通过SWD接口连接的设备列表,其中IDCODE为连接的设备ID,Device Name为连接的设备名称。如果当前烧录器跟芯片之间没有正常连接,此处不显示设备名称。 Trace:追踪选项栏Core Clock:核心时钟频率。设置跟当前板子相同的时钟频率,可以在调试时按实际运行时间进行追踪调试。 Flash Download:Flash下载选项栏
Erase Full Chip:擦除整片
RAM for Algorithm:给烧录算法的RAM空间,Start和Size分别设置对应Ram空间的起始地址和大小,这个一般选择完芯片后按默认就行,不用修改,如果有需要直接烧写的片外Flash的,可能需要自己写烧写算法的,此时就需要关注这个Ram空间是否容得下自己编写的烧录算法大小,需要做适当的调整。 2. 离线模拟仿真????基本设置跟在线是一样的,多了一个"Limit Speed to Real-Time"的选项,意思是把速度限制到实际时间。但Keil怎么知道实际速度是怎么样的呢?所以这里还需要设置一个运行频率,即前文说到,在Target里有个频率设置。勾选此选项后,在离线仿真时,代码执行速度就是按设定的运行频率来跑,接近实际板子的速度。如果不勾选,那就直接起飞了(按电脑频率来跑,有多快跑多快)。 10、实用程序(Utilities)
Use Target Driver for Flash Programming:使用跟调试一致的烧录器进行Flash下载。 Use External Tool for Flash Programming:使用第三方的工具进行Flash下载。
通过在编译过程中调用FCARM,输入配置映像文件处理(FCARM)的选项。这将把镜像文件转换成c源代码。其中Output File为输出的c文件名,Add Output File to Group这个默认不需要修改,Image Files Root Folder填写需要转换的镜像文件 四、注意事项
五、相关知识????STM32、RTX、FPU、SVD、Hex、Bin、axf、Lib、sct、烧录算法、启动文件、Map文件。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 16:54:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |