speex在stm32f407单片机上的移植
1.獲取speex源碼
官方下載:
官方地址
博主移植用的源碼以及移植好的工程下載:
提取碼552i
2.添加源碼文件到工程
解壓源碼包需要保證有以下幾個(gè)文件和目錄即可(圖中與移植無(wú)關(guān)的選項(xiàng)已經(jīng)刪掉,可以參考步驟1中博主移植用的源碼)
打開需要移植的工程,添加新的分組speex,把源碼目錄libspeexdsp下的.c文件全部添加進(jìn)來(lái)
其中test開頭的幾個(gè)文件可以暫時(shí)不包含,或者直接移除
添加頭文件路徑,指定源碼目錄下的include目錄
添加配置文件和相關(guān)宏
把源碼根目錄下的config.h.in文件復(fù)制到源碼的include目錄下,并改名為config.h
修改后的源碼/include目錄如下圖
把源碼/include/speex目錄下的speexdsp_config_types.h.in文件改名為speexdsp_config_types.h
修改后的源碼/include/speex目錄如下圖
在工程選項(xiàng)中添加宏HAVE_CONFIG_H,這個(gè)宏表示使用config.h文件對(duì)庫(kù)進(jìn)行配置
打開剛剛復(fù)制的config.h文件(隨便打開一個(gè).c文件,一般是第一個(gè)包含的文件,右鍵open即可),修改以下三個(gè)宏,相關(guān)功能參考文件中的注釋
#undef EXPORT --> #define EXPORT extern
#undef FLOATING_POINT–> #define FLOATING_POINT
#undef USE_SMALLFT–> #define USE_SMALLFT
打開speexdsp_config_types.h,補(bǔ)全以下幾行:
typedef short spx_int16_t;
typedef unsigned short spx_uint16_t;
typedef int spx_int32_t;
typedef unsigned int spx_uint32_t;
編譯
編譯時(shí)一定要在工程選項(xiàng)中選上c99mode,取消勾選use microlib
最后點(diǎn)擊組建即可,正常的話會(huì)是0錯(cuò)誤和若干個(gè)警告,也就是移植成功了,庫(kù)的使用手冊(cè)位于源碼/doc目錄下,參考它使用庫(kù)中的API
追加
后來(lái)調(diào)試發(fā)現(xiàn)不勾選use microlib的話程序一直不運(yùn)行,無(wú)奈只能選上,但是會(huì)報(bào)exit函數(shù)未定義的錯(cuò)誤,博主的解決辦法是在config.h的最后添加這個(gè)函數(shù)的宏定義
#define exit(a) ;
還有speex_alloc函數(shù)也是個(gè)麻煩,經(jīng)常申請(qǐng)失敗,博主后來(lái)改用了正點(diǎn)原子的外部RAM申請(qǐng)函數(shù)才勉強(qiáng)把回聲消除給跑起來(lái)了(之前回聲消除連輸出都沒(méi)有),但是串口一直提示:“started acting funny and got slapped (reset). It swears it will behave now.”,而且消除的效果和沒(méi)消基本沒(méi)差,我試著把尾部大小調(diào)大些,但是調(diào)大以后又沒(méi)有輸出了,可能內(nèi)存又吃緊了,可是能夠運(yùn)行的范圍以內(nèi)效果也并不好啊。
總結(jié)
以上是生活随笔為你收集整理的speex在stm32f407单片机上的移植的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 自制串口示波器小工具
- 下一篇: VMware黑屏