/* ======== volume.h ======== */ #ifndef __VOLUME_H #define __VOLUME_H#ifndef TRUE #define TRUE 1 #endif #define BUFSIZE 0x64 #define FRAMESPERBUFFER 10 #define MINGAIN 1 #define MAXGAIN 10 #define MINCONTROL 0 #define MAXCONTROL 19 #define BASELOAD 1 #endif /* __VOLUME_H */ /*一些宏定义,定义了一些常量*/ #include <stdio.h> #include "volume.h" /*定义全局变量 */ int inp_buffer[BUFSIZE]; /* 设置输入输出数据缓冲区 inp_buffer 和 out_buffer 大小为 0x64*/ int out_buffer[BUFSIZE]; int gain = MINGAIN; /* 增益设置,MINGAIN代表1,在volume.h中定义的 */ unsigned int processingLoad = BASELOAD; /*BASELOAD大小为1,也是在volume.h中定义的*/ extern void load(unsigned int loadvalue); /*该函数是一个汇编的处理函数,具体分析见后文*/ static int processing(int *input, int *output); static void dataIO(void); /*定义了三个函数load、processing、dataIO*/ /* ======== main ======== */ void main() { int *input = &inp_buffer[0]; /*指针赋初值*/ int *output = &out_buffer[0]; puts("volume example started\n"); /*输出一句话*/ /* 下面是一个无限循环 */ while(TRUE) { /* 使用探测器来连接住机上的文件. */ dataIO(); /*调用dataIO函数,实际上,dataIO是一个空函数。*/ processing(input, output); /*调用processing函数*/ } /*dataIO是一个空函数,实际上主函数完成的是对processing函数的无限次调用。*/ } /* ======== processing ======== * 对输入信号进行数字信号处理变换. 参数:输入输出缓冲区的地址 */ static int processing(int *input, int *output) /*函数processing*/ { int size = BUFSIZE; while(size--){ *output++ = *input++ * gain; } /*根据输入信号和gain大小,对输出信号进行赋值*/ /* load辅助程序*/ load(processingLoad); return(TRUE); } /* ======== dataIO ======== * 读入输入信号,写输出信号 */ static void dataIO() { return; } ;load函数,是一个保存在load.asm中的汇编函数。这里,就涉及到混编。DSP处理程序的一般形式在这里就看到了。过程的控制,使用C语言,利用高级语言较强的逻辑功能。处理的过程,则使用汇编语言,以提高处理速度,达到实时信号处理的要求。简单介绍一下load函数,这里不讲汇编语言的语言及其格式了,只说明一下这个函数的作用。该函数通过执行N*loadvalue来模仿在DSP上的一个负载。
|