ZYNQ移植CMSIS_DSP库

        由于项目中需要,所以尝试在zynq7020上移植cmsis_dsp库。在网上参考了其他大佬的移植过程,大多基于linux环境,遇到的问题与windows环境不一样。此次在windows下记录下移植过程,方便自己及其他有同样需求的人查阅。        

        芯片:ZYNQ7020

        开发软件:Xilinx Vitis 2020.1

        环境:windows

初次移植问题

        初次移植参考下面这篇文章,该大佬是在linux环境下移植的,但步骤与windows环境基本一致。https://blog.csdn.net/leida_wt/article/details/133940593#comments_33440006icon-default.png?t=N7T8https://blog.csdn.net/leida_wt/article/details/133940593#comments_33440006        问题主要出现在最后的编译阶段,由于源码文件太多,windows环境下有命令行长度限制导致编译生成.elf文件失败,如下图所示:        

     

问题解决

        这里提供一种使用cmake工具把CMSIS DSP库编译成静态链接库再在工程中引用的解决办法,本人已经测试能正常使用。在这里还要感谢xilinx中文论坛的技术支持人员对本人问题的耐心解答。

         在CMSIS DSP库源码(Source)文件夹中已经提供了CMakeLists.txt。所以我们能很方便的使用cmake工具生成Makefile文件。

移植准备

        1、下载CMSIS_DSP库源码。

        2、添加CMSIS头文件依赖。从CMSIS下载CMSIS_5/CMSIS/Core_A /Include/路径下的头文件,拷贝到CMSIS_DSP库源码的Include目录下

        2.在下载的CMSIS DSP文件目录下新建build文件夹,也可以建在其他地方,后续我们会把cmake生成的makefile文件放在该文件夹下        

       

        3.下载并安装cmake

        https://cmake.org/download/icon-default.png?t=N7T8https://cmake.org/download/

        选择最新的版本并选择下图所示的文件下载,下载完成后就和正常的.exe应用一样安装

        4.下载并安装GnuWin32 make.exe

        make.exe下载地址: https://gnuwin32.sourceforge.net/packages/make.htmicon-default.png?t=N7T8https://gnuwin32.sourceforge.net/packages/make.htm        选择如下图所示的版本下载,该版本是不包含源码的安装版本        

        

        5.添加环境变量

        添加gcc工具链路径至系统Path环境变量,该工具链我们可以在vitis软件目录下找到。

        路径:Xilinx\Vitis\2020.1\gnu\aarch32\nt\gcc-arm-none-eabi\bin

        

        

         添加上一步安装的GnuWin32路径到环境变量。

        路径取决于你的安装位置:GnuWin32\bin

        

        两个路径添加完毕后请重启电脑

生成静态链接库

        1.新建zynq-none-toolchain.cmake文件,文件内容如下:

set(CMAKE_SYSTEM_NAME 		"Generic" 		CACHE STRING "")

set(CMAKE_SYSTEM_PROCESSOR 	"arm" 			CACHE STRING "")

SET(CMAKE_CROSSCOMPILING 1)

 

set(CMAKE_C_COMPILER_WORKS 1)

set(CMAKE_CXX_COMPILER_WORKS 1)

 

set(CROSS_PREFIX            "arm-none-eabi-"    CACHE STRING "")

set(CMAKE_C_FLAGS           "-mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard"	CACHE STRING "")

set(CMAKE_CXX_FLAGS         "-mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard"	CACHE STRING "")



include (CMakeForceCompiler)

set(CMAKE_ASM_COMPILER 		"${CROSS_PREFIX}as")

set(CMAKE_C_COMPILER 		"${CROSS_PREFIX}gcc")

set(CMAKE_CXX_COMPILER 		"${CROSS_PREFIX}g++")

set(CMAKE_LINKER 			"${CROSS_PREFIX}gcc")



set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER CACHE STRING "")

set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER CACHE STRING "")

set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER CACHE STRING "")



set(CMAKE_NO_SYSTEM_FROM_IMPORTED ON)

        如果需要使能neon请将

set(CMAKE_C_FLAGS           "-mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard"	CACHE STRING "")

set(CMAKE_CXX_FLAGS         "-mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard"	CACHE STRING "")

        修改为

set(CMAKE_C_FLAGS           "-mcpu=cortex-a9 -mfpu=neon-vfpv4 -mfloat-abi=hard"	CACHE STRING "")

set(CMAKE_CXX_FLAGS         "-mcpu=cortex-a9 -mfpu=neon-vfpv4 -mfloat-abi=hard"	CACHE STRING "")

        2.运行cmake gui

        指定源码路径和生成文件存放路径:

点击Configure 设置编译工具链

       

         选择上一步创建的zynq-none-toolchain.cmake文件

        

        点击Finish后cmake gui的界面会显示如下信息,该信息根据zynq-none-toolchain.cmake和DSP源码中的CMakeLists.txt生成

        点击Generate,成功在build文件夹中生成makefile文件

        

        在build文件夹中能找到生成的makefile

        3.使用make编译生成静态链接库

        运行windows下的cmd命令行, cd到build 目录下  并make all 等待编译完成

        

如果编译全程没有出现错误,最后会在bulid文件夹生成静态链接库

把该静态链接库添加到工程中并添加DSP库中的头文件就能正常使用DSP库中的函数了。

Ps:在vitis工程中添加外部库时名字和路径不要搞错了

遗留问题

        CMSIS_DSP库是支持NEON的,我在CMakeLists.txt中使能了NEON并修改了编译工具链,成功生成了静态链接库,但是进行FFT运算时间完全没有变化,具体哪里出现了问题还没找到。等后续有时间了再来研究一下,或者有成功使能neon的大佬能分享下方法。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值