|
/* ======== 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]; /* 設置輸入輸出數據緩沖區(qū) 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"); /*輸出一句話*/ /* 下面是一個無限循環(huán) */ while(TRUE) { /* 使用探測器來連接住機上的文件. */ dataIO(); /*調用dataIO函數,實際上,dataIO是一個空函數。*/ processing(input, output); /*調用processing函數*/ } /*dataIO是一個空函數,實際上主函數完成的是對processing函數的無限次調用。*/ } /* ======== processing ======== * 對輸入信號進行數字信號處理變換. 參數:輸入輸出緩沖區(qū)的地址 */ 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函數,這里不講匯編語言的語言及其格式了,只說明一下這個函數的作用。該函數通過執(zhí)行N*loadvalue來模仿在DSP上的一個負載。
|