没有合适的资源?快使用搜索试试~ 我知道了~
描述ARM编程的细节,包括了指令集,浮点库,thumb指令集等,指令优化
资源详情
资源评论
资源推荐
1
TM
T H E A R C H I T E C T U R E F O R T H E D I G I T A L W O R L D
ARM
编程技巧
2
TM
2
103v04 C/C++ Compiler Hints & Tips
Agenda
ARM 编译器优化
C/C++ 和汇编混合模式编程
使用 ARM 编译器编码
局部和全局数据讨论
3
TM
3
103v04 C/C++ Compiler Hints & Tips
优化级别
使用的编译器优化级别是可选择的
-O0---DEBUG
关闭大多数优化 .
最好的调试信息,最少的优化
-O1---DEBUGREL
多数优化选项许可
给一个满意的调试,好的代码密度
-O2---RELEASE (default)
完全的优化
有限的调试信息,最好的代码密度
为代码大小或运行速度的优化,可选择 : -Ospace ( 默认的 ) 或 -Otime.
使用 -g 选像可包含源码级调试信息
4
TM
4
103v04 C/C++ Compiler Hints & Tips
ADS 编译器在所有级别中执行一些简单的优化
i.e. -O0, -O1, -O2
下面是一个例子:即使用 -O0, 多余的表达式也被清除了 :
ATPCS 标准中子程序结果返回规则
结果为 32 位整数, R0 返回
结果为 64 位整数, R0 , R1 返回
位数更多时,用内存来传递
……
自动优化
int f(int *p)
{
return (*p = = *p);
}
armcc -c -O0
f
MOV r1, r0
MOV r0, #1
MOV pc, lr
注意:在这种情况下,可使用 C 的关键字 volatile 强制使用这些变量
5
TM
5
103v04 C/C++ Compiler Hints & Tips
使用 “ volatile”
int f(volatile int *p)
{
return (*p = = *p);
}
armcc -c
f
LDR r1,[r0]
LDR r0,[r0]
CMP r1,r0
MOVNE r0,#0
MOVEQ r0,#1
MOV pc,lr
int f(int *p)
{
return (*p = = *p);
}
f
MOV r0,#1
MOV pc,lr
armcc -c
这个代码用的编译级别是: -o2
剩余46页未读,继续阅读
xiangding
- 粉丝: 81
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0