一、文件说明

MDK的编译过程及文件类型全解
Keil MDK本质上实现交叉编译链的功能,只是界面上采用eclipse IDE,从这个角度理解,MDK工程文件类型可以分为两类,工程本身的文件和源码编译文件。
(1)工程本身文件
工程文件主要包括.uvprojx、.uvoptx、.uvguix及.crf、.dep等。

uvprojx文件
uvprojx文件就是我们平时双击打开的工程文件,它记录了整个工程的结构,如芯片类型、工程包含了哪些源文件等内容;

uvoptx文件
uvoptx文件记录了工程的配置选项,如下载器的类型、变量跟踪配置、断点位置以及当前已打开的文件等等;

uvguix文件 uvguix文件记录了MDK软件的GUI布局,如代码编辑区窗口的大小、编译输出提示窗口的位置等等。

uvprojx、uvoptx及uvguix都是使用XML格式记录的文件,若使用记事本打开可以看到XML代码。而当使用MDK软件打开时,它根据这些文件的XML记录加载工程的各种参数,使得我们每次重新打开工程时,都能恢复上一次的工作环境。这些工程参数都是当MDK正常退出时才会被写入保存,所以若MDK错误退出时(如使用Windows的任务管理器强制关闭),工程配置参数的最新更改是不会被记录的,重新打开工程时要再次配置。根据这几个文件的记录类型,可以知道uvprojx文件是最重要的,删掉它我们就无法再正常打开工程了,而uvoptx及uvguix文件并不是必须的,可以删除,重新使用MDK打开uvprojx工程文件后,会以默认参数重新创建uvoptx及uvguix文件。(所以当使用Git/SVN等代码管理的时候,往往只保留uvprojx文件)。

.crf交叉引用文件
.crf是交叉引用文件(Cross-Reference file),它主要包含了浏览信息(browse
information),即源代码中的宏定义、变量及函数的定义和声明的位置。我们在代码编辑器中点击“Go To Definition Of
‘xxxx’”可实现浏览跳转,跳转的时候,MDK就是通过.crf文件查找出跳转位置的。

.dep和.d依赖文件 .dep和.d文件(Dependency
file)记录的是工程或其它文件的依赖,主要记录了引用的头文件路径,其中.dep是整个工程的依赖,它以工程名命名,而.d是单个源文件的依赖,它们以对应的源文件名命名。这两个文件类似于makefile文件。这些记录使用文本格式存储,我们可直接使用记事本打开。

//IAR
.eww           // Workspace file
.ewp           // IAR Embedded Workbench project
.ewd           // Project settings for C-SPY
.ewt           // Project settings for C-STAT and C-RUN</td>
.dep           // Dependency information

(2)源码编译文件
源码编译文件主要有.s .c .h .inc .o .axf .elf .lib .bin .hex等。如下是整个嵌入式程序编译过程:

过程如下:

  1. 编译,MDK软件使用的编译器是armcc和armasm,它们根据每个c/c++和汇编源文件编译成对应的以“.o”为后缀名的对象文件(Object Code,也称目标文件),其内容主要是从源文件编译得到的机器码,包含了代码、数据以及调试使用的信息;
  2. 链接,链接器armlink把各个.o文件及库文件链接成一个映像文件“.axf”或“.elf”;
    格式转换,一般来说Windows或Linux系统使用链接器直接生成可执行映像文件elf后,内核根据该文件的信息加载后,就可以运行程序了,但在单片机平台上,需要把该文件的内容加载到芯片上,所以还需要对链接器生成的elf映像文件利用格式转换器fromelf转成“.bin”或“.hex”文件,交给下载器下载到芯片的FLASH或ROM中。

.o、.elf、.axf、.lib .bin及.hex目标文件这些文件都存储了编译器根据源代码生成的机器码,根据应用场合的不同,它们又有所区别。它们都是属于目标文件,都是使用ELF格式来存储的,关于ELF格式的详细内容请参考配套资料里的《ELF文件格式》文档了解,它讲解的是Linux下的ELF格式,与MDK使用的格式有小区别,但大致相同。在本教程中,仅讲解ELF文件的核心概念。

文件类型说明:

ELF是Executable and Linking Format的缩写,译为可执行链接格式,该格式用于记录目标文件的内容。在Linux及Windows系统下都有使用该格式的文件(或类似格式)用于记录应用程序的内容,告诉操作系统如何链接、加载及执行该应用程序。

目标文件主要有如下三种类型:

可重定位的文件(Relocatable File),包含基础代码和数据,但它的代码及数据都没有指定绝对地址,因此它适合于与其他目标文件链接来创建可执行文件或者共享目标文件。 这种文件一般由编译器根据源代码生成。例如MDK的armcc和armasm生成的.o文件就是这一类,另外还有Linux的.o文件,Windows的 .obj文件。

可执行文件(Executable File) ,它包含适合于执行的程序,它内部组织的代码数据都有固定的地址(或相对于基地址的偏移),系统可根据这些地址信息把程序加载到内存执行。这种文件一般由链接器根据可重定位文件链接而成,它主要是组织各个可重定位文件,给它们的代码及数据一一打上地址标号,固定其在程序内部的位置,链接后,程序内部各种代码及数据段不可再重定位(即不能再参与链接器的链接)。例如MDK的armlink生成的.elf及.axf文件,(使用gcc编译工具可生成.elf文件,用armlink生成的是.axf文件,.axf文件在.elf之外,增加了调试使用的信息,其余区别不大,后面我们仅讲解.axf文件),另外还有Linux的/bin/bash文件,Windows的.exe文件。

共享目标文件(Shared Object File)。得到生成的.lib文件后,可把它像C文件一样添加到其它工程中,并在该工程调用lib提供的函数接口,除了不能看到.lib文件的源码,在应用方面它跟C源文件没有区别。MDK生成的*.lib文件就属于共享目标文件,它可以继续参与链接,加入到可执行文件之中。另外,Linux的.so,如/lib/ glibc-2.5.so,Windows的DLL都属于这一类。

二、安装pack
1、keil官网下载pack包,点击工具栏的“Pack Installer”,File->import添加
2、直接更新

三、使用技巧

1、查看文件中的所有函数

左侧工程目录,有个functions选项卡,右键去掉“scan project files”,保留“scan current editor files",显示打开文件中的所有函数。

2、修改keil mdk5工程名

(1)修改工程名
点击mdk5工具栏三个方块图标,Manage Project Items,直接修改工程名字。
(2)生成hex文件
默认在rtthread工程根目录生成rtthread.bin文件。若要在build目录生成hex文件:
点击魔法棒->output选项卡->勾选Create Hex File->填写name of excutable

3、keil 快捷键

F7                编译
F8              下载
F12             跳转到定义
ctrl + -        上个位置
ctrl+shift+-    下个位置

Keil MDK5使用相关推荐

  1. KEIL MDK5 更好用 更简洁 的ARM开发环境

    两个理由说服你安装KEIL MDK5: 1.KEIL5的SWD下载速度提升到了50M(KEIL4最大速度为10M,速度提升5倍,下载程序只用一瞬间,不管是做实验,还是量产,有效提升开发进度). 2.K ...

  2. Keil MDK5 编译报Undefined symbol __builtin_ffs 的错误的解决方法

    问题描述 __builtin_ffs 的作用,就是求一个32位数值中,从低位开始的1出现的位置,这算是一个内置的函数,所以直接使用,计算会比较的快. RT-Thread 内核代码中,使用这个 函数,作 ...

  3. keil MDK5.24打开MDK5.15及以前STM32工程报错Error #545:Required gpdsc file 'FrameworkCubeMX.gpdsc' is missing

    最近使用Keil MDK5.24 打开以前MDK5.15的STM32工程时出现如下错误:Error #545: Required gpdsc file'.\RTE\Device\STM32F030K6 ...

  4. 如何安装KEIL MDK5开发软件

    KEIL软件是嵌入式开发程序进行编译和调试,仿真的开发工具之一,这里为大家介绍KEIL MDK5安装详细步骤. 方法/步骤 1.下载好KEIL软件安装文件和注册软件. 2.双击MDK.exe文件,弹出 ...

  5. keil MDK5软件包介绍、下载、安装与分享

    前言 本文介绍了Keil MDK5软件包的分类.作用.下载.安装与更新.软件包下载可通过Keil自带的Pack Installer.进入Keil Pack下载网站手动下载.去芯片厂家官网下载三种方式. ...

  6. Keil MDK5软件包的组成、Cortex微控制器软件接口标准CMSIS,重点介绍CMSIS-CORE的组成和使用

    嵌入式系统的应用开发需要基于目标机-宿主机的交叉编译系统,在集成开发环境的支持下进行,应用程序通常采用高级编程语言C/C++进行编写.使用MDK开发工具进行STM32微控制器的应用开发需要安装软件包, ...

  7. keil MDK5.36

    keil MDK5.36 百度网盘下载分享 keil MDK 5.36 官网www.keil.com更新时间:September 15, 2021 由于官网下载速度很慢,并且下载前必须填写资料.因此, ...

  8. Keil MDK5中(1)汉字注释显示转向,字体显示朝左旋转90°(2)汉字注释显示为问号(3)按回车后光标缩进距离太大的解决办法

    这是目录0.0 前言 第一个问题:汉字注释显示转向,字体显示朝左旋转90°解决办法: 第二个问题:注释中的汉字变成了问号,显示不出来,如下图所示: 第三个问题:按回车后光标缩进距离太大,如下图所示: ...

  9. 成功解决Keil MDK5中no browse information available in ‘xxx’的问题

    使用MDK5的Go To Definition of ''功能的时候,报错no browse information available in 'xxx' 如图所示: 解决方案: 点击Option f ...

  10. Keil MDK5工程文件不可修改(文件符号上带一个黄色的钥匙)

    在使用MDK5编写程序的时候,有一次突然出现了工程内所有的文件都不可以修改的情况,如图所示: 文件上有一个黄色的钥匙标识,所有文件全都不可以修改,包括增删文件等等. 经排查出现这种情况的原因是将该工程 ...

最新文章

  1. 单张图像重建3D人手、人脸和人体
  2. java读取大txt文件_使用java读取txt里边的文件内容并获取大小(M).txt
  3. Linux workqueue工作原理
  4. 索引使用的限制条件,sql优化有哪些,数据同步问题(缓存和数据库),缓存优化
  5. AnimalTFDB 3.0:动物转录因子注释和预测的综合资源库
  6. future 线程报错后_线程池运用实例——一次错误的多线程程序设计以及修复过程...
  7. 国产手机都会用鸿蒙吗,华为鸿蒙系统已经发布,小米等国产手机会使用鸿蒙系统吗?来看看...
  8. Mac OS X必备APP推荐之二
  9. SpringMVC 框架系列之组件概述与配置详解
  10. 有关单元测试的 5 个建议
  11. SketchUp 8 Pro 安装插件 没有安装扩展程序按钮 rbz插件安装
  12. 锐浪HTML5报表实际应用方法,解决锐浪Grid++报表在谷歌等浏览器不兼容的尴尬局面
  13. php网站模板上传教程视频教程,网站模板怎么用
  14. 判断图有无环_数读湾区经济潜能:基于大数据分析的环杭州湾大湾区“一体化”发展潜能!...
  15. 如何优雅地使用Sublime Text3
  16. win10计算机维护,Win10系统打开或关闭自动维护功能的方法
  17. ios重签名shell脚本_IOS应用重签名(三种方法)
  18. 盘点电脑速度变慢的七大原因
  19. 虚拟机安装华为模拟器eNSP过程中所遇问题与解决办法
  20. 好用的工具推荐一下js美化代码

热门文章

  1. Android 源码编译步骤实录
  2. Java随机产生中文昵称
  3. discuz门户文章增加代码高亮
  4. 【Android安全】fastboot相关
  5. VS自带反编译DLL工具
  6. Redis的lua脚本
  7. ledshowtw2017(LED图文编辑软件)官方版
  8. 单片机C51继电器控制C语言,单片机控制继电器,51单片机控制继电器详细说明
  9. loadrunner server压力测试 sql_LoadRunner压力测试实例.pdf
  10. BGP 路由策略-路由汇总基础及其应用