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

时间:2019-05-21 07:07:13

标签: c arm xilinx

我看了一下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如何避免将其他数据放置在指针地址+循环范围内,以便循环覆盖该数据? 当我使用它时有什么技巧吗?还是仅仅是“错误的”代码和指针的使用?

1 个答案:

答案 0 :(得分:1)

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

您的代码

u8 TxBufferPtr[MAX_PKT_LEN];

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

此代码:

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

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

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