VisualDSP ++的C/C++编译器介绍
0赞一、C/C++编译器简介
VisualDSP ++使用ccblkfn编译器,此C/C++编译器有如下功能:
1. 处理C和C++源文件,产生机器级源代码和目标文件。
2. 在目标文件中包含可重定位的代码和调试信息。
3. 在处理器存储区中提供可由链接器替换的可重定位数据和程序存储段。
C/C++编译器处理C和C++语言源文件并生成Blackfin汇编源文件。汇编源文件由BlackfinDSP系列汇编器(easmblkfn.exe)汇编产生。汇编器进一步产生ELF(Executable and Linkable Format)目标文件,由它可以链接(使用链接器)产生一个Blackfin DSP可执行文件或将其包含在一个档案文件库(elfar.exe)中。编译器如何控制处理过程的汇编,链接和存档阶段取决于输入源文件和所用的编译器选项。
二、C/C++编译语言扩展
内联函数关键字(inline),ccblkfn的inline关键字使声明为inline类型的函数代码内嵌到调用它的地方。inline是C++的标准特点,ccblkfn将它作为C的扩展名。使用该选项节省了调用函数的额外时间开销,因此提高了程序执行速度。
内联汇编语言关键字(asm),ccblkfn的asm()结构可在C/C++函数中内嵌Blackfin DSP汇编语言指令。对程序中用C或C++不易或不能高效实现的地方可以用asm()结构利用汇编语言实现。
放置关键字(section),section关键字使编译器在汇编器的交叉输出文件的.SECTION中放置目标或函数代码。可以用section()中的字符串参数命名.SECTION。如果对目标或函数声明没有指定section(),编译器会使用默认值。
内联关键字(restrict),restrict关键字支持受限制的指针特性。restrict的使用局限于声明一个指针,并指明指针是访问它所指向内容的惟一途径。简单来说,restrict使指针不能使用别名,即两个不同受限指针不能指向同一个对象(指针不能有别名)。
内联函数,编译器支持使用内嵌函数,从而有效利用硬件资源。有关这些函数的信息已经内嵌在编译器中。用户程序使用正常的函数调用句法调用它们。编译器处理此类函数调用,会生成一条或多条机器指令,就像处理正常的操作符(如+和*)那样。
三、预处理命令
预处理器在编译器之前运行,它在编译之前对等待处理的代码进行预处理。
预处理命令的功能如下
1. 包含系统和用户定义头文件
2. 定义宏和标志常量
3. 提供条件汇编和编译
四、C与汇编混合编程
用C语言编程结构化程度高,易于编写,但执行速度相对较慢;与之相反,汇编程序速度快,但很难有较好的结构,且编写起来耗时,不易调试。C和汇编混合编程结合了各自的优势,往往能构造出结构化好且执行速度快的程序。
C和汇编混合编程,通常有两种基本方法,一是C代码中内嵌汇编代码,二是C代码中调用汇编语言写的子函数。在第一种方法中,采用C的库函数asm( )内嵌代码,这比较简单,但不常用;第二种方法为常用的混合编程方法,通常在优化代码时使用,但这种方法比前一种复杂。
