RVDS编译器
不同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编译器的更多相关文章
- 6410在rvds下编译启动代码报错分析
contains invalid call from '~PRES8' function to 'REQ8' function main RVDS编译出现contains invalid call f ...
- C语言编译器
我们分两部分介绍C语言的编译器,分别是桌面操作系统和嵌入式操作系统. 桌面操作系统 对于当前主流桌面操作系统而言,可使用 Visual C++.GCC 以及 LLVM Clang 这三大编译器. Vi ...
- 【转】arm 开发工具比较(ADS vs RealviewMDK vs RVDS)
ADS REALVIEW MDK RVDS 公司 ARM Keil(后被ARM收购) ARM 版本 最新1.2 ,被RVDS取代 最新4.0 是否免费 破解情况 有 有 工程管理 CodeWarr ...
- C/C++的编译器|编译环境(非常全面的比较)
C/C++编译器的一些易混淆概念,总结一下. 关于什么是Unix-like操作系统,常见操作系统间差异,什么是操作系统接口等等,请参考<操作系统宝鉴>. C/C++编译器有哪些? 首先是如 ...
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch – 体系架构,如ARM,MIPSvendor – 工具链提供商os – 目标操作系统 ...
- 【转】arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
原文网址:http://www.veryarm.com/296.html 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架 ...
- RVCT的Linux环境变量配置 ARM® RVDS™ 4.1(b713)
下载解压 armrvds.tar.gz到/opt 下 在自己的build.sh下导入RVCT的环境变量配置ARM® RVDS™4.1(b713): export ARMROOT=/opt/armrvd ...
- arm交叉编译器科普
交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架构,如ARM,MIPS vendor - 工具链提供商 os - 目标操作系统 ea ...
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf等的区别【转】
转自:https://www.cnblogs.com/deng-tao/p/6432578.html 博客来之于: http://www.veryarm.com/296.html 交叉编译工具链的命 ...
随机推荐
- 谷歌浏览器不能正常显示中文,chrome显示汉字问题
用了几年的 chrome但是最近每次升级完flash就出现页面不能正常显示中文的现象. 在一个论坛上发现了处理办法如下: 1. 在谷歌浏览器的地址栏输入 chrome://flags/ 2. 在设置里 ...
- iOS教程:Core Data数据持久性存储基础教程
目录[-] 创建Core Data工程 创建数据模型 测试我们的数据模型 来看看SQL语句的真面目 自动生成的模型文件 创建一个表视图 之后看些什么? 就像我一直说的,Core Data是iOS编程, ...
- js模拟点击打开超链接
js模拟点击打开超链接,页面上有一些锚文本,如果用 JS 批量在新窗口打开. jquery示例: <div class="link"> <a href=" ...
- OpenCV Save CvRect to File 保存CvRect变量到文件
在OpenCv中,我们有时候需要查看CvRect变量的值,我们可以通过将其保存到文件来查看,保存的代码如下: void writeCvRectToFile(CvRect &rect, cons ...
- Java中为什么需要反射?反射要解决什么问题?
一句话概括就是使用反射可以赋予jvm动态编译的能力,否则类的元数据信息只能用静态编译的方式实现,例如热加载,Tomcat的classloader等等都没法支持 Java中编译类型有两种: 静态编译:在 ...
- 为什么用VUE,而不用Jquery了?
在没有任何前端框架之前,我们写代码,只能用原生的JS,进行数据的处理,DOM的操作,譬如对一个id 为txtName 的文本框进行赋值,我们是这样的 document.getElementById(' ...
- opencv学习笔记——cv::mean()函数详解
opencv中封装了一个专门用于求解cv::Mat均值的函数,即cv::mean(&cv::Mat),该函数会得到Mat中各个通道的均值,若要获取指定通道的均值,做进一步解析即可. 具体使用方 ...
- Python爬虫实例(六)多进程下载金庸网小说
目标任务:使用多进程下载金庸网各个版本(旧版.修订版.新修版)的小说 代码如下: # -*- coding: utf-8 -*- import requests from lxml import et ...
- 两种JS事件流
1.事件冒泡流(从注册事件元素到外侧容器元素的过程): 2.事件捕获流(与冒泡相反的过程):
- Dungeon Master---2251(bfs)
http://poj.org/problem?id=2251 有一个三维的牢房地图 求从S点走E点的最小时间: #include<stdio.h> #include<string.h ...