首页 > 解决方案 > 为什么 xilinx 使用指针将数据存储为数组?

问题描述

我看了一下 xilinx 的AXI-DMA 示例,此时我陷入了困境XAxiDma_SimplePollExample

for(Index = 0; Index < MAX_PKT_LEN; Index ++) {
        TxBufferPtr[Index] = Value;

        Value = (Value + 1) & 0xFF;
}

变量TxBufferPtr是一个指针,指向内存地址TX_BUFFER_BASE

u8 *TxBufferPtr;
TxBufferPtr = (u8 *)TX_BUFFER_BASE ;

为什么他们使用指针来循环存储数据?我了解到,我应该使用一个数组来初始化内存并使用该数组的起始地址。所以我的例子看起来像这样

u8 TxBufferPtr[MAX_PKT_LEN];
for(Index = 0; Index < MAX_PKT_LEN; Index ++) {
        TxBufferPtr[Index] = Value;

        Value = (Value + 1) & 0xFF;

xilinx如何避免其他数据可能放在指针地址+循环范围的范围内,以便循环覆盖这些数据?当我使用它时有什么技巧还是只是“坏”代码和指针的使用?

标签: carmxilinx

解决方案


两个代码示例之间存在巨大差异。

你的代码,即

u8 TxBufferPtr[MAX_PKT_LEN];

将为数组分配内存。这将是MAX_PKT_LENu8 通常保留在堆栈中。

这段代码:

u8 *TxBufferPtr;
TxBufferPtr = (u8 *)TX_BUFFER_BASE ;

不为数组分配内存。该代码假定这TX_BUFFER_BASE是已经为程序分配/保留的某些内存的地址。

如果您在一些没有 MMU 的嵌入式系统上,它可以是 FPGA 内某些硬件组件的直接内存映射区域。在小型简单的嵌入式系统中,通常使用指向固定地址的指针来映射硬件组件。FPGA 设计师将为您提供价值,TX_BUFFER_BASE因为 FPGA 设计师决定如何使用内存空间。


推荐阅读