不同ARM的体系结构,使用的ARM RealView编译工具时的异同点。

1)ARM体系结构v6K首次引入对4个CPU的MPCore处理器支持,高效的多重处理系统与单CPU系统相比,功耗更低,散热量更少,响应速度更快,但是也更加

复杂,更难以调试。

此时应注意使用LDREX和STREX进行同步,实现针对加载/储存操作的原子操作。

强制高速缓冲一致性,以实现对称多重处理。

将大任务拆分成多个并行执行的线程。

设置主CPU,使用CP15 CPU ID寄存器执行初始化任务。

2)紧耦合存储器,TCM是一段始终有效的连续内存区域,用于向处理器提供低延时内存。但是消除了高速缓存的不可预测性。用来存放中断处理例程和需要避免

高速缓存不确定性的实时任务。

3)内存管理,MMU用于对内存系统进行细颗粒度控制,实现虚拟地址到物理地址的映射,内存访问权限控制等。

MPU比MMU更为简单,在不需要所有MMU功能的系统中,使用MPU可以简化硬件和软件。

4)Thumb-2,ARMv6T2及更高版本的体系结构提供更高的Thumb-2技术。其中新增加了32位的指令,可实现ARM指令集的所有功能。

大多数的32位Thumb指令是无条件的,而大多数ARM指令是有条件的,Thumb-2引入了条件执行指令IT,if-then-else操作。

5)浮点生成选项,softvfp,对于Thumb代码,因为Thumb指令集不包含VFP指令,无法访问VFP寄存器,编译器通过生成对库函数的调用来执行VFP操作。

vfpv2,针对ARMv6及更早版本的ARM代码的VFP选项。vfpv3,针对ARMv7及之后版本的ARM代码的VFP选项。

Thumb-2支持VFP指令,可以通过--thumb --fpu vfpv3选项使编译器为整个程序只生成Thumb-2代码。

--arm --fpu vfpv3,可使编译器只生成ARM代码。

--fpu  softvfp+vfpv3,可使编译器生成混合ARM/Thumb代码。

ARMv7A中的LDR和STR地址对齐方式,默认LDR和STR是字对齐,LDRH和STRH是半字对齐,LDRB和STRB是任意边界对齐,可以通过CP15寄存器c1中的A

位控制加载和存储指令的对齐要求。

关于嵌入式软件开发,必须考虑将嵌入式应用程序从依赖于开发工具或调试环境的系统移植到目标硬件上独立运行的系统所涉及的过程。

1)了解编译工具的缺省行为,以便从缺省转为完全独立的应用程序的工程。

2)某些C库功能是使用调试环境资源来实现的,这样必须在目标硬件中重新实现这些功能。

在ARM C库中,对部分ISO C功能的支持是由主机调试环境在设备驱动级提供的,提供此功能的机制称为半主机。如_sys_write()中的printf()。

缺省内存映射,默认在0x8000加载并运行。所有的只读(RO)字节放在最前边,其次是读写(RW)字节,最后是零初始化(ZI)字节。

其中RO是程序中的代码和常量;RW是程序中的已初始化的变量;ZI是程序中的非初始化变量。

ARM的映像文件image是指烧录到ROM中的bin文件或hex文件。image中只包含其中的RO段和RW段。

程序的加载时域是指程序烧录到ROM/FLASH中的状态;运行时域是指程序运行时的状态。

从加载时域到运行时域,ROM中的代码必须实现:1)将RW段从ROM搬到RAM中;2)将ZI段的RAM区域全部清零。

一个基于ARM体系结构的嵌入式系统的初始化序列,见相册。

参考rvct_developer_guide.pdf

RVDS编译器的更多相关文章

  1. 6410在rvds下编译启动代码报错分析

    contains invalid call from '~PRES8' function to 'REQ8' function main RVDS编译出现contains invalid call f ...

  2. C语言编译器

    我们分两部分介绍C语言的编译器,分别是桌面操作系统和嵌入式操作系统. 桌面操作系统 对于当前主流桌面操作系统而言,可使用 Visual C++.GCC 以及 LLVM Clang 这三大编译器. Vi ...

  3. 【转】arm 开发工具比较(ADS vs RealviewMDK vs RVDS)

      ADS REALVIEW MDK RVDS 公司 ARM Keil(后被ARM收购) ARM 版本 最新1.2 ,被RVDS取代 最新4.0 是否免费 破解情况 有 有 工程管理 CodeWarr ...

  4. C/C++的编译器|编译环境(非常全面的比较)

    C/C++编译器的一些易混淆概念,总结一下. 关于什么是Unix-like操作系统,常见操作系统间差异,什么是操作系统接口等等,请参考<操作系统宝鉴>. C/C++编译器有哪些? 首先是如 ...

  5. arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别

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

  6. 【转】arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别

    原文网址:http://www.veryarm.com/296.html 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架 ...

  7. RVCT的Linux环境变量配置 ARM® RVDS™ 4.1(b713)

    下载解压 armrvds.tar.gz到/opt 下 在自己的build.sh下导入RVCT的环境变量配置ARM® RVDS™4.1(b713): export ARMROOT=/opt/armrvd ...

  8. arm交叉编译器科普

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

  9. arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf等的区别【转】

    转自:https://www.cnblogs.com/deng-tao/p/6432578.html 博客来之于:  http://www.veryarm.com/296.html 交叉编译工具链的命 ...

随机推荐

  1. ELK系列三:Elasticsearch的简单使用和配置文件简介

    1.定义模板创建索引: 首先定义好一个模板的例子 { "order":14, "template":"ids-1", "state ...

  2. Elasticsearch修改template的mapping并迁移

    找到原始模板并修改 找到要修改的原始索引对应的模板(最好当初创建时就设计好便于修改) #例如原来索引是my_es_index_v1,那么我们创建 一个别名,使用POST 方法 curl -XPOST ...

  3. VS NuGet加载本地程序包

    NuGet是VS中非常实用的一个工具,我们可以通过它在线安装想要的程序包,只要右键点击解决方案中的项目的引用,在弹出的菜单中选择“管理NuGet程序包”,然后就可以通过在线搜索找到想要添加的程序包,下 ...

  4. 阿里云安装Oracle

    #!/bin/bash #writed by kangjie -- ######################################### #如果没有交换分区swap,则创建 # #检查 ...

  5. python偏函数的运用

    摘要:python的设计核心原则就是简洁——在这种原则的指导下,诞生了lambda表达式和偏函数:二者都让函数调用变得简洁.本文主要为你介绍偏函数的应用. 1.为什么要使用偏函数 如果我们定义了一个函 ...

  6. wordpress---wp_query的使用方法

    wp_query是一个wordpress用于复杂请求的的一个类,看到query懂开发的人就会反应这个是数据库查询的一个类,这个类可谓是非常有用的,可以帮助我们做很多复杂的查询. wp_query的使用 ...

  7. poi 导入导出excel

    import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; i ...

  8. 一个sfm开源项目

    Structure from Motion 资料总结 https://blog.csdn.net/u014636245/article/details/77527627 github上用opencv实 ...

  9. hadoop第一部分-安装、测试

    一.hadoop安装(本地模式及伪分布式安装) hadoop历史版本下载网站:http://archive.apache.org/dist/运行模式:    本地模式    yarn模式 hadoop ...

  10. iOS多线程编程之GCD的常见用法(转载)

    一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) withObject:nil aft ...