文章目录

  • 前言
  • 一、正文
    • 1.Device
    • 2.target
    • 3.Output
    • 4.User
    • 4.C/C++
  • 再见

前言

我相信无论是新手还是使用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网络请求的数据。


再见

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

keil使用详解--魔法棒相关推荐

  1. keil使用详解--魔法棒后续

    文章目录 前言 一.正文 1.Asm 2.Linker 2.Debug Cortex JLink/JTrace Target Driver Setup 前言 上周对魔法棒的介绍只进行了一半,这周介绍剩 ...

  2. ARM 之十 ARMCC(Keil) map 文件(映射文件)详解

    在看这篇文章之前 需要对 ARM ELF 文件有一定的了解.了解什么是域(Region).节(Section,也称为节区).段(Segment).镜像(Image).镜像文件(Image File)等 ...

  3. keil MDK编译器警告和错误详解(不定期更新)

    工作后从单片机转成ARM,刚开始用ADS1.2编译器,用了一段时间,因为我接手的项目的老程序正是用ADS编译的,部门也大都在用.在学单片机的时候用的是keil c51编译器,ads和这个编译器在易用性 ...

  4. python魔法方法长文详解

    python魔法方法详解 1. 什么是魔法方法 魔法方式(Magic methods)是python的内置函数,一般以双下划线开头和结尾,比如__add__,__new__等.每个魔法方法都有对应的一 ...

  5. Python基础知识详解 从入门到精通(八)魔法方法

    目录 Python基础知识详解 从入门到精通(八)魔法方法 什么是魔法方法 基础魔法方法(较为常用) 比较操作符 算数运算符 反运算(类似于运算方法) 增量赋值运算 一元操作符 类型转换 上下文管理( ...

  6. 超级棒的一个DP问题详解(入门)

    超级棒的一个DP问题详解(入门) 只要耐心看肯定可以理解的~动态规划问题故事描述~ 通过金矿模型介绍动态规划 附上原文地址: http://www.cnblogs.com/sdjl/articles/ ...

  7. keil创建工程没有atmel_keil创建工程步骤详解

    iPhone的ECID是什么? ECID就是iPhone的身份证号,每一个iPhone都有自己的独特的ECID,有了这个ECID,就能确定一部iPhone的信息,获取方式可以通过在手机查看.查看注册表 ...

  8. 创造与魔法java语言_创造与魔法战宠技能详解 战宠技能汇总

    创造与魔法中战宠拥有不同的技能,熟悉并且灵活运用战宠可以使我们在打Boss的时候事半功倍,那么创造与魔法战宠技能分别有哪些呢?让我们一起来看看创造与魔法战宠技能详解汇总吧! 1.红蜥蜴[20级] 技能 ...

  9. 主成分分析(PCA)原理和鲁棒主成分分析(RPCA)详解

    主成分分析(PCA)原理和鲁棒主成分分析(RPCA)详解 1.相关背景 在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律.多变量大数据集无疑会为研究和应用 ...

最新文章

  1. C++/C++11中std::set用法汇总
  2. 关于虚拟机的三种网络接口模式(以VXBOX虚拟机为例)
  3. HDU 4850 Wow! Such String! 【欧拉回路】【一顿乱构造】
  4. 【动态规划】【多重背包】[HDU 1291]悼念512汶川大地震遇难同胞――珍惜现在,感恩生活...
  5. 面试官:你知道怎么求素数吗?
  6. python可视化数据分析交互作用_一文轻松看懂线性回归分析的交互作用!
  7. Java集合Collection接口中的常用方法演示
  8. python朴素贝叶斯分类的手写数字识别_关于利用机器学习进行手写数字的的识别...
  9. 318.最大单词长度乘积
  10. 一种应用于GPS反欺骗的基于MLE的RAIM改进方法
  11. k近邻算法 r语言_推荐 :R语言中K邻近算法的初学者指南(从菜鸟到大神-附代码&链接)...
  12. 【转】SD和SDHC和SDXC卡的区别
  13. 弗吉尼亚大学计算机专业如何,弗吉尼亚大学计算机工程专业研究生怎么样?
  14. sql中将字符串数字转换成数字
  15. lnmp环境加上一些包的安装-持续更新(针对centos6和7)
  16. What are Triangulation, Trilateration, and Multilateration?
  17. 解决 React Hooks 的闭包陷阱
  18. Java中有序与无序
  19. 基于若依系统进行模块化开发(使用eclipse)
  20. FPGA入门:QuartusⅡ实现半加器,全加器,四位全加器

热门文章

  1. 智谷趋势 | 中国面临一场清算式危机
  2. Window XP驱动开发(二十一) 过滤驱动程序
  3. glBufferSubData简介
  4. 计算机基础知识 上机 xp 试题,计算机应用基础上机指导及试题汇编
  5. Mac终端GBK乱码
  6. 图片合成matlab,【Matlab】表情合成尝试(1)——Matlab图像基本
  7. 文献分享:利用深度神经网络和单导联心电信号Detection of sleep apnea using deep neural networks and single-lead ECG signals
  8. ABBYY FineReader v15.0.110.1875破解版
  9. stm32 检测相位差 并简单实现两个单片机的通信
  10. Arduino使用磁簧开关