keil工具详细入门教学
一、参考文档资料学习
《MDK-ARM Getting Started》:面向新手,教你怎么把软件跑起来。
《release Notes for MDK 5.37》:面向所有用户,告诉你这个特定版本有什么新东西和已知问题。
《Arm Compiler User Guide》:面向开发者,作为参考手册,深入讲解编译器的用法。
1. 《MDK-ARM Getting Started》(MDK-ARM 入门指南)
核心主题:软件安装、环境搭建和第一个简单程序的创建与调试。
目标读者:Keil MDK 的初学者,刚刚接触这个开发环境的人。
主要内容:
系统要求:告诉你的电脑(操作系统、硬盘空间、内存等)需要满足什么条件才能安装MDK。
安装步骤:详细图解如何安装Keil MDK软件,包括如何安装设备支持包(Device Family Pack)、软件授权(License Management)。
创第一个工程:一步步指导你如何创建一个新的基于微控制器的工程,如何选择正确的芯片型号。
配置工程:简要介绍如何设置目标选项(Target Options),比如晶振频率、调试器等。
编写代码:可能会提供一个简单的示例代码(如点亮LED),教你如何添加源文件并编写代码。
编译工程:教你如何编译代码,并理解编译输出的信息。
调试程序:介绍如何使用内置的仿真调试器(Simulator)或连接真实的硬件进行程序调试,包括设置断点、单步执行、查看变量和寄存器等基本调试操作。
2. 《release Notes for MDK 5.37》(MDK 5.37 版本发布说明)
核心主题:MDK 版本 5.37 的更新内容、新特性、已修复的问题和已知缺陷。
目标读者:所有正在使用或打算升级到该版本的用户。
主要内容:
简介:概述这个版本的重要性。
新特性与增强功能:
编译器(Arm Compiler)是否有更新?支持了哪些新的ARM Cortex内核特性?
IDE(µVision)界面有什么改进?新增了哪些便捷功能?
调试器支持了哪些新的仿真器或开发板?
设备支持包(Packs)更新:新增了对哪些厂商(如ST, NXP, Microchip)的新型号芯片的支持。
已修复的问题:列出了在这个版本中修复的上一个版本存在的具体Bug,例如某个特定芯片的调试问题、编译器的优化错误等。
已知问题与限制:明确指出这个版本还存在哪些未解决的问题,以及在使用某些功能时需要注意什么。这部分对于项目开发非常重要,可以帮你避开潜在的“坑”。
安装说明:可能会提供与此版本相关的特殊安装指示。
3. 《Arm Compiler User Guide Version》(Arm 编译器用户指南)
核心主题:Arm编译器的详细使用方法、编译选项、汇编器与链接器指令、特性说明。
目标读者:需要进行深度开发和优化的软件工程师,特别是需要控制代码大小、优化性能、进行低级控制的开发者。
主要内容:
编译器概述:介绍Arm编译器的架构(如armclang)、支持的C/C++语言标准等。
使用编译器:详细讲解命令行选项,包括:
优化选项(-O0, -O1, -O2, -O3, -Os等)的区别和适用场景。
调试信息生成选项(-g)。
预处理器、编译、汇编、链接各个阶段的控制选项。
汇编器指南:讲解汇编语言的语法、指令集、伪指令(Directives)的使用。
链接器指南:详细讲解如何通过分散加载文件(Scatter-loading File)来控制代码和数据在内存中的精确布局,这对于嵌入式系统至关重要。
库的使用:介绍C/C++标准库、Microlib(用于嵌入式环境的精简库)以及如何创建和使用自己的库文件。
编译器特定特性:如内联函数(Intrinsics)、属性(Attributes)、Pragma等。
错误和警告信息:帮助开发者理解和解决编译过程中遇到的问题。
二、keil MDK编译工具
1. keil工具的Tools User’s Guide(keil工具help-open Book’s Window)
《Compiler User Guide Selection》 在 Keil MDK 的语境下,不是一个独立的指南,而是一个指引你找到正确编译器文档的“门户”或“选择器”页面。
它的核心目的是:帮助你从 MDK 集成的多个编译器中,选择并找到与你当前项目所使用的编译器相对应的那份《User Guide》。
2. keil Arm Compiler区别
Arm Compiler 6 (armclang):
基于 LLVM/Clang 框架,是现代和未来的主力编译器。
提供更好的代码性能和对新 C/C++ 标准的支持。
Arm Compiler 5 (armcc):
基于传统的编译器技术,是经典的编译器。
很多遗留项目仍然在使用它
如果你选择 Arm Compiler 5,《Arm Compiler v5.06 for µVision User Guide》。
如果你选择 Arm Compiler 6,《Arm Compiler for Embedded User Guide》。
三、详解Arm Compiler 6 (AC6)
官方网址:https://developer.arm.com/documentation/100748/0623?lang=en
《Arm Compiler for Embedded User Guide》 是针对 Arm Compiler 6 (AC6) 及之后版本的权威指南,它主要面向的是使用 Arm Compiler for Embedded 这款工具链进行软件开发的工程师。
核心主题与目标读者
核心主题:全面讲解 Arm Compiler for Embedded 工具链的各个组件(编译器、汇编器、链接器等)的功能、特性和使用方法。
目标读者:中高级嵌入式软件开发人员,特别是那些需要:
深度优化代码性能和尺寸。
精确控制内存布局。
理解和使用编译器的高级特性。
解决复杂的编译和链接问题。
主要内容详解
这份指南通常包含以下关键部分:
1. 工具链概述
介绍 Arm Compiler for Embedded 的组成部分:
armclang:基于 LLVM/Clang 的 C/C++ 编译器。
armasm:Arm 汇编器。
armlink:Arm 链接器。
fromelf:镜像转换工具,用于从 ELF 文件生成二进制、Hex 或反汇编列表等。
armar:库管理工具,用于创建和修改函数库。
2. 使用编译器
这是文档最核心的部分之一,详细讲解:
编译器命令行选项:
优化级别:-O0, -O1, -O2, -O3, -Os(优化代码大小), -Oz(更激进的代码大小优化)等的具体行为和适用场景。
调试选项:-g 生成调试信息。
语言标准控制:指定使用的 C(如 -std=c99)或 C++(如 -std=c++14)标准。
警告和错误控制:如何控制编译器的警告信息级别。
编译器特定特性:
attribute:GNU 风格的扩展属性,用于控制变量/函数的对齐、段放置、优化行为等。
#pragma 指令:实现编译器特定的功能。
内联函数:提供对特定 Arm 指令(如 SIMD, DSP)的低级访问。
3. 使用汇编器
讲解 Arm 和 Thumb 指令集的汇编语法。
详细介绍汇编器伪指令,用于控制汇编过程,如定义段、分配存储空间、条件汇编等。
4. 使用链接器
这是嵌入式开发中至关重要的一章,因为它直接关系到代码和数据在物理内存中的存放位置。
链接器基本概念:输入段、输出段、区域、执行域。
分散加载:通过分散加载描述文件 精确控制代码、数据、堆栈在内存映射中的位置。这对于处理包含 Flash, RAM, 外部存储器等多种存储器的复杂嵌入式系统是必备技能。
如何定义内存区域。
如何将代码段和数据段分配到特定地址。
如何放置堆和栈。
库处理:链接器如何解析对库函数的引用。
5. 使用 fromelf 工具
介绍如何使用 fromelf 工具:
生成可烧录的二进制文件(.bin)或 Intel Hex 文件(.hex)。
生成反汇编列表和内存大小信息,用于分析和调试。
提取调试信息。
6. 优化指南
提供关于如何编写代码和选择编译器选项来获得最佳性能或最小代码大小的建议。
可能会包含不同优化选项下的性能基准测试数据。
7. 库和浮点支持
介绍支持的 C/C++ 标准库(如 microlib,一个为深度嵌入式系统设计的高度精简库)。
讲解对 Arm VFP 和 NEON 的浮点运算支持。
8. 诊断信息
解释编译器、汇编器和链接器产生的错误和警告信息的含义,并给出解决问题的建议。