需要帮助在Xilinx/ARM SoC(Zynq 7000)上映射预留**缓存的**DMA缓冲区
我有一个基于Xilinx Zynq 7000的板,在FPGA织物中具有DMA功能(在AXI总线上)的外围.我们已经开发了一个电路,并且正在手臂芯上运行Linux.在用硬件填充后,我们在访问用户空间的DMA缓冲区时遇到了性能问题. 摘要: 我们在启动时间预处理了一部分DRAM作为大型DMA缓冲区.显然,我们使用错误的API映射此缓冲区,因为它似乎是未切换的,并且访问速度很糟糕. 即使弹跳器的性能也令人难以置信. iiuc,手臂caches不是DMA连贯的,因此我非常感谢您对如何执行以下操作的一些见解: 将DRAM的区域映射到内核虚拟地址空间中,但请确保它是可缓存. 确保将其映射到用户空间也不会产生不良效果,即使我们需要我们提供自己的驱动程序的MMAP调用. 在执行DMA之前,从缓存层次结构中明确使物理内存区域无效,以确保相干性. 更多信息: 在询问之前,我一直在尝试对此进行彻底的研究.不幸的是,这是ARM SOC/FPGA,几乎没有有关此信息的信息,
12 2024-03-03
编程技术问答社区
ARM/neon memcpy针对*uncached*内存进行了优化?
我正在使用Xilinx Zynq 7000基于ARM的SOC.我正在与DMA缓冲区苦苦挣扎(需要帮助映射预保留的**可缓存** dma缓冲液在xilinx/arm soc(zynq 7000)上),所以我追求的一件事是更快的memcpy. 我一直在考虑使用霓虹灯说明和内联ASM编写一个更快的memcpy.无论GLIBC拥有什么,这都是可怕的,尤其是当我们从Ucached DMA缓冲区复制时. 我已经从各种来源组装了自己的复制功能,包括: 快速臂neon memcpy ARM在GCC 对我的主要区别在于,我正在尝试从 uncached 缓冲区复制,因为它是DMA缓冲区,并且对缓存的DMA缓冲区的手臂支持不存在. 所以这是我写的: void my_copy(volatile unsigned char *dst, volatile unsigned char *src, int sz) { if (sz & 63) { sz =
14 2024-03-03
编程技术问答社区
Nordic SDK打印到序列
我有一个在 Nordic SDK 上运行的 Arduino 设备(它是 Red Bear Lab BLE nano).我希望能够在 GTKTerm 中进行串行打印,以便能够调试我的代码中正在发生的事情.为此,我有以下代码: /* * Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. * * The information contained herein is confidential property of Nordic Semiconductor. The use, * copying, transfer or disclosure of such information is prohibited except by express written * agreement with Nordic Semiconductor. * */ /** * @brief BLE Heart Rat
1478 2022-07-19
编程技术问答社区