/* ======== 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]; /* 設(shè)置輸入輸出數(shù)據(jù)緩沖區(qū) inp_buffer 和 out_buffer 大小為 0x64*/ int out_buffer[BUFSIZE]; int gain = MINGAIN; /* 增益設(shè)置,MINGAIN代表1,在volume.h中定義的 */ unsigned int processingLoad = BASELOAD; /*BASELOAD大小為1,也是在volume.h中定義的*/ extern void load(unsigned int loadvalue); /*該函數(shù)是一個匯編的處理函數(shù),具體分析見后文*/ static int processing(int *input, int *output); static void dataIO(void); /*定義了三個函數(shù)load、processing、dataIO*/ /* ======== main ======== */ void main() { int *input = &inp_buffer[0]; /*指針賦初值*/ int *output = &out_buffer[0]; puts("volume example started\n"); /*輸出一句話*/ /* 下面是一個無限循環(huán) */ while(TRUE) { /* 使用探測器來連接住機(jī)上的文件. */ dataIO(); /*調(diào)用dataIO函數(shù),實(shí)際上,dataIO是一個空函數(shù)。*/ processing(input, output); /*調(diào)用processing函數(shù)*/ } /*dataIO是一個空函數(shù),實(shí)際上主函數(shù)完成的是對processing函數(shù)的無限次調(diào)用。*/ } /* ======== processing ======== * 對輸入信號進(jìn)行數(shù)字信號處理變換. 參數(shù):輸入輸出緩沖區(qū)的地址 */ static int processing(int *input, int *output) /*函數(shù)processing*/ { int size = BUFSIZE; while(size--){ *output++ = *input++ * gain; } /*根據(jù)輸入信號和gain大小,對輸出信號進(jìn)行賦值*/ /* load輔助程序*/ load(processingLoad); return(TRUE); } /* ======== dataIO ======== * 讀入輸入信號,寫輸出信號 */ static void dataIO() { return; } ;load函數(shù),是一個保存在load.asm中的匯編函數(shù)。這里,就涉及到混編。DSP處理程序的一般形式在這里就看到了。過程的控制,使用C語言,利用高級語言較強(qiáng)的邏輯功能。處理的過程,則使用匯編語言,以提高處理速度,達(dá)到實(shí)時信號處理的要求。簡單介紹一下load函數(shù),這里不講匯編語言的語言及其格式了,只說明一下這個函數(shù)的作用。該函數(shù)通過執(zhí)行N*loadvalue來模仿在DSP上的一個負(fù)載。
|