网站客户评价,手机版网站推荐,网站建设与维护专业,织梦建站和WordPress建站的优缺点英国ARM公司是全球领先的半导体知识产权#xff08;IP#xff09;提供商。全世界超过95%的智能手机和平板电脑都采用ARM架构。ARM设计了大量高性价比、耗能低的RISC处理器、相关技术及软件。2014年基于ARM技术的全年全球出货量是120亿颗#xff0c;从诞生到现在为止基于ARM技…英国ARM公司是全球领先的半导体知识产权IP提供商。全世界超过95%的智能手机和平板电脑都采用ARM架构。ARM设计了大量高性价比、耗能低的RISC处理器、相关技术及软件。2014年基于ARM技术的全年全球出货量是120亿颗从诞生到现在为止基于ARM技术的芯片有600亿颗 [2] 。技术具有性能高、成本低和能耗省的特点。在智能机、平板电脑、嵌入控制、多媒体数字等处理器领域拥有主导地位。
现在的嵌入式开发大部分都是ARM处理器了从MCU级别的M0M3M4M23M33到MPU级别的ARM9ARM11ARM-A5xARM-A7x。 1991 年ARM 公司成立于英国剑桥主要出售芯片设计技术的授权。 ARM公司是苹果、诺基亚、Acorn、VLSI、Technology等公司的合资企业。
产品有A,R,M三个系列和ARM名字重合funny。
1. ARM 处理器的分类
1.1 按系列分类 Cortex-M系列通用微处理器 包括Cortex-M0、M3、M4新的M23M33以及早期的ARM7TDMI这类处理器一般不跑操作系统或者只跑个RTOS Cortex-R系列实时微处理器 这类处理器可以认为是在Cortex-M的基础上增强了实时性能用于高安全高实时的场合。 Cortex-A系列带MMU的处理器 包括Cortex-A5A7A9到现在的A5xA7x以及早期的ARM9ARM11。这类处理器一般跑Linux安卓之类的带内存管理功能的操作系统利用这类操作系统的强大功能去实现复杂的应用。
1.2 按指令集分类 V4 指令集 ARM7TDMI、ARM9TDMI、Intel StrongARM V5 指令集 ARM926EJ、Intel XScale V6 指令集 ARM11M0 V7 指令集 ARM-A系列中的32位M3M4M7 V8 指令集 ARM-A系列中的64位M23M33M55A系列32位用V8的比较少但也有。 1.3 按硬件浮点分类
这种分类有些牵强但是和编译器有较大关系几种之间不兼容所以这里单独列一下。 无硬件浮点单元 浮点运算通过软件完成低端的M0M3M23部分A系列的都没有。对应浮点编译选项为 soft 。 有硬件浮点单元但是传参数用普通寄存器传 编译器后缀有 el 的对应这种形式对应浮点编译选项为 softfp这种形式的产品比较少后面会详细说明。 有硬件浮点单元传参数也用浮点单元的寄存器传 编译器后缀有 hf 的对应这种形式对应浮点编译选项为 hard 32位CPU带硬件浮点运算功能的大部分都是这种。 64位CPU都带硬浮点也是这种。
2. ARM 编译器的分类
交叉编译就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序比如在PC平台X86 CPU上编译出能运行在以ARM为内核的CPU平台上的程序编译得到的程序在X86 CPU平台上是不能运行的必须放到ARM CPU平台上才能运行虽然两个平台用的都是Linux系统。 交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境交叉编译工具链主要由binutils、gcc和glibc三个部分组成。有时出于减小 libc 库大小的考虑也可以用别的 c 库来代替 glibc例如 uClibc、dietlibc 和 newlib。
免费版目前有三大主流工具商提供第一是GNU提供源码自行编译制作第二是 Codesourcery第三是Linora。收费版有ARM原厂提供的armcc、IAR提供的编译器等等这些价格都比较昂贵
交叉编译工具链的一般命名规则为arch [-vendor][-os] [-(gnu)eabi] arch - 体系架构如ARMMIPS verdor -工具链提供商 os - 目标操作系统 eabi - 嵌入式应用二进制接口 ABI二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)。在计算机中应用二进制接口描述了应用程序或者其他类型和操作系统之间或其他应用程序的低级接口。 EABI嵌入式ABI。嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用 EABI 作为与兼容的编译器生成的汇编语言的接口。 两者主要区别是ABI是计算机上的EABI是嵌入式平台上如ARMMIPS等。
2.1 arm-none-eabi编译器
可以在下面这个网址下载 https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
这种编译器的名字中没有包含操作系统的信息所以这种编译器用于编译裸机或者使用RTOS的程序M0M3之类的单片机都使用的是这种编译器。 对应的64位为 aarch64-none-elf。 2.2 arm-none-linux-eabi编译器
可以在下面这个网址下载如何区分 https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads
这种编译器的名字中包含linux所以这种编译器用于编译linux中的程序32位编译器一般默认都是软件浮点。
对应的64位为aarch64-none-linux-eabi64位编译器默认都是硬件浮点。
2.3 arm-linux-androideabi编译器
顾名思义是安卓编译器64位为aarch64-linux-eabi
3. ARM编译器和ARM架构相关的编译选项
其实各芯片厂家提供的编译器主要作用就是指定了下面这些选项的默认值当然不仅仅是下面这些选项使用户使用起来更方便不需要手动去指定了。
3.1 -mcpu和-march
-mcpu用于指定cpu的类型例如cortex-a7cortex-a9cortex-a53cortex-a73之类的。-march用于指定cpu的指令集例如armv6armv7。
一般都是直接指定-mcpu编译器能正确推断出-march的值。
3.2 -mfloat-abi和-mfpu
-mfloat-abi用于指定软浮点还是硬浮点
soft软浮点softfp硬件浮点但是参数传递使用普通寄存器中断的时候只需要保存普通寄存器中断负荷小但性能较差参数需要转换成浮点的再计算。hard硬浮点并且参数传递使用硬浮点寄存器省去了转换性能最好但是中断负荷高。
一般armv5的CPU是softarmv6以上的是hardsoftfp的比较少
注意不同mfloat-abi编译出来的库一般不兼容所以整个linux系统中所有程序和库的mfloat-abi应该保持一致。
-mfpu用于指定硬浮点的类型可以是vfpvfpv3neon-vfpv4。
一般32位CPU选择vfp或者vfpv364位CPU选择neon-vfpv4或者直接不选择让编译器根据CPU选择默认值即可。不同mfpu选项应该是能兼容的这个没测试印象中是可以的只要CPU本身有相应的硬件支持就行。
3.3 通过-print-multi-lib选项可以查看编译器支持的选项 3.4 通过readelf -a命令查看程序和库对应的编译选项 4. 什么是Arm开发板
一般来说再采购Arm嵌入式板卡的时候会涉及 核心板 和 开发板。
如何区分核心板CPU 内存 FLASH 电源 IO接口 等等开发板SD卡 网口 HDMI 串口 USB 等等
开发板有时也被叫做 底板。购买商家提供的开发板会比较贵一般前期测试会使用后期只是购买核心板然后自行开发底板开发板。
5. 其他 如何区分arm支持32位还是64位 一般我们通过从指令集来区分从ARMv3到ARMv7支持32位空间和32位算数运算。 2011年发布的ARMv8-A架构添加了对64位空间和64位算术运算的支持。 总结常见的 armv8是64位的也可以叫 aarch64armv7是32位的 armv7、armv7l和armv7hl有什么区别 armv7l中的 l 代表Little-Endian与之对应的就是Big-Endian含义是字节序。 Little-Endian就是低位字节排放在内存的低地址端高位字节排放在内存的高地址端。Big-Endian就是高位字节排放在内存的低地址端低位字节排放在内存的高地址端。 armv7hl中的 h 代表hard-float指浮点运算直接由CPUAPU完成而不用通过软件库编译成定点算法实现对应的是soft-float。