DSP中的C优化
C6000系列DSP的硬件资源为高性能提高了必要条件,TI公司也配合C6000推出了世界上第一个效率可达70%~80%的汇编语言级C编译器,它产生的代码平均效率是以往DSP编译器的3倍,如何理解并充分利用这些有利资源,使代码达到所期望的性能,是本章的主题。
① 第一阶段:属于纯C阶段,此时不需要了解C6000的知识,只需保证代码的正确性。
② 第二阶段:利用本章介绍的优化方法改进C代码。
③ 第三阶段:从C程序中抽出对性能影响较大的函数,编写线性汇编,再使用汇编优化器优化该段代码;或直接对该函数编写标准汇编。
以上三个阶段不是必须经过的,当在某一阶段已获得了期望的性能,就无需进入下一个阶段
3.2编译选项
C6000
C/C++编译器提供了大量的编译选项,供用户在编译时选择使用。这些选项中有一部分是事务性的,比如选择文件路径和控制输出文件格式等;有一部分直接影响或控制编译器的优化过程,进而影响代码的优化性能。
编译选项是一个字母或者两个字母,对大小写不敏感,前面有一个“-”符号,分为若干等级和种类:
1、 在优化性能很重要的场合避免使用的:
-g:允许符号调试,要求编译器编译出的“.out”文件保留符号调试的能力,可以在c语言级别进行调试和剖析,极大限制代码的优化。使用联合使用-g、-mt和-o3可以保证能够进行符号调试的情况下最大限度的优化。
-mu:禁止使用软件流水方法编译。
2、用于性能优化的:
-o: 使能软件流水和其他优化方法。
-o0/-o1(register-level
optimizations/ local optimizations):
· 流程优化
· 给变量分配寄存器
· Performs loop rotation
· 消除无用的代码,简化表达式
· 去除不必要的局部内存的分配
-o2(function-level optimizations):
· 启用软件流水
· 循环优化,如循环展开
· 去除冗余的全局表达式及内存分配
-O3(file-level optimizations) :
· 去除未调用的函数
· 简化返回值无用的函数
·
相关文档:
VB
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
MSComm1.CommPort = i1
MSComm1.PortOpen = True
MSComm1.InputMode = comInputModeBinary
MSComm1.InBufferCount = 0
& ......
由于程序运行时占用的内存过大,所以想办法给程序瘦身。
在调试中发现结构体占用的size竟然和预想的不一样,原来……
看看下面讲的吧,肯定会不枉此看哦!
1,比如:
struct{
short a1;
short a2;
short a3;
}A;
struct{
long a1;
short a2;
}B;
sizeof(A)=6, sizeof(B)=8,为什么?
注:sizeof(sho ......
const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。
虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。
问题 ......
def login():
print 'login'
def logout():
print 'logout'
controllers = {
'in': login,   ......
国家、文化和语言规则集称为区域设置,locale.h头文件中定义了区域设置相关的函数。setlocale函数用于设置或返回当前的区域特性,localeconv用于返回当前区域中的数字和货币信息(保存在struct lconv结构实例中)。setlocale的第一个实参指定要改变的区域行为类别,预定义的setlocale类别有:
&n ......