ZYNQ移植ARM CMSIS_DSP库

移植方法

Vitis中新建一个Application Project,选择HelloWord模板。按下面步骤移植CMSIS_DSP:

  1. 下载CMSIS_DSP,拷贝如下文件夹到Vitis工程:
    • Source
    • Include
    • PrivateInclude
    • ComputeLibrary (only if you target Neon)
  2. 对Source路径下和文件夹同名的.c文件(如,BasicMathFunctions.c),设置为不编译(右键Properties,Exclude resource from build),当然直接删除亦可。
  3. 设置头文件目录:
    在这里插入图片描述
  4. 添加CMSIS头文件依赖。从CMSIS下载CMSIS_5/CMSIS/Core_A /Include/路径下的头文件,拷贝到Include目录。
  5. 链接math库:
    在这里插入图片描述
    6. 添加编译选项
    -mfpu=neon-vfpv4 -mcpu=cortex-a9 -mfloat-abi=hard (注意空格)
    这里使用-mfpu=neon-vfpv4而不是-mfpu=neon,详见here和xapp1206文档。
    在这里插入图片描述 7. 设置编译宏,开启NEON加速 在这里插入图片描述
    8. 设置多线程编译
    DSP库还是比较大的,单核编译一次要挺久,可开启多线程编译。
    在这里插入图片描述

测试

测试用例
使用DSP库例子中的FFT例程来测试库文件编译的正确性。将arm_fft_bin_data.c拷贝到src路径,将arm_fft_bin_example_f32.c的内容移植到helloworld.c中。若正确执行,将打印SUCCESS。
性能
不开启NEON时,这个1024点FFT计算耗时49us,开启NEON后,只需24us,快了近一倍。

参考文献

Maybe Error: Multiple definition in DSP package #696
Multiple Definitions Error When Using CMSIS DSP Library with SSP 2.0.0
MicroZed Chronicles: NEON & SIMD
xilinx sdk(2017.4版)如何编译neon的汇编指令,如vmul指令?谢谢!
Error Using Neon
vivado sdk添加头文件

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
Zynq是一款由Xilinx开发的嵌入式处理器,它结合了ARM处理器和FPGA可编程逻辑,具有高度的灵活性和可扩展性。而rt-thread是一个轻量级的开源实时操作系统,专为嵌入式系统而设计。 移植rt-thread到Zynq平台并不复杂。首先,我们需要了解Zynq的体系结构和硬件资源,以确保更好地适配rt-thread。然后,我们需要获取rt-thread的源代码,并根据Zynq的平台特性进行相应的配置。 在移植过程中,需要进行以下几个关键步骤: 1. 配置工程:根据Zynq平台的处理器型号和外设资源,进行相关配置,比如中断控制器、计时器等。 2. 启动代码:根据Zynq的启动过程和处理器架构,编写启动代码。这通常涉及设置堆栈、初始化全局变量和硬件模块等。 3. 中断处理:实时操作系统需要处理中断请求,并进行任务调度。在Zynq平台上,我们需要编写相应的中断处理程序,并与rt-thread的任务调度机制进行集成。 4. 设备驱动:Zynq平台具有一系列外设资源,包括串口、以太网、SPI、I2C等。我们需要编写相应的设备驱动程序,以便rt-thread能够正确访问这些外设。 5. 内存管理:嵌入式操作系统需要进行内存管理,包括动态内存分配和垃圾回收。在Zynq平台上,我们需要配置内存控制器,并对内存管理策略进行相应的调整。 6. 系统调用:rt-thread提供了一系列系统调用接口,用于任务创建、线程同步、内存管理等。在移植过程中,我们需要根据Zynq平台的特性,进行相应的系统调用接口适配。 通过以上步骤,我们可以将rt-thread成功地移植Zynq平台上,并利用其轻量级实时操作系统特性,实现嵌入式系统的快速开发和高效运行。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值