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