欢迎加入【Linux C/C++/Python社区】一起探讨和分享Linux C/C++/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。


MDK编译过程及ARM编译工具链

  • MDK编译过程
  • ARM编译工具链
    • ☞ARM C/C++编译器( armcc )
    • ☞ MicroLib
    • ☞ARM宏汇编器( armasm )
    • ☞ARM链接器( armLink )
    • ☞armar
    • ☞formelf 格式转换器

相关文章连接

  • C/C++程序的编译过程
  • 一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解

MDK-ARM也叫做KEIL MDK-ARM、KEIL ARM、Realview MDK、I-MDK、uVision5等。

MDK编译过程

Windows/Linux使用链接器可以直接生成可执行映像文件elf并运行,而开发板/单片机平台需要把该内容加载到芯片上,通过formelf转换器将elf映像文件转换为.bin或者.hex文件,并由下载器下载到芯片的FLASH/ROM中。
编译后应用程序中所有具有同一性质的数据被归到一个域,程序在存储或运行时,不同域会呈现不同的状态。

  • code:代码域,存放编译生成的机器指令,也就是代码占用的空间,这些内容存储到ROM区;
  • RO-data:只读数据域,指程序中用到的只读数据,这些数据被存放在ROM区;
  • RW-data:可读写数据域,指初始化为非0值的可读可写数据,程序刚运行时,数据具有非0的初始值,当程序运行时,这些数据会常驻RAM区;
  • ZI-data:初始化为0的值或未初始化的可读写数据域,未初始化的数据会被编译器默认初始化为0,程序刚运行时这些数据初值为0,后续会与RW-data数据一样,常驻RAM区;
  • ZI-data堆栈空间:程序中的栈空间和堆空间都属于ZI-data区域,这些空间都会被初始化为0值,编译器给出的ZI-data占用的空间也包含了堆栈大小,栈中存储了局部变量,堆中存储malloc/new申请的内存。

ARM编译工具链

ARM编译工具链主要包括:

  • ARM C/C++编译器(armcc)
  • Microlib
  • ARM Macro汇编器(armasm)
  • ARM链接器(armLink)
  • ARM工具(Librarian and FromELF)

ARM编译器将C/C++元文件编译成可重定位(Relocatable)的目标模块,并且在其中嵌入供uVision调试器或在线调试器调试的符号信息。同时,ARM编译器能帮助生成listing file,它可以包含symbol table(符号表)和交叉引用信息。
ARM编译工具的路径在Keil的安装路径下“D:\keil_v5\ARM\ARMCC\bin”,配置此路径到计算机的环境变量“计算机→属性→高级系统设置→环境变量→用户变量→新建PATH并用分号隔开”,配置后可以在Windows的命令行cmd下使用工具链。

☞ARM C/C++编译器( armcc )

armcc主要是负责把C/C++程序编译为ARM指令代码。
使用方法:

  • cmd命令行
  • keil魔术棒→c/c++→Compiler control string

☞ MicroLib

MicroLib是一个用C语言编写的经过高度优化的嵌入式应用的库(基于ARM架构)。相对包含在ARM编译器里面传统标准C库,MicroLib拥有更好的代码尺寸优势,可以满足大多数嵌入式系统要求。
Microlib与标准C库之间的主要区别在于:

  • MicroLib主要为高级嵌入式应用而设计;
  • MicroLib已被进行过优化,同使用ARM标准库相比,使用更少的代码和数据内存;
  • MicroLib被设计成能脱离操作系统单独工作,当然这并不防碍它同任何OS或RTOS(例如Keil RTX)一起被使用;
  • MicroLib不包含文件I/O或者宽字符支持;
    由于MicroLib已经被优化,减小了代码大小,因此相比在ARM编译工具里的标准C库例程,一些函数会执行得更加缓慢。MicroLib和ARM标准库两者均被包含在Keil MDK-ARM中。
    要想使用MicroLib,首先要在keil设置中勾选MicroLib选项框,然后编译程序即可。keil会使用MicroLib来链接程序,可快减小程序代码的大小。

☞ARM宏汇编器( armasm )

把汇编文件编译为.o文件。
使用方法:

  • cmd命令行
  • keil魔术棒→Asm→Assembler control string

☞ARM链接器( armLink )

把.o文件链接组合在一起生成elf格式的axf文件,axf文件时可执行文件。
使用方法:

  • cmd命令行
  • keil魔术棒→Linker→Linker control string

☞armar

把工程文件打包成库文件.lib。

☞formelf 格式转换器

根据axf文件生成hex文件或者bin文件。




MDK编译过程及ARM编译工具链相关推荐

  1. 【linux系统如何安装arm交叉编译工具链】

    文章目录 前言 一.arm交叉编译器介绍 命名规则 具体编译器 二.Arm GNU Toolchain安装 总结 前言 本文简要介绍arm交叉编译器及工具链的安装方法 一.arm交叉编译器介绍 命名规 ...

  2. Linux ARM交叉编译工具链制作过程

    一.下载源文件 源代码文件及其版本与下载地址: Binutils-2.19.tar.bz2 http://ftp.gnu.org/gnu/binutils/ gcc-4.4.4.tar.bz2 htt ...

  3. ARM交叉编译工具链分类说明

    为什么要用交叉编译器? 交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程 ...

  4. ARM交叉编译工具链gnueabi、none-eabi、arm-eabi等命名的区别

    命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch – 体系架构,如ARM,MIPS vendor – 工具链提供商 os – 目标操作 ...

  5. dlib linux 编译使用,ubuntu/ARM编译使用Dlib、OpenCV

    参考文章: ubuntu安装Dlib(C++与Python) https://blog.csdn.net/sinat_38354963/article/details/90517321 ubuntu编 ...

  6. Java编译过程、JIT编译详解、类加载过程

    文章目录 Java编译执行过程 类加载过程 即时编译JIT JIT编译优化中的常见技术 方法内联 逃逸分析 栈上分配 锁消除 小总结 Java编译执行过程 提到编译,可能大多数人想到的就是将**.ja ...

  7. 自己动手安装ARM交叉编译工具链

    一,首先说一下在linux中安装软件的特点: 相比windows下安装要稍显复杂,linux中安装一般有以下几种方法: 1.在线安装,譬如ubuntu中使用apt-get install vim 来安 ...

  8. 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  9. java代码编译过程_Java代码编译和执行的整个过程

    一.简述 Java代码编译和执行的整个过程包含了三个重要的机制:①Java源码编译机制:②类加载机制:③类执行机制 二.Java源码编译机制 Java代码编译是由Javac编译器来完成,流程如图: J ...

最新文章

  1. 《JAVA与模式》之单例模式
  2. 案例:图书管理——补充知识(数组相关API)||补充知识(数组响应式变化)
  3. javaweb功能模块如何合理设计_产品设计:如何设计出合理的凑单模式?
  4. 7-5 jmu-Java-03面向对象基础-05-覆盖 (3 分)
  5. [Qt教程] 第43篇 进阶(三)对象树与拥有权
  6. [react] 在React中组件和元素有什么区别?
  7. linux pe大小,lvm中的pe默认是4M 最大能支持多大 1T?2T
  8. CVS配置过程 (部分转)
  9. 对梯度提升树(GBDT)的通俗理解
  10. Cannot use a leading .. to exit above the top directory
  11. 微星MSI电脑(GL63 8RE-416CN)打开BIOS隐藏的高级设置方法
  12. h5分享到微信唤起app功能
  13. html页面显示dcm文件,基于HTML5标准的Dicom图像显示.doc
  14. 毕业设计3-BME280温湿度大气压传感器调试记录(STM32F103C8T6 + STM32CubeMX + BME280)
  15. 安装Mysql5.7(64位)安装包及教程全
  16. python做项目编号_python docx中的项目符号列表
  17. 三个显示图像的matlab函数图像,如何在matlab中将三个隐函数图像画在同一个图上...
  18. 微信小程序实现封装处理
  19. 春节入境澳门旅客料增1成 景点拥挤须提高警惕
  20. arduino wifi_Arduino MKR WiFi 1010

热门文章

  1. Matlab之数据筛选
  2. Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...'
  3. 【网络游戏同步技术】游戏中的ping值计算
  4. Visual paradigm试用版绘制ER图时如何去水印
  5. MacBook雷电3接口失灵不可用
  6. js事件坐标大乱斗:screenX、clientX、pageX、offsetX
  7. python利用公式计算_Python利用openpyxl处理Excel文件(公式实例)
  8. 16.04Ubuntu桌面版搭建
  9. 4.9. 触发器(Trigger)
  10. 案例分析 | 优衣库DTC模式之全渠道零售