为什么 xilinx 使用指针将数据存储为数组?

Why xilinx use a pointer to store data as array?

我看了一下来自 xilinx 的 AXI-DMA example,此时我卡在了 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如何避免在指针地址+循环范围内放置其他数据,导致循环覆盖该数据? 我使用它时有什么技巧还是只是 "bad" 代码和指针的使用?

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

您的代码,即

u8 TxBufferPtr[MAX_PKT_LEN];

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

此代码:

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

为数组分配内存。该代码假定 TX_BUFFER_BASE 是某个内存的地址,该地址已经为程序 allocated/reserved。

如果您在某些没有 MMU 的嵌入式系统上,它可以是 FPGA 内部某些硬件组件的直接内存映射区域。在小型简单的嵌入式系统中,使用指针将硬件组件映射到固定地址是很正常的。 FPGA 设计人员将为您提供 TX_BUFFER_BASE 的值,因为由 FPGA 设计人员决定如何使用内存 space。