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 交叉编译工具链的命 ...
随机推荐
- Json.NET Deserialize时如何忽略$id等特殊属性
由于$id.$ref等是默认Json.NET的特殊属性,在反序列化时不会将其对应的值填充,例如: [DataContract] public class MyObject { [DataMember( ...
- 解决使用Foxmail客户端软件不能收取腾讯企业邮箱的全部邮件
一般说来,使用Foxmail客户端软件收取邮箱时,需要作如下几步: 1.进入邮箱web界面授权开启POP3/SMTP服务.IMAP/SMTP等服务 2.在邮箱web界面配置收取选项,可选择收取全部邮件 ...
- CSS 盒子模型 二
Sublime 快捷键: 文件保存后,输入 html:xt + tab ,补全html html:xt <!DOCTYPE html PUBLIC "-//W3C//DTD XHTM ...
- Transient修饰符的使用
如果一个类没有继承Serilizable接口,那么它就不能被序列化,写入文件的时候会报异常.如果一个类继承了Serilizable接口,那么这个类的所有属性和方法都可以自动被序列化,而现实中我们又希望 ...
- iOS UIScrollView 3种分页方法,间隔实现
基础知识参考 http://tech.glowing.com/cn/practice-in-uiscrollview/ https://stackoverflow.com/questions/9367 ...
- java字符串的替换
split也是用到了正则表达式 replace 是没有用正则表达式,全部替换 replaceAll 和replaceFirst是用了正则表达式 replaceAll替换所有,replaceFirst是 ...
- ELKStack可视化
做一个可视化的视图 1,添加紧急联系人视图 2,添加统计单一数值的视图(添加Nginx请求数) 3,柱形图(统计访问最多的前几个IP) 4,新建仪表盘 5,新建搜索(Nginx404错误) 6,把建立 ...
- 关于graham扫描法求凸包的小记
1.首先,凸包是啥: 若是在二维平面上,则一般的,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有的点. ───────────────────────────── ...
- JavaScript之Function 和 Object 的区别和联系
1.先看一个控制台的输出: instanceof 运算符字面意思是 左边是右边的一个实例吗? 但是这两条输出让人很困惑.Function 是 Object 的实例.Object 也是 Function ...
- 开启 NFS 文件系统提升 Vagrant 共享目录的性能
Vagrant 默认的 VirtualBox 共享目录方式读写性能表现并不好,好在 Vagrant 支持 NFS 文件系统方式的共享,我们可以启用 NFS 提升性能 开启方法 首先要把虚拟机的网络设置 ...