keil使用详解--魔法棒


前言

我相信无论是新手还是使用keil开发了多年的开发者有很大一部分都没有了解keil的所以开发和调试功能。这篇文章旨在将博主认知范围内的所有常用功能讲解清楚。首先先介绍魔法棒中的内容


一、正文

在这里插入图片描述
在这里插入图片描述

图中魔法棒是用keil开发过程中经常用到的功能,但是你真的了解和使用过其中的全部功能吗?

1.Device

在这里插入图片描述

这个页面功能很简单,就是选择我们工程对于的芯片类型,左侧是目前支持的芯片列表,右边的文本框是芯片的英文简介,上面有一个搜索框。不知道有没有人想过,有的国产MCU不在这个列表中我们怎么用keil进行开发呢?这个问题留在后面target解释。

2.target

在这里插入图片描述

在做stm32系列单片机开发的开发者们一般不是特别关注这个页面,因为在工程建立完成后一般这个页面的相关参数就已经固定了后期也不需要再做修改。还有一个因素,这个页面跟芯片的存储结构密切相关,一般芯片厂商会给用户配置好,用户不需要关注这些。所以很多开发者对这个页面的相关功能不甚了解。
在这里插入图片描述
这部分的内容主要显示了当前芯片的型号,使用的晶振频率。这个晶振频率在实际工程中是没有起到实际作用的。下面那个operating system也没有什么作用(这是我目前了解到的情况,可能有特殊的应用)。我们肯要关注一下红色方框中的内容,这里选了一个.sfr文件,这个在进行在线调试的时候我们使用的外设寄存器列表密切相关。所有的外设寄存器信息都是从这个.sfr文件中导入的。我们也可以自己创建.sfr文件。下面展示调试状态下显示的外设信息内容:
在这里插入图片描述
下一块内容:
在这里插入图片描述
Use Cross-Module Optimization不知道是啥功能,Big Endian不能选择。下面重点介绍Use MicroLIB。
Use MicroLIB是一个c语言标准库,它编译出来的固件相比传统的库的固件更小一点,当然性能相对差一些,如果是程序存储空间比较紧张的情况下可以将这个选项打勾。下面是使用和不使用这两个选项编译出来的固件的大小对比:


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


总结:经过对比测试,发现这两个能勾选的选项要配合使用能有效的减少代码量,没有使用或主要过相关功能的开发者可以尝试使用。

下一块内容:
在这里插入图片描述
我其实是从去年才开始注意这一块的内容的,这一块的内容与代码存储以及程序跳转有密切的关系。以上图片内容是STM32配置的内容。左侧通俗点讲是程序指令和只读数据存储区的配置,startup代表程序入口地址所在的区域,左边一般配置为Flash、OTP等存储器挂载在总线上的地址区域,当然我们的程序也可以执行在RAM中,所以左边也可以配置为RAM所在的总线地址区间。右边通俗讲是可读写数据存储的区域,例如栈和堆以及程序中的可读写全局变量,这一块的配置一般在RAM上所以一般配置为RAM所在总线的地址区间。另外,如果我们有多块存储器挂载在总线上时也可以配置多块。(后续有时间我将以程序运行在RAM上为例专门讲一下如何配置这两块的内容)。

3.Output

在这里插入图片描述
这部分主要时输出文件类型选择以及输出路径的配置,这里不做过多赘述。

4.User

在这里插入图片描述
User页面很多开发者几乎都不使用或很少使用,但是这个一块的内容却为keil功能扩展提供了可能。因为它提供了执行外部命令的接口。这里提供了三种状态下执行命令,分别是在编译c/c++文件前、运行Build/Rebuild操作前和运行完Build/Rebuild后执行。下面将给出使用示例:

示例一:我们经常需要输出固件的bin文件,我们可以使用keil自带的命令在程序建立完成后执行转换命令。
在这里插入图片描述
点击编译按钮,输出如下:
在这里插入图片描述
在这里插入图片描述
示例二:示例一展示了使用现有的命令去在编译完成后执行生成bin文件的任务。实际上我们完全可以执行任意我们想要的命令,在其给出的编译的三个阶段,包括我们自己写的命令或程序。这极大的提高了我们在开发过程中的灵活性,下面在示例儿中我将展示在编译前执行我用python脚本实现的自己的命令。
我用python实现了下面简单的脚本及在vscode中的执行结果截图:
在这里插入图片描述
下面我打包成exe并配置执行
在这里插入图片描述
执行结果:
在这里插入图片描述
我们发现在编译每一个c文件前都会执行一下我们自定义的命令,这个功能是不是给了你很多启发?如果你像我一样也掌握了像python这一的第二语言,是不是在开发的过程中可以实现许多自动化的功能以实现更加高效的开发?

4.C/C++

由于篇幅所限最后再介绍一下C/C++,这一部分主要介绍一下编译器优化等级:

在这里插入图片描述
如上图,配置合适的优化等级将高效的利用编译器的功能对程序进行优化,可以大大提高程序的效率以及对存储的优化。我们大多数都是使用O2优化,当然优化会带来程序的bug,有时候优化后不是我们想要的结果,这需要我们在使用的过程中积累经验;
O0:
在这里插入图片描述
O2:
在这里插入图片描述
通过对比O0和O2的优化,可以看到代码大小得到了有效的优化。

该处使用的url网络请求的数据。


再见

这篇文章就介绍到这里把,以后有时间相关的内容将会进一步介绍。希望感兴趣的朋友可以持续关注

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南波儿万

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值