嵌入式C语言开发ADSP21XX系列DSP
极好工具。
VisualDSP6.1还提供了丰富的帮助文档,包括21XX系列的用户手册、汇编和C语言工具以及仿真调试程序的使用手册;还有C运行库的参考手册,列出了所有可用的C库函数。用C语言开发DSP的典型流程如图1所示。
2C语言运行库结构
C语言运行时间库是位于LIB目录下的*.a文件,是整个C开发工具的核心之一,提供了大量的可以直接调用的库函数。这些库函数的函数原型包含在INCLUDE目录下的头文件中。这些头文件有的还包含一些宏定义。另外,VisualDSP还把这些库函数的汇编语言源代码提供给出了用户,方便了用户从中提取有用的代码,甚至修改源代码,生成新的库,来适应自己的要求。利用LIB21程序,还可以把自己的常用汇编子程序做成库,或是将实时性要求较高的代码用汇编语言来写,做成库,供C语言程序调用。
VisualDSP的C语言运行库由两部分组成:应用程序框架和预定义的各种库函数。
不同的DSP型号有不同的硬件结构、中断向量表,所以对应的应用程序框架库也不同,相应的文件是21*_HDR.DSP.其中*代表不同的DSP型号。应用程序框架的主体是中断向量处理部分,把中断向量引到合适的地址。其中最重要的是对系统复位(RESET_VECTOR)的中断向量的处理:
_Reset_vector:CALL_lib_setup_everything;
CALLmain_;
JUMP_lib_prog_term;
NOP;
第一条指令是调用C库函数中的__lib_setup_everything函数作程序启动时的初始化工作。接下来,调用C语言程序中的main_函数,进入C程序的主体,也就是进入用户自己程序,开始正常工作。主程序结束后,再调用_lib_prog_term函数,作程序退出时的结尾工作。由于嵌入式系统的特性,系统绝大多数都在主程序运行时被继电了,所以_lib_prog_term得到执行的机会很小。
其它的中断向量由C运行库来管理,汇编指令如下:
_Interrupt2:JUMP_lib_int2_ctrl;NOP;NOP;NOP;
其中的_lib_int2_crtl就是C语言库中控制INT2的函数。如果用户要使用该中断,应先把中断服务程序用一个C库函数Interrupt()把服务函数指针设定好,并打开相应的中断允许位,当该中断发生时,_lib_int2_ctr1函数就会控制DSP跳转到相应的指针位置。
VisualDSP预定义的C语言库函数包括数学函数、FFT函数、ANSI标准内存管理和字符串管理函数的一个子集。所有的函数列表可参考VisualDSP的联机文档。这些库函数以二进制代码的形式,打包集合在lib*.a文件中,用户的C语言程序可以像使用自己的子程序一样方便地调用这些库函数。下面是调用库函数的一个例子。
#include<math.h>//包含所需的头文件
……
floata,b,c;//定义所需的变量
……
c=a*sin(b);//数学运算
编译后产生的汇编源代码中有callsin_指令,就是调 《嵌入式C语言开发ADSP21XX系列DSP(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/174670.html
VisualDSP6.1还提供了丰富的帮助文档,包括21XX系列的用户手册、汇编和C语言工具以及仿真调试程序的使用手册;还有C运行库的参考手册,列出了所有可用的C库函数。用C语言开发DSP的典型流程如图1所示。
2C语言运行库结构
C语言运行时间库是位于LIB目录下的*.a文件,是整个C开发工具的核心之一,提供了大量的可以直接调用的库函数。这些库函数的函数原型包含在INCLUDE目录下的头文件中。这些头文件有的还包含一些宏定义。另外,VisualDSP还把这些库函数的汇编语言源代码提供给出了用户,方便了用户从中提取有用的代码,甚至修改源代码,生成新的库,来适应自己的要求。利用LIB21程序,还可以把自己的常用汇编子程序做成库,或是将实时性要求较高的代码用汇编语言来写,做成库,供C语言程序调用。
VisualDSP的C语言运行库由两部分组成:应用程序框架和预定义的各种库函数。
不同的DSP型号有不同的硬件结构、中断向量表,所以对应的应用程序框架库也不同,相应的文件是21*_HDR.DSP.其中*代表不同的DSP型号。应用程序框架的主体是中断向量处理部分,把中断向量引到合适的地址。其中最重要的是对系统复位(RESET_VECTOR)的中断向量的处理:
_Reset_vector:CALL_lib_setup_everything;
CALLmain_;
JUMP_lib_prog_term;
NOP;
第一条指令是调用C库函数中的__lib_setup_everything函数作程序启动时的初始化工作。接下来,调用C语言程序中的main_函数,进入C程序的主体,也就是进入用户自己程序,开始正常工作。主程序结束后,再调用_lib_prog_term函数,作程序退出时的结尾工作。由于嵌入式系统的特性,系统绝大多数都在主程序运行时被继电了,所以_lib_prog_term得到执行的机会很小。
其它的中断向量由C运行库来管理,汇编指令如下:
_Interrupt2:JUMP_lib_int2_ctrl;NOP;NOP;NOP;
其中的_lib_int2_crtl就是C语言库中控制INT2的函数。如果用户要使用该中断,应先把中断服务程序用一个C库函数Interrupt()把服务函数指针设定好,并打开相应的中断允许位,当该中断发生时,_lib_int2_ctr1函数就会控制DSP跳转到相应的指针位置。
VisualDSP预定义的C语言库函数包括数学函数、FFT函数、ANSI标准内存管理和字符串管理函数的一个子集。所有的函数列表可参考VisualDSP的联机文档。这些库函数以二进制代码的形式,打包集合在lib*.a文件中,用户的C语言程序可以像使用自己的子程序一样方便地调用这些库函数。下面是调用库函数的一个例子。
#include<math.h>//包含所需的头文件
……
floata,b,c;//定义所需的变量
……
c=a*sin(b);//数学运算
编译后产生的汇编源代码中有callsin_指令,就是调 《嵌入式C语言开发ADSP21XX系列DSP(第2页)》